Home | History | Annotate | Download | only in NVPTX
      1 ; RUN: llc < %s -march=nvptx -mcpu=sm_20 | FileCheck %s
      2 
      3 
      4 ; CHECK: atom0
      5 define i32 @atom0(i32* %addr, i32 %val) {
      6 ; CHECK: atom.add.u32
      7   %ret = atomicrmw add i32* %addr, i32 %val seq_cst
      8   ret i32 %ret
      9 }
     10 
     11 ; CHECK: atom1
     12 define i64 @atom1(i64* %addr, i64 %val) {
     13 ; CHECK: atom.add.u64
     14   %ret = atomicrmw add i64* %addr, i64 %val seq_cst
     15   ret i64 %ret
     16 }
     17 
     18 ; CHECK: atom2
     19 define i32 @atom2(i32* %subr, i32 %val) {
     20 ; CHECK: neg.s32
     21 ; CHECK: atom.add.u32
     22   %ret = atomicrmw sub i32* %subr, i32 %val seq_cst
     23   ret i32 %ret
     24 }
     25 
     26 ; CHECK: atom3
     27 define i64 @atom3(i64* %subr, i64 %val) {
     28 ; CHECK: neg.s64
     29 ; CHECK: atom.add.u64
     30   %ret = atomicrmw sub i64* %subr, i64 %val seq_cst
     31   ret i64 %ret
     32 }
     33 
     34 ; CHECK: atom4
     35 define i32 @atom4(i32* %subr, i32 %val) {
     36 ; CHECK: atom.and.b32
     37   %ret = atomicrmw and i32* %subr, i32 %val seq_cst
     38   ret i32 %ret
     39 }
     40 
     41 ; CHECK: atom5
     42 define i64 @atom5(i64* %subr, i64 %val) {
     43 ; CHECK: atom.and.b64
     44   %ret = atomicrmw and i64* %subr, i64 %val seq_cst
     45   ret i64 %ret
     46 }
     47 
     48 ;; NAND not yet supported
     49 ;define i32 @atom6(i32* %subr, i32 %val) {
     50 ;  %ret = atomicrmw nand i32* %subr, i32 %val seq_cst
     51 ;  ret i32 %ret
     52 ;}
     53 
     54 ;define i64 @atom7(i64* %subr, i64 %val) {
     55 ;  %ret = atomicrmw nand i64* %subr, i64 %val seq_cst
     56 ;  ret i64 %ret
     57 ;}
     58 
     59 ; CHECK: atom8
     60 define i32 @atom8(i32* %subr, i32 %val) {
     61 ; CHECK: atom.or.b32
     62   %ret = atomicrmw or i32* %subr, i32 %val seq_cst
     63   ret i32 %ret
     64 }
     65 
     66 ; CHECK: atom9
     67 define i64 @atom9(i64* %subr, i64 %val) {
     68 ; CHECK: atom.or.b64
     69   %ret = atomicrmw or i64* %subr, i64 %val seq_cst
     70   ret i64 %ret
     71 }
     72 
     73 ; CHECK: atom10
     74 define i32 @atom10(i32* %subr, i32 %val) {
     75 ; CHECK: atom.xor.b32
     76   %ret = atomicrmw xor i32* %subr, i32 %val seq_cst
     77   ret i32 %ret
     78 }
     79 
     80 ; CHECK: atom11
     81 define i64 @atom11(i64* %subr, i64 %val) {
     82 ; CHECK: atom.xor.b64
     83   %ret = atomicrmw xor i64* %subr, i64 %val seq_cst
     84   ret i64 %ret
     85 }
     86 
     87 ; CHECK: atom12
     88 define i32 @atom12(i32* %subr, i32 %val) {
     89 ; CHECK: atom.max.s32
     90   %ret = atomicrmw max i32* %subr, i32 %val seq_cst
     91   ret i32 %ret
     92 }
     93 
     94 ; CHECK: atom13
     95 define i64 @atom13(i64* %subr, i64 %val) {
     96 ; CHECK: atom.max.s64
     97   %ret = atomicrmw max i64* %subr, i64 %val seq_cst
     98   ret i64 %ret
     99 }
    100 
    101 ; CHECK: atom14
    102 define i32 @atom14(i32* %subr, i32 %val) {
    103 ; CHECK: atom.min.s32
    104   %ret = atomicrmw min i32* %subr, i32 %val seq_cst
    105   ret i32 %ret
    106 }
    107 
    108 ; CHECK: atom15
    109 define i64 @atom15(i64* %subr, i64 %val) {
    110 ; CHECK: atom.min.s64
    111   %ret = atomicrmw min i64* %subr, i64 %val seq_cst
    112   ret i64 %ret
    113 }
    114 
    115 ; CHECK: atom16
    116 define i32 @atom16(i32* %subr, i32 %val) {
    117 ; CHECK: atom.max.u32
    118   %ret = atomicrmw umax i32* %subr, i32 %val seq_cst
    119   ret i32 %ret
    120 }
    121 
    122 ; CHECK: atom17
    123 define i64 @atom17(i64* %subr, i64 %val) {
    124 ; CHECK: atom.max.u64
    125   %ret = atomicrmw umax i64* %subr, i64 %val seq_cst
    126   ret i64 %ret
    127 }
    128 
    129 ; CHECK: atom18
    130 define i32 @atom18(i32* %subr, i32 %val) {
    131 ; CHECK: atom.min.u32
    132   %ret = atomicrmw umin i32* %subr, i32 %val seq_cst
    133   ret i32 %ret
    134 }
    135 
    136 ; CHECK: atom19
    137 define i64 @atom19(i64* %subr, i64 %val) {
    138 ; CHECK: atom.min.u64
    139   %ret = atomicrmw umin i64* %subr, i64 %val seq_cst
    140   ret i64 %ret
    141 }
    142