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 -mattr=-flat-for-global -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: v_mac_f32_e32 v{{[0-9]+}}, 0x4f800000,
     40 ;GCN: v_rcp_f32_e32
     41 ;GCN: v_mul_f32_e32 v{{[0-9]+}}, 0x5f7ffffc
     42 ;GCN: v_mul_f32_e32 v{{[0-9]+}}, 0x2f800000
     43 ;GCN: v_trunc_f32_e32
     44 ;GCN: v_mac_f32_e32 v{{[0-9]+}}, 0xcf800000
     45 ;GCN: s_endpgm
     46 define amdgpu_kernel void @s_test_sdiv(i64 addrspace(1)* %out, i64 %x, i64 %y) {
     47   %result = sdiv i64 %x, %y
     48   store i64 %result, i64 addrspace(1)* %out
     49   ret void
     50 }
     51 
     52 ;FUNC-LABEL: {{^}}s_test_srem:
     53 ;EG: RECIP_UINT
     54 ;EG: BFE_UINT
     55 ;EG: BFE_UINT
     56 ;EG: BFE_UINT
     57 ;EG: BFE_UINT
     58 ;EG: BFE_UINT
     59 ;EG: BFE_UINT
     60 ;EG: BFE_UINT
     61 ;EG: BFE_UINT
     62 ;EG: BFE_UINT
     63 ;EG: BFE_UINT
     64 ;EG: BFE_UINT
     65 ;EG: BFE_UINT
     66 ;EG: BFE_UINT
     67 ;EG: BFE_UINT
     68 ;EG: BFE_UINT
     69 ;EG: BFE_UINT
     70 ;EG: BFE_UINT
     71 ;EG: BFE_UINT
     72 ;EG: BFE_UINT
     73 ;EG: BFE_UINT
     74 ;EG: BFE_UINT
     75 ;EG: BFE_UINT
     76 ;EG: BFE_UINT
     77 ;EG: BFE_UINT
     78 ;EG: BFE_UINT
     79 ;EG: BFE_UINT
     80 ;EG: BFE_UINT
     81 ;EG: BFE_UINT
     82 ;EG: BFE_UINT
     83 ;EG: BFE_UINT
     84 ;EG: AND_INT {{.*}}, 1,
     85 
     86 ;GCN: v_mac_f32_e32 v{{[0-9]+}}, 0x4f800000,
     87 ;GCN: v_rcp_f32_e32
     88 ;GCN: v_mul_f32_e32 v{{[0-9]+}}, 0x5f7ffffc
     89 ;GCN: v_mul_f32_e32 v{{[0-9]+}}, 0x2f800000
     90 ;GCN: v_trunc_f32_e32
     91 ;GCN: v_mac_f32_e32 v{{[0-9]+}}, 0xcf800000
     92 ;GCN: s_endpgm
     93 define amdgpu_kernel void @s_test_srem(i64 addrspace(1)* %out, i64 %x, i64 %y) {
     94   %result = urem i64 %x, %y
     95   store i64 %result, i64 addrspace(1)* %out
     96   ret void
     97 }
     98 
     99 ;FUNC-LABEL: {{^}}test_sdiv3264:
    100 ;EG: RECIP_UINT
    101 ;EG-NOT: BFE_UINT
    102 
    103 ;GCN-NOT: s_bfe_u32
    104 ;GCN-NOT: v_mad_f32
    105 ;SI-NOT: v_lshr_b64
    106 ;VI-NOT: v_lshrrev_b64
    107 ;GCN: s_endpgm
    108 define amdgpu_kernel void @test_sdiv3264(i64 addrspace(1)* %out, i64 %x, i64 %y) {
    109   %1 = ashr i64 %x, 33
    110   %2 = ashr i64 %y, 33
    111   %result = sdiv i64 %1, %2
    112   store i64 %result, i64 addrspace(1)* %out
    113   ret void
    114 }
    115 
    116 ;FUNC-LABEL: {{^}}test_srem3264:
    117 ;EG: RECIP_UINT
    118 ;EG-NOT: BFE_UINT
    119 
    120 ;GCN-NOT: s_bfe_u32
    121 ;GCN-NOT: v_mad_f32
    122 ;SI-NOT: v_lshr_b64
    123 ;VI-NOT: v_lshrrev_b64
    124 ;GCN: s_endpgm
    125 define amdgpu_kernel void @test_srem3264(i64 addrspace(1)* %out, i64 %x, i64 %y) {
    126   %1 = ashr i64 %x, 33
    127   %2 = ashr i64 %y, 33
    128   %result = srem i64 %1, %2
    129   store i64 %result, i64 addrspace(1)* %out
    130   ret void
    131 }
    132 
    133 ;FUNC-LABEL: {{^}}test_sdiv2464:
    134 ;EG: INT_TO_FLT
    135 ;EG: INT_TO_FLT
    136 ;EG: FLT_TO_INT
    137 ;EG-NOT: RECIP_UINT
    138 ;EG-NOT: BFE_UINT
    139 
    140 ;GCN-NOT: s_bfe_u32
    141 ;GCN: v_mad_f32
    142 ;SI-NOT: v_lshr_b64
    143 ;VI-NOT: v_lshrrev_b64
    144 ;GCN: s_endpgm
    145 define amdgpu_kernel void @test_sdiv2464(i64 addrspace(1)* %out, i64 %x, i64 %y) {
    146   %1 = ashr i64 %x, 40
    147   %2 = ashr i64 %y, 40
    148   %result = sdiv i64 %1, %2
    149   store i64 %result, i64 addrspace(1)* %out
    150   ret void
    151 }
    152 
    153 ;FUNC-LABEL: {{^}}test_srem2464:
    154 ;EG: INT_TO_FLT
    155 ;EG: INT_TO_FLT
    156 ;EG: FLT_TO_INT
    157 ;EG-NOT: RECIP_UINT
    158 ;EG-NOT: BFE_UINT
    159 
    160 ;GCN-NOT: s_bfe_u32
    161 ;GCN: v_mad_f32
    162 ;SI-NOT: v_lshr_b64
    163 ;VI-NOT: v_lshrrev_b64
    164 ;GCN: s_endpgm
    165 define amdgpu_kernel void @test_srem2464(i64 addrspace(1)* %out, i64 %x, i64 %y) {
    166   %1 = ashr i64 %x, 40
    167   %2 = ashr i64 %y, 40
    168   %result = srem i64 %1, %2
    169   store i64 %result, i64 addrspace(1)* %out
    170   ret void
    171 }
    172