• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: llc < %s -march=ptx32 | FileCheck %s
2
3define ptx_device i32 @test_setp_eq_u32_rr(i32 %x, i32 %y) {
4; CHECK: setp.eq.u32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, %r{{[0-9]+}};
5; CHECK: selp.u32 %ret{{[0-9]+}}, 1, 0, %p[[P0]];
6; CHECK: ret;
7	%p = icmp eq i32 %x, %y
8	%z = zext i1 %p to i32
9	ret i32 %z
10}
11
12define ptx_device i32 @test_setp_ne_u32_rr(i32 %x, i32 %y) {
13; CHECK: setp.ne.u32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, %r{{[0-9]+}};
14; CHECK: selp.u32 %ret{{[0-9]+}}, 1, 0, %p[[P0]];
15; CHECK: ret;
16	%p = icmp ne i32 %x, %y
17	%z = zext i1 %p to i32
18	ret i32 %z
19}
20
21define ptx_device i32 @test_setp_lt_u32_rr(i32 %x, i32 %y) {
22; CHECK: setp.lt.u32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, %r{{[0-9]+}};
23; CHECK: selp.u32 %ret{{[0-9]+}}, 1, 0, %p[[P0]];
24; CHECK: ret;
25	%p = icmp ult i32 %x, %y
26	%z = zext i1 %p to i32
27	ret i32 %z
28}
29
30define ptx_device i32 @test_setp_le_u32_rr(i32 %x, i32 %y) {
31; CHECK: setp.le.u32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, %r{{[0-9]+}};
32; CHECK: selp.u32 %ret{{[0-9]+}}, 1, 0, %p[[P0]];
33; CHECK: ret;
34	%p = icmp ule i32 %x, %y
35	%z = zext i1 %p to i32
36	ret i32 %z
37}
38
39define ptx_device i32 @test_setp_gt_u32_rr(i32 %x, i32 %y) {
40; CHECK: setp.gt.u32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, %r{{[0-9]+}};
41; CHECK: selp.u32 %ret{{[0-9]+}}, 1, 0, %p[[P0]];
42; CHECK: ret;
43	%p = icmp ugt i32 %x, %y
44	%z = zext i1 %p to i32
45	ret i32 %z
46}
47
48define ptx_device i32 @test_setp_ge_u32_rr(i32 %x, i32 %y) {
49; CHECK: setp.ge.u32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, %r{{[0-9]+}};
50; CHECK: selp.u32 %ret{{[0-9]+}}, 1, 0, %p[[P0]];
51; CHECK: ret;
52	%p = icmp uge i32 %x, %y
53	%z = zext i1 %p to i32
54	ret i32 %z
55}
56
57define ptx_device i32 @test_setp_lt_s32_rr(i32 %x, i32 %y) {
58; CHECK: setp.lt.s32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, %r{{[0-9]+}};
59; CHECK: selp.u32 %ret{{[0-9]+}}, 1, 0, %p[[P0]];
60; CHECK: ret;
61	%p = icmp slt i32 %x, %y
62	%z = zext i1 %p to i32
63	ret i32 %z
64}
65
66define ptx_device i32 @test_setp_le_s32_rr(i32 %x, i32 %y) {
67; CHECK: setp.le.s32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, %r{{[0-9]+}};
68; CHECK: selp.u32 %ret{{[0-9]+}}, 1, 0, %p[[P0]];
69; CHECK: ret;
70	%p = icmp sle i32 %x, %y
71	%z = zext i1 %p to i32
72	ret i32 %z
73}
74
75define ptx_device i32 @test_setp_gt_s32_rr(i32 %x, i32 %y) {
76; CHECK: setp.gt.s32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, %r{{[0-9]+}};
77; CHECK: selp.u32 %ret{{[0-9]+}}, 1, 0, %p[[P0]];
78; CHECK: ret;
79	%p = icmp sgt i32 %x, %y
80	%z = zext i1 %p to i32
81	ret i32 %z
82}
83
84define ptx_device i32 @test_setp_ge_s32_rr(i32 %x, i32 %y) {
85; CHECK: setp.ge.s32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, %r{{[0-9]+}};
86; CHECK: selp.u32 %ret{{[0-9]+}}, 1, 0, %p[[P0]];
87; CHECK: ret;
88	%p = icmp sge i32 %x, %y
89	%z = zext i1 %p to i32
90	ret i32 %z
91}
92
93define ptx_device i32 @test_setp_eq_u32_ri(i32 %x) {
94; CHECK: setp.eq.u32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, 1;
95; CHECK: selp.u32 %ret{{[0-9]+}}, 1, 0, %p[[P0]];
96; CHECK: ret;
97	%p = icmp eq i32 %x, 1
98	%z = zext i1 %p to i32
99	ret i32 %z
100}
101
102define ptx_device i32 @test_setp_ne_u32_ri(i32 %x) {
103; CHECK: setp.ne.u32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, 1;
104; CHECK: selp.u32 %ret{{[0-9]+}}, 1, 0, %p[[P0]];
105; CHECK: ret;
106	%p = icmp ne i32 %x, 1
107	%z = zext i1 %p to i32
108	ret i32 %z
109}
110
111define ptx_device i32 @test_setp_lt_u32_ri(i32 %x) {
112; CHECK: setp.eq.u32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, 0;
113; CHECK: selp.u32 %ret{{[0-9]+}}, 1, 0, %p[[P0]];
114; CHECK: ret;
115	%p = icmp ult i32 %x, 1
116	%z = zext i1 %p to i32
117	ret i32 %z
118}
119
120define ptx_device i32 @test_setp_le_u32_ri(i32 %x) {
121; CHECK: setp.lt.u32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, 2;
122; CHECK: selp.u32 %ret{{[0-9]+}}, 1, 0, %p[[P0]];
123; CHECK: ret;
124	%p = icmp ule i32 %x, 1
125	%z = zext i1 %p to i32
126	ret i32 %z
127}
128
129define ptx_device i32 @test_setp_gt_u32_ri(i32 %x) {
130; CHECK: setp.gt.u32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, 1;
131; CHECK: selp.u32 %ret{{[0-9]+}}, 1, 0, %p[[P0]];
132; CHECK: ret;
133	%p = icmp ugt i32 %x, 1
134	%z = zext i1 %p to i32
135	ret i32 %z
136}
137
138define ptx_device i32 @test_setp_ge_u32_ri(i32 %x) {
139; CHECK: setp.ne.u32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, 0;
140; CHECK: selp.u32 %ret{{[0-9]+}}, 1, 0, %p[[P0]];
141; CHECK: ret;
142	%p = icmp uge i32 %x, 1
143	%z = zext i1 %p to i32
144	ret i32 %z
145}
146
147define ptx_device i32 @test_setp_lt_s32_ri(i32 %x) {
148; CHECK: setp.lt.s32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, 1;
149; CHECK: selp.u32 %ret{{[0-9]+}}, 1, 0, %p[[P0]];
150; CHECK: ret;
151	%p = icmp slt i32 %x, 1
152	%z = zext i1 %p to i32
153	ret i32 %z
154}
155
156define ptx_device i32 @test_setp_le_s32_ri(i32 %x) {
157; CHECK: setp.lt.s32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, 2;
158; CHECK: selp.u32 %ret{{[0-9]+}}, 1, 0, %p[[P0]];
159; CHECK: ret;
160	%p = icmp sle i32 %x, 1
161	%z = zext i1 %p to i32
162	ret i32 %z
163}
164
165define ptx_device i32 @test_setp_gt_s32_ri(i32 %x) {
166; CHECK: setp.gt.s32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, 1;
167; CHECK: selp.u32 %ret{{[0-9]+}}, 1, 0, %p[[P0]];
168; CHECK: ret;
169	%p = icmp sgt i32 %x, 1
170	%z = zext i1 %p to i32
171	ret i32 %z
172}
173
174define ptx_device i32 @test_setp_ge_s32_ri(i32 %x) {
175; CHECK: setp.gt.s32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, 0;
176; CHECK: selp.u32 %ret{{[0-9]+}}, 1, 0, %p[[P0]];
177; CHECK: ret;
178	%p = icmp sge i32 %x, 1
179	%z = zext i1 %p to i32
180	ret i32 %z
181}
182
183define ptx_device i32 @test_setp_4_op_format_1(i32 %x, i32 %y, i32 %u, i32 %v) {
184; CHECK: setp.gt.u32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, %r{{[0-9]+}};
185; CHECK: setp.eq.and.u32 %p1, %r{{[0-9]+}}, %r{{[0-9]+}}, %p[[P0]];
186; CHECK: selp.u32 %ret{{[0-9]+}}, 1, 0, %p1;
187; CHECK: ret;
188	%c = icmp eq i32 %x, %y
189	%d = icmp ugt i32 %u, %v
190	%e = and i1 %c, %d
191	%z = zext i1 %e to i32
192	ret i32 %z
193}
194
195define ptx_device i32 @test_setp_4_op_format_2(i32 %x, i32 %y, i32 %w) {
196; CHECK: setp.gt.u32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, 0;
197; CHECK: setp.eq.and.u32 %p1, %r{{[0-9]+}}, %r{{[0-9]+}}, !%p[[P0]];
198; CHECK: selp.u32 %ret{{[0-9]+}}, 1, 0, %p1;
199; CHECK: ret;
200	%c = trunc i32 %w to i1
201	%d = icmp eq i32 %x, %y
202	%e = xor i1 %c, 1
203	%f = and i1 %d, %e
204	%z = zext i1 %f to i32
205	ret i32 %z
206}
207