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 46define 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 93define 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 108define 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 125define 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 145define 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 165define 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