Skip to content

Commit 1f57f3d

Browse files
committed
[SelectionDAG] Propogate Disjoint flag.
Signed-off-by: feng.feng <[email protected]>
1 parent 1b9f288 commit 1f57f3d

File tree

3 files changed

+8
-4
lines changed

3 files changed

+8
-4
lines changed

llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9530,6 +9530,8 @@ static SDValue combineShiftOfShiftedLogic(SDNode *Shift, SelectionDAG &DAG) {
95309530
SDValue ShiftSumC = DAG.getConstant(*C0Val + C1Val, DL, ShiftAmtVT);
95319531
SDValue NewShift1 = DAG.getNode(ShiftOpcode, DL, VT, X, ShiftSumC);
95329532
SDValue NewShift2 = DAG.getNode(ShiftOpcode, DL, VT, Y, C1);
9533+
// Propogate flags.
9534+
SelectionDAG::FlagInserter FlagsInserter(DAG, LogicOp->getFlags());
95339535
return DAG.getNode(LogicOpcode, DL, VT, NewShift1, NewShift2);
95349536
}
95359537

llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -544,6 +544,8 @@ bool TargetLowering::ShrinkDemandedConstant(SDValue Op,
544544
if (!C.isSubsetOf(DemandedBits)) {
545545
EVT VT = Op.getValueType();
546546
SDValue NewC = TLO.DAG.getConstant(DemandedBits & C, DL, VT);
547+
// Propogate flags.
548+
SelectionDAG::FlagInserter FlagsInserter(TLO.DAG, Op->getFlags());
547549
SDValue NewOp = TLO.DAG.getNode(Opcode, DL, VT, Op.getOperand(0), NewC);
548550
return TLO.CombineTo(Op, NewOp);
549551
}

llvm/test/CodeGen/X86/propogate-disjoint-in-shl-or.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ define void @add_shl_or_disjoint(i32 %x, ptr addrspace(1) %o) {
88
; CHECK-NEXT: {{ $}}
99
; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64 = COPY $rsi
1010
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY $edi
11-
; CHECK-NEXT: [[SHL32ri:%[0-9]+]]:gr32 = SHL32ri [[COPY1]], 2, implicit-def dead $eflags
12-
; CHECK-NEXT: [[OR32ri:%[0-9]+]]:gr32 = OR32ri [[SHL32ri]], -1069531068, implicit-def dead $eflags
13-
; CHECK-NEXT: [[ADD32ri:%[0-9]+]]:gr32 = ADD32ri [[OR32ri]], 1234567890, implicit-def dead $eflags
14-
; CHECK-NEXT: MOV32mr [[COPY]], 1, $noreg, 0, $noreg, killed [[ADD32ri]] :: (store (s32) into %ir.o, addrspace 1)
11+
; CHECK-NEXT: [[DEF:%[0-9]+]]:gr64 = IMPLICIT_DEF
12+
; CHECK-NEXT: [[INSERT_SUBREG:%[0-9]+]]:gr64_nosp = INSERT_SUBREG [[DEF]], [[COPY1]], %subreg.sub_32bit
13+
; CHECK-NEXT: [[LEA64_32r:%[0-9]+]]:gr32 = LEA64_32r $noreg, 4, killed [[INSERT_SUBREG]], 165036822, $noreg
14+
; CHECK-NEXT: MOV32mr [[COPY]], 1, $noreg, 0, $noreg, killed [[LEA64_32r]] :: (store (s32) into %ir.o, addrspace 1)
1515
; CHECK-NEXT: RET 0
1616
%or = or disjoint i32 %x, 4027584529
1717
%shl = shl i32 %or, 2

0 commit comments

Comments
 (0)