xref: /llvm-project/llvm/test/CodeGen/DirectX/all.ll (revision ff5816ad29eba3762e1c5c576c1adf586c35dd91)
1; RUN: opt -S -passes=dxil-intrinsic-expansion,dxil-op-lower -mtriple=dxil-pc-shadermodel6.0-library < %s | FileCheck %s
2
3; Make sure dxil operation function calls for all are generated for float and half.
4
5; CHECK-LABEL: all_bool
6; CHECK: icmp ne i1 %{{.*}}, false
7define noundef i1 @all_bool(i1 noundef %p0) {
8entry:
9  %dx.all = call i1 @llvm.dx.all.i1(i1 %p0)
10  ret i1 %dx.all
11}
12
13; CHECK-LABEL: all_int64_t
14; CHECK: icmp ne i64 %{{.*}}, 0
15define noundef i1 @all_int64_t(i64 noundef %p0) {
16entry:
17  %dx.all = call i1 @llvm.dx.all.i64(i64 %p0)
18  ret i1 %dx.all
19}
20
21; CHECK-LABEL: all_int
22; CHECK: icmp ne i32 %{{.*}}, 0
23define noundef i1 @all_int(i32 noundef %p0) {
24entry:
25  %dx.all = call i1 @llvm.dx.all.i32(i32 %p0)
26  ret i1 %dx.all
27}
28
29; CHECK-LABEL: all_int16_t
30; CHECK: icmp ne i16 %{{.*}}, 0
31define noundef i1 @all_int16_t(i16 noundef %p0) {
32entry:
33  %dx.all = call i1 @llvm.dx.all.i16(i16 %p0)
34  ret i1 %dx.all
35}
36
37; CHECK-LABEL: all_double
38; CHECK: fcmp une double %{{.*}}, 0.000000e+00
39define noundef i1 @all_double(double noundef %p0) {
40entry:
41  %dx.all = call i1 @llvm.dx.all.f64(double %p0)
42  ret i1 %dx.all
43}
44
45; CHECK-LABEL: all_float
46; CHECK: fcmp une float %{{.*}}, 0.000000e+00
47define noundef i1 @all_float(float noundef %p0) {
48entry:
49  %dx.all = call i1 @llvm.dx.all.f32(float %p0)
50  ret i1 %dx.all
51}
52
53; CHECK-LABEL: all_half
54; CHECK: fcmp une half %{{.*}}, 0xH0000
55define noundef i1 @all_half(half noundef %p0) {
56entry:
57  %dx.all = call i1 @llvm.dx.all.f16(half %p0)
58  ret i1 %dx.all
59}
60
61; CHECK-LABEL: all_bool4
62; CHECK: icmp ne <4 x i1> %{{.*}}, zeroinitialize
63; CHECK: extractelement <4 x i1> %{{.*}}, i64 0
64; CHECK: extractelement <4 x i1> %{{.*}}, i64 1
65; CHECK: and i1  %{{.*}}, %{{.*}}
66; CHECK: extractelement <4 x i1> %{{.*}}, i64 2
67; CHECK: and i1  %{{.*}}, %{{.*}}
68; CHECK: extractelement <4 x i1> %{{.*}}, i64 3
69; CHECK: and i1  %{{.*}}, %{{.*}}
70define noundef i1 @all_bool4(<4 x i1> noundef %p0) {
71entry:
72  %dx.all = call i1 @llvm.dx.all.v4i1(<4 x i1> %p0)
73  ret i1 %dx.all
74}
75
76declare i1 @llvm.dx.all.v4i1(<4 x i1>)
77declare i1 @llvm.dx.all.i1(i1)
78declare i1 @llvm.dx.all.i16(i16)
79declare i1 @llvm.dx.all.i32(i32)
80declare i1 @llvm.dx.all.i64(i64)
81declare i1 @llvm.dx.all.f16(half)
82declare i1 @llvm.dx.all.f32(float)
83declare i1 @llvm.dx.all.f64(double)
84