[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