Home | History | Annotate | Download | only in AMDGPU
      1 ;RUN: llc -march=amdgcn -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: {{^}}s_test_sdiv:
      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 @s_test_sdiv(i64 addrspace(1)* %out, i64 %x, i64 %y) {
     74   %result = sdiv i64 %x, %y
     75   store i64 %result, i64 addrspace(1)* %out
     76   ret void
     77 }
     78 
     79 ;FUNC-LABEL: {{^}}s_test_srem:
     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 @s_test_srem(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_sdiv3264:
    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_sdiv3264(i64 addrspace(1)* %out, i64 %x, i64 %y) {
    163   %1 = ashr i64 %x, 33
    164   %2 = ashr i64 %y, 33
    165   %result = sdiv i64 %1, %2
    166   store i64 %result, i64 addrspace(1)* %out
    167   ret void
    168 }
    169 
    170 ;FUNC-LABEL: {{^}}test_srem3264:
    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_srem3264(i64 addrspace(1)* %out, i64 %x, i64 %y) {
    180   %1 = ashr i64 %x, 33
    181   %2 = ashr i64 %y, 33
    182   %result = srem i64 %1, %2
    183   store i64 %result, i64 addrspace(1)* %out
    184   ret void
    185 }
    186 
    187 ;FUNC-LABEL: {{^}}test_sdiv2464:
    188 ;EG: INT_TO_FLT
    189 ;EG: INT_TO_FLT
    190 ;EG: FLT_TO_INT
    191 ;EG-NOT: RECIP_UINT
    192 ;EG-NOT: BFE_UINT
    193 
    194 ;GCN-NOT: s_bfe_u32
    195 ;GCN: v_mad_f32
    196 ;SI-NOT: v_lshr_b64
    197 ;VI-NOT: v_lshrrev_b64
    198 ;GCN: s_endpgm
    199 define void @test_sdiv2464(i64 addrspace(1)* %out, i64 %x, i64 %y) {
    200   %1 = ashr i64 %x, 40
    201   %2 = ashr i64 %y, 40
    202   %result = sdiv i64 %1, %2
    203   store i64 %result, i64 addrspace(1)* %out
    204   ret void
    205 }
    206 
    207 ;FUNC-LABEL: {{^}}test_srem2464:
    208 ;EG: INT_TO_FLT
    209 ;EG: INT_TO_FLT
    210 ;EG: FLT_TO_INT
    211 ;EG-NOT: RECIP_UINT
    212 ;EG-NOT: BFE_UINT
    213 
    214 ;GCN-NOT: s_bfe_u32
    215 ;GCN: v_mad_f32
    216 ;SI-NOT: v_lshr_b64
    217 ;VI-NOT: v_lshrrev_b64
    218 ;GCN: s_endpgm
    219 define void @test_srem2464(i64 addrspace(1)* %out, i64 %x, i64 %y) {
    220   %1 = ashr i64 %x, 40
    221   %2 = ashr i64 %y, 40
    222   %result = srem i64 %1, %2
    223   store i64 %result, i64 addrspace(1)* %out
    224   ret void
    225 }
    226