mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-21 18:29:46 +00:00
Commit some changes I had managed to lose last night while refactoring the code. Avoid change use of PHI instructions because it's not legal to insert any instructions before them.
This fixes PR6027. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93335 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
656bb20d61
commit
eb18812f75
@ -110,6 +110,11 @@ bool OptimizeExts::OptimizeInstr(MachineInstr *MI, MachineBasicBlock *MBB,
|
||||
MachineInstr *UseMI = &*UI;
|
||||
if (UseMI == MI)
|
||||
continue;
|
||||
if (UseMI->getOpcode() == TargetInstrInfo::PHI) {
|
||||
ExtendLife = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
MachineBasicBlock *UseMBB = UseMI->getParent();
|
||||
if (UseMBB == MBB) {
|
||||
// Local uses that come after the extension.
|
||||
@ -117,7 +122,7 @@ bool OptimizeExts::OptimizeInstr(MachineInstr *MI, MachineBasicBlock *MBB,
|
||||
Uses.push_back(&UseMO);
|
||||
} else if (ReachedBBs.count(UseMBB))
|
||||
// Non-local uses where the result of extension is used. Always
|
||||
// replace these.
|
||||
// replace these unless it's a PHI.
|
||||
Uses.push_back(&UseMO);
|
||||
else if (Aggressive && DT->dominates(MBB, UseMBB))
|
||||
// We may want to extend live range of the extension result in order
|
||||
|
46
test/CodeGen/X86/2010-01-13-OptExtBug.ll
Normal file
46
test/CodeGen/X86/2010-01-13-OptExtBug.ll
Normal file
@ -0,0 +1,46 @@
|
||||
; RUN: llc < %s -mtriple=i386-pc-linux-gnu
|
||||
; PR6027
|
||||
|
||||
%class.OlsonTimeZone = type { i16, i32*, i8*, i16 }
|
||||
|
||||
define void @XX(%class.OlsonTimeZone* %this) align 2 {
|
||||
entry:
|
||||
%call = tail call i8* @_Z15uprv_malloc_4_2v()
|
||||
%0 = bitcast i8* %call to double*
|
||||
%tmp = getelementptr inbounds %class.OlsonTimeZone* %this, i32 0, i32 3
|
||||
%tmp2 = load i16* %tmp
|
||||
%tmp525 = getelementptr inbounds %class.OlsonTimeZone* %this, i32 0, i32 0
|
||||
%tmp626 = load i16* %tmp525
|
||||
%cmp27 = icmp slt i16 %tmp2, %tmp626
|
||||
br i1 %cmp27, label %bb.nph, label %for.end
|
||||
|
||||
for.cond:
|
||||
%tmp6 = load i16* %tmp5
|
||||
%cmp = icmp slt i16 %inc, %tmp6
|
||||
%indvar.next = add i32 %indvar, 1
|
||||
br i1 %cmp, label %for.body, label %for.end
|
||||
|
||||
bb.nph:
|
||||
%tmp10 = getelementptr inbounds %class.OlsonTimeZone* %this, i32 0, i32 2
|
||||
%tmp17 = getelementptr inbounds %class.OlsonTimeZone* %this, i32 0, i32 1
|
||||
%tmp5 = getelementptr inbounds %class.OlsonTimeZone* %this, i32 0, i32 0
|
||||
%tmp29 = sext i16 %tmp2 to i32
|
||||
%tmp31 = add i16 %tmp2, 1
|
||||
%tmp32 = zext i16 %tmp31 to i32
|
||||
br label %for.body
|
||||
|
||||
for.body:
|
||||
%indvar = phi i32 [ 0, %bb.nph ], [ %indvar.next, %for.cond ]
|
||||
%tmp30 = add i32 %indvar, %tmp29
|
||||
%tmp33 = add i32 %indvar, %tmp32
|
||||
%inc = trunc i32 %tmp33 to i16
|
||||
%tmp11 = load i8** %tmp10
|
||||
%arrayidx = getelementptr i8* %tmp11, i32 %tmp30
|
||||
%tmp12 = load i8* %arrayidx
|
||||
br label %for.cond
|
||||
|
||||
for.end:
|
||||
ret void
|
||||
}
|
||||
|
||||
declare i8* @_Z15uprv_malloc_4_2v()
|
@ -1,5 +1,5 @@
|
||||
; RUN: llc < %s -mtriple=x86_64-apple-darwin10 -relocation-model=pic -disable-fp-elim -color-ss-with-regs -stats -info-output-file - > %t
|
||||
; RUN: grep stackcoloring %t | grep "stack slot refs replaced with reg refs" | grep 9
|
||||
; RUN: grep stackcoloring %t | grep "stack slot refs replaced with reg refs" | grep 14
|
||||
|
||||
type { [62 x %struct.Bitvec*] } ; type %0
|
||||
type { i8* } ; type %1
|
||||
|
Loading…
Reference in New Issue
Block a user