[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