Skip to content

Commit d6ffc0c

Browse files
committed
Merging r347556:
------------------------------------------------------------------------ r347556 | nemanjai | 2018-11-26 06:35:38 -0800 (Mon, 26 Nov 2018) | 11 lines [PowerPC] Vector load/store builtins overstate alignment of pointers A number of builtins in altivec.h load/store vectors from pointers to scalar types. Currently they just cast the pointer to a vector pointer, but expressions like that have the alignment of the target type. Of course, the input pointer did not have that alignment so this triggers UBSan (and rightly so). This resolves https://bugs.llvm.org/show_bug.cgi?id=39704 Differential revision: https://reviews.llvm.org/D54787 ------------------------------------------------------------------------ llvm-svn: 347935
1 parent 958b37e commit d6ffc0c

File tree

4 files changed

+115
-100
lines changed

4 files changed

+115
-100
lines changed

clang/lib/Headers/altivec.h

Lines changed: 39 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16353,67 +16353,82 @@ vec_revb(vector unsigned __int128 __a) {
1635316353

1635416354
/* vec_xl */
1635516355

16356+
typedef vector signed char unaligned_vec_schar __attribute__((aligned(1)));
16357+
typedef vector unsigned char unaligned_vec_uchar __attribute__((aligned(1)));
16358+
typedef vector signed short unaligned_vec_sshort __attribute__((aligned(1)));
16359+
typedef vector unsigned short unaligned_vec_ushort __attribute__((aligned(1)));
16360+
typedef vector signed int unaligned_vec_sint __attribute__((aligned(1)));
16361+
typedef vector unsigned int unaligned_vec_uint __attribute__((aligned(1)));
16362+
typedef vector float unaligned_vec_float __attribute__((aligned(1)));
16363+
1635616364
static inline __ATTRS_o_ai vector signed char vec_xl(signed long long __offset,
1635716365
signed char *__ptr) {
16358-
return *(vector signed char *)(__ptr + __offset);
16366+
return *(unaligned_vec_schar *)(__ptr + __offset);
1635916367
}
1636016368

1636116369
static inline __ATTRS_o_ai vector unsigned char
1636216370
vec_xl(signed long long __offset, unsigned char *__ptr) {
16363-
return *(vector unsigned char *)(__ptr + __offset);
16371+
return *(unaligned_vec_uchar*)(__ptr + __offset);
1636416372
}
1636516373

1636616374
static inline __ATTRS_o_ai vector signed short vec_xl(signed long long __offset,
1636716375
signed short *__ptr) {
16368-
return *(vector signed short *)(__ptr + __offset);
16376+
return *(unaligned_vec_sshort *)(__ptr + __offset);
1636916377
}
1637016378

1637116379
static inline __ATTRS_o_ai vector unsigned short
1637216380
vec_xl(signed long long __offset, unsigned short *__ptr) {
16373-
return *(vector unsigned short *)(__ptr + __offset);
16381+
return *(unaligned_vec_ushort *)(__ptr + __offset);
1637416382
}
1637516383

1637616384
static inline __ATTRS_o_ai vector signed int vec_xl(signed long long __offset,
1637716385
signed int *__ptr) {
16378-
return *(vector signed int *)(__ptr + __offset);
16386+
return *(unaligned_vec_sint *)(__ptr + __offset);
1637916387
}
1638016388

1638116389
static inline __ATTRS_o_ai vector unsigned int vec_xl(signed long long __offset,
1638216390
unsigned int *__ptr) {
16383-
return *(vector unsigned int *)(__ptr + __offset);
16391+
return *(unaligned_vec_uint *)(__ptr + __offset);
1638416392
}
1638516393

1638616394
static inline __ATTRS_o_ai vector float vec_xl(signed long long __offset,
1638716395
float *__ptr) {
16388-
return *(vector float *)(__ptr + __offset);
16396+
return *(unaligned_vec_float *)(__ptr + __offset);
1638916397
}
1639016398

1639116399
#ifdef __VSX__
16400+
typedef vector signed long long unaligned_vec_sll __attribute__((aligned(1)));
16401+
typedef vector unsigned long long unaligned_vec_ull __attribute__((aligned(1)));
16402+
typedef vector double unaligned_vec_double __attribute__((aligned(1)));
16403+
1639216404
static inline __ATTRS_o_ai vector signed long long
1639316405
vec_xl(signed long long __offset, signed long long *__ptr) {
16394-
return *(vector signed long long *)(__ptr + __offset);
16406+
return *(unaligned_vec_sll *)(__ptr + __offset);
1639516407
}
1639616408

1639716409
static inline __ATTRS_o_ai vector unsigned long long
1639816410
vec_xl(signed long long __offset, unsigned long long *__ptr) {
16399-
return *(vector unsigned long long *)(__ptr + __offset);
16411+
return *(unaligned_vec_ull *)(__ptr + __offset);
1640016412
}
1640116413

1640216414
static inline __ATTRS_o_ai vector double vec_xl(signed long long __offset,
1640316415
double *__ptr) {
16404-
return *(vector double *)(__ptr + __offset);
16416+
return *(unaligned_vec_double *)(__ptr + __offset);
1640516417
}
1640616418
#endif
1640716419

1640816420
#if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
16421+
typedef vector signed __int128 unaligned_vec_si128 __attribute__((aligned(1)));
16422+
typedef vector unsigned __int128 unaligned_vec_ui128
16423+
__attribute__((aligned(1)));
1640916424
static inline __ATTRS_o_ai vector signed __int128
1641016425
vec_xl(signed long long __offset, signed __int128 *__ptr) {
16411-
return *(vector signed __int128 *)(__ptr + __offset);
16426+
return *(unaligned_vec_si128 *)(__ptr + __offset);
1641216427
}
1641316428

1641416429
static inline __ATTRS_o_ai vector unsigned __int128
1641516430
vec_xl(signed long long __offset, unsigned __int128 *__ptr) {
16416-
return *(vector unsigned __int128 *)(__ptr + __offset);
16431+
return *(unaligned_vec_ui128 *)(__ptr + __offset);
1641716432
}
1641816433
#endif
1641916434

@@ -16498,76 +16513,76 @@ vec_xl_be(signed long long __offset, unsigned __int128 *__ptr) {
1649816513
static inline __ATTRS_o_ai void vec_xst(vector signed char __vec,
1649916514
signed long long __offset,
1650016515
signed char *__ptr) {
16501-
*(vector signed char *)(__ptr + __offset) = __vec;
16516+
*(unaligned_vec_schar *)(__ptr + __offset) = __vec;
1650216517
}
1650316518

1650416519
static inline __ATTRS_o_ai void vec_xst(vector unsigned char __vec,
1650516520
signed long long __offset,
1650616521
unsigned char *__ptr) {
16507-
*(vector unsigned char *)(__ptr + __offset) = __vec;
16522+
*(unaligned_vec_uchar *)(__ptr + __offset) = __vec;
1650816523
}
1650916524

1651016525
static inline __ATTRS_o_ai void vec_xst(vector signed short __vec,
1651116526
signed long long __offset,
1651216527
signed short *__ptr) {
16513-
*(vector signed short *)(__ptr + __offset) = __vec;
16528+
*(unaligned_vec_sshort *)(__ptr + __offset) = __vec;
1651416529
}
1651516530

1651616531
static inline __ATTRS_o_ai void vec_xst(vector unsigned short __vec,
1651716532
signed long long __offset,
1651816533
unsigned short *__ptr) {
16519-
*(vector unsigned short *)(__ptr + __offset) = __vec;
16534+
*(unaligned_vec_ushort *)(__ptr + __offset) = __vec;
1652016535
}
1652116536

1652216537
static inline __ATTRS_o_ai void vec_xst(vector signed int __vec,
1652316538
signed long long __offset,
1652416539
signed int *__ptr) {
16525-
*(vector signed int *)(__ptr + __offset) = __vec;
16540+
*(unaligned_vec_sint *)(__ptr + __offset) = __vec;
1652616541
}
1652716542

1652816543
static inline __ATTRS_o_ai void vec_xst(vector unsigned int __vec,
1652916544
signed long long __offset,
1653016545
unsigned int *__ptr) {
16531-
*(vector unsigned int *)(__ptr + __offset) = __vec;
16546+
*(unaligned_vec_uint *)(__ptr + __offset) = __vec;
1653216547
}
1653316548

1653416549
static inline __ATTRS_o_ai void vec_xst(vector float __vec,
1653516550
signed long long __offset,
1653616551
float *__ptr) {
16537-
*(vector float *)(__ptr + __offset) = __vec;
16552+
*(unaligned_vec_float *)(__ptr + __offset) = __vec;
1653816553
}
1653916554

1654016555
#ifdef __VSX__
1654116556
static inline __ATTRS_o_ai void vec_xst(vector signed long long __vec,
1654216557
signed long long __offset,
1654316558
signed long long *__ptr) {
16544-
*(vector signed long long *)(__ptr + __offset) = __vec;
16559+
*(unaligned_vec_sll *)(__ptr + __offset) = __vec;
1654516560
}
1654616561

1654716562
static inline __ATTRS_o_ai void vec_xst(vector unsigned long long __vec,
1654816563
signed long long __offset,
1654916564
unsigned long long *__ptr) {
16550-
*(vector unsigned long long *)(__ptr + __offset) = __vec;
16565+
*(unaligned_vec_ull *)(__ptr + __offset) = __vec;
1655116566
}
1655216567

1655316568
static inline __ATTRS_o_ai void vec_xst(vector double __vec,
1655416569
signed long long __offset,
1655516570
double *__ptr) {
16556-
*(vector double *)(__ptr + __offset) = __vec;
16571+
*(unaligned_vec_double *)(__ptr + __offset) = __vec;
1655716572
}
1655816573
#endif
1655916574

1656016575
#if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
1656116576
static inline __ATTRS_o_ai void vec_xst(vector signed __int128 __vec,
1656216577
signed long long __offset,
1656316578
signed __int128 *__ptr) {
16564-
*(vector signed __int128 *)(__ptr + __offset) = __vec;
16579+
*(unaligned_vec_si128 *)(__ptr + __offset) = __vec;
1656516580
}
1656616581

1656716582
static inline __ATTRS_o_ai void vec_xst(vector unsigned __int128 __vec,
1656816583
signed long long __offset,
1656916584
unsigned __int128 *__ptr) {
16570-
*(vector unsigned __int128 *)(__ptr + __offset) = __vec;
16585+
*(unaligned_vec_ui128 *)(__ptr + __offset) = __vec;
1657116586
}
1657216587
#endif
1657316588

clang/test/CodeGen/builtins-ppc-altivec.c

Lines changed: 42 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -9338,101 +9338,101 @@ void test9() {
93389338
// CHECK-LABEL: define void @test9
93399339
// CHECK-LE-LABEL: define void @test9
93409340
res_vsc = vec_xl(param_sll, &param_sc);
9341-
// CHECK: load <16 x i8>, <16 x i8>* %{{[0-9]+}}, align 16
9342-
// CHECK-LE: load <16 x i8>, <16 x i8>* %{{[0-9]+}}, align 16
9341+
// CHECK: load <16 x i8>, <16 x i8>* %{{[0-9]+}}, align 1
9342+
// CHECK-LE: load <16 x i8>, <16 x i8>* %{{[0-9]+}}, align 1
93439343

93449344
res_vuc = vec_xl(param_sll, &param_uc);
9345-
// CHECK: load <16 x i8>, <16 x i8>* %{{[0-9]+}}, align 16
9346-
// CHECK-LE: load <16 x i8>, <16 x i8>* %{{[0-9]+}}, align 16
9345+
// CHECK: load <16 x i8>, <16 x i8>* %{{[0-9]+}}, align 1
9346+
// CHECK-LE: load <16 x i8>, <16 x i8>* %{{[0-9]+}}, align 1
93479347

93489348
res_vs = vec_xl(param_sll, &param_s);
9349-
// CHECK: load <8 x i16>, <8 x i16>* %{{[0-9]+}}, align 16
9350-
// CHECK-LE: load <8 x i16>, <8 x i16>* %{{[0-9]+}}, align 16
9349+
// CHECK: load <8 x i16>, <8 x i16>* %{{[0-9]+}}, align 1
9350+
// CHECK-LE: load <8 x i16>, <8 x i16>* %{{[0-9]+}}, align 1
93519351

93529352
res_vus = vec_xl(param_sll, &param_us);
9353-
// CHECK: load <8 x i16>, <8 x i16>* %{{[0-9]+}}, align 16
9354-
// CHECK-LE: load <8 x i16>, <8 x i16>* %{{[0-9]+}}, align 16
9353+
// CHECK: load <8 x i16>, <8 x i16>* %{{[0-9]+}}, align 1
9354+
// CHECK-LE: load <8 x i16>, <8 x i16>* %{{[0-9]+}}, align 1
93559355

93569356
res_vi = vec_xl(param_sll, &param_i);
9357-
// CHECK: load <4 x i32>, <4 x i32>* %{{[0-9]+}}, align 16
9358-
// CHECK-LE: load <4 x i32>, <4 x i32>* %{{[0-9]+}}, align 16
9357+
// CHECK: load <4 x i32>, <4 x i32>* %{{[0-9]+}}, align 1
9358+
// CHECK-LE: load <4 x i32>, <4 x i32>* %{{[0-9]+}}, align 1
93599359

93609360
res_vui = vec_xl(param_sll, &param_ui);
9361-
// CHECK: load <4 x i32>, <4 x i32>* %{{[0-9]+}}, align 16
9362-
// CHECK-LE: load <4 x i32>, <4 x i32>* %{{[0-9]+}}, align 16
9361+
// CHECK: load <4 x i32>, <4 x i32>* %{{[0-9]+}}, align 1
9362+
// CHECK-LE: load <4 x i32>, <4 x i32>* %{{[0-9]+}}, align 1
93639363

93649364
res_vf = vec_xl(param_sll, &param_f);
9365-
// CHECK: load <4 x float>, <4 x float>* %{{[0-9]+}}, align 16
9366-
// CHECK-LE: load <4 x float>, <4 x float>* %{{[0-9]+}}, align 16
9365+
// CHECK: load <4 x float>, <4 x float>* %{{[0-9]+}}, align 1
9366+
// CHECK-LE: load <4 x float>, <4 x float>* %{{[0-9]+}}, align 1
93679367
}
93689368

93699369
/* ------------------------------ vec_xst ----------------------------------- */
93709370
void test10() {
93719371
// CHECK-LABEL: define void @test10
93729372
// CHECK-LE-LABEL: define void @test10
93739373
vec_xst(vsc, param_sll, &param_sc);
9374-
// CHECK: store <16 x i8> %{{[0-9]+}}, <16 x i8>* %{{[0-9]+}}, align 16
9375-
// CHECK-LE: store <16 x i8> %{{[0-9]+}}, <16 x i8>* %{{[0-9]+}}, align 16
9374+
// CHECK: store <16 x i8> %{{[0-9]+}}, <16 x i8>* %{{[0-9]+}}, align 1
9375+
// CHECK-LE: store <16 x i8> %{{[0-9]+}}, <16 x i8>* %{{[0-9]+}}, align 1
93769376

93779377
vec_xst(vuc, param_sll, &param_uc);
9378-
// CHECK: store <16 x i8> %{{[0-9]+}}, <16 x i8>* %{{[0-9]+}}, align 16
9379-
// CHECK-LE: store <16 x i8> %{{[0-9]+}}, <16 x i8>* %{{[0-9]+}}, align 16
9378+
// CHECK: store <16 x i8> %{{[0-9]+}}, <16 x i8>* %{{[0-9]+}}, align 1
9379+
// CHECK-LE: store <16 x i8> %{{[0-9]+}}, <16 x i8>* %{{[0-9]+}}, align 1
93809380

93819381
vec_xst(vs, param_sll, &param_s);
9382-
// CHECK: store <8 x i16> %{{[0-9]+}}, <8 x i16>* %{{[0-9]+}}, align 16
9383-
// CHECK-LE: store <8 x i16> %{{[0-9]+}}, <8 x i16>* %{{[0-9]+}}, align 16
9382+
// CHECK: store <8 x i16> %{{[0-9]+}}, <8 x i16>* %{{[0-9]+}}, align 1
9383+
// CHECK-LE: store <8 x i16> %{{[0-9]+}}, <8 x i16>* %{{[0-9]+}}, align 1
93849384

93859385
vec_xst(vus, param_sll, &param_us);
9386-
// CHECK: store <8 x i16> %{{[0-9]+}}, <8 x i16>* %{{[0-9]+}}, align 16
9387-
// CHECK-LE: store <8 x i16> %{{[0-9]+}}, <8 x i16>* %{{[0-9]+}}, align 16
9386+
// CHECK: store <8 x i16> %{{[0-9]+}}, <8 x i16>* %{{[0-9]+}}, align 1
9387+
// CHECK-LE: store <8 x i16> %{{[0-9]+}}, <8 x i16>* %{{[0-9]+}}, align 1
93889388

93899389
vec_xst(vi, param_sll, &param_i);
9390-
// CHECK: store <4 x i32> %{{[0-9]+}}, <4 x i32>* %{{[0-9]+}}, align 16
9391-
// CHECK-LE: store <4 x i32> %{{[0-9]+}}, <4 x i32>* %{{[0-9]+}}, align 16
9390+
// CHECK: store <4 x i32> %{{[0-9]+}}, <4 x i32>* %{{[0-9]+}}, align 1
9391+
// CHECK-LE: store <4 x i32> %{{[0-9]+}}, <4 x i32>* %{{[0-9]+}}, align 1
93929392

93939393
vec_xst(vui, param_sll, &param_ui);
9394-
// CHECK: store <4 x i32> %{{[0-9]+}}, <4 x i32>* %{{[0-9]+}}, align 16
9395-
// CHECK-LE: store <4 x i32> %{{[0-9]+}}, <4 x i32>* %{{[0-9]+}}, align 16
9394+
// CHECK: store <4 x i32> %{{[0-9]+}}, <4 x i32>* %{{[0-9]+}}, align 1
9395+
// CHECK-LE: store <4 x i32> %{{[0-9]+}}, <4 x i32>* %{{[0-9]+}}, align 1
93969396

93979397
vec_xst(vf, param_sll, &param_f);
9398-
// CHECK: store <4 x float> %{{[0-9]+}}, <4 x float>* %{{[0-9]+}}, align 16
9399-
// CHECK-LE: store <4 x float> %{{[0-9]+}}, <4 x float>* %{{[0-9]+}}, align 16
9398+
// CHECK: store <4 x float> %{{[0-9]+}}, <4 x float>* %{{[0-9]+}}, align 1
9399+
// CHECK-LE: store <4 x float> %{{[0-9]+}}, <4 x float>* %{{[0-9]+}}, align 1
94009400
}
94019401

94029402
/* ----------------------------- vec_xl_be ---------------------------------- */
94039403
void test11() {
94049404
// CHECK-LABEL: define void @test11
94059405
// CHECK-LE-LABEL: define void @test11
94069406
res_vsc = vec_xl_be(param_sll, &param_sc);
9407-
// CHECK: load <16 x i8>, <16 x i8>* %{{[0-9]+}}, align 16
9407+
// CHECK: load <16 x i8>, <16 x i8>* %{{[0-9]+}}, align 1
94089408
// CHECK-LE: call <2 x double> @llvm.ppc.vsx.lxvd2x.be(i8* %{{[0-9]+}})
94099409
// CHECK-LE: shufflevector <16 x i8> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0, i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8>
94109410

94119411
res_vuc = vec_xl_be(param_sll, &param_uc);
9412-
// CHECK: load <16 x i8>, <16 x i8>* %{{[0-9]+}}, align 16
9412+
// CHECK: load <16 x i8>, <16 x i8>* %{{[0-9]+}}, align 1
94139413
// CHECK-LE: call <2 x double> @llvm.ppc.vsx.lxvd2x.be(i8* %{{[0-9]+}})
94149414
// CHECK-LE: shufflevector <16 x i8> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0, i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8>
94159415

94169416
res_vs = vec_xl_be(param_sll, &param_s);
9417-
// CHECK: load <8 x i16>, <8 x i16>* %{{[0-9]+}}, align 16
9417+
// CHECK: load <8 x i16>, <8 x i16>* %{{[0-9]+}}, align 1
94189418
// CHECK-LE: call <2 x double> @llvm.ppc.vsx.lxvd2x.be(i8* %{{[0-9]+}})
94199419
// CHECK-LE: shufflevector <8 x i16> %{{[0-9]+}}, <8 x i16> %{{[0-9]+}}, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>
94209420

94219421
res_vus = vec_xl_be(param_sll, &param_us);
9422-
// CHECK: load <8 x i16>, <8 x i16>* %{{[0-9]+}}, align 16
9422+
// CHECK: load <8 x i16>, <8 x i16>* %{{[0-9]+}}, align 1
94239423
// CHECK-LE: call <2 x double> @llvm.ppc.vsx.lxvd2x.be(i8* %{{[0-9]+}})
94249424
// CHECK-LE: shufflevector <8 x i16> %{{[0-9]+}}, <8 x i16> %{{[0-9]+}}, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>
94259425

94269426
res_vi = vec_xl_be(param_sll, &param_i);
9427-
// CHECK: load <4 x i32>, <4 x i32>* %{{[0-9]+}}, align 16
9427+
// CHECK: load <4 x i32>, <4 x i32>* %{{[0-9]+}}, align 1
94289428
// CHECK-LE: call <4 x i32> @llvm.ppc.vsx.lxvw4x.be(i8* %{{[0-9]+}})
94299429

94309430
res_vui = vec_xl_be(param_sll, &param_ui);
9431-
// CHECK: load <4 x i32>, <4 x i32>* %{{[0-9]+}}, align 16
9431+
// CHECK: load <4 x i32>, <4 x i32>* %{{[0-9]+}}, align 1
94329432
// CHECK-LE: call <4 x i32> @llvm.ppc.vsx.lxvw4x.be(i8* %{{[0-9]+}})
94339433

94349434
res_vf = vec_xl_be(param_sll, &param_f);
9435-
// CHECK: load <4 x float>, <4 x float>* %{{[0-9]+}}, align 16
9435+
// CHECK: load <4 x float>, <4 x float>* %{{[0-9]+}}, align 1
94369436
// CHECK-LE: call <4 x i32> @llvm.ppc.vsx.lxvw4x.be(i8* %{{[0-9]+}})
94379437
}
94389438

@@ -9441,34 +9441,34 @@ void test12() {
94419441
// CHECK-LABEL: define void @test12
94429442
// CHECK-LE-LABEL: define void @test12
94439443
vec_xst_be(vsc, param_sll, &param_sc);
9444-
// CHECK: store <16 x i8> %{{[0-9]+}}, <16 x i8>* %{{[0-9]+}}, align 16
9444+
// CHECK: store <16 x i8> %{{[0-9]+}}, <16 x i8>* %{{[0-9]+}}, align 1
94459445
// CHECK-LE: shufflevector <16 x i8> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0, i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8>
94469446
// CHECK-LE: call void @llvm.ppc.vsx.stxvd2x.be(<2 x double> %{{[0-9]+}}, i8* %{{[0-9]+}})
94479447

94489448
vec_xst_be(vuc, param_sll, &param_uc);
9449-
// CHECK: store <16 x i8> %{{[0-9]+}}, <16 x i8>* %{{[0-9]+}}, align 16
9449+
// CHECK: store <16 x i8> %{{[0-9]+}}, <16 x i8>* %{{[0-9]+}}, align 1
94509450
// CHECK-LE: shufflevector <16 x i8> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0, i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8>
94519451
// CHECK-LE: call void @llvm.ppc.vsx.stxvd2x.be(<2 x double> %{{[0-9]+}}, i8* %{{[0-9]+}})
94529452

94539453
vec_xst_be(vs, param_sll, &param_s);
9454-
// CHECK: store <8 x i16> %{{[0-9]+}}, <8 x i16>* %{{[0-9]+}}, align 16
9454+
// CHECK: store <8 x i16> %{{[0-9]+}}, <8 x i16>* %{{[0-9]+}}, align 1
94559455
// CHECK-LE: shufflevector <8 x i16> %{{[0-9]+}}, <8 x i16> %{{[0-9]+}}, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>
94569456
// CHECK-LE: call void @llvm.ppc.vsx.stxvd2x.be(<2 x double> %{{[0-9]+}}, i8* %{{[0-9]+}})
94579457

94589458
vec_xst_be(vus, param_sll, &param_us);
9459-
// CHECK: store <8 x i16> %{{[0-9]+}}, <8 x i16>* %{{[0-9]+}}, align 16
9459+
// CHECK: store <8 x i16> %{{[0-9]+}}, <8 x i16>* %{{[0-9]+}}, align 1
94609460
// CHECK-LE: shufflevector <8 x i16> %{{[0-9]+}}, <8 x i16> %{{[0-9]+}}, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>
94619461
// CHECK-LE: call void @llvm.ppc.vsx.stxvd2x.be(<2 x double> %{{[0-9]+}}, i8* %{{[0-9]+}})
94629462

94639463
vec_xst_be(vi, param_sll, &param_i);
9464-
// CHECK: store <4 x i32> %{{[0-9]+}}, <4 x i32>* %{{[0-9]+}}, align 16
9464+
// CHECK: store <4 x i32> %{{[0-9]+}}, <4 x i32>* %{{[0-9]+}}, align 1
94659465
// CHECK-LE: call void @llvm.ppc.vsx.stxvw4x.be(<4 x i32> %{{[0-9]+}}, i8* %{{[0-9]+}})
94669466

94679467
vec_xst_be(vui, param_sll, &param_ui);
9468-
// CHECK: store <4 x i32> %{{[0-9]+}}, <4 x i32>* %{{[0-9]+}}, align 16
9468+
// CHECK: store <4 x i32> %{{[0-9]+}}, <4 x i32>* %{{[0-9]+}}, align 1
94699469
// CHECK-LE: call void @llvm.ppc.vsx.stxvw4x.be(<4 x i32> %{{[0-9]+}}, i8* %{{[0-9]+}})
94709470

94719471
vec_xst_be(vf, param_sll, &param_f);
9472-
// CHECK: store <4 x float> %{{[0-9]+}}, <4 x float>* %{{[0-9]+}}, align 16
9472+
// CHECK: store <4 x float> %{{[0-9]+}}, <4 x float>* %{{[0-9]+}}, align 1
94739473
// CHECK-LE: call void @llvm.ppc.vsx.stxvw4x.be(<4 x i32> %{{[0-9]+}}, i8* %{{[0-9]+}})
94749474
}

0 commit comments

Comments
 (0)