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