LLVM pass to optimize redundant branch conditions

Hello All

I am looking for an LLVM pass that is able to detect branches whose condition is known if they are reached. To illustrate what I mean, I attached a screenshot showing a partial CFG of a function. The branch in basic block for.cond.cleanup3 tests the same condition as the branch in the entry block, and has the same target BB if the condition is false. Also, if you inspect the graph carefully, the basic block for.cond.cleanup3 cannot be reached unless the first branch condition was true. This means that the condition of the branch in for.cond.cleanup3 will always be true. As such, it is possible to eliminate this branch, making it unconditional. Is there an LLVM pass that is able to perform such transformation?

Thanks
-Adel

I didn’t check in detail for this specific case, but the pass that does optimization like this is lib/Transforms/Scalar/JumpThreading.cpp

Hi Adel,

This is a complicated example I think. It would help if you could provide a more reduced one and a complete IR. I think that ome of the dead code elimination passes or LICM may be able to help.

Best,
Stefanos Baziotis

Oh I didn’t see Craig’s comment. Thanks I didn’t know about this pass.