[PATCH] D12087: always_inline codegen rewrite

H.J. Lu via cfe-commits cfe-commits at lists.llvm.org
Fri Sep 11 18:02:50 PDT 2015


On Fri, Sep 11, 2015 at 4:45 PM, Evgenii Stepanov <eugenis at google.com> wrote:
> Does it say that there is no entry basic block? I.e. the output
> apparently looks like
>
> define void @h() #1 {
>   store void ()* @f1, void ()** @p, align 8
>
> Could you confirm it? Never seen this behavior.
>
> I'm going to revert the change due to this and also one broken gdb
> test (something wrong with debug info in the code that has been
> always-inlined twice).

I got

[hjl at gnu-mic-2 llvm-clang]$
/export/build/gnu/llvm-clang/build-x86_64-linux/./bin/clang  -target
x86_64-pc-linux-gnu -mllvm -disable-llvm-optzns -emit-llvm -S -o -
/export/gnu/import/git/llvm/tools/clang/test/CodeGen/always_inline.c
; ModuleID = '/export/gnu/import/git/llvm/tools/clang/test/CodeGen/always_inline.c'
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-linux-gnu"

; Function Attrs: nounwind uwtable
define i32 @f1() #0 {
  %1 = call i32 @f0.alwaysinline()
  ret i32 %1
}

; Function Attrs: alwaysinline inlinehint nounwind uwtable
define internal i32 @f2.alwaysinline() #1 {
  ret i32 7
}

; Function Attrs: inlinehint nounwind uwtable
define i32 @f2() #2 {
entry:
  %0 = musttail call i32 @f2.alwaysinline() #2
  ret i32 %0
}

; Function Attrs: nounwind uwtable
define i32 @f3() #0 {
  %1 = call i32 @f2.alwaysinline()
  ret i32 %1
}

; Function Attrs: alwaysinline nounwind uwtable
define internal i32 @f0.alwaysinline() #3 {
  ret i32 1
}

attributes #0 = { nounwind uwtable "disable-tail-calls"="false"
"less-precise-fpmad"="false" "no-frame-pointer-elim"="true"
"no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false"
"no-nans-fp-math"="false" "stack-protector-buffer-size"="8"
"target-cpu"="x86-64" "target-features"="+sse,+sse2"
"unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { alwaysinline inlinehint nounwind uwtable
"disable-tail-calls"="false" "less-precise-fpmad"="false"
"no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"
"no-infs-fp-math"="false" "no-nans-fp-math"="false"
"stack-protector-buffer-size"="8" "target-cpu"="x86-64"
"target-features"="+sse,+sse2" "unsafe-fp-math"="false"
"use-soft-float"="false" }
attributes #2 = { inlinehint nounwind uwtable
"disable-tail-calls"="false" "less-precise-fpmad"="false"
"no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"
"no-infs-fp-math"="false" "no-nans-fp-math"="false"
"stack-protector-buffer-size"="8" "target-cpu"="x86-64"
"target-features"="+sse,+sse2" "unsafe-fp-math"="false"
"use-soft-float"="false" }
attributes #3 = { alwaysinline nounwind uwtable
"disable-tail-calls"="false" "less-precise-fpmad"="false"
"no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"
"no-infs-fp-math"="false" "no-nans-fp-math"="false"
"stack-protector-buffer-size"="8" "target-cpu"="x86-64"
"target-features"="+sse,+sse2" "unsafe-fp-math"="false"
"use-soft-float"="false" }

!llvm.ident = !{!0}

!0 = !{!"clang version 3.8.0 (http://llvm.org/git/clang.git
4c682cf50f928f82e286df97d10a3d1fcf68e1a1)
(http://llvm.org/git/llvm.git
125be70dbf9784ef4fab69633afa067c1cceffc9)"}
[hjl at gnu-mic-2 llvm-clang]$
[hjl at gnu-mic-2 llvm-clang]$
/export/build/gnu/llvm-clang/build-x86_64-linux/./bin/clang  -target
x86_64-pc-linux-gnu -mllvm -disable-llvm-optzns -emit-llvm -S -o -
/export/gnu/import/git/llvm/tools/clang/test/CodeGen/always_inline.c |
/export/build/gnu/llvm-clang/build-x86_64-linux/./bin/FileCheck
/export/gnu/import/git/llvm/tools/clang/test/CodeGen/always_inline.c
--check-prefix=CHECK-NO-OPTZNS
/export/gnu/import/git/llvm/tools/clang/test/CodeGen/always_inline.c:26:26:
error: expected string not found in input
// CHECK-NO-OPTZNS-NEXT: entry:
                         ^
<stdin>:24:18: note: scanning from here
define i32 @f3() #0 {
                 ^
<stdin>:29:12: note: possible intended match here
; Function Attrs: alwaysinline nounwind uwtable
           ^
[hjl at gnu-mic-2 llvm-clang]$


More information about the cfe-commits mailing list