diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2017-01-09 21:23:09 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2017-01-09 21:23:09 +0000 | 
| commit | 909545a822eef491158f831688066f0ec2866938 (patch) | |
| tree | 5b0bf0e81294007a9b462b21031b3df272c655c3 /lib/CodeGen | |
| parent | 7e7b6700743285c0af506ac6299ddf82ebd434b9 (diff) | |
Diffstat (limited to 'lib/CodeGen')
| -rw-r--r-- | lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp | 4 | ||||
| -rw-r--r-- | lib/CodeGen/StackSlotColoring.cpp | 11 | 
2 files changed, 10 insertions, 5 deletions
| diff --git a/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp b/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp index a37f4e1116b4..6b62f11f1240 100644 --- a/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp +++ b/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp @@ -1714,7 +1714,7 @@ void DAGTypeLegalizer::ExpandIntRes_MINMAX(SDNode *N,    EVT CCT = getSetCCResultType(NVT);    // Hi part is always the same op -  Hi = DAG.getNode(N->getOpcode(), DL, {NVT, NVT}, {LHSH, RHSH}); +  Hi = DAG.getNode(N->getOpcode(), DL, NVT, {LHSH, RHSH});    // We need to know whether to select Lo part that corresponds to 'winning'    // Hi part or if Hi parts are equal. @@ -1725,7 +1725,7 @@ void DAGTypeLegalizer::ExpandIntRes_MINMAX(SDNode *N,    SDValue LoCmp = DAG.getSelect(DL, NVT, IsHiLeft, LHSL, RHSL);    // Recursed Lo part if Hi parts are equal, this uses unsigned version -  SDValue LoMinMax = DAG.getNode(LoOpc, DL, {NVT, NVT}, {LHSL, RHSL}); +  SDValue LoMinMax = DAG.getNode(LoOpc, DL, NVT, {LHSL, RHSL});    Lo = DAG.getSelect(DL, NVT, IsHiEq, LoMinMax, LoCmp);  } diff --git a/lib/CodeGen/StackSlotColoring.cpp b/lib/CodeGen/StackSlotColoring.cpp index bae828a2263c..234b2043a6a1 100644 --- a/lib/CodeGen/StackSlotColoring.cpp +++ b/lib/CodeGen/StackSlotColoring.cpp @@ -381,7 +381,6 @@ bool StackSlotColoring::RemoveDeadStores(MachineBasicBlock* MBB) {         I != E; ++I) {      if (DCELimit != -1 && (int)NumDead >= DCELimit)        break; -      int FirstSS, SecondSS;      if (TII->isStackSlotCopy(*I, FirstSS, SecondSS) && FirstSS == SecondSS &&          FirstSS != -1) { @@ -392,12 +391,18 @@ bool StackSlotColoring::RemoveDeadStores(MachineBasicBlock* MBB) {      }      MachineBasicBlock::iterator NextMI = std::next(I); -    if (NextMI == MBB->end()) continue; +    MachineBasicBlock::iterator ProbableLoadMI = I;      unsigned LoadReg = 0;      unsigned StoreReg = 0;      if (!(LoadReg = TII->isLoadFromStackSlot(*I, FirstSS)))        continue; +    // Skip the ...pseudo debugging... instructions between a load and store. +    while ((NextMI != E) && NextMI->isDebugValue()) { +      ++NextMI; +      ++I; +    } +    if (NextMI == E) continue;      if (!(StoreReg = TII->isStoreToStackSlot(*NextMI, SecondSS)))        continue;      if (FirstSS != SecondSS || LoadReg != StoreReg || FirstSS == -1) continue; @@ -407,7 +412,7 @@ bool StackSlotColoring::RemoveDeadStores(MachineBasicBlock* MBB) {      if (NextMI->findRegisterUseOperandIdx(LoadReg, true, nullptr) != -1) {        ++NumDead; -      toErase.push_back(&*I); +      toErase.push_back(&*ProbableLoadMI);      }      toErase.push_back(&*NextMI); | 
