[llvm-dev] Need help in understanding llvm optimization

Bruce Hoult via llvm-dev
Sun, 12 Aug 2018 00:57:32 -0000

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>