[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