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