xref: /llvm-project/clang/test/CodeGenHLSL/builtins/select.hlsl (revision 0f349b7a9cde0080e626f6cfd362885341eb63b4)
1// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \
2// RUN:   dxil-pc-shadermodel6.3-library %s -emit-llvm -disable-llvm-passes \
3// RUN:   -o - | FileCheck %s --check-prefixes=CHECK
4
5// CHECK-LABEL: test_select_bool_int
6// CHECK: [[SELECT:%.*]] = select i1 {{%.*}}, i32 {{%.*}}, i32 {{%.*}}
7// CHECK: ret i32 [[SELECT]]
8int test_select_bool_int(bool cond0, int tVal, int fVal) {
9  return select<int>(cond0, tVal, fVal);
10}
11
12struct S { int a; };
13// CHECK-LABEL: test_select_infer
14// CHECK: [[SELECT:%.*]] = select i1 {{%.*}}, ptr {{%.*}}, ptr {{%.*}}
15// CHECK: store ptr [[SELECT]]
16// CHECK: ret void
17struct S test_select_infer(bool cond0, struct S tVal, struct S fVal) {
18  return select(cond0, tVal, fVal);
19}
20
21// CHECK-LABEL: test_select_bool_vector
22// CHECK: [[SELECT:%.*]] = select i1 {{%.*}}, <2 x i32> {{%.*}}, <2 x i32> {{%.*}}
23// CHECK: ret <2 x i32> [[SELECT]]
24int2 test_select_bool_vector(bool cond0, int2 tVal, int2 fVal) {
25  return select<int2>(cond0, tVal, fVal);
26}
27
28// CHECK-LABEL: test_select_vector_1
29// CHECK: [[SELECT:%.*]] = select <1 x i1> {{%.*}}, <1 x i32> {{%.*}}, <1 x i32> {{%.*}}
30// CHECK: ret <1 x i32> [[SELECT]]
31int1 test_select_vector_1(bool1 cond0, int1 tVals, int1 fVals) {
32  return select<int,1>(cond0, tVals, fVals);
33}
34
35// CHECK-LABEL: test_select_vector_2
36// CHECK: [[SELECT:%.*]] = select <2 x i1> {{%.*}}, <2 x i32> {{%.*}}, <2 x i32> {{%.*}}
37// CHECK: ret <2 x i32> [[SELECT]]
38int2 test_select_vector_2(bool2 cond0, int2 tVals, int2 fVals) {
39  return select<int,2>(cond0, tVals, fVals);
40}
41
42// CHECK-LABEL: test_select_vector_3
43// CHECK: [[SELECT:%.*]] = select <3 x i1> {{%.*}}, <3 x i32> {{%.*}}, <3 x i32> {{%.*}}
44// CHECK: ret <3 x i32> [[SELECT]]
45int3 test_select_vector_3(bool3 cond0, int3 tVals, int3 fVals) {
46  return select<int,3>(cond0, tVals, fVals);
47}
48
49// CHECK-LABEL: test_select_vector_4
50// CHECK: [[SELECT:%.*]] = select <4 x i1> {{%.*}}, <4 x i32> {{%.*}}, <4 x i32> {{%.*}}
51// CHECK: ret <4 x i32> [[SELECT]]
52int4 test_select_vector_4(bool4 cond0, int4 tVals, int4 fVals) {
53  return select(cond0, tVals, fVals);
54}
55