summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/CodeGen/MachinePipeliner.cpp11
-rw-r--r--llvm/lib/Target/Hexagon/HexagonInstrInfo.cpp15
2 files changed, 16 insertions, 10 deletions
diff --git a/llvm/lib/CodeGen/MachinePipeliner.cpp b/llvm/lib/CodeGen/MachinePipeliner.cpp
index 20141f7f8d6..c852c2e1564 100644
--- a/llvm/lib/CodeGen/MachinePipeliner.cpp
+++ b/llvm/lib/CodeGen/MachinePipeliner.cpp
@@ -3892,9 +3892,14 @@ void SwingSchedulerDAG::fixupRegisterOverlaps(std::deque<SUnit *> &Instrs) {
unsigned BasePos, OffsetPos;
// Update the base register and adjust the offset.
if (TII->getBaseAndOffsetPosition(*MI, BasePos, OffsetPos)) {
- MI->getOperand(BasePos).setReg(NewBaseReg);
- int64_t Offset = MI->getOperand(OffsetPos).getImm();
- MI->getOperand(OffsetPos).setImm(Offset - It->second.second);
+ MachineInstr *NewMI = MF.CloneMachineInstr(MI);
+ NewMI->getOperand(BasePos).setReg(NewBaseReg);
+ int64_t NewOffset =
+ MI->getOperand(OffsetPos).getImm() - It->second.second;
+ NewMI->getOperand(OffsetPos).setImm(NewOffset);
+ SU->setInstr(NewMI);
+ MISUnitMap[NewMI] = SU;
+ NewMIs.insert(NewMI);
}
}
OverlapReg = 0;
diff --git a/llvm/lib/Target/Hexagon/HexagonInstrInfo.cpp b/llvm/lib/Target/Hexagon/HexagonInstrInfo.cpp
index c2125bec3a5..5e2cfbd531a 100644
--- a/llvm/lib/Target/Hexagon/HexagonInstrInfo.cpp
+++ b/llvm/lib/Target/Hexagon/HexagonInstrInfo.cpp
@@ -1651,13 +1651,14 @@ bool HexagonInstrInfo::areMemAccessesTriviallyDisjoint(
bool HexagonInstrInfo::getIncrementValue(const MachineInstr &MI,
int &Value) const {
if (isPostIncrement(MI)) {
- // For a post-increment, the offset is zero and the increment value is
- // determined by the instruction's access size.
- int Zero;
- unsigned AccessSize;
- bool RetVal = getBaseAndOffset(MI, Zero, AccessSize);
- Value = (int) AccessSize;
- return RetVal;
+ unsigned BasePos = 0, OffsetPos = 0;
+ if (!getBaseAndOffsetPosition(MI, BasePos, OffsetPos))
+ return false;
+ const MachineOperand &OffsetOp = MI.getOperand(OffsetPos);
+ if (OffsetOp.isImm()) {
+ Value = OffsetOp.getImm();
+ return true;
+ }
}
if (MI.getOpcode() == Hexagon::A2_addi) {
Value = MI.getOperand(2).getImm();
OpenPOWER on IntegriCloud