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=amdgcn -mcpu=gfx900 -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck --check-prefix=VI --check-prefix=GCN --check-prefix=FUNC %s
      4 ;RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck --check-prefix=EG --check-prefix=FUNC %s
      5 
      6 ;FUNC-LABEL: {{^}}test_udiv:
      7 ;EG: RECIP_UINT
      8 ;EG: LSHL {{.*}}, 1,
      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 ;EG: BFE_UINT
     39 
     40 ;GCN: v_mac_f32_e32 v{{[0-9]+}}, 0x4f800000,
     41 ;GCN: v_rcp_f32_e32
     42 ;GCN: v_mul_f32_e32 v{{[0-9]+}}, 0x5f7ffffc
     43 ;GCN: v_mul_f32_e32 v{{[0-9]+}}, 0x2f800000
     44 ;GCN: v_trunc_f32_e32
     45 ;GCN: v_mac_f32_e32 v{{[0-9]+}}, 0xcf800000
     46 ;GCN: s_endpgm
     47 define amdgpu_kernel void @test_udiv(i64 addrspace(1)* %out, i64 %x, i64 %y) {
     48   %result = udiv i64 %x, %y
     49   store i64 %result, i64 addrspace(1)* %out
     50   ret void
     51 }
     52 
     53 ;FUNC-LABEL: {{^}}test_urem:
     54 ;EG: RECIP_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: BFE_UINT
     85 ;EG: AND_INT {{.*}}, 1,
     86 
     87 ;GCN: v_mac_f32_e32 v{{[0-9]+}}, 0x4f800000,
     88 ;GCN: v_rcp_f32_e32
     89 ;GCN: v_mul_f32_e32 v{{[0-9]+}}, 0x5f7ffffc
     90 ;GCN: v_mul_f32_e32 v{{[0-9]+}}, 0x2f800000
     91 ;GCN: v_trunc_f32_e32
     92 ;GCN: v_mac_f32_e32 v{{[0-9]+}}, 0xcf800000
     93 ;GCN: s_endpgm
     94 define amdgpu_kernel void @test_urem(i64 addrspace(1)* %out, i64 %x, i64 %y) {
     95   %result = urem i64 %x, %y
     96   store i64 %result, i64 addrspace(1)* %out
     97   ret void
     98 }
     99 
    100 ;FUNC-LABEL: {{^}}test_udiv3264:
    101 ;EG: RECIP_UINT
    102 ;EG-NOT: BFE_UINT
    103 
    104 ;GCN-NOT: s_bfe_u32
    105 ;GCN-NOT: v_mad_f32
    106 ;SI-NOT: v_lshr_b64
    107 ;VI-NOT: v_lshrrev_b64
    108 ;GCN: s_endpgm
    109 define amdgpu_kernel void @test_udiv3264(i64 addrspace(1)* %out, i64 %x, i64 %y) {
    110   %1 = lshr i64 %x, 33
    111   %2 = lshr i64 %y, 33
    112   %result = udiv i64 %1, %2
    113   store i64 %result, i64 addrspace(1)* %out
    114   ret void
    115 }
    116 
    117 ;FUNC-LABEL: {{^}}test_urem3264:
    118 ;EG: RECIP_UINT
    119 ;EG-NOT: BFE_UINT
    120 
    121 ;GCN-NOT: s_bfe_u32
    122 ;GCN-NOT: v_mad_f32
    123 ;SI-NOT: v_lshr_b64
    124 ;VI-NOT: v_lshrrev_b64
    125 ;GCN: s_endpgm
    126 define amdgpu_kernel void @test_urem3264(i64 addrspace(1)* %out, i64 %x, i64 %y) {
    127   %1 = lshr i64 %x, 33
    128   %2 = lshr i64 %y, 33
    129   %result = urem i64 %1, %2
    130   store i64 %result, i64 addrspace(1)* %out
    131   ret void
    132 }
    133 
    134 ;FUNC-LABEL: {{^}}test_udiv2364:
    135 ;EG: UINT_TO_FLT
    136 ;EG: UINT_TO_FLT
    137 ;EG: FLT_TO_UINT
    138 ;EG-NOT: RECIP_UINT
    139 ;EG-NOT: BFE_UINT
    140 
    141 ;SI-NOT: v_lshr_b64
    142 ;VI-NOT: v_lshrrev_b64
    143 ;GCN: v_mad_f32
    144 ;GCN: s_endpgm
    145 define amdgpu_kernel void @test_udiv2364(i64 addrspace(1)* %out, i64 %x, i64 %y) {
    146   %1 = lshr i64 %x, 41
    147   %2 = lshr i64 %y, 41
    148   %result = udiv i64 %1, %2
    149   store i64 %result, i64 addrspace(1)* %out
    150   ret void
    151 }
    152 
    153 ;FUNC-LABEL: {{^}}test_urem2364:
    154 ;EG: UINT_TO_FLT
    155 ;EG: UINT_TO_FLT
    156 ;EG: FLT_TO_UINT
    157 ;EG-NOT: RECIP_UINT
    158 ;EG-NOT: BFE_UINT
    159 
    160 ;SI-NOT: v_lshr_b64
    161 ;VI-NOT: v_lshrrev_b64
    162 ;GCN: v_mad_f32
    163 ;GCN: s_endpgm
    164 define amdgpu_kernel void @test_urem2364(i64 addrspace(1)* %out, i64 %x, i64 %y) {
    165   %1 = lshr i64 %x, 41
    166   %2 = lshr i64 %y, 41
    167   %result = urem i64 %1, %2
    168   store i64 %result, i64 addrspace(1)* %out
    169   ret void
    170 }
    171