[llvm-commits] [llvm] r111221 - in /llvm/trunk: lib/CodeGen/MachineBasicBlock.cpp lib/CodeGen/PHIElimination.cpp test/CodeGen/ARM/code-placement.ll test/CodeGen/X86/lsr-reuse.ll
Evan Cheng
evan.cheng at apple.com
Tue Aug 17 13:18:54 PDT 2010
On Aug 17, 2010, at 1:08 PM, Jakob Stoklund Olesen wrote:
>
> On Aug 17, 2010, at 12:50 PM, Evan Cheng wrote:
>>> @@ -392,8 +393,14 @@
>>> // We break edges when registers are live out from the predecessor block
>>> // (not considering PHI nodes). If the register is live in to this block
>>> // anyway, we would gain nothing from splitting.
>>> - if (!LV.isLiveIn(Reg, MBB) && LV.isLiveOut(Reg, *PreMBB))
>>> - Changed |= PreMBB->SplitCriticalEdge(&MBB, this) != 0;
>>> + // Avoid splitting backedges of loops. It would introduce small
>>> + // out-of-line blocks into the loop which is very bad for code placement.
>>> + if (PreMBB != &MBB &&
>>> + !LV.isLiveIn(Reg, MBB) && LV.isLiveOut(Reg, *PreMBB)) {
>>> + if (!(MLI->getLoopFor(PreMBB) == MLI->getLoopFor(&MBB) &&
>>> + MLI->isLoopHeader(&MBB)))
>>> + Changed |= PreMBB->SplitCriticalEdge(&MBB, this) != 0;
>>> + }
>>> }
>>> }
>>> return true;
>>>
>>> You're doing it again ;-) You shouldn't expect MLI to be non-NULL here.
>>
>> This is in PHI elimination which is explicitly asking for machineloopinfo. Can it ever be null?
>
> So it does. I was fooled by this line:
>
> MLI = getAnalysisIfAvailable<MachineLoopInfo>();
>
> But you probably don't want to require MachineLoopInfo for PHIElimination. I don't think we want to calculate that in a -O0 build.
Ugh. That's right. I'll fix.
Evan
>
> /jakob
>
More information about the llvm-commits
mailing list