@@ -512,7 +512,8 @@ void test_builtin_elementwise_min(float f1, float f2, double d1, double d2,
512
512
513
513
void test_builtin_elementwise_bitreverse (si8 vi1 , si8 vi2 ,
514
514
long long int i1 , long long int i2 , short si ,
515
- _BitInt (31 ) bi1 , _BitInt (31 ) bi2 ) {
515
+ _BitInt (31 ) bi1 , _BitInt (31 ) bi2 ,
516
+ char ci ) {
516
517
517
518
518
519
// CHECK: [[I1:%.+]] = load i64, ptr %i1.addr, align 8
@@ -541,10 +542,24 @@ void test_builtin_elementwise_bitreverse(si8 vi1, si8 vi2,
541
542
b = __builtin_elementwise_bitreverse (-10 );
542
543
543
544
// CHECK: [[SI:%.+]] = load i16, ptr %si.addr, align 2
544
- // CHECK-NEXT: [[SI_EXT:%.+]] = sext i16 [[SI]] to i32
545
- // CHECK-NEXT: [[RES:%.+]] = call i32 @llvm.bitreverse.i32(i32 [[SI_EXT]])
546
- // CHECK-NEXT: = trunc i32 [[RES]] to i16
545
+ // CHECK-NEXT: [[RES:%.+]] = call i16 @llvm.bitreverse.i16(i16 [[SI]])
547
546
si = __builtin_elementwise_bitreverse (si );
547
+
548
+ // CHECK: store i16 28671, ptr %si.addr, align 2
549
+ si = __builtin_elementwise_bitreverse ((short )-10 );
550
+
551
+ // CHECK: store i16 28671, ptr %si.addr, align 2
552
+ si = __builtin_elementwise_bitreverse ((unsigned short )-10 );
553
+
554
+ // CHECK: [[CI:%.+]] = load i8, ptr %ci.addr, align 1
555
+ // CHECK-NEXT: [[RES:%.+]] = call i8 @llvm.bitreverse.i8(i8 [[CI]])
556
+ ci = __builtin_elementwise_bitreverse (ci );
557
+
558
+ // CHECK: store i8 111, ptr %ci.addr, align 1
559
+ ci = __builtin_elementwise_bitreverse ((unsigned char )-10 );
560
+
561
+ // CHECK: store i8 111, ptr %ci.addr, align 1
562
+ ci = __builtin_elementwise_bitreverse ((char )-10 );
548
563
}
549
564
550
565
void test_builtin_elementwise_ceil (float f1 , float f2 , double d1 , double d2 ,
@@ -762,7 +777,8 @@ void test_builtin_elementwise_log2(float f1, float f2, double d1, double d2,
762
777
763
778
void test_builtin_elementwise_popcount (si8 vi1 , si8 vi2 , long long int i1 ,
764
779
long long int i2 , short si ,
765
- _BitInt (31 ) bi1 , _BitInt (31 ) bi2 ) {
780
+ _BitInt (31 ) bi1 , _BitInt (31 ) bi2 ,
781
+ char ci ) {
766
782
// CHECK: [[I1:%.+]] = load i64, ptr %i1.addr, align 8
767
783
// CHECK-NEXT: call i64 @llvm.ctpop.i64(i64 [[I1]])
768
784
i2 = __builtin_elementwise_popcount (i1 );
@@ -789,10 +805,24 @@ void test_builtin_elementwise_popcount(si8 vi1, si8 vi2, long long int i1,
789
805
b = __builtin_elementwise_popcount (-10 );
790
806
791
807
// CHECK: [[SI:%.+]] = load i16, ptr %si.addr, align 2
792
- // CHECK-NEXT: [[SI_EXT:%.+]] = sext i16 [[SI]] to i32
793
- // CHECK-NEXT: [[RES:%.+]] = call i32 @llvm.ctpop.i32(i32 [[SI_EXT]])
794
- // CHECK-NEXT: = trunc i32 [[RES]] to i16
808
+ // CHECK-NEXT: [[RES:%.+]] = call i16 @llvm.ctpop.i16(i16 [[SI]])
795
809
si = __builtin_elementwise_popcount (si );
810
+
811
+ // CHECK: store i16 3, ptr %si.addr, align 2
812
+ si = __builtin_elementwise_popcount ((unsigned short )32771 );
813
+
814
+ // CHECK: store i16 3, ptr %si.addr, align 2
815
+ si = __builtin_elementwise_popcount ((short )32771 );
816
+
817
+ // CHECK: [[CI:%.+]] = load i8, ptr %ci.addr, align 1
818
+ // CHECK-NEXT: [[RES:%.+]] = call i8 @llvm.ctpop.i8(i8 [[CI]])
819
+ ci = __builtin_elementwise_popcount (ci );
820
+
821
+ // CHECK: store i8 2, ptr %ci.addr, align 1
822
+ ci = __builtin_elementwise_popcount ((unsigned char )192 );
823
+
824
+ // CHECK: store i8 2, ptr %ci.addr, align 1
825
+ ci = __builtin_elementwise_popcount ((char )192 );
796
826
}
797
827
798
828
void test_builtin_elementwise_fmod (float f1 , float f2 , double d1 , double d2 ,
0 commit comments