[llvm-dev] Need help in understanding llvm optimization
SANGEETA CHOWDHARY via llvm-dev
llvm-dev at lists.llvm.org
Sun Aug 12 10:11:54 PDT 2018
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>
More information about the llvm-dev
mailing list