how to generate select-free LLVM IR?

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,