Index: lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp =================================================================== --- lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp +++ lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp @@ -745,7 +745,7 @@ SmallVectorImpl > &Orders, SmallSet &Seen) { unsigned Order = N->getIROrder(); - if (!Order || !Seen.insert(Order).second) { + if (!Order || Seen.count(Order) != 0) { // Process any valid SDDbgValues even if node does not have any order // assigned. ProcessSDDbgValues(N, DAG, Emitter, Orders, VRBaseMap, 0); @@ -759,10 +759,11 @@ // BB->back().isPHI() test will not fire when we want it to. std::prev(IP)->isPHI()) { // Did not insert any instruction. - Orders.push_back({Order, (MachineInstr *)nullptr}); + //Orders.push_back({Order, (MachineInstr *)nullptr}); return; } + Seen.insert(Order); Orders.push_back({Order, &*std::prev(IP)}); ProcessSDDbgValues(N, DAG, Emitter, Orders, VRBaseMap, Order); } Index: test/DebugInfo/X86/sdag-dbgvalue-phi-use-2.ll =================================================================== --- test/DebugInfo/X86/sdag-dbgvalue-phi-use-2.ll +++ test/DebugInfo/X86/sdag-dbgvalue-phi-use-2.ll @@ -44,14 +44,17 @@ ; CHECK-NEXT: [[REG4:%[0-9]+]]:gr32 = PHI ; CHECK-NEXT: DBG_VALUE [[REG3]], $noreg, !16 ; CHECK-NEXT: DBG_VALUE 555, $noreg, !17 -; XXX: Shouldn't the following DBG_VALUE be placed after the add (ADD32rr). +; CHECK-NEXT: [[ADDREG:%[0-9]+]]:gr32 = nuw nsw ADD32rr ; CHECK-NEXT: DBG_VALUE [[REG2]], $noreg, !17 -; CHECK-NEXT: ADD32rr -; XXX: Shouldn't the following DBG_VALUE be placed after the mul (LEA etc). +; CHECK: [[MULREG:%[0-9]+]]:gr32 = LEA64_32r ; CHECK-NEXT: DBG_VALUE 777, $noreg, !17 -; CHECK: INC32r +; XXX: The following DBG_VALUE should have stayed below the INC32r +; CHECK-NEXT: DBG_VALUE [[MULREG]], $noreg, !16 +; CHECK-NEXT: [[INCREG:%[0-9]+]]:gr32 = nuw nsw INC32r +; CHECK-NEXT: DBG_VALUE [[ADDREG]], $noreg, !15 +; CHECK-NEXT: DBG_VALUE [[INCREG]], $noreg, !17 ; XXX: Shouldn't the following DBG_VALUE be placed after the icmp (the non-dead implicit def of $eflags) -; CHECK: DBG_VALUE [[REG4]] +; CHECK-NEXT: DBG_VALUE [[REG4]] ; CHECK-NEXT: implicit-def $eflags %u.023 = phi i32 [ 0, %for.body.lr.ph ], [ %inc, %for.body ] %y.022 = phi i32 [ 13, %for.body.lr.ph ], [ %mul, %for.body ]