summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target
diff options
context:
space:
mode:
authorDan Gohman <dan433584@gmail.com>2016-02-16 15:17:21 +0000
committerDan Gohman <dan433584@gmail.com>2016-02-16 15:17:21 +0000
commit8aa237c3caaaedbf638df545142ca1a2ad473e04 (patch)
treea913489f4bbc0d20fb420b7ef6ce85ffe08011d9 /llvm/lib/Target
parent944f655e05e0bb889f63a9949fd4bb3c0d040ae6 (diff)
downloadbcm5719-llvm-8aa237c3caaaedbf638df545142ca1a2ad473e04.tar.gz
bcm5719-llvm-8aa237c3caaaedbf638df545142ca1a2ad473e04.zip
[WebAssembly] Create new registers instead of reusing old ones in RegStackify.
This avoids some complications updating LiveIntervals to be aware of the new register lifetimes, because we can just compute new intervals from scratch rather than describe how the old ones have been changed. llvm-svn: 260971
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r--llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp16
1 files changed, 9 insertions, 7 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp
index 15da0d175f3..e23066c1a92 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyRegStackify.cpp
@@ -237,13 +237,13 @@ RematerializeCheapDef(unsigned Reg, MachineOperand &Op, MachineInstr *Def,
///
/// to this:
///
-/// Reg = INST ... // Def (to become the new Insert)
-/// TeeReg, NewReg = TEE_LOCAL_... Reg
+/// DefReg = INST ... // Def (to become the new Insert)
+/// TeeReg, NewReg = TEE_LOCAL_... DefReg
/// INST ..., TeeReg, ... // Insert
/// INST ..., NewReg, ...
/// INST ..., NewReg, ...
///
-/// with Reg and TeeReg stackified. This eliminates a get_local from the
+/// with DefReg and TeeReg stackified. This eliminates a get_local from the
/// resulting code.
static MachineInstr *MoveAndTeeForMultiUse(
unsigned Reg, MachineOperand &Op, MachineInstr *Def, MachineBasicBlock &MBB,
@@ -254,18 +254,20 @@ static MachineInstr *MoveAndTeeForMultiUse(
const auto *RegClass = MRI.getRegClass(Reg);
unsigned NewReg = MRI.createVirtualRegister(RegClass);
unsigned TeeReg = MRI.createVirtualRegister(RegClass);
+ unsigned DefReg = MRI.createVirtualRegister(RegClass);
MRI.replaceRegWith(Reg, NewReg);
MachineInstr *Tee = BuildMI(MBB, Insert, Insert->getDebugLoc(),
TII->get(GetTeeLocalOpcode(RegClass)), TeeReg)
.addReg(NewReg, RegState::Define)
- .addReg(Reg);
+ .addReg(DefReg);
Op.setReg(TeeReg);
- Def->getOperand(0).setReg(Reg);
+ Def->getOperand(0).setReg(DefReg);
LIS.InsertMachineInstrInMaps(Tee);
- LIS.shrinkToUses(&LIS.getInterval(Reg));
+ LIS.removeInterval(Reg);
LIS.createAndComputeVirtRegInterval(NewReg);
LIS.createAndComputeVirtRegInterval(TeeReg);
- MFI.stackifyVReg(Reg);
+ LIS.createAndComputeVirtRegInterval(DefReg);
+ MFI.stackifyVReg(DefReg);
MFI.stackifyVReg(TeeReg);
ImposeStackOrdering(Def);
ImposeStackOrdering(Tee);
OpenPOWER on IntegriCloud