xref: /llvm-project/clang/test/CodeGenHLSL/builtins/any.hlsl (revision e99aa4a500b0f271b327432d404a9c1f72c6850a)
1// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \
2// RUN:   spirv-unknown-vulkan-compute %s -fnative-half-type \
3// RUN:   -emit-llvm -disable-llvm-passes -o - | FileCheck %s \
4// RUN:   --check-prefixes=CHECK,NATIVE_HALF \
5// RUN:   -DFNATTRS="spir_func noundef" -DTARGET=spv
6// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \
7// RUN:   spirv-unknown-vulkan-compute %s -emit-llvm -disable-llvm-passes \
8// RUN:   -o - | FileCheck %s --check-prefixes=CHECK \
9// RUN:   -DFNATTRS="spir_func noundef" -DTARGET=spv
10// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \
11// RUN:   dxil-pc-shadermodel6.3-library %s -fnative-half-type \
12// RUN:   -emit-llvm -disable-llvm-passes -o - | FileCheck %s \
13// RUN:   --check-prefixes=CHECK,NATIVE_HALF \
14// RUN:   -DFNATTRS=noundef -DTARGET=dx
15// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \
16// RUN:   dxil-pc-shadermodel6.3-library %s -emit-llvm -disable-llvm-passes \
17// RUN:   -o - | FileCheck %s --check-prefixes=CHECK \
18// RUN:   -DFNATTRS=noundef -DTARGET=dx
19
20#ifdef __HLSL_ENABLE_16_BIT
21// NATIVE_HALF: define [[FNATTRS]] i1 @
22// NATIVE_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.i16
23// NATIVE_HALF: ret i1 %hlsl.any
24bool test_any_int16_t(int16_t p0) { return any(p0); }
25
26// NATIVE_HALF: define [[FNATTRS]] i1 @
27// NATIVE_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.v2i16
28// NATIVE_HALF: ret i1 %hlsl.any
29bool test_any_int16_t2(int16_t2 p0) { return any(p0); }
30
31// NATIVE_HALF: define [[FNATTRS]] i1 @
32// NATIVE_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.v3i16
33// NATIVE_HALF: ret i1 %hlsl.any
34bool test_any_int16_t3(int16_t3 p0) { return any(p0); }
35
36// NATIVE_HALF: define [[FNATTRS]] i1 @
37// NATIVE_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.v4i16
38// NATIVE_HALF: ret i1 %hlsl.any
39bool test_any_int16_t4(int16_t4 p0) { return any(p0); }
40
41// NATIVE_HALF: define [[FNATTRS]] i1 @
42// NATIVE_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.i16
43// NATIVE_HALF: ret i1 %hlsl.any
44bool test_any_uint16_t(uint16_t p0) { return any(p0); }
45
46// NATIVE_HALF: define [[FNATTRS]] i1 @
47// NATIVE_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.v2i16
48// NATIVE_HALF: ret i1 %hlsl.any
49bool test_any_uint16_t2(uint16_t2 p0) { return any(p0); }
50
51// NATIVE_HALF: define [[FNATTRS]] i1 @
52// NATIVE_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.v3i16
53// NATIVE_HALF: ret i1 %hlsl.any
54bool test_any_uint16_t3(uint16_t3 p0) { return any(p0); }
55
56// NATIVE_HALF: define [[FNATTRS]] i1 @
57// NATIVE_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.v4i16
58// NATIVE_HALF: ret i1 %hlsl.any
59bool test_any_uint16_t4(uint16_t4 p0) { return any(p0); }
60#endif // __HLSL_ENABLE_16_BIT
61
62// CHECK: define [[FNATTRS]] i1 @
63// NATIVE_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.f16
64// NO_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.f32
65// CHECK: ret i1 %hlsl.any
66bool test_any_half(half p0) { return any(p0); }
67
68// CHECK: define [[FNATTRS]] i1 @
69// NATIVE_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.v2f16
70// NO_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.v2f32
71// CHECK: ret i1 %hlsl.any
72bool test_any_half2(half2 p0) { return any(p0); }
73
74// CHECK: define [[FNATTRS]] i1 @
75// NATIVE_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.v3f16
76// NO_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.v3f32
77// CHECK: ret i1 %hlsl.any
78bool test_any_half3(half3 p0) { return any(p0); }
79
80// CHECK: define [[FNATTRS]] i1 @
81// NATIVE_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.v4f16
82// NO_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.v4f32
83// CHECK: ret i1 %hlsl.any
84bool test_any_half4(half4 p0) { return any(p0); }
85
86// CHECK: define [[FNATTRS]] i1 @
87// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.f32
88// CHECK: ret i1 %hlsl.any
89bool test_any_float(float p0) { return any(p0); }
90
91// CHECK: define [[FNATTRS]] i1 @
92// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v2f32
93// CHECK: ret i1 %hlsl.any
94bool test_any_float2(float2 p0) { return any(p0); }
95
96// CHECK: define [[FNATTRS]] i1 @
97// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v3f32
98// CHECK: ret i1 %hlsl.any
99bool test_any_float3(float3 p0) { return any(p0); }
100
101// CHECK: define [[FNATTRS]] i1 @
102// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v4f32
103// CHECK: ret i1 %hlsl.any
104bool test_any_float4(float4 p0) { return any(p0); }
105
106// CHECK: define [[FNATTRS]] i1 @
107// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.f64
108// CHECK: ret i1 %hlsl.any
109bool test_any_double(double p0) { return any(p0); }
110
111// CHECK: define [[FNATTRS]] i1 @
112// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v2f64
113// CHECK: ret i1 %hlsl.any
114bool test_any_double2(double2 p0) { return any(p0); }
115
116// CHECK: define [[FNATTRS]] i1 @
117// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v3f64
118// CHECK: ret i1 %hlsl.any
119bool test_any_double3(double3 p0) { return any(p0); }
120
121// CHECK: define [[FNATTRS]] i1 @
122// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v4f64
123// CHECK: ret i1 %hlsl.any
124bool test_any_double4(double4 p0) { return any(p0); }
125
126// CHECK: define [[FNATTRS]] i1 @
127// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.i32
128// CHECK: ret i1 %hlsl.any
129bool test_any_int(int p0) { return any(p0); }
130
131// CHECK: define [[FNATTRS]] i1 @
132// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v2i32
133// CHECK: ret i1 %hlsl.any
134bool test_any_int2(int2 p0) { return any(p0); }
135
136// CHECK: define [[FNATTRS]] i1 @
137// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v3i32
138// CHECK: ret i1 %hlsl.any
139bool test_any_int3(int3 p0) { return any(p0); }
140
141// CHECK: define [[FNATTRS]] i1 @
142// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v4i32
143// CHECK: ret i1 %hlsl.any
144bool test_any_int4(int4 p0) { return any(p0); }
145
146// CHECK: define [[FNATTRS]] i1 @
147// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.i32
148// CHECK: ret i1 %hlsl.any
149bool test_any_uint(uint p0) { return any(p0); }
150
151// CHECK: define [[FNATTRS]] i1 @
152// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v2i32
153// CHECK: ret i1 %hlsl.any
154bool test_any_uint2(uint2 p0) { return any(p0); }
155
156// CHECK: define [[FNATTRS]] i1 @
157// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v3i32
158// CHECK: ret i1 %hlsl.any
159bool test_any_uint3(uint3 p0) { return any(p0); }
160
161// CHECK: define [[FNATTRS]] i1 @
162// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v4i32
163// CHECK: ret i1 %hlsl.any
164bool test_any_uint4(uint4 p0) { return any(p0); }
165
166// CHECK: define [[FNATTRS]] i1 @
167// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.i64
168// CHECK: ret i1 %hlsl.any
169bool test_any_int64_t(int64_t p0) { return any(p0); }
170
171// CHECK: define [[FNATTRS]] i1 @
172// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v2i64
173// CHECK: ret i1 %hlsl.any
174bool test_any_int64_t2(int64_t2 p0) { return any(p0); }
175
176// CHECK: define [[FNATTRS]] i1 @
177// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v3i64
178// CHECK: ret i1 %hlsl.any
179bool test_any_int64_t3(int64_t3 p0) { return any(p0); }
180
181// CHECK: define [[FNATTRS]] i1 @
182// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v4i64
183// CHECK: ret i1 %hlsl.any
184bool test_any_int64_t4(int64_t4 p0) { return any(p0); }
185
186// CHECK: define [[FNATTRS]] i1 @
187// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.i64
188// CHECK: ret i1 %hlsl.any
189bool test_any_uint64_t(uint64_t p0) { return any(p0); }
190
191// CHECK: define [[FNATTRS]] i1 @
192// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v2i64
193// CHECK: ret i1 %hlsl.any
194bool test_any_uint64_t2(uint64_t2 p0) { return any(p0); }
195
196// CHECK: define [[FNATTRS]] i1 @
197// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v3i64
198// CHECK: ret i1 %hlsl.any
199bool test_any_uint64_t3(uint64_t3 p0) { return any(p0); }
200
201// CHECK: define [[FNATTRS]] i1 @
202// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v4i64
203// CHECK: ret i1 %hlsl.any
204bool test_any_uint64_t4(uint64_t4 p0) { return any(p0); }
205
206// CHECK: define [[FNATTRS]] i1 @
207// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.i1
208// CHECK: ret i1 %hlsl.any
209bool test_any_bool(bool p0) { return any(p0); }
210
211// CHECK: define [[FNATTRS]] i1 @
212// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v2i1
213// CHECK: ret i1 %hlsl.any
214bool test_any_bool2(bool2 p0) { return any(p0); }
215
216// CHECK: define [[FNATTRS]] i1 @
217// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v3i1
218// CHECK: ret i1 %hlsl.any
219bool test_any_bool3(bool3 p0) { return any(p0); }
220
221// CHECK: define [[FNATTRS]] i1 @
222// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v4i1
223// CHECK: ret i1 %hlsl.any
224bool test_any_bool4(bool4 p0) { return any(p0); }
225