Home | History | Annotate | Download | only in AMDGPU
      1 ;RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs < %s | FileCheck --check-prefix=SI --check-prefix=GCN --check-prefix=FUNC %s
      2 ;RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck --check-prefix=VI --check-prefix=GCN --check-prefix=FUNC %s
      3 ;RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck --check-prefix=EG --check-prefix=FUNC %s
      4 
      5 ;FUNC-LABEL: {{^}}test_udiv:
      6 ;EG: RECIP_UINT
      7 ;EG: LSHL {{.*}}, 1,
      8 ;EG: BFE_UINT
      9 ;EG: BFE_UINT
     10 ;EG: BFE_UINT
     11 ;EG: BFE_UINT
     12 ;EG: BFE_UINT
     13 ;EG: BFE_UINT
     14 ;EG: BFE_UINT
     15 ;EG: BFE_UINT
     16 ;EG: BFE_UINT
     17 ;EG: BFE_UINT
     18 ;EG: BFE_UINT
     19 ;EG: BFE_UINT
     20 ;EG: BFE_UINT
     21 ;EG: BFE_UINT
     22 ;EG: BFE_UINT
     23 ;EG: BFE_UINT
     24 ;EG: BFE_UINT
     25 ;EG: BFE_UINT
     26 ;EG: BFE_UINT
     27 ;EG: BFE_UINT
     28 ;EG: BFE_UINT
     29 ;EG: BFE_UINT
     30 ;EG: BFE_UINT
     31 ;EG: BFE_UINT
     32 ;EG: BFE_UINT
     33 ;EG: BFE_UINT
     34 ;EG: BFE_UINT
     35 ;EG: BFE_UINT
     36 ;EG: BFE_UINT
     37 ;EG: BFE_UINT
     38 
     39 ;GCN: s_bfe_u32
     40 ;GCN: s_bfe_u32
     41 ;GCN: s_bfe_u32
     42 ;GCN: s_bfe_u32
     43 ;GCN: s_bfe_u32
     44 ;GCN: s_bfe_u32
     45 ;GCN: s_bfe_u32
     46 ;GCN: s_bfe_u32
     47 ;GCN: s_bfe_u32
     48 ;GCN: s_bfe_u32
     49 ;GCN: s_bfe_u32
     50 ;GCN: s_bfe_u32
     51 ;GCN: s_bfe_u32
     52 ;GCN: s_bfe_u32
     53 ;GCN: s_bfe_u32
     54 ;GCN: s_bfe_u32
     55 ;GCN: s_bfe_u32
     56 ;GCN: s_bfe_u32
     57 ;GCN: s_bfe_u32
     58 ;GCN: s_bfe_u32
     59 ;GCN: s_bfe_u32
     60 ;GCN: s_bfe_u32
     61 ;GCN: s_bfe_u32
     62 ;GCN: s_bfe_u32
     63 ;GCN: s_bfe_u32
     64 ;GCN: s_bfe_u32
     65 ;GCN: s_bfe_u32
     66 ;GCN: s_bfe_u32
     67 ;GCN: s_bfe_u32
     68 ;GCN: s_bfe_u32
     69 ;GCN-NOT: v_mad_f32
     70 ;SI-NOT: v_lshr_b64
     71 ;VI-NOT: v_lshrrev_b64
     72 ;GCN: s_endpgm
     73 define void @test_udiv(i64 addrspace(1)* %out, i64 %x, i64 %y) {
     74   %result = udiv i64 %x, %y
     75   store i64 %result, i64 addrspace(1)* %out
     76   ret void
     77 }
     78 
     79 ;FUNC-LABEL: {{^}}test_urem:
     80 ;EG: RECIP_UINT
     81 ;EG: BFE_UINT
     82 ;EG: BFE_UINT
     83 ;EG: BFE_UINT
     84 ;EG: BFE_UINT
     85 ;EG: BFE_UINT
     86 ;EG: BFE_UINT
     87 ;EG: BFE_UINT
     88 ;EG: BFE_UINT
     89 ;EG: BFE_UINT
     90 ;EG: BFE_UINT
     91 ;EG: BFE_UINT
     92 ;EG: BFE_UINT
     93 ;EG: BFE_UINT
     94 ;EG: BFE_UINT
     95 ;EG: BFE_UINT
     96 ;EG: BFE_UINT
     97 ;EG: BFE_UINT
     98 ;EG: BFE_UINT
     99 ;EG: BFE_UINT
    100 ;EG: BFE_UINT
    101 ;EG: BFE_UINT
    102 ;EG: BFE_UINT
    103 ;EG: BFE_UINT
    104 ;EG: BFE_UINT
    105 ;EG: BFE_UINT
    106 ;EG: BFE_UINT
    107 ;EG: BFE_UINT
    108 ;EG: BFE_UINT
    109 ;EG: BFE_UINT
    110 ;EG: BFE_UINT
    111 ;EG: AND_INT {{.*}}, 1,
    112 
    113 ;GCN: s_bfe_u32
    114 ;GCN: s_bfe_u32
    115 ;GCN: s_bfe_u32
    116 ;GCN: s_bfe_u32
    117 ;GCN: s_bfe_u32
    118 ;GCN: s_bfe_u32
    119 ;GCN: s_bfe_u32
    120 ;GCN: s_bfe_u32
    121 ;GCN: s_bfe_u32
    122 ;GCN: s_bfe_u32
    123 ;GCN: s_bfe_u32
    124 ;GCN: s_bfe_u32
    125 ;GCN: s_bfe_u32
    126 ;GCN: s_bfe_u32
    127 ;GCN: s_bfe_u32
    128 ;GCN: s_bfe_u32
    129 ;GCN: s_bfe_u32
    130 ;GCN: s_bfe_u32
    131 ;GCN: s_bfe_u32
    132 ;GCN: s_bfe_u32
    133 ;GCN: s_bfe_u32
    134 ;GCN: s_bfe_u32
    135 ;GCN: s_bfe_u32
    136 ;GCN: s_bfe_u32
    137 ;GCN: s_bfe_u32
    138 ;GCN: s_bfe_u32
    139 ;GCN: s_bfe_u32
    140 ;GCN: s_bfe_u32
    141 ;GCN: s_bfe_u32
    142 ;GCN: s_bfe_u32
    143 ;GCN-NOT: v_mad_f32
    144 ;SI-NOT: v_lshr_b64
    145 ;VI-NOT: v_lshrrev_b64
    146 ;GCN: s_endpgm
    147 define void @test_urem(i64 addrspace(1)* %out, i64 %x, i64 %y) {
    148   %result = urem i64 %x, %y
    149   store i64 %result, i64 addrspace(1)* %out
    150   ret void
    151 }
    152 
    153 ;FUNC-LABEL: {{^}}test_udiv3264:
    154 ;EG: RECIP_UINT
    155 ;EG-NOT: BFE_UINT
    156 
    157 ;GCN-NOT: s_bfe_u32
    158 ;GCN-NOT: v_mad_f32
    159 ;SI-NOT: v_lshr_b64
    160 ;VI-NOT: v_lshrrev_b64
    161 ;GCN: s_endpgm
    162 define void @test_udiv3264(i64 addrspace(1)* %out, i64 %x, i64 %y) {
    163   %1 = lshr i64 %x, 33
    164   %2 = lshr i64 %y, 33
    165   %result = udiv i64 %1, %2
    166   store i64 %result, i64 addrspace(1)* %out
    167   ret void
    168 }
    169 
    170 ;FUNC-LABEL: {{^}}test_urem3264:
    171 ;EG: RECIP_UINT
    172 ;EG-NOT: BFE_UINT
    173 
    174 ;GCN-NOT: s_bfe_u32
    175 ;GCN-NOT: v_mad_f32
    176 ;SI-NOT: v_lshr_b64
    177 ;VI-NOT: v_lshrrev_b64
    178 ;GCN: s_endpgm
    179 define void @test_urem3264(i64 addrspace(1)* %out, i64 %x, i64 %y) {
    180   %1 = lshr i64 %x, 33
    181   %2 = lshr i64 %y, 33
    182   %result = urem i64 %1, %2
    183   store i64 %result, i64 addrspace(1)* %out
    184   ret void
    185 }
    186 
    187 ;FUNC-LABEL: {{^}}test_udiv2464:
    188 ;EG: UINT_TO_FLT
    189 ;EG: UINT_TO_FLT
    190 ;EG: FLT_TO_UINT
    191 ;EG-NOT: RECIP_UINT
    192 ;EG-NOT: BFE_UINT
    193 
    194 ;SI-NOT: v_lshr_b64
    195 ;VI-NOT: v_lshrrev_b64
    196 ;GCN: v_mad_f32
    197 ;GCN: s_endpgm
    198 define void @test_udiv2464(i64 addrspace(1)* %out, i64 %x, i64 %y) {
    199   %1 = lshr i64 %x, 40
    200   %2 = lshr i64 %y, 40
    201   %result = udiv i64 %1, %2
    202   store i64 %result, i64 addrspace(1)* %out
    203   ret void
    204 }
    205 
    206 ;FUNC-LABEL: {{^}}test_urem2464:
    207 ;EG: UINT_TO_FLT
    208 ;EG: UINT_TO_FLT
    209 ;EG: FLT_TO_UINT
    210 ;EG-NOT: RECIP_UINT
    211 ;EG-NOT: BFE_UINT
    212 
    213 ;SI-NOT: v_lshr_b64
    214 ;VI-NOT: v_lshrrev_b64
    215 ;GCN: v_mad_f32
    216 ;GCN: s_endpgm
    217 define void @test_urem2464(i64 addrspace(1)* %out, i64 %x, i64 %y) {
    218   %1 = lshr i64 %x, 40
    219   %2 = lshr i64 %y, 40
    220   %result = urem i64 %1, %2
    221   store i64 %result, i64 addrspace(1)* %out
    222   ret void
    223 }
    224