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 47define 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 94define 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 109define 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 126define 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 145define 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 164define 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