I run “clang … --emit-llvm …”. I get LLVM IR select instructions out. I don’t want select instructions, but want explicit control flow.
Is there a way to do this?
I’m scared of disabling the SimplifyCFG pass since it appears to do much more than just rewrite to use select statements.
Probably you want to a pass to transform select instructions to control flow late, after optimizations have run. Trying to prevent clang IR generation and IR optimizations from forming selects is way too difficult.
I don’t think this transform exists as an independent pass, but you can borrow code from CodeGenPrepare::optimizeSelectInst.
-Eli
Hi Robert,
You could write your own LLVM pass that lowers select instructions.
Many static analyzers based on LLVM actually do that. See for instance in IKOS: https://github.com/NASA-SW-VnV/ikos/blob/master/frontend/llvm/src/pass/lower_select.cpp
Best,