Disable expensive two-address optimizations at -O0. rdar://10453055

llvm-svn: 144806
This commit is contained in:
Evan Cheng 2011-11-16 18:44:48 +00:00
parent 80979b6ea6
commit 822ddde50d
3 changed files with 12 additions and 5 deletions

View File

@ -68,6 +68,7 @@ namespace {
MachineRegisterInfo *MRI;
LiveVariables *LV;
AliasAnalysis *AA;
CodeGenOpt::Level OptLevel;
// DistanceMap - Keep track the distance of a MI from the start of the
// current basic block.
@ -571,6 +572,9 @@ bool
TwoAddressInstructionPass::isProfitableToCommute(unsigned regB, unsigned regC,
MachineInstr *MI, MachineBasicBlock *MBB,
unsigned Dist) {
if (OptLevel == CodeGenOpt::None)
return false;
// Determine if it's profitable to commute this two address instruction. In
// general, we want no uses between this instruction and the definition of
// the two-address register.
@ -1193,6 +1197,9 @@ TryInstructionTransform(MachineBasicBlock::iterator &mi,
MachineFunction::iterator &mbbi,
unsigned SrcIdx, unsigned DstIdx, unsigned Dist,
SmallPtrSet<MachineInstr*, 8> &Processed) {
if (OptLevel == CodeGenOpt::None)
return false;
MachineInstr &MI = *mi;
const MCInstrDesc &MCID = MI.getDesc();
unsigned regA = MI.getOperand(DstIdx).getReg();
@ -1388,6 +1395,7 @@ bool TwoAddressInstructionPass::runOnMachineFunction(MachineFunction &MF) {
InstrItins = TM.getInstrItineraryData();
LV = getAnalysisIfAvailable<LiveVariables>();
AA = &getAnalysis<AliasAnalysis>();
OptLevel = TM.getOptLevel();
bool MadeChange = false;

View File

@ -82,9 +82,8 @@ define i64 @test5(i8* %A, i32 %I, i64 %B) nounwind {
ret i64 %v11
; X64: test5:
; X64: movslq %e[[A1]], %rax
; X64-NEXT: movq (%r[[A0]],%rax), %rax
; X64-NEXT: addq %{{rdx|r8}}, %rax
; X64-NEXT: ret
; X64-NEXT: (%r[[A0]],%rax),
; X64: ret
}
; PR9500, rdar://9156159 - Don't do non-local address mode folding,

View File

@ -82,7 +82,7 @@ entry:
ret i64 %mul
; CHECK: test6:
; CHECK: leaq (,%rdi,8), %rax
; CHECK: shlq $3, %rdi
}
define i32 @test7(i32 %x) nounwind ssp {
@ -90,7 +90,7 @@ entry:
%mul = mul nsw i32 %x, 8
ret i32 %mul
; CHECK: test7:
; CHECK: leal (,%rdi,8), %eax
; CHECK: shll $3, %edi
}