[LLVMdev] Break operands into multiple instructions
John Criswell
criswell at illinois.edu
Fri Aug 19 11:10:17 PDT 2011
On 8/19/11 12:58 PM, Kodakara, Sreekumar V wrote:
>
> Hi All,
>
> I am creating an instrumentation pass using LLVM libraries. I am using
> clang++ (version 2.9) to compile cpp code into LLVM bit code. When I
> generate the llvm bit code using clang++ using --O3, I get many
> instances of instructions that look like the following.
>
> br i1 icmp ne (i8* bitcast (i32 (i32)* @pthread_cancel to i8*), i8*
> null), label %bb23, label %bb25
>
> Here three LLVM instructions are used in one instruction, namely br,
> icmp and bitcast. Is there a way to tell clang++ to break the operand
> of br into 3 separate instructions or a pass that exists that does it.
> Ideally, I would like to see the following
>
There is a pass in SAFECode that breaks constant expression GEPs into
GEP instructions. Since some constant expression GEPs are casted using
constant expression casts, it will also convert cast constant
expressions into cast instructions as needed. You should be able to
easily modify the code to do what you need.
You can find the code at
http://llvm.org/viewvc/llvm-project/safecode/trunk/lib/ArrayBoundChecks/BreakConstantGEPs.cpp?view=log
(i.e., lib/ArrayBoundsChecks/BreakConstantGEPs.cpp in the SAFECode
project). The code written for LLVM 2.7 and may need minor changes to
compile against mainline LLVM, but that should not be too hard.
-- John T.
> I8* tmp0 = i8* bitcast (i32 (i32)* @pthread_cancel to i8*
>
> I1 tmp = icmp ne i8* tmp0, i8* null
>
> br i1 tmp, label %bb23, label %bb25
>
> Thanks
>
> Sreekumar
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110819/91905327/attachment.html>
More information about the llvm-dev
mailing list