xref: /llvm-project/clang/test/CodeGenHLSL/builtins/all.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.all = call i1 @llvm.[[TARGET]].all.i16
23// NATIVE_HALF: ret i1 %hlsl.all
24bool test_all_int16_t(int16_t p0) { return all(p0); }
25// NATIVE_HALF: define [[FNATTRS]] i1 @
26// NATIVE_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.v2i16
27// NATIVE_HALF: ret i1 %hlsl.all
28bool test_all_int16_t2(int16_t2 p0) { return all(p0); }
29// NATIVE_HALF: define [[FNATTRS]] i1 @
30// NATIVE_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.v3i16
31// NATIVE_HALF: ret i1 %hlsl.all
32bool test_all_int16_t3(int16_t3 p0) { return all(p0); }
33// NATIVE_HALF: define [[FNATTRS]] i1 @
34// NATIVE_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.v4i16
35// NATIVE_HALF: ret i1 %hlsl.all
36bool test_all_int16_t4(int16_t4 p0) { return all(p0); }
37// NATIVE_HALF: define [[FNATTRS]] i1 @
38// NATIVE_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.i16
39// NATIVE_HALF: ret i1 %hlsl.all
40bool test_all_uint16_t(uint16_t p0) { return all(p0); }
41// NATIVE_HALF: define [[FNATTRS]] i1 @
42// NATIVE_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.v2i16
43// NATIVE_HALF: ret i1 %hlsl.all
44bool test_all_uint16_t2(uint16_t2 p0) { return all(p0); }
45// NATIVE_HALF: define [[FNATTRS]] i1 @
46// NATIVE_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.v3i16
47// NATIVE_HALF: ret i1 %hlsl.all
48bool test_all_uint16_t3(uint16_t3 p0) { return all(p0); }
49// NATIVE_HALF: define [[FNATTRS]] i1 @
50// NATIVE_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.v4i16
51// NATIVE_HALF: ret i1 %hlsl.all
52bool test_all_uint16_t4(uint16_t4 p0) { return all(p0); }
53#endif // __HLSL_ENABLE_16_BIT
54
55// CHECK: define [[FNATTRS]] i1 @
56// NATIVE_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.f16
57// NO_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.f32
58// CHECK: ret i1 %hlsl.all
59bool test_all_half(half p0) { return all(p0); }
60// CHECK: define [[FNATTRS]] i1 @
61// NATIVE_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.v2f16
62// NO_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.v2f32
63// CHECK: ret i1 %hlsl.all
64bool test_all_half2(half2 p0) { return all(p0); }
65// CHECK: define [[FNATTRS]] i1 @
66// NATIVE_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.v3f16
67// NO_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.v3f32
68// CHECK: ret i1 %hlsl.all
69bool test_all_half3(half3 p0) { return all(p0); }
70// CHECK: define [[FNATTRS]] i1 @
71// NATIVE_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.v4f16
72// NO_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.v4f32
73// CHECK: ret i1 %hlsl.all
74bool test_all_half4(half4 p0) { return all(p0); }
75
76// CHECK: define [[FNATTRS]] i1 @
77// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.f32
78// CHECK: ret i1 %hlsl.all
79bool test_all_float(float p0) { return all(p0); }
80// CHECK: define [[FNATTRS]] i1 @
81// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v2f32
82// CHECK: ret i1 %hlsl.all
83bool test_all_float2(float2 p0) { return all(p0); }
84// CHECK: define [[FNATTRS]] i1 @
85// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v3f32
86// CHECK: ret i1 %hlsl.all
87bool test_all_float3(float3 p0) { return all(p0); }
88// CHECK: define [[FNATTRS]] i1 @
89// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v4f32
90// CHECK: ret i1 %hlsl.all
91bool test_all_float4(float4 p0) { return all(p0); }
92
93// CHECK: define [[FNATTRS]] i1 @
94// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.f64
95// CHECK: ret i1 %hlsl.all
96bool test_all_double(double p0) { return all(p0); }
97// CHECK: define [[FNATTRS]] i1 @
98// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v2f64
99// CHECK: ret i1 %hlsl.all
100bool test_all_double2(double2 p0) { return all(p0); }
101// CHECK: define [[FNATTRS]] i1 @
102// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v3f64
103// CHECK: ret i1 %hlsl.all
104bool test_all_double3(double3 p0) { return all(p0); }
105// CHECK: define [[FNATTRS]] i1 @
106// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v4f64
107// CHECK: ret i1 %hlsl.all
108bool test_all_double4(double4 p0) { return all(p0); }
109
110// CHECK: define [[FNATTRS]] i1 @
111// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.i32
112// CHECK: ret i1 %hlsl.all
113bool test_all_int(int p0) { return all(p0); }
114// CHECK: define [[FNATTRS]] i1 @
115// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v2i32
116// CHECK: ret i1 %hlsl.all
117bool test_all_int2(int2 p0) { return all(p0); }
118// CHECK: define [[FNATTRS]] i1 @
119// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v3i32
120// CHECK: ret i1 %hlsl.all
121bool test_all_int3(int3 p0) { return all(p0); }
122// CHECK: define [[FNATTRS]] i1 @
123// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v4i32
124// CHECK: ret i1 %hlsl.all
125bool test_all_int4(int4 p0) { return all(p0); }
126
127// CHECK: define [[FNATTRS]] i1 @
128// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.i32
129// CHECK: ret i1 %hlsl.all
130bool test_all_uint(uint p0) { return all(p0); }
131// CHECK: define [[FNATTRS]] i1 @
132// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v2i32
133// CHECK: ret i1 %hlsl.all
134bool test_all_uint2(uint2 p0) { return all(p0); }
135// CHECK: define [[FNATTRS]] i1 @
136// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v3i32
137// CHECK: ret i1 %hlsl.all
138bool test_all_uint3(uint3 p0) { return all(p0); }
139// CHECK: define [[FNATTRS]] i1 @
140// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v4i32
141// CHECK: ret i1 %hlsl.all
142bool test_all_uint4(uint4 p0) { return all(p0); }
143
144// CHECK: define [[FNATTRS]] i1 @
145// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.i64
146// CHECK: ret i1 %hlsl.all
147bool test_all_int64_t(int64_t p0) { return all(p0); }
148// CHECK: define [[FNATTRS]] i1 @
149// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v2i64
150// CHECK: ret i1 %hlsl.all
151bool test_all_int64_t2(int64_t2 p0) { return all(p0); }
152// CHECK: define [[FNATTRS]] i1 @
153// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v3i64
154// CHECK: ret i1 %hlsl.all
155bool test_all_int64_t3(int64_t3 p0) { return all(p0); }
156// CHECK: define [[FNATTRS]] i1 @
157// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v4i64
158// CHECK: ret i1 %hlsl.all
159bool test_all_int64_t4(int64_t4 p0) { return all(p0); }
160
161// CHECK: define [[FNATTRS]] i1 @
162// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.i64
163// CHECK: ret i1 %hlsl.all
164bool test_all_uint64_t(uint64_t p0) { return all(p0); }
165// CHECK: define [[FNATTRS]] i1 @
166// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v2i64
167// CHECK: ret i1 %hlsl.all
168bool test_all_uint64_t2(uint64_t2 p0) { return all(p0); }
169// CHECK: define [[FNATTRS]] i1 @
170// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v3i64
171// CHECK: ret i1 %hlsl.all
172bool test_all_uint64_t3(uint64_t3 p0) { return all(p0); }
173// CHECK: define [[FNATTRS]] i1 @
174// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v4i64
175// CHECK: ret i1 %hlsl.all
176bool test_all_uint64_t4(uint64_t4 p0) { return all(p0); }
177
178// CHECK: define [[FNATTRS]] i1 @
179// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.i1
180// CHECK: ret i1 %hlsl.all
181bool test_all_bool(bool p0) { return all(p0); }
182// CHECK: define [[FNATTRS]] i1 @
183// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v2i1
184// CHECK: ret i1 %hlsl.all
185bool test_all_bool2(bool2 p0) { return all(p0); }
186// CHECK: define [[FNATTRS]] i1 @
187// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v3i1
188// CHECK: ret i1 %hlsl.all
189bool test_all_bool3(bool3 p0) { return all(p0); }
190// CHECK: define [[FNATTRS]] i1 @
191// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v4i1
192// CHECK: ret i1 %hlsl.all
193bool test_all_bool4(bool4 p0) { return all(p0); }
194