[llvm-dev] Need help in understanding llvm optimization
Bruce Hoult via llvm-dev
llvm-dev at lists.llvm.org
Sat Aug 11 17:57:32 PDT 2018
You might find it useful to write functions that take arguments (of unknown
value). If the function has external linkage (the default) then the
compiler doesn't know who else might call it and has to keep it around,
even if it inlines some copies of it:
double foo(double x){
double y = (x + 1) - x;
return y;
}
If you compile it with "-c" or "-S" then you don't need a main() at all.
On Sat, Aug 11, 2018 at 12:30 PM, SANGEETA CHOWDHARY via llvm-dev <
llvm-dev at lists.llvm.org> wrote:
> Hi,
>
> I have below code in C -
>
> int main() {
>
> double x,y;
>
> x = 1e16;
>
> y = (x + 1) - x;
>
> printf("y:%e\n", y);
>
> return 0;
>
> }
>
> llvm bitcode looks like this for this function -
>
>
> ; Function Attrs: nounwind uwtable
>
> define dso_local i32 @main() local_unnamed_addr #0 {
>
> entry:
>
> %call = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4
> x i8], [4 x i8]* @.str, i64 0, i64 0), double 0.000000e+00)
>
> ret i32 0
>
> }
>
> I am not able to understand how addition and subtraction are performed in
> this code. There is no fadd or fsub instruction. How llvm knows that result
> of y is 0?
>
> Is there any way to disable this in llvm?
>
>
> Any help would be much appreciated.
>
>
> Regards,
>
> Sangeeta
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180811/f414913f/attachment.html>
More information about the llvm-dev
mailing list