[LLVMdev] Assert in BlockFrequency pass
Duncan P. N. Exon Smith
dexonsmith at apple.com
Thu Jun 4 12:53:41 PDT 2015
> On 2015-Jun-04, at 12:45, Duncan P. N. Exon Smith <dexonsmith at apple.com> wrote:
>
>> On 2015-Jun-04, at 12:28, Ivan Baev <ibaev at codeaurora.org> wrote:
>>
>> Hi, we got the following assert:
>>
>> assert(!Working[0].isLoopHeader() && "entry block is a loop header");
>>
>> [in BlockFrequencyInfoImpl<BT>::tryToComputeMassInFunction(),
>> BlockFrequencyInfoImpl.h] on a Hexagon target - the entry block is a loop
>> header. Has someone seen this assert on other targets?
>>
>> What would be a preferable way to fix it:
>> - extend BlockFrequency pass to handle this case, e.g. by inserting a
>> dummy entry block, or
>> - make this BlockFrequncy's assumption/requirement more clearly
>> articulated and avoid creating this situation in a preceding pass (in the
>> particular case, a machine-level loop rotation)?
>
> This is unlikely to be a bug in BFI. BFI assumes that LoopInfo is
> correct. This has come up before when a pass promised (but failed) to
> preserve LoopInfo. I think it's well enough documented -- in that BFI
> "requires" LoopInfo -- but if you have an idea of how to make it more
> clear that BFI requires LoopInfo go ahead :).
>
> Last time this came up it was suggested that we should have a better
> way of testing/verifying that analyses have been correctly preserved,
> and I think that would be the best way of improving the diagnostic
> (since it would catch the problem right after machine-level loop
> rotation fails to preserve it).
>
> (Of course, it's possible there *is* a bug in BFI... let me know what
> you find.)
>
Reading the assertion, maybe there is a bug. In LLVM IR, it's illegal
to have a backedge to the entry block. When I rewrote BFI I assumed
the same was true of Machine IR. Was I wrong? Is it legal to have a
backedge to the entry block? (Or, as I assumed in my previous mail,
did machine-level loop rotation fail to preserve LoopInfo?)
If it *is* legal to have a backedge to the entry block, then we should
update BFI to expect it.
More information about the llvm-dev
mailing list