mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-21 03:29:40 +00:00
When expanding t2STRDi8 r, r to two stores, add kill markers correctly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@88734 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
3b6ced1510
commit
0cd22dd738
@ -866,6 +866,13 @@ bool ARMLoadStoreOpt::FixInvalidRegPairOp(MachineBasicBlock &MBB,
|
||||
BaseReg, BaseKill, BaseUndef, OffReg, OffKill, OffUndef,
|
||||
Pred, PredReg, TII, isT2);
|
||||
} else {
|
||||
if (OddReg == EvenReg && EvenDeadKill) {
|
||||
// If the two source operands are the same, the kill marker is probably
|
||||
// on the first one. e.g.
|
||||
// t2STRDi8 %R5<kill>, %R5, %R9<kill>, 0, 14, %reg0
|
||||
EvenDeadKill = false;
|
||||
OddDeadKill = true;
|
||||
}
|
||||
InsertLDR_STR(MBB, MBBI, OffImm, isLd, dl, NewOpc,
|
||||
EvenReg, EvenDeadKill, EvenUndef,
|
||||
BaseReg, false, BaseUndef, OffReg, false, OffUndef,
|
||||
|
20
test/CodeGen/Thumb2/2009-11-13-STRDBug.ll
Normal file
20
test/CodeGen/Thumb2/2009-11-13-STRDBug.ll
Normal file
@ -0,0 +1,20 @@
|
||||
; RUN: llc < %s -mtriple=thumbv7-apple-darwin10
|
||||
; rdar://7394794
|
||||
|
||||
define arm_apcscc void @lshift_double(i64 %l1, i64 %h1, i64 %count, i32 %prec, i64* nocapture %lv, i64* nocapture %hv, i32 %arith) nounwind {
|
||||
entry:
|
||||
%..i = select i1 false, i64 0, i64 0 ; <i64> [#uses=1]
|
||||
br i1 undef, label %bb11.i, label %bb6.i
|
||||
|
||||
bb6.i: ; preds = %entry
|
||||
%0 = lshr i64 %h1, 0 ; <i64> [#uses=1]
|
||||
store i64 %0, i64* %hv, align 4
|
||||
%1 = lshr i64 %l1, 0 ; <i64> [#uses=1]
|
||||
%2 = or i64 0, %1 ; <i64> [#uses=1]
|
||||
store i64 %2, i64* %lv, align 4
|
||||
br label %bb11.i
|
||||
|
||||
bb11.i: ; preds = %bb6.i, %entry
|
||||
store i64 %..i, i64* %lv, align 4
|
||||
ret void
|
||||
}
|
Loading…
Reference in New Issue
Block a user