Skip to content

Commit d3d09a7

Browse files
chrisjbrismahesh-attarde
authored andcommitted
Revert "[AMDGPU] Recognise bitmask operations as srcmods" (llvm#150000)
Reverts llvm#149110 due to various buildbot failures.
1 parent 67cf94a commit d3d09a7

File tree

5 files changed

+282
-1232
lines changed

5 files changed

+282
-1232
lines changed

llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -3059,38 +3059,6 @@ bool AMDGPUDAGToDAGISel::SelectVOP3ModsImpl(SDValue In, SDValue &Src,
30593059
Src = Src.getOperand(0);
30603060
}
30613061

3062-
// Convert various sign-bit masks to src mods. Currently disabled for 16-bit
3063-
// types as the codegen replaces the operand without adding a srcmod.
3064-
// This is intentionally finding the cases where we are performing float neg
3065-
// and abs on int types, the goal is not to obtain two's complement neg or
3066-
// abs.
3067-
// TODO: Add 16-bit support.
3068-
unsigned Opc = Src->getOpcode();
3069-
EVT VT = Src.getValueType();
3070-
if ((Opc != ISD::AND && Opc != ISD::OR && Opc != ISD::XOR) ||
3071-
(VT != MVT::i32 && VT != MVT::v2i32 && VT != MVT::i64))
3072-
return true;
3073-
3074-
ConstantSDNode *CRHS = dyn_cast<ConstantSDNode>(Src->getOperand(1));
3075-
if (!CRHS)
3076-
return true;
3077-
3078-
// Recognise (xor a, 0x80000000) as NEG SrcMod.
3079-
// Recognise (and a, 0x7fffffff) as ABS SrcMod.
3080-
// Recognise (or a, 0x80000000) as NEG+ABS SrcModifiers.
3081-
if (Opc == ISD::XOR && CRHS->getAPIntValue().isSignMask()) {
3082-
Mods |= SISrcMods::NEG;
3083-
Src = Src.getOperand(0);
3084-
} else if (Opc == ISD::AND && AllowAbs &&
3085-
CRHS->getAPIntValue().isMaxSignedValue()) {
3086-
Mods |= SISrcMods::ABS;
3087-
Src = Src.getOperand(0);
3088-
} else if (Opc == ISD::OR && AllowAbs && CRHS->getAPIntValue().isSignMask()) {
3089-
Mods |= SISrcMods::ABS;
3090-
Mods |= SISrcMods::NEG;
3091-
Src = Src.getOperand(0);
3092-
}
3093-
30943062
return true;
30953063
}
30963064

llvm/test/CodeGen/AMDGPU/fneg-modifier-casting.ll

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -349,24 +349,29 @@ define i32 @select_fneg_xor_select_i32(i1 %cond0, i1 %cond1, i32 %arg0, i32 %arg
349349
; GCN: ; %bb.0:
350350
; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
351351
; GCN-NEXT: v_and_b32_e32 v0, 1, v0
352-
; GCN-NEXT: v_and_b32_e32 v1, 1, v1
352+
; GCN-NEXT: v_xor_b32_e32 v2, 0x80000000, v2
353353
; GCN-NEXT: v_cmp_eq_u32_e32 vcc, 1, v0
354-
; GCN-NEXT: v_cndmask_b32_e64 v0, -v2, v3, vcc
354+
; GCN-NEXT: v_and_b32_e32 v1, 1, v1
355+
; GCN-NEXT: v_cndmask_b32_e32 v0, v2, v3, vcc
356+
; GCN-NEXT: v_xor_b32_e32 v2, 0x80000000, v0
355357
; GCN-NEXT: v_cmp_eq_u32_e32 vcc, 1, v1
356-
; GCN-NEXT: v_cndmask_b32_e64 v0, v0, -v0, vcc
358+
; GCN-NEXT: v_cndmask_b32_e32 v0, v0, v2, vcc
357359
; GCN-NEXT: s_setpc_b64 s[30:31]
358360
;
359361
; GFX11-LABEL: select_fneg_xor_select_i32:
360362
; GFX11: ; %bb.0:
361363
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
362364
; GFX11-NEXT: v_and_b32_e32 v0, 1, v0
365+
; GFX11-NEXT: v_xor_b32_e32 v2, 0x80000000, v2
363366
; GFX11-NEXT: v_and_b32_e32 v1, 1, v1
364-
; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
367+
; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
365368
; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v0
366-
; GFX11-NEXT: v_cndmask_b32_e64 v0, -v2, v3, vcc_lo
369+
; GFX11-NEXT: v_cndmask_b32_e32 v0, v2, v3, vcc_lo
370+
; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
367371
; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v1
368-
; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2)
369-
; GFX11-NEXT: v_cndmask_b32_e64 v0, v0, -v0, vcc_lo
372+
; GFX11-NEXT: v_xor_b32_e32 v2, 0x80000000, v0
373+
; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
374+
; GFX11-NEXT: v_cndmask_b32_e32 v0, v0, v2, vcc_lo
370375
; GFX11-NEXT: s_setpc_b64 s[30:31]
371376
%fneg0 = xor i32 %arg0, -2147483648
372377
%select0 = select i1 %cond0, i32 %arg1, i32 %fneg0
@@ -545,25 +550,31 @@ define i64 @select_fneg_xor_select_i64(i1 %cond0, i1 %cond1, i64 %arg0, i64 %arg
545550
; GCN: ; %bb.0:
546551
; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
547552
; GCN-NEXT: v_and_b32_e32 v0, 1, v0
548-
; GCN-NEXT: v_and_b32_e32 v1, 1, v1
553+
; GCN-NEXT: v_xor_b32_e32 v3, 0x80000000, v3
549554
; GCN-NEXT: v_cmp_eq_u32_e32 vcc, 1, v0
555+
; GCN-NEXT: v_and_b32_e32 v1, 1, v1
550556
; GCN-NEXT: v_cndmask_b32_e32 v0, v2, v4, vcc
551-
; GCN-NEXT: v_cndmask_b32_e64 v2, -v3, v5, vcc
557+
; GCN-NEXT: v_cndmask_b32_e32 v2, v3, v5, vcc
558+
; GCN-NEXT: v_xor_b32_e32 v3, 0x80000000, v2
552559
; GCN-NEXT: v_cmp_eq_u32_e32 vcc, 1, v1
553-
; GCN-NEXT: v_cndmask_b32_e64 v1, v2, -v2, vcc
560+
; GCN-NEXT: v_cndmask_b32_e32 v1, v2, v3, vcc
554561
; GCN-NEXT: s_setpc_b64 s[30:31]
555562
;
556563
; GFX11-LABEL: select_fneg_xor_select_i64:
557564
; GFX11: ; %bb.0:
558565
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
559566
; GFX11-NEXT: v_and_b32_e32 v0, 1, v0
560-
; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)
567+
; GFX11-NEXT: v_xor_b32_e32 v3, 0x80000000, v3
568+
; GFX11-NEXT: v_and_b32_e32 v1, 1, v1
569+
; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_4)
561570
; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v0
562-
; GFX11-NEXT: v_dual_cndmask_b32 v0, v2, v4 :: v_dual_and_b32 v1, 1, v1
563-
; GFX11-NEXT: v_cndmask_b32_e64 v2, -v3, v5, vcc_lo
571+
; GFX11-NEXT: v_cndmask_b32_e32 v0, v2, v4, vcc_lo
572+
; GFX11-NEXT: v_cndmask_b32_e32 v2, v3, v5, vcc_lo
573+
; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
564574
; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v1
565-
; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2)
566-
; GFX11-NEXT: v_cndmask_b32_e64 v1, v2, -v2, vcc_lo
575+
; GFX11-NEXT: v_xor_b32_e32 v3, 0x80000000, v2
576+
; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
577+
; GFX11-NEXT: v_cndmask_b32_e32 v1, v2, v3, vcc_lo
567578
; GFX11-NEXT: s_setpc_b64 s[30:31]
568579
%fneg0 = xor i64 %arg0, 9223372036854775808
569580
%select0 = select i1 %cond0, i64 %arg1, i64 %fneg0

0 commit comments

Comments
 (0)