summaryrefslogtreecommitdiff
path: root/lib/CodeGen
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2014-04-03 05:03:20 +0000
committerLang Hames <lhames@gmail.com>2014-04-03 05:03:20 +0000
commit5a64ab6e032f81bb1d3d03cd957a37306b2b4b06 (patch)
tree9bcd574b2664dc7dfbe83b43d3f73be3353b4842 /lib/CodeGen
parent46aa8c8dae6693b442201c334d10503568bfdd70 (diff)
downloadllvm-5a64ab6e032f81bb1d3d03cd957a37306b2b4b06.tar.gz
llvm-5a64ab6e032f81bb1d3d03cd957a37306b2b4b06.tar.bz2
llvm-5a64ab6e032f81bb1d3d03cd957a37306b2b4b06.tar.xz
[CodeGen] Fix peephole optimizer bug introduced in r205481. Fixes PR19318.
I should have read that comment a little more carefully. ;) Regression test in the works, committing in the mean time to un-break people. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@205511 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r--lib/CodeGen/PeepholeOptimizer.cpp20
1 files changed, 11 insertions, 9 deletions
diff --git a/lib/CodeGen/PeepholeOptimizer.cpp b/lib/CodeGen/PeepholeOptimizer.cpp
index ca8334bf47..e18d963585 100644
--- a/lib/CodeGen/PeepholeOptimizer.cpp
+++ b/lib/CodeGen/PeepholeOptimizer.cpp
@@ -630,20 +630,22 @@ bool PeepholeOptimizer::runOnMachineFunction(MachineFunction &MF) {
// earlier load into MI.
if (!isLoadFoldable(MI, FoldAsLoadDefCandidates) &&
!FoldAsLoadDefCandidates.empty()) {
- // We need to fold load after optimizeCmpInstr, since optimizeCmpInstr
- // can enable folding by converting SUB to CMP.
- // Save FoldAsLoadDefReg because optimizeLoadInstr() resets it and we
- // need it for markUsesInDebugValueAsUndef().
const MCInstrDesc &MIDesc = MI->getDesc();
for (unsigned i = MIDesc.getNumDefs(); i != MIDesc.getNumOperands();
++i) {
const MachineOperand &MOp = MI->getOperand(i);
if (!MOp.isReg())
continue;
- unsigned TryFoldReg = MOp.getReg();
- if (FoldAsLoadDefCandidates.count(TryFoldReg)) {
+ unsigned FoldAsLoadDefReg = MOp.getReg();
+ if (FoldAsLoadDefCandidates.count(FoldAsLoadDefReg)) {
+ // We need to fold load after optimizeCmpInstr, since
+ // optimizeCmpInstr can enable folding by converting SUB to CMP.
+ // Save FoldAsLoadDefReg because optimizeLoadInstr() resets it and
+ // we need it for markUsesInDebugValueAsUndef().
+ unsigned FoldedReg = FoldAsLoadDefReg;
MachineInstr *DefMI = 0;
- MachineInstr *FoldMI = TII->optimizeLoadInstr(MI, MRI, TryFoldReg,
+ MachineInstr *FoldMI = TII->optimizeLoadInstr(MI, MRI,
+ FoldAsLoadDefReg,
DefMI);
if (FoldMI) {
// Update LocalMIs since we replaced MI with FoldMI and deleted
@@ -655,8 +657,8 @@ bool PeepholeOptimizer::runOnMachineFunction(MachineFunction &MF) {
LocalMIs.insert(FoldMI);
MI->eraseFromParent();
DefMI->eraseFromParent();
- MRI->markUsesInDebugValueAsUndef(TryFoldReg);
- FoldAsLoadDefCandidates.erase(TryFoldReg);
+ MRI->markUsesInDebugValueAsUndef(FoldedReg);
+ FoldAsLoadDefCandidates.erase(FoldedReg);
++NumLoadFold;
// MI is replaced with FoldMI.
Changed = true;