aboutsummaryrefslogtreecommitdiff
path: root/clang/test/CodeGen/builtins-reduction-math.c
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test/CodeGen/builtins-reduction-math.c')
-rw-r--r--clang/test/CodeGen/builtins-reduction-math.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/clang/test/CodeGen/builtins-reduction-math.c b/clang/test/CodeGen/builtins-reduction-math.c
index f5fbd0c..2988a318 100644
--- a/clang/test/CodeGen/builtins-reduction-math.c
+++ b/clang/test/CodeGen/builtins-reduction-math.c
@@ -58,6 +58,28 @@ void test_builtin_reduce_min(float4 vf1, si8 vi1, u4 vu1) {
unsigned long long r5 = __builtin_reduce_min(cvi1);
}
+void test_builtin_reduce_add(si8 vi1, u4 vu1) {
+ // CHECK: [[VI1:%.+]] = load <8 x i16>, <8 x i16>* %vi1.addr, align 16
+ // CHECK-NEXT: call i16 @llvm.vector.reduce.add.v8i16(<8 x i16> [[VI1]])
+ short r2 = __builtin_reduce_add(vi1);
+
+ // CHECK: [[VU1:%.+]] = load <4 x i32>, <4 x i32>* %vu1.addr, align 16
+ // CHECK-NEXT: call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> [[VU1]])
+ unsigned r3 = __builtin_reduce_add(vu1);
+
+ // CHECK: [[CVI1:%.+]] = load <8 x i16>, <8 x i16>* %cvi1, align 16
+ // CHECK-NEXT: [[RDX1:%.+]] = call i16 @llvm.vector.reduce.add.v8i16(<8 x i16> [[CVI1]])
+ // CHECK-NEXT: sext i16 [[RDX1]] to i32
+ const si8 cvi1 = vi1;
+ int r4 = __builtin_reduce_add(cvi1);
+
+ // CHECK: [[CVU1:%.+]] = load <4 x i32>, <4 x i32>* %cvu1, align 16
+ // CHECK-NEXT: [[RDX2:%.+]] = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> [[CVU1]])
+ // CHECK-NEXT: zext i32 [[RDX2]] to i64
+ const u4 cvu1 = vu1;
+ unsigned long long r5 = __builtin_reduce_add(cvu1);
+}
+
void test_builtin_reduce_xor(si8 vi1, u4 vu1) {
// CHECK: [[VI1:%.+]] = load <8 x i16>, <8 x i16>* %vi1.addr, align 16