@@ -669,13 +669,35 @@ void test_builtin_elementwise_log2(float f1, float f2, double d1, double d2,
669669void test_builtin_elementwise_popcount (si8 vi1 , si8 vi2 , long long int i1 ,
670670 long long int i2 , short si ,
671671 _BitInt (31 ) bi1 , _BitInt (31 ) bi2 ) {
672+ // CHECK: [[I1:%.+]] = load i64, ptr %i1.addr, align 8
673+ // CHECK-NEXT: call i64 @llvm.ctpop.i64(i64 [[I1]])
672674 i2 = __builtin_elementwise_popcount (i1 );
675+
676+ // CHECK: [[VI1:%.+]] = load <8 x i16>, ptr %vi1.addr, align 16
677+ // CHECK-NEXT: call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> [[VI1]])
673678 vi2 = __builtin_elementwise_popcount (vi1 );
679+
680+ // CHECK: [[CVI2:%.+]] = load <8 x i16>, ptr %cvi2, align 16
681+ // CHECK-NEXT: call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> [[CVI2]])
674682 const si8 cvi2 = vi2 ;
675683 vi2 = __builtin_elementwise_popcount (cvi2 );
684+
685+ // CHECK: [[BI1:%.+]] = load i32, ptr %bi1.addr, align 4
686+ // CHECK-NEXT: [[LOADEDV:%.+]] = trunc i32 [[BI1]] to i31
687+ // CHECK-NEXT: call i31 @llvm.ctpop.i31(i31 [[LOADEDV]])
676688 bi2 = __builtin_elementwise_popcount (bi1 );
689+
690+ // CHECK: [[IA1:%.+]] = load i32, ptr addrspace(1) @int_as_one, align 4
691+ // CHECK-NEXT: call i32 @llvm.ctpop.i32(i32 [[IA1]])
677692 b = __builtin_elementwise_popcount (int_as_one );
693+
694+ // CHECK: store i32 30, ptr @b, align 4
678695 b = __builtin_elementwise_popcount (-10 );
696+
697+ // CHECK: [[SI:%.+]] = load i16, ptr %si.addr, align 2
698+ // CHECK-NEXT: [[SI_EXT:%.+]] = sext i16 [[SI]] to i32
699+ // CHECK-NEXT: [[RES:%.+]] = call i32 @llvm.ctpop.i32(i32 [[SI_EXT]])
700+ // CHECK-NEXT: = trunc i32 [[RES]] to i16
679701 si = __builtin_elementwise_popcount (si );
680702}
681703
0 commit comments