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