[PATCH] D35126: [LTO] Add a test for ThinLTO + --wrap

Rafael Avila de Espindola via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 7 09:26:30 PDT 2017


LGTM, but any idea why the tail call in thinklto but not lto?

Cheers,
Rafael

Davide Italiano via Phabricator <reviews at reviews.llvm.org> writes:

> davide created this revision.
> Herald added subscribers: inglorion, emaste.
>
> We should get this right after r307303.
>
>
> https://reviews.llvm.org/D35126
>
> Files:
>   test/ELF/lto/wrap-1.ll
>   test/ELF/lto/wrap-2.ll
>
>
> Index: test/ELF/lto/wrap-2.ll
> ===================================================================
> --- test/ELF/lto/wrap-2.ll
> +++ test/ELF/lto/wrap-2.ll
> @@ -1,18 +1,32 @@
>  ; REQUIRES: x86
> +; LTO
>  ; RUN: llvm-as %s -o %t.o
>  ; RUN: llvm-as %S/Inputs/wrap-bar.ll -o %t1.o
>  ; RUN: ld.lld %t.o %t1.o -shared -o %t.so -wrap=bar
>  ; RUN: llvm-objdump -d %t.so | FileCheck %s
>  ; RUN: llvm-readobj -t %t.so | FileCheck -check-prefix=BIND %s
>  
> +; ThinLTO
> +; RUN: opt -module-summary %s -o %t.o
> +; RUN: opt -module-summary %S/Inputs/wrap-bar.ll -o %t1.o
> +; RUN: ld.lld %t.o %t1.o -shared -o %t.so -wrap=bar
> +; RUN: llvm-objdump -d %t.so | FileCheck %s -check-prefix=THIN
> +; RUN: llvm-readobj -t %t.so | FileCheck -check-prefix=BIND %s
> +
>  ; Make sure that calls in foo() are not eliminated and that bar is
>  ; routed to __wrap_bar and __real_bar is routed to bar.
>  
>  ; CHECK:      foo:
>  ; CHECK-NEXT: pushq	%rax
>  ; CHECK-NEXT: callq{{.*}}<__wrap_bar>
>  ; CHECK-NEXT: callq{{.*}}<bar>
>  
> +; THIN:      foo:
> +; THIN-NEXT: pushq	%rax
> +; THIN-NEXT: callq{{.*}}<__wrap_bar>
> +; THIN-NEXT: popq  %rax
> +; THIN-NEXT: jmp{{.*}}<bar>
> +
>  ; Check that bar and __wrap_bar retain their original binding.
>  ; BIND:      Name: bar
>  ; BIND-NEXT: Value:
> Index: test/ELF/lto/wrap-1.ll
> ===================================================================
> --- test/ELF/lto/wrap-1.ll
> +++ test/ELF/lto/wrap-1.ll
> @@ -1,9 +1,16 @@
>  ; REQUIRES: x86
> +; LTO
>  ; RUN: llvm-as %s -o %t.o
>  ; RUN: ld.lld %t.o -o %t.out -wrap=bar -save-temps
>  ; RUN: llvm-readobj -t %t.out | FileCheck %s
>  ; RUN: cat %t.out.resolution.txt | FileCheck -check-prefix=RESOLS %s
>  
> +; ThinLTO
> +; RUN: opt -module-summary %s -o %t.o
> +; RUN: ld.lld %t.o -o %t.out -wrap=bar -save-temps
> +; RUN: llvm-readobj -t %t.out | FileCheck %s
> +; RUN: cat %t.out.resolution.txt | FileCheck -check-prefix=RESOLS %s
> +
>  ; CHECK:      Name: __wrap_bar
>  ; CHECK-NEXT: Value:
>  ; CHECK-NEXT: Size:
>
>
> Index: test/ELF/lto/wrap-2.ll
> ===================================================================
> --- test/ELF/lto/wrap-2.ll
> +++ test/ELF/lto/wrap-2.ll
> @@ -1,18 +1,32 @@
>  ; REQUIRES: x86
> +; LTO
>  ; RUN: llvm-as %s -o %t.o
>  ; RUN: llvm-as %S/Inputs/wrap-bar.ll -o %t1.o
>  ; RUN: ld.lld %t.o %t1.o -shared -o %t.so -wrap=bar
>  ; RUN: llvm-objdump -d %t.so | FileCheck %s
>  ; RUN: llvm-readobj -t %t.so | FileCheck -check-prefix=BIND %s
>  
> +; ThinLTO
> +; RUN: opt -module-summary %s -o %t.o
> +; RUN: opt -module-summary %S/Inputs/wrap-bar.ll -o %t1.o
> +; RUN: ld.lld %t.o %t1.o -shared -o %t.so -wrap=bar
> +; RUN: llvm-objdump -d %t.so | FileCheck %s -check-prefix=THIN
> +; RUN: llvm-readobj -t %t.so | FileCheck -check-prefix=BIND %s
> +
>  ; Make sure that calls in foo() are not eliminated and that bar is
>  ; routed to __wrap_bar and __real_bar is routed to bar.
>  
>  ; CHECK:      foo:
>  ; CHECK-NEXT: pushq	%rax
>  ; CHECK-NEXT: callq{{.*}}<__wrap_bar>
>  ; CHECK-NEXT: callq{{.*}}<bar>
>  
> +; THIN:      foo:
> +; THIN-NEXT: pushq	%rax
> +; THIN-NEXT: callq{{.*}}<__wrap_bar>
> +; THIN-NEXT: popq  %rax
> +; THIN-NEXT: jmp{{.*}}<bar>
> +
>  ; Check that bar and __wrap_bar retain their original binding.
>  ; BIND:      Name: bar
>  ; BIND-NEXT: Value:
> Index: test/ELF/lto/wrap-1.ll
> ===================================================================
> --- test/ELF/lto/wrap-1.ll
> +++ test/ELF/lto/wrap-1.ll
> @@ -1,9 +1,16 @@
>  ; REQUIRES: x86
> +; LTO
>  ; RUN: llvm-as %s -o %t.o
>  ; RUN: ld.lld %t.o -o %t.out -wrap=bar -save-temps
>  ; RUN: llvm-readobj -t %t.out | FileCheck %s
>  ; RUN: cat %t.out.resolution.txt | FileCheck -check-prefix=RESOLS %s
>  
> +; ThinLTO
> +; RUN: opt -module-summary %s -o %t.o
> +; RUN: ld.lld %t.o -o %t.out -wrap=bar -save-temps
> +; RUN: llvm-readobj -t %t.out | FileCheck %s
> +; RUN: cat %t.out.resolution.txt | FileCheck -check-prefix=RESOLS %s
> +
>  ; CHECK:      Name: __wrap_bar
>  ; CHECK-NEXT: Value:
>  ; CHECK-NEXT: Size:


More information about the llvm-commits mailing list