mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-26 23:32:58 +00:00
Fix a CPSR liveness tracking bug introduced when I converted IT block to bundle.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146805 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2e33944c10
commit
b16db81719
@ -880,14 +880,17 @@ bool Thumb2SizeReduce::ReduceMBB(MachineBasicBlock &MBB) {
|
||||
}
|
||||
|
||||
ProcessNext:
|
||||
if (LiveCPSR &&
|
||||
NextMII != E && MI->isInsideBundle() && !NextMII->isInsideBundle() &&
|
||||
BundleMI->killsRegister(ARM::CPSR))
|
||||
if (NextMII != E && MI->isInsideBundle() && !NextMII->isInsideBundle()) {
|
||||
// FIXME: Since post-ra scheduler operates on bundles, the CPSR kill
|
||||
// marker is only on the BUNDLE instruction. Process the BUNDLE
|
||||
// instruction as we finish with the bundled instruction to work around
|
||||
// the inconsistency.
|
||||
LiveCPSR = false;
|
||||
if (BundleMI->killsRegister(ARM::CPSR))
|
||||
LiveCPSR = false;
|
||||
MachineOperand *MO = BundleMI->findRegisterDefOperand(ARM::CPSR);
|
||||
if (MO && !MO->isDead())
|
||||
LiveCPSR = true;
|
||||
}
|
||||
|
||||
bool DefCPSR = false;
|
||||
LiveCPSR = UpdateCPSRDef(*MI, LiveCPSR, DefCPSR);
|
||||
|
28
test/CodeGen/Thumb2/2011-12-16-T2SizeReduceAssert.ll
Normal file
28
test/CodeGen/Thumb2/2011-12-16-T2SizeReduceAssert.ll
Normal file
@ -0,0 +1,28 @@
|
||||
; RUN: llc < %s -mtriple=thumbv7-apple-ios -relocation-model=pic -disable-fp-elim -mcpu=cortex-a8
|
||||
|
||||
%struct.LIST_NODE.0.16 = type { %struct.LIST_NODE.0.16*, i8* }
|
||||
|
||||
define %struct.LIST_NODE.0.16* @list_AssocListPair(%struct.LIST_NODE.0.16* %List, i8* %Key) nounwind readonly {
|
||||
entry:
|
||||
br label %bb3
|
||||
|
||||
bb: ; preds = %bb3
|
||||
%Scan.0.idx7.val = load i8** undef, align 4
|
||||
%.idx = getelementptr i8* %Scan.0.idx7.val, i32 4
|
||||
%0 = bitcast i8* %.idx to i8**
|
||||
%.idx.val = load i8** %0, align 4
|
||||
%1 = icmp eq i8* %.idx.val, %Key
|
||||
br i1 %1, label %bb5, label %bb2
|
||||
|
||||
bb2: ; preds = %bb
|
||||
%Scan.0.idx8.val = load %struct.LIST_NODE.0.16** undef, align 4
|
||||
br label %bb3
|
||||
|
||||
bb3: ; preds = %bb2, %entry
|
||||
%Scan.0 = phi %struct.LIST_NODE.0.16* [ %List, %entry ], [ %Scan.0.idx8.val, %bb2 ]
|
||||
%2 = icmp eq %struct.LIST_NODE.0.16* %Scan.0, null
|
||||
br i1 %2, label %bb5, label %bb
|
||||
|
||||
bb5: ; preds = %bb3, %bb
|
||||
ret %struct.LIST_NODE.0.16* null
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user