1;RUN: llc -march=amdgcn -mcpu=SI -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_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_bfe_u32 40;GCN: v_bfe_u32 41;GCN: v_bfe_u32 42;GCN: v_bfe_u32 43;GCN: v_bfe_u32 44;GCN: v_bfe_u32 45;GCN: v_bfe_u32 46;GCN: v_bfe_u32 47;GCN: v_bfe_u32 48;GCN: v_bfe_u32 49;GCN: v_bfe_u32 50;GCN: v_bfe_u32 51;GCN: v_bfe_u32 52;GCN: v_bfe_u32 53;GCN: v_bfe_u32 54;GCN: v_bfe_u32 55;GCN: v_bfe_u32 56;GCN: v_bfe_u32 57;GCN: v_bfe_u32 58;GCN: v_bfe_u32 59;GCN: v_bfe_u32 60;GCN: v_bfe_u32 61;GCN: v_bfe_u32 62;GCN: v_bfe_u32 63;GCN: v_bfe_u32 64;GCN: v_bfe_u32 65;GCN: v_bfe_u32 66;GCN: v_bfe_u32 67;GCN: v_bfe_u32 68;GCN: v_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_sdiv(i64 addrspace(1)* %out, i64 %x, i64 %y) { 74 %result = sdiv i64 %x, %y 75 store i64 %result, i64 addrspace(1)* %out 76 ret void 77} 78 79;FUNC-LABEL: {{^}}test_srem: 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_srem(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_sdiv3264: 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_sdiv3264(i64 addrspace(1)* %out, i64 %x, i64 %y) { 163 %1 = ashr i64 %x, 33 164 %2 = ashr i64 %y, 33 165 %result = sdiv i64 %1, %2 166 store i64 %result, i64 addrspace(1)* %out 167 ret void 168} 169 170;FUNC-LABEL: {{^}}test_srem3264: 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_srem3264(i64 addrspace(1)* %out, i64 %x, i64 %y) { 180 %1 = ashr i64 %x, 33 181 %2 = ashr i64 %y, 33 182 %result = srem i64 %1, %2 183 store i64 %result, i64 addrspace(1)* %out 184 ret void 185} 186 187;FUNC-LABEL: {{^}}test_sdiv2464: 188;EG: INT_TO_FLT 189;EG: INT_TO_FLT 190;EG: FLT_TO_INT 191;EG-NOT: RECIP_UINT 192;EG-NOT: BFE_UINT 193 194;GCN-NOT: s_bfe_u32 195;GCN: v_mad_f32 196;SI-NOT: v_lshr_b64 197;VI-NOT: v_lshrrev_b64 198;GCN: s_endpgm 199define void @test_sdiv2464(i64 addrspace(1)* %out, i64 %x, i64 %y) { 200 %1 = ashr i64 %x, 40 201 %2 = ashr i64 %y, 40 202 %result = sdiv i64 %1, %2 203 store i64 %result, i64 addrspace(1)* %out 204 ret void 205} 206 207;FUNC-LABEL: {{^}}test_srem2464: 208;EG: INT_TO_FLT 209;EG: INT_TO_FLT 210;EG: FLT_TO_INT 211;EG-NOT: RECIP_UINT 212;EG-NOT: BFE_UINT 213 214;GCN-NOT: s_bfe_u32 215;GCN: v_mad_f32 216;SI-NOT: v_lshr_b64 217;VI-NOT: v_lshrrev_b64 218;GCN: s_endpgm 219define void @test_srem2464(i64 addrspace(1)* %out, i64 %x, i64 %y) { 220 %1 = ashr i64 %x, 40 221 %2 = ashr i64 %y, 40 222 %result = srem i64 %1, %2 223 store i64 %result, i64 addrspace(1)* %out 224 ret void 225} 226