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