forked from OSchip/llvm-project
[ARM] Preserve liveness in ARMConstantIslands.
We currently don't use liveness information after this point, but it can be useful to catch bugs using -verify-machineinstrs, and optimizations could potentially use this information in the future. Differential Revision: https://reviews.llvm.org/D66319 llvm-svn: 369162
This commit is contained in:
parent
87869b398d
commit
eaff844fe9
|
@ -26,6 +26,7 @@
|
|||
#include "llvm/ADT/SmallVector.h"
|
||||
#include "llvm/ADT/Statistic.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/CodeGen/LivePhysRegs.h"
|
||||
#include "llvm/CodeGen/MachineBasicBlock.h"
|
||||
#include "llvm/CodeGen/MachineConstantPool.h"
|
||||
#include "llvm/CodeGen/MachineFunction.h"
|
||||
|
@ -357,9 +358,6 @@ bool ARMConstantIslands::runOnMachineFunction(MachineFunction &mf) {
|
|||
HasFarJump = false;
|
||||
bool GenerateTBB = isThumb2 || (isThumb1 && SynthesizeThumb1TBB);
|
||||
|
||||
// This pass invalidates liveness information when it splits basic blocks.
|
||||
MF->getRegInfo().invalidateLiveness();
|
||||
|
||||
// Renumber all of the machine basic blocks in the function, guaranteeing that
|
||||
// the numbers agree with the position of the block in the function.
|
||||
MF->RenumberBlocks();
|
||||
|
@ -880,6 +878,13 @@ void ARMConstantIslands::updateForInsertedWaterBlock(MachineBasicBlock *NewBB) {
|
|||
MachineBasicBlock *ARMConstantIslands::splitBlockBeforeInstr(MachineInstr *MI) {
|
||||
MachineBasicBlock *OrigBB = MI->getParent();
|
||||
|
||||
// Collect liveness information at MI.
|
||||
LivePhysRegs LRs(*MF->getSubtarget().getRegisterInfo());
|
||||
LRs.addLiveOuts(*OrigBB);
|
||||
auto LivenessEnd = ++MachineBasicBlock::iterator(MI).getReverse();
|
||||
for (MachineInstr &LiveMI : make_range(OrigBB->rbegin(), LivenessEnd))
|
||||
LRs.stepBackward(LiveMI);
|
||||
|
||||
// Create a new MBB for the code after the OrigBB.
|
||||
MachineBasicBlock *NewBB =
|
||||
MF->CreateMachineBasicBlock(OrigBB->getBasicBlock());
|
||||
|
@ -908,6 +913,12 @@ MachineBasicBlock *ARMConstantIslands::splitBlockBeforeInstr(MachineInstr *MI) {
|
|||
// OrigBB branches to NewBB.
|
||||
OrigBB->addSuccessor(NewBB);
|
||||
|
||||
// Update live-in information in the new block.
|
||||
MachineRegisterInfo &MRI = MF->getRegInfo();
|
||||
for (MCPhysReg L : LRs)
|
||||
if (!MRI.isReserved(L))
|
||||
NewBB->addLiveIn(L);
|
||||
|
||||
// Update internal data structures to account for the newly inserted MBB.
|
||||
// This is almost the same as updateForInsertedWaterBlock, except that
|
||||
// the Water goes after OrigBB, not NewBB.
|
||||
|
@ -2331,6 +2342,10 @@ adjustJTTargetBlockForward(MachineBasicBlock *BB, MachineBasicBlock *JTBB) {
|
|||
MachineFunction::iterator MBBI = ++JTBB->getIterator();
|
||||
MF->insert(MBBI, NewBB);
|
||||
|
||||
// Copy live-in information to new block.
|
||||
for (const MachineBasicBlock::RegisterMaskPair &RegMaskPair : BB->liveins())
|
||||
NewBB->addLiveIn(RegMaskPair);
|
||||
|
||||
// Add an unconditional branch from NewBB to BB.
|
||||
// There doesn't seem to be meaningful DebugInfo available; this doesn't
|
||||
// correspond directly to anything in the source.
|
||||
|
|
|
@ -898,5 +898,13 @@ body: |
|
|||
# CHECK-NEXT: CONSTPOOL_ENTRY 1, %const.0, 4
|
||||
# CHECK-NEXT: {{^ $}}
|
||||
# CHECK-NEXT: bb.2.entry (align 1):
|
||||
# CHECK-NEXT: liveins: $d13, $s27, $r10, $r9, $r8, $s26, $d12, $s25, $s24,
|
||||
# CHECK-SAME: $d15, $s30, $s31, $d14, $s28, $s29, $lr, $r0, $d21,
|
||||
# CHECK-SAME: $r3, $q10, $d20, $d17, $r2, $d25, $q11, $d22, $d23,
|
||||
# CHECK-SAME: $r1, $q8, $d16, $s3, $q14, $d28, $d29, $d19, $s17,
|
||||
# CHECK-SAME: $d8, $s16, $r6, $r7, $r4, $q12, $q9, $d18, $s0, $q15,
|
||||
# CHECK-SAME: $d30, $d31, $r12, $s1, $d0, $d24, $s2, $d1, $q0, $s6,
|
||||
# CHECK-SAME: $d3, $d2, $s4, $q1, $s7, $s5, $d9, $s18, $s19, $q4
|
||||
# CHECK-NEXT: {{^ $}}
|
||||
# CHECK-NEXT: $r5 = t2MOVi16 target-flags(arm-lo16) @.str.84, 14, $noreg
|
||||
# CHECK-NEXT: $r5 = t2MOVTi16 $r5, target-flags(arm-hi16) @.str.84, 14, $noreg
|
||||
|
|
Loading…
Reference in New Issue