@@ -512,7 +512,8 @@ void test_builtin_elementwise_min(float f1, float f2, double d1, double d2,
512512
513513void test_builtin_elementwise_bitreverse (si8 vi1 , si8 vi2 ,
514514 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 ) {
516517
517518
518519 // CHECK: [[I1:%.+]] = load i64, ptr %i1.addr, align 8
@@ -541,10 +542,24 @@ void test_builtin_elementwise_bitreverse(si8 vi1, si8 vi2,
541542 b = __builtin_elementwise_bitreverse (-10 );
542543
543544 // 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]])
547546 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 );
548563}
549564
550565void 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,
762777
763778void test_builtin_elementwise_popcount (si8 vi1 , si8 vi2 , long long int i1 ,
764779 long long int i2 , short si ,
765- _BitInt (31 ) bi1 , _BitInt (31 ) bi2 ) {
780+ _BitInt (31 ) bi1 , _BitInt (31 ) bi2 ,
781+ char ci ) {
766782 // CHECK: [[I1:%.+]] = load i64, ptr %i1.addr, align 8
767783 // CHECK-NEXT: call i64 @llvm.ctpop.i64(i64 [[I1]])
768784 i2 = __builtin_elementwise_popcount (i1 );
@@ -789,10 +805,24 @@ void test_builtin_elementwise_popcount(si8 vi1, si8 vi2, long long int i1,
789805 b = __builtin_elementwise_popcount (-10 );
790806
791807 // 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]])
795809 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 );
796826}
797827
798828void test_builtin_elementwise_fmod (float f1 , float f2 , double d1 , double d2 ,
0 commit comments