Md. Syadus Sefat via llvm-dev
2019-Jan-21 00:30 UTC
[llvm-dev] Need help: How to turn off the constant folding optimization in llvm
Hi, I am new to clang and llvm. I'm trying to generate an unoptimized
version of bit code from a c source code. I found that the generated bit
code is having the constant folding optimization which I don't want.
I'm using this command: clang -O0 -Xclang -disable-O0-optnone test1.c -S
-emit-llvm -o test1.ll
The test1.c file has the following code:
int test(){
int y;
y = 2 * 4;
return y;
}
The content of the test1.ll file:
[image: image.png]
Instead of generating an instruction for multiplying 2 and 4, it is
directly storing the value 8 by doing the constant folding operation.
store i32 8, i32* %1, align 4
It would be really nice if someone kindly let me know what I am missing and
how should I turn off the constant folding optimization.
Thank you.
Regards,
SS
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20190120/bf25e20b/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 89245 bytes
Desc: not available
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20190120/bf25e20b/attachment-0001.png>
Cranmer, Joshua via llvm-dev
2019-Jan-22 21:30 UTC
[llvm-dev] Need help: How to turn off the constant folding optimization in llvm
The way that the front-end lowers code to IR causes this sort of constant
folding to happen even before any LLVM IR is generated. Essentially, when you do
the AST traversal, you’re going to essentially see the following code get run:
IRBuilder<> Builder;
Value *LHS = Builder.getInt32(2);
Value *RHS = Builder.getInt32(4);
// LHS and RHS are ConstantInt values because they’re constant expressions.
Value *Res = Builder.CreateMul(LHS, RHS); // Because LHS and RHS are constant
values, the IRBuilder folds this to a constant expression.
This constant folding cannot be turned off. (I’m also assuming there’s no other
constant folding going on at the Clang AST level).
From: llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] On Behalf Of Md.
Syadus Sefat via llvm-dev
Sent: Sunday, January 20, 2019 19:30
To: llvm-dev at lists.llvm.org
Subject: [llvm-dev] Need help: How to turn off the constant folding optimization
in llvm
Hi, I am new to clang and llvm. I'm trying to generate an unoptimized
version of bit code from a c source code. I found that the generated bit code is
having the constant folding optimization which I don't want.
I'm using this command: clang -O0 -Xclang -disable-O0-optnone test1.c -S
-emit-llvm -o test1.ll
The test1.c file has the following code:
int test(){
int y;
y = 2 * 4;
return y;
}
The content of the test1.ll file:
[image.png]
Instead of generating an instruction for multiplying 2 and 4, it is directly
storing the value 8 by doing the constant folding operation.
store i32 8, i32* %1, align 4
It would be really nice if someone kindly let me know what I am missing and how
should I turn off the constant folding optimization.
Thank you.
Regards,
SS
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20190122/61bcca9b/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image002.png
Type: image/png
Size: 63522 bytes
Desc: image002.png
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20190122/61bcca9b/attachment-0001.png>