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 -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: {{^}}test_udiv: 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: s_bfe_u32 40;GCN: s_bfe_u32 41;GCN: s_bfe_u32 42;GCN: s_bfe_u32 43;GCN: s_bfe_u32 44;GCN: s_bfe_u32 45;GCN: s_bfe_u32 46;GCN: s_bfe_u32 47;GCN: s_bfe_u32 48;GCN: s_bfe_u32 49;GCN: s_bfe_u32 50;GCN: s_bfe_u32 51;GCN: s_bfe_u32 52;GCN: s_bfe_u32 53;GCN: s_bfe_u32 54;GCN: s_bfe_u32 55;GCN: s_bfe_u32 56;GCN: s_bfe_u32 57;GCN: s_bfe_u32 58;GCN: s_bfe_u32 59;GCN: s_bfe_u32 60;GCN: s_bfe_u32 61;GCN: s_bfe_u32 62;GCN: s_bfe_u32 63;GCN: s_bfe_u32 64;GCN: s_bfe_u32 65;GCN: s_bfe_u32 66;GCN: s_bfe_u32 67;GCN: s_bfe_u32 68;GCN: s_bfe_u32 69;GCN-NOT: v_mad_f32 70;SI-NOT: v_lshr_b64 71;VI-NOT: v_lshrrev_b64 72;GCN: s_endpgm 73define void @test_udiv(i64 addrspace(1)* %out, i64 %x, i64 %y) { 74 %result = udiv i64 %x, %y 75 store i64 %result, i64 addrspace(1)* %out 76 ret void 77} 78 79;FUNC-LABEL: {{^}}test_urem: 80;EG: RECIP_UINT 81;EG: BFE_UINT 82;EG: BFE_UINT 83;EG: BFE_UINT 84;EG: BFE_UINT 85;EG: BFE_UINT 86;EG: BFE_UINT 87;EG: BFE_UINT 88;EG: BFE_UINT 89;EG: BFE_UINT 90;EG: BFE_UINT 91;EG: BFE_UINT 92;EG: BFE_UINT 93;EG: BFE_UINT 94;EG: BFE_UINT 95;EG: BFE_UINT 96;EG: BFE_UINT 97;EG: BFE_UINT 98;EG: BFE_UINT 99;EG: BFE_UINT 100;EG: BFE_UINT 101;EG: BFE_UINT 102;EG: BFE_UINT 103;EG: BFE_UINT 104;EG: BFE_UINT 105;EG: BFE_UINT 106;EG: BFE_UINT 107;EG: BFE_UINT 108;EG: BFE_UINT 109;EG: BFE_UINT 110;EG: BFE_UINT 111;EG: AND_INT {{.*}}, 1, 112 113;GCN: s_bfe_u32 114;GCN: s_bfe_u32 115;GCN: s_bfe_u32 116;GCN: s_bfe_u32 117;GCN: s_bfe_u32 118;GCN: s_bfe_u32 119;GCN: s_bfe_u32 120;GCN: s_bfe_u32 121;GCN: s_bfe_u32 122;GCN: s_bfe_u32 123;GCN: s_bfe_u32 124;GCN: s_bfe_u32 125;GCN: s_bfe_u32 126;GCN: s_bfe_u32 127;GCN: s_bfe_u32 128;GCN: s_bfe_u32 129;GCN: s_bfe_u32 130;GCN: s_bfe_u32 131;GCN: s_bfe_u32 132;GCN: s_bfe_u32 133;GCN: s_bfe_u32 134;GCN: s_bfe_u32 135;GCN: s_bfe_u32 136;GCN: s_bfe_u32 137;GCN: s_bfe_u32 138;GCN: s_bfe_u32 139;GCN: s_bfe_u32 140;GCN: s_bfe_u32 141;GCN: s_bfe_u32 142;GCN: s_bfe_u32 143;GCN-NOT: v_mad_f32 144;SI-NOT: v_lshr_b64 145;VI-NOT: v_lshrrev_b64 146;GCN: s_endpgm 147define void @test_urem(i64 addrspace(1)* %out, i64 %x, i64 %y) { 148 %result = urem i64 %x, %y 149 store i64 %result, i64 addrspace(1)* %out 150 ret void 151} 152 153;FUNC-LABEL: {{^}}test_udiv3264: 154;EG: RECIP_UINT 155;EG-NOT: BFE_UINT 156 157;GCN-NOT: s_bfe_u32 158;GCN-NOT: v_mad_f32 159;SI-NOT: v_lshr_b64 160;VI-NOT: v_lshrrev_b64 161;GCN: s_endpgm 162define void @test_udiv3264(i64 addrspace(1)* %out, i64 %x, i64 %y) { 163 %1 = lshr i64 %x, 33 164 %2 = lshr i64 %y, 33 165 %result = udiv i64 %1, %2 166 store i64 %result, i64 addrspace(1)* %out 167 ret void 168} 169 170;FUNC-LABEL: {{^}}test_urem3264: 171;EG: RECIP_UINT 172;EG-NOT: BFE_UINT 173 174;GCN-NOT: s_bfe_u32 175;GCN-NOT: v_mad_f32 176;SI-NOT: v_lshr_b64 177;VI-NOT: v_lshrrev_b64 178;GCN: s_endpgm 179define void @test_urem3264(i64 addrspace(1)* %out, i64 %x, i64 %y) { 180 %1 = lshr i64 %x, 33 181 %2 = lshr i64 %y, 33 182 %result = urem i64 %1, %2 183 store i64 %result, i64 addrspace(1)* %out 184 ret void 185} 186 187;FUNC-LABEL: {{^}}test_udiv2364: 188;EG: UINT_TO_FLT 189;EG: UINT_TO_FLT 190;EG: FLT_TO_UINT 191;EG-NOT: RECIP_UINT 192;EG-NOT: BFE_UINT 193 194;SI-NOT: v_lshr_b64 195;VI-NOT: v_lshrrev_b64 196;GCN: v_mad_f32 197;GCN: s_endpgm 198define void @test_udiv2364(i64 addrspace(1)* %out, i64 %x, i64 %y) { 199 %1 = lshr i64 %x, 41 200 %2 = lshr i64 %y, 41 201 %result = udiv i64 %1, %2 202 store i64 %result, i64 addrspace(1)* %out 203 ret void 204} 205 206;FUNC-LABEL: {{^}}test_urem2364: 207;EG: UINT_TO_FLT 208;EG: UINT_TO_FLT 209;EG: FLT_TO_UINT 210;EG-NOT: RECIP_UINT 211;EG-NOT: BFE_UINT 212 213;SI-NOT: v_lshr_b64 214;VI-NOT: v_lshrrev_b64 215;GCN: v_mad_f32 216;GCN: s_endpgm 217define void @test_urem2364(i64 addrspace(1)* %out, i64 %x, i64 %y) { 218 %1 = lshr i64 %x, 41 219 %2 = lshr i64 %y, 41 220 %result = urem i64 %1, %2 221 store i64 %result, i64 addrspace(1)* %out 222 ret void 223} 224