[llvm-dev] question on analyzeBranch and getFallThrough
Bagel via llvm-dev
llvm-dev at lists.llvm.org
Thu Jul 9 14:32:34 PDT 2020
I am working on a back end for an architecture whose jump via table instruction
includes the range check. If the index is out of range, the jump table
instruction just falls through. I implemented a pass to remove the range check
generated before the jump table instruction because it is superfluous.
This causes as assertion in MachineBlockPlacement.cpp:
assert((!TII->analyzeBranch(*PrevBB, TBB, FBB, Cond) ||
!PrevBB->canFallThrough()) &&
"Unexpected block with un-analyzable fallthrough!");
The method MachineBasicBlock::getFallThrough() uses TII->analyzeBranch().
Using analyze branch there doesn't appear to be anyway to signify that a branch
is not a simple conditional or a simple indirect but rather a combination of
the two -- it conditionally branches indirect or falls through.
Is there a way to express this with analyzeBranch?
Can I override the method getFallThough?
Is there a way to annotate a basic block to indicate in can fall through?
It would seem this would save a lot of calls to analyzeBranck.
Any other ideas?
Thanks,
Brian
More information about the llvm-dev
mailing list