xref: /llvm-project/llvm/test/CodeGen/DirectX/any.ll (revision 81ee38551f2c9d1677471ab59bdc800e667b9616)
1*81ee3855SJustin Bogner; RUN: opt -S -passes=dxil-intrinsic-expansion,dxil-op-lower -mtriple=dxil-pc-shadermodel6.0-library < %s | FileCheck %s
2de1a97dbSFarzon Lotfi
3de1a97dbSFarzon Lotfi; Make sure dxil operation function calls for any are generated for float and half.
4de1a97dbSFarzon Lotfi
5de1a97dbSFarzon Lotfi; CHECK-LABEL: any_bool
6de1a97dbSFarzon Lotfi; CHECK: icmp ne i1 %{{.*}}, false
7de1a97dbSFarzon Lotfidefine noundef i1 @any_bool(i1 noundef %p0) {
8de1a97dbSFarzon Lotfientry:
9de1a97dbSFarzon Lotfi  %p0.addr = alloca i8, align 1
10de1a97dbSFarzon Lotfi  %frombool = zext i1 %p0 to i8
11de1a97dbSFarzon Lotfi  store i8 %frombool, ptr %p0.addr, align 1
12de1a97dbSFarzon Lotfi  %0 = load i8, ptr %p0.addr, align 1
13de1a97dbSFarzon Lotfi  %tobool = trunc i8 %0 to i1
14de1a97dbSFarzon Lotfi  %dx.any = call i1 @llvm.dx.any.i1(i1 %tobool)
15de1a97dbSFarzon Lotfi  ret i1 %dx.any
16de1a97dbSFarzon Lotfi}
17de1a97dbSFarzon Lotfi
18de1a97dbSFarzon Lotfi; CHECK-LABEL: any_int64_t
19de1a97dbSFarzon Lotfi; CHECK: icmp ne i64 %{{.*}}, 0
20de1a97dbSFarzon Lotfidefine noundef i1 @any_int64_t(i64 noundef %p0) {
21de1a97dbSFarzon Lotfientry:
22de1a97dbSFarzon Lotfi  %p0.addr = alloca i64, align 8
23de1a97dbSFarzon Lotfi  store i64 %p0, ptr %p0.addr, align 8
24de1a97dbSFarzon Lotfi  %0 = load i64, ptr %p0.addr, align 8
25de1a97dbSFarzon Lotfi  %dx.any = call i1 @llvm.dx.any.i64(i64 %0)
26de1a97dbSFarzon Lotfi  ret i1 %dx.any
27de1a97dbSFarzon Lotfi}
28de1a97dbSFarzon Lotfi
29de1a97dbSFarzon Lotfi; CHECK-LABEL: any_int
30de1a97dbSFarzon Lotfi; CHECK: icmp ne i32 %{{.*}}, 0
31de1a97dbSFarzon Lotfidefine noundef i1 @any_int(i32 noundef %p0) {
32de1a97dbSFarzon Lotfientry:
33de1a97dbSFarzon Lotfi  %p0.addr = alloca i32, align 4
34de1a97dbSFarzon Lotfi  store i32 %p0, ptr %p0.addr, align 4
35de1a97dbSFarzon Lotfi  %0 = load i32, ptr %p0.addr, align 4
36de1a97dbSFarzon Lotfi  %dx.any = call i1 @llvm.dx.any.i32(i32 %0)
37de1a97dbSFarzon Lotfi  ret i1 %dx.any
38de1a97dbSFarzon Lotfi}
39de1a97dbSFarzon Lotfi
40de1a97dbSFarzon Lotfi; CHECK-LABEL: any_int16_t
41de1a97dbSFarzon Lotfi; CHECK: icmp ne i16 %{{.*}}, 0
42de1a97dbSFarzon Lotfidefine noundef i1 @any_int16_t(i16 noundef %p0) {
43de1a97dbSFarzon Lotfientry:
44de1a97dbSFarzon Lotfi  %p0.addr = alloca i16, align 2
45de1a97dbSFarzon Lotfi  store i16 %p0, ptr %p0.addr, align 2
46de1a97dbSFarzon Lotfi  %0 = load i16, ptr %p0.addr, align 2
47de1a97dbSFarzon Lotfi  %dx.any = call i1 @llvm.dx.any.i16(i16 %0)
48de1a97dbSFarzon Lotfi  ret i1 %dx.any
49de1a97dbSFarzon Lotfi}
50de1a97dbSFarzon Lotfi
51de1a97dbSFarzon Lotfi; CHECK-LABEL: any_double
52de1a97dbSFarzon Lotfi; CHECK: fcmp une double %{{.*}}, 0.000000e+00
53de1a97dbSFarzon Lotfidefine noundef i1 @any_double(double noundef %p0) {
54de1a97dbSFarzon Lotfientry:
55de1a97dbSFarzon Lotfi  %p0.addr = alloca double, align 8
56de1a97dbSFarzon Lotfi  store double %p0, ptr %p0.addr, align 8
57de1a97dbSFarzon Lotfi  %0 = load double, ptr %p0.addr, align 8
58de1a97dbSFarzon Lotfi  %dx.any = call i1 @llvm.dx.any.f64(double %0)
59de1a97dbSFarzon Lotfi  ret i1 %dx.any
60de1a97dbSFarzon Lotfi}
61de1a97dbSFarzon Lotfi
62de1a97dbSFarzon Lotfi; CHECK-LABEL: any_float
63de1a97dbSFarzon Lotfi; CHECK: fcmp une float %{{.*}}, 0.000000e+00
64de1a97dbSFarzon Lotfidefine noundef i1 @any_float(float noundef %p0) {
65de1a97dbSFarzon Lotfientry:
66de1a97dbSFarzon Lotfi  %p0.addr = alloca float, align 4
67de1a97dbSFarzon Lotfi  store float %p0, ptr %p0.addr, align 4
68de1a97dbSFarzon Lotfi  %0 = load float, ptr %p0.addr, align 4
69de1a97dbSFarzon Lotfi  %dx.any = call i1 @llvm.dx.any.f32(float %0)
70de1a97dbSFarzon Lotfi  ret i1 %dx.any
71de1a97dbSFarzon Lotfi}
72de1a97dbSFarzon Lotfi
73de1a97dbSFarzon Lotfi; CHECK-LABEL: any_half
74de1a97dbSFarzon Lotfi; CHECK: fcmp une half %{{.*}}, 0xH0000
75de1a97dbSFarzon Lotfidefine noundef i1 @any_half(half noundef %p0) {
76de1a97dbSFarzon Lotfientry:
77de1a97dbSFarzon Lotfi  %p0.addr = alloca half, align 2
78de1a97dbSFarzon Lotfi  store half %p0, ptr %p0.addr, align 2
79de1a97dbSFarzon Lotfi  %0 = load half, ptr %p0.addr, align 2
80de1a97dbSFarzon Lotfi  %dx.any = call i1 @llvm.dx.any.f16(half %0)
81de1a97dbSFarzon Lotfi  ret i1 %dx.any
82de1a97dbSFarzon Lotfi}
83de1a97dbSFarzon Lotfi
84de1a97dbSFarzon Lotfi; CHECK-LABEL: any_bool4
85de1a97dbSFarzon Lotfi; CHECK: icmp ne <4 x i1> %extractvec, zeroinitialize
86de1a97dbSFarzon Lotfi; CHECK: extractelement <4 x i1> %{{.*}}, i64 0
87de1a97dbSFarzon Lotfi; CHECK: extractelement <4 x i1> %{{.*}}, i64 1
88de1a97dbSFarzon Lotfi; CHECK: or i1  %{{.*}}, %{{.*}}
89de1a97dbSFarzon Lotfi; CHECK: extractelement <4 x i1> %{{.*}}, i64 2
90de1a97dbSFarzon Lotfi; CHECK: or i1  %{{.*}}, %{{.*}}
91de1a97dbSFarzon Lotfi; CHECK: extractelement <4 x i1> %{{.*}}, i64 3
92de1a97dbSFarzon Lotfi; CHECK: or i1  %{{.*}}, %{{.*}}
93de1a97dbSFarzon Lotfidefine noundef i1 @any_bool4(<4 x i1> noundef %p0) {
94de1a97dbSFarzon Lotfientry:
95de1a97dbSFarzon Lotfi  %p0.addr = alloca i8, align 1
96de1a97dbSFarzon Lotfi  %insertvec = shufflevector <4 x i1> %p0, <4 x i1> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>
97de1a97dbSFarzon Lotfi  %0 = bitcast <8 x i1> %insertvec to i8
98de1a97dbSFarzon Lotfi  store i8 %0, ptr %p0.addr, align 1
99de1a97dbSFarzon Lotfi  %load_bits = load i8, ptr %p0.addr, align 1
100de1a97dbSFarzon Lotfi  %1 = bitcast i8 %load_bits to <8 x i1>
101de1a97dbSFarzon Lotfi  %extractvec = shufflevector <8 x i1> %1, <8 x i1> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
102de1a97dbSFarzon Lotfi  %dx.any = call i1 @llvm.dx.any.v4i1(<4 x i1> %extractvec)
103de1a97dbSFarzon Lotfi  ret i1 %dx.any
104de1a97dbSFarzon Lotfi}
105de1a97dbSFarzon Lotfi
106de1a97dbSFarzon Lotfideclare i1 @llvm.dx.any.v4i1(<4 x i1>)
107de1a97dbSFarzon Lotfideclare i1 @llvm.dx.any.i1(i1)
108de1a97dbSFarzon Lotfideclare i1 @llvm.dx.any.i16(i16)
109de1a97dbSFarzon Lotfideclare i1 @llvm.dx.any.i32(i32)
110de1a97dbSFarzon Lotfideclare i1 @llvm.dx.any.i64(i64)
111de1a97dbSFarzon Lotfideclare i1 @llvm.dx.any.f16(half)
112de1a97dbSFarzon Lotfideclare i1 @llvm.dx.any.f32(float)
113de1a97dbSFarzon Lotfideclare i1 @llvm.dx.any.f64(double)
114