[llvm-dev] Inline function not eventually inlined is removed

David Blaikie via llvm-dev llvm-dev at lists.llvm.org
Fri Jul 30 09:46:02 PDT 2021


You're probably looking for some documentation about C inline semantics:
https://www.iar.com/knowledge/support/technical-notes/compiler/linker-error-undefined-external-for-inline-functions/

On Fri, Jul 30, 2021 at 9:16 AM Mariusz Sikora via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

> Hello,
>
> I'm trying to understand why LLVM-12 is removing function which is marked
> inline despite the fact it was not inlined inside caller. Caller function
> still has a call to inline function and compilation is failing because of a
> lack of the symbol.
>
> Looking at debug logs I see:
>
> Inliner visiting SCC: sort: 1 call sites.
>       Analyzing call of calculate... (caller:sort)
>       .
>       Cost: 960
>       Threshold: 487
>     NOT Inlining (cost=960, threshold=487), Call:   call void
> @calculate(i32* %a, i32* %b)
>
> Code:
> int global = 0;
> void inline calculate(int a[100], int b[100]) {
>     int i;
> #pragma unroll
>     for (i = 0; i < 50; i++) {
>         a[i] = b[i] + a[i];
>     }
> }
>
> int sort(int a[100], int b[100]) {
>     calculate(a, b);
>     return a[20] + b[30] + global;
> }
>
> cli: clang -O3 -c inline1.c -o inline1_clang.o
>
> ll file:
> ; Function Attrs: nounwind uwtable
>  define dso_local i32 @sort(i32* %a, i32* %b) local_unnamed_addr #0 {
> entry:
>    tail call void @calculate(i32* %a, i32* %b)
>    %arrayidx = getelementptr inbounds i32, i32* %a, i64 20
>    %0 = load i32, i32* %arrayidx, align 4, !tbaa !2
>    %arrayidx1 = getelementptr inbounds i32, i32* %b, i64 30
>    %1 = load i32, i32* %arrayidx1, align 4, !tbaa !2
>    %add = add nsw i32 %1, %0
>    %2 = load i32, i32* @global, align 4, !tbaa !2
>    %add2 = add nsw i32 %add, %2
>    ret i32 %add2
> }
>
> ; Function Attrs: inlinehint nounwind uwtable
>  declare dso_local void @calculate(i32*, i32*) local_unnamed_addr #1
>
> Thanks
> Mariusz Sikora
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://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/20210730/982977ac/attachment.html>


More information about the llvm-dev mailing list