Home | History | Annotate | Download | only in NVPTX
      1 ; RUN: llc < %s -march=nvptx -mcpu=sm_10 | FileCheck %s
      2 ; RUN: llc < %s -march=nvptx64 -mcpu=sm_10 | FileCheck %s
      3 ; RUN: llc < %s -march=nvptx -mcpu=sm_20 | FileCheck %s
      4 ; RUN: llc < %s -march=nvptx64 -mcpu=sm_20 | FileCheck %s
      5 
      6 define ptx_device i32 @test_tid_x() {
      7 ; CHECK: mov.u32 %r0, %tid.x;
      8 ; CHECK: ret;
      9 	%x = call i32 @llvm.ptx.read.tid.x()
     10 	ret i32 %x
     11 }
     12 
     13 define ptx_device i32 @test_tid_y() {
     14 ; CHECK: mov.u32 %r0, %tid.y;
     15 ; CHECK: ret;
     16 	%x = call i32 @llvm.ptx.read.tid.y()
     17 	ret i32 %x
     18 }
     19 
     20 define ptx_device i32 @test_tid_z() {
     21 ; CHECK: mov.u32 %r0, %tid.z;
     22 ; CHECK: ret;
     23 	%x = call i32 @llvm.ptx.read.tid.z()
     24 	ret i32 %x
     25 }
     26 
     27 define ptx_device i32 @test_tid_w() {
     28 ; CHECK: mov.u32 %r0, %tid.w;
     29 ; CHECK: ret;
     30 	%x = call i32 @llvm.ptx.read.tid.w()
     31 	ret i32 %x
     32 }
     33 
     34 define ptx_device i32 @test_ntid_x() {
     35 ; CHECK: mov.u32 %r0, %ntid.x;
     36 ; CHECK: ret;
     37 	%x = call i32 @llvm.ptx.read.ntid.x()
     38 	ret i32 %x
     39 }
     40 
     41 define ptx_device i32 @test_ntid_y() {
     42 ; CHECK: mov.u32 %r0, %ntid.y;
     43 ; CHECK: ret;
     44 	%x = call i32 @llvm.ptx.read.ntid.y()
     45 	ret i32 %x
     46 }
     47 
     48 define ptx_device i32 @test_ntid_z() {
     49 ; CHECK: mov.u32 %r0, %ntid.z;
     50 ; CHECK: ret;
     51 	%x = call i32 @llvm.ptx.read.ntid.z()
     52 	ret i32 %x
     53 }
     54 
     55 define ptx_device i32 @test_ntid_w() {
     56 ; CHECK: mov.u32 %r0, %ntid.w;
     57 ; CHECK: ret;
     58 	%x = call i32 @llvm.ptx.read.ntid.w()
     59 	ret i32 %x
     60 }
     61 
     62 define ptx_device i32 @test_laneid() {
     63 ; CHECK: mov.u32 %r0, %laneid;
     64 ; CHECK: ret;
     65 	%x = call i32 @llvm.ptx.read.laneid()
     66 	ret i32 %x
     67 }
     68 
     69 define ptx_device i32 @test_warpid() {
     70 ; CHECK: mov.u32 %r0, %warpid;
     71 ; CHECK: ret;
     72 	%x = call i32 @llvm.ptx.read.warpid()
     73 	ret i32 %x
     74 }
     75 
     76 define ptx_device i32 @test_nwarpid() {
     77 ; CHECK: mov.u32 %r0, %nwarpid;
     78 ; CHECK: ret;
     79 	%x = call i32 @llvm.ptx.read.nwarpid()
     80 	ret i32 %x
     81 }
     82 
     83 define ptx_device i32 @test_ctaid_x() {
     84 ; CHECK: mov.u32 %r0, %ctaid.x;
     85 ; CHECK: ret;
     86 	%x = call i32 @llvm.ptx.read.ctaid.x()
     87 	ret i32 %x
     88 }
     89 
     90 define ptx_device i32 @test_ctaid_y() {
     91 ; CHECK: mov.u32 %r0, %ctaid.y;
     92 ; CHECK: ret;
     93 	%x = call i32 @llvm.ptx.read.ctaid.y()
     94 	ret i32 %x
     95 }
     96 
     97 define ptx_device i32 @test_ctaid_z() {
     98 ; CHECK: mov.u32 %r0, %ctaid.z;
     99 ; CHECK: ret;
    100 	%x = call i32 @llvm.ptx.read.ctaid.z()
    101 	ret i32 %x
    102 }
    103 
    104 define ptx_device i32 @test_ctaid_w() {
    105 ; CHECK: mov.u32 %r0, %ctaid.w;
    106 ; CHECK: ret;
    107 	%x = call i32 @llvm.ptx.read.ctaid.w()
    108 	ret i32 %x
    109 }
    110 
    111 define ptx_device i32 @test_nctaid_x() {
    112 ; CHECK: mov.u32 %r0, %nctaid.x;
    113 ; CHECK: ret;
    114 	%x = call i32 @llvm.ptx.read.nctaid.x()
    115 	ret i32 %x
    116 }
    117 
    118 define ptx_device i32 @test_nctaid_y() {
    119 ; CHECK: mov.u32 %r0, %nctaid.y;
    120 ; CHECK: ret;
    121 	%x = call i32 @llvm.ptx.read.nctaid.y()
    122 	ret i32 %x
    123 }
    124 
    125 define ptx_device i32 @test_nctaid_z() {
    126 ; CHECK: mov.u32 %r0, %nctaid.z;
    127 ; CHECK: ret;
    128 	%x = call i32 @llvm.ptx.read.nctaid.z()
    129 	ret i32 %x
    130 }
    131 
    132 define ptx_device i32 @test_nctaid_w() {
    133 ; CHECK: mov.u32 %r0, %nctaid.w;
    134 ; CHECK: ret;
    135 	%x = call i32 @llvm.ptx.read.nctaid.w()
    136 	ret i32 %x
    137 }
    138 
    139 define ptx_device i32 @test_smid() {
    140 ; CHECK: mov.u32 %r0, %smid;
    141 ; CHECK: ret;
    142 	%x = call i32 @llvm.ptx.read.smid()
    143 	ret i32 %x
    144 }
    145 
    146 define ptx_device i32 @test_nsmid() {
    147 ; CHECK: mov.u32 %r0, %nsmid;
    148 ; CHECK: ret;
    149 	%x = call i32 @llvm.ptx.read.nsmid()
    150 	ret i32 %x
    151 }
    152 
    153 define ptx_device i32 @test_gridid() {
    154 ; CHECK: mov.u32 %r0, %gridid;
    155 ; CHECK: ret;
    156 	%x = call i32 @llvm.ptx.read.gridid()
    157 	ret i32 %x
    158 }
    159 
    160 define ptx_device i32 @test_lanemask_eq() {
    161 ; CHECK: mov.u32 %r0, %lanemask_eq;
    162 ; CHECK: ret;
    163 	%x = call i32 @llvm.ptx.read.lanemask.eq()
    164 	ret i32 %x
    165 }
    166 
    167 define ptx_device i32 @test_lanemask_le() {
    168 ; CHECK: mov.u32 %r0, %lanemask_le;
    169 ; CHECK: ret;
    170 	%x = call i32 @llvm.ptx.read.lanemask.le()
    171 	ret i32 %x
    172 }
    173 
    174 define ptx_device i32 @test_lanemask_lt() {
    175 ; CHECK: mov.u32 %r0, %lanemask_lt;
    176 ; CHECK: ret;
    177 	%x = call i32 @llvm.ptx.read.lanemask.lt()
    178 	ret i32 %x
    179 }
    180 
    181 define ptx_device i32 @test_lanemask_ge() {
    182 ; CHECK: mov.u32 %r0, %lanemask_ge;
    183 ; CHECK: ret;
    184 	%x = call i32 @llvm.ptx.read.lanemask.ge()
    185 	ret i32 %x
    186 }
    187 
    188 define ptx_device i32 @test_lanemask_gt() {
    189 ; CHECK: mov.u32 %r0, %lanemask_gt;
    190 ; CHECK: ret;
    191 	%x = call i32 @llvm.ptx.read.lanemask.gt()
    192 	ret i32 %x
    193 }
    194 
    195 define ptx_device i32 @test_clock() {
    196 ; CHECK: mov.u32 %r0, %clock;
    197 ; CHECK: ret;
    198 	%x = call i32 @llvm.ptx.read.clock()
    199 	ret i32 %x
    200 }
    201 
    202 define ptx_device i64 @test_clock64() {
    203 ; CHECK: mov.u64 %rl0, %clock64;
    204 ; CHECK: ret;
    205 	%x = call i64 @llvm.ptx.read.clock64()
    206 	ret i64 %x
    207 }
    208 
    209 define ptx_device i32 @test_pm0() {
    210 ; CHECK: mov.u32 %r0, %pm0;
    211 ; CHECK: ret;
    212 	%x = call i32 @llvm.ptx.read.pm0()
    213 	ret i32 %x
    214 }
    215 
    216 define ptx_device i32 @test_pm1() {
    217 ; CHECK: mov.u32 %r0, %pm1;
    218 ; CHECK: ret;
    219 	%x = call i32 @llvm.ptx.read.pm1()
    220 	ret i32 %x
    221 }
    222 
    223 define ptx_device i32 @test_pm2() {
    224 ; CHECK: mov.u32 %r0, %pm2;
    225 ; CHECK: ret;
    226 	%x = call i32 @llvm.ptx.read.pm2()
    227 	ret i32 %x
    228 }
    229 
    230 define ptx_device i32 @test_pm3() {
    231 ; CHECK: mov.u32 %r0, %pm3;
    232 ; CHECK: ret;
    233 	%x = call i32 @llvm.ptx.read.pm3()
    234 	ret i32 %x
    235 }
    236 
    237 define ptx_device void @test_bar_sync() {
    238 ; CHECK: bar.sync 0
    239 ; CHECK: ret;
    240 	call void @llvm.ptx.bar.sync(i32 0)
    241 	ret void
    242 }
    243 
    244 declare i32 @llvm.ptx.read.tid.x()
    245 declare i32 @llvm.ptx.read.tid.y()
    246 declare i32 @llvm.ptx.read.tid.z()
    247 declare i32 @llvm.ptx.read.tid.w()
    248 declare i32 @llvm.ptx.read.ntid.x()
    249 declare i32 @llvm.ptx.read.ntid.y()
    250 declare i32 @llvm.ptx.read.ntid.z()
    251 declare i32 @llvm.ptx.read.ntid.w()
    252 
    253 declare i32 @llvm.ptx.read.laneid()
    254 declare i32 @llvm.ptx.read.warpid()
    255 declare i32 @llvm.ptx.read.nwarpid()
    256 
    257 declare i32 @llvm.ptx.read.ctaid.x()
    258 declare i32 @llvm.ptx.read.ctaid.y()
    259 declare i32 @llvm.ptx.read.ctaid.z()
    260 declare i32 @llvm.ptx.read.ctaid.w()
    261 declare i32 @llvm.ptx.read.nctaid.x()
    262 declare i32 @llvm.ptx.read.nctaid.y()
    263 declare i32 @llvm.ptx.read.nctaid.z()
    264 declare i32 @llvm.ptx.read.nctaid.w()
    265 
    266 declare i32 @llvm.ptx.read.smid()
    267 declare i32 @llvm.ptx.read.nsmid()
    268 declare i32 @llvm.ptx.read.gridid()
    269 
    270 declare i32 @llvm.ptx.read.lanemask.eq()
    271 declare i32 @llvm.ptx.read.lanemask.le()
    272 declare i32 @llvm.ptx.read.lanemask.lt()
    273 declare i32 @llvm.ptx.read.lanemask.ge()
    274 declare i32 @llvm.ptx.read.lanemask.gt()
    275 
    276 declare i32 @llvm.ptx.read.clock()
    277 declare i64 @llvm.ptx.read.clock64()
    278 
    279 declare i32 @llvm.ptx.read.pm0()
    280 declare i32 @llvm.ptx.read.pm1()
    281 declare i32 @llvm.ptx.read.pm2()
    282 declare i32 @llvm.ptx.read.pm3()
    283 
    284 declare void @llvm.ptx.bar.sync(i32 %i)
    285