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