[llvm-dev] Need help in understanding llvm optimization

SANGEETA CHOWDHARY via llvm-dev
Sun, 12 Aug 2018 17:11:54 -0000

Cool, thank you so much.

On Sat, Aug 11, 2018 at 8:57 PM, Bruce Hoult <brucehoult at sifive.com>
wrote:

> 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/20180812/3c4db320/attachment.html>