Home | History | Annotate | Download | only in PTX
      1 ; RUN: llc < %s -march=ptx32 | FileCheck %s
      2 
      3 define 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 
     12 define 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 
     21 define 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 
     30 define 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 
     39 define 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 
     48 define 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 
     57 define 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 
     66 define 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 
     75 define 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 
     84 define 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 
     93 define 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 
    102 define 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 
    111 define 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 
    120 define 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 
    129 define 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 
    138 define 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 
    147 define 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 
    156 define 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 
    165 define 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 
    174 define 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 
    183 define 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 
    195 define 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