diff options
| author | George Rimar <grimar@accesssoftek.com> | 2018-06-22 10:53:47 +0000 |
|---|---|---|
| committer | George Rimar <grimar@accesssoftek.com> | 2018-06-22 10:53:47 +0000 |
| commit | dcf59c548009b983fd78d2625eed79f319d42e31 (patch) | |
| tree | a9bc21a99cb668cd06e06bdac2a7d7a4633acd50 /llvm/test | |
| parent | e0a6eb1f4f3459a162d23377b421dba545f8fd43 (diff) | |
| download | bcm5719-llvm-dcf59c548009b983fd78d2625eed79f319d42e31.tar.gz bcm5719-llvm-dcf59c548009b983fd78d2625eed79f319d42e31.zip | |
Recommit r335333 "[MC] - Add .stack_size sections into groups and link them with .text"
With compilation fix.
Original commit message:
D39788 added a '.stack-size' section containing metadata on function stack sizes
to output ELF files behind the new -stack-size-section flag.
This change does following two things on top:
1) Imagine the case when there are -ffunction-sections flag given and there are text sections in COMDATs.
The patch adds a '.stack-size' section into corresponding COMDAT group, so that linker will be able to
eliminate them fast during resolving the COMDATs.
2) Patch sets a SHF_LINK_ORDER flag and links '.stack-size' with the corresponding .text.
With that linker will be able to do -gc-sections on dead stack sizes sections.
Differential revision: https://reviews.llvm.org/D46874
llvm-svn: 335336
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/CodeGen/ARM/stack-size-section.ll | 4 | ||||
| -rw-r--r-- | llvm/test/CodeGen/SystemZ/stack-size-section.ll | 6 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/stack-size-section-function-sections.ll | 26 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/stack-size-section.ll | 21 |
4 files changed, 50 insertions, 7 deletions
diff --git a/llvm/test/CodeGen/ARM/stack-size-section.ll b/llvm/test/CodeGen/ARM/stack-size-section.ll index 142261a9f2c..10f156439e3 100644 --- a/llvm/test/CodeGen/ARM/stack-size-section.ll +++ b/llvm/test/CodeGen/ARM/stack-size-section.ll @@ -2,7 +2,7 @@ ; CHECK-LABEL: func1: ; CHECK-NEXT: .Lfunc_begin0: -; CHECK: .section .stack_sizes,"",%progbits +; CHECK: .section .stack_sizes,"o",%progbits,.text,unique,0 ; CHECK-NEXT: .long .Lfunc_begin0 ; CHECK-NEXT: .byte 8 define void @func1(i32, i32) #0 { @@ -13,7 +13,7 @@ define void @func1(i32, i32) #0 { ; CHECK-LABEL: func2: ; CHECK-NEXT: .Lfunc_begin1: -; CHECK: .section .stack_sizes,"",%progbits +; CHECK: .section .stack_sizes,"o",%progbits,.text,unique,0 ; CHECK-NEXT: .long .Lfunc_begin1 ; CHECK-NEXT: .byte 16 define void @func2() #0 { diff --git a/llvm/test/CodeGen/SystemZ/stack-size-section.ll b/llvm/test/CodeGen/SystemZ/stack-size-section.ll index f0e421f957f..6aacc705115 100644 --- a/llvm/test/CodeGen/SystemZ/stack-size-section.ll +++ b/llvm/test/CodeGen/SystemZ/stack-size-section.ll @@ -2,7 +2,7 @@ ; CHECK-LABEL: func1: ; CHECK-NEXT: .Lfunc_begin0: -; CHECK: .section .stack_sizes,"",@progbits +; CHECK: .section .stack_sizes,"o",@progbits,.text,unique,0 ; CHECK-NEXT: .quad .Lfunc_begin0 ; CHECK-NEXT: .byte 0 define void @func1(i32, i32) #0 { @@ -11,7 +11,7 @@ define void @func1(i32, i32) #0 { ; CHECK-LABEL: func2: ; CHECK-NEXT: .Lfunc_begin1: -; CHECK: .section .stack_sizes,"",@progbits +; CHECK: .section .stack_sizes,"o",@progbits,.text,unique,0 ; CHECK-NEXT: .quad .Lfunc_begin1 ; CHECK-NEXT: .ascii "\250\001" define void @func2(i32, i32) #0 { @@ -22,7 +22,7 @@ define void @func2(i32, i32) #0 { ; CHECK-LABEL: func3: ; CHECK-NEXT: .Lfunc_begin2: -; CHECK: .section .stack_sizes,"",@progbits +; CHECK: .section .stack_sizes,"o",@progbits,.text,unique,0 ; CHECK-NEXT: .quad .Lfunc_begin2 ; CHECK-NEXT: .ascii "\250\001" define void @func3() #0 { diff --git a/llvm/test/CodeGen/X86/stack-size-section-function-sections.ll b/llvm/test/CodeGen/X86/stack-size-section-function-sections.ll new file mode 100644 index 00000000000..c352bfe032c --- /dev/null +++ b/llvm/test/CodeGen/X86/stack-size-section-function-sections.ll @@ -0,0 +1,26 @@ +; RUN: llc < %s -mtriple=x86_64-linux -stack-size-section -function-sections | FileCheck %s + +; Check we add SHF_LINK_ORDER for .stack_sizes and link it with the corresponding .text sections. +; CHECK: .section .text._Z3barv,"ax",@progbits +; CHECK: .section .stack_sizes,"o",@progbits,.text._Z3barv,unique,0 +; CHECK: .section .text._Z3foov,"ax",@progbits +; CHECK: .section .stack_sizes,"o",@progbits,.text._Z3foov,unique,1 + +; Check we add .stack_size section to a COMDAT group with the corresponding .text section if such a COMDAT exists. +; CHECK: .section .text._Z4fooTIiET_v,"axG",@progbits,_Z4fooTIiET_v,comdat +; CHECK: .section .stack_sizes,"Go",@progbits,_Z4fooTIiET_v,comdat,.text._Z4fooTIiET_v,unique,2 + +$_Z4fooTIiET_v = comdat any + +define dso_local i32 @_Z3barv() { + ret i32 0 +} + +define dso_local i32 @_Z3foov() { + %1 = call i32 @_Z4fooTIiET_v() + ret i32 %1 +} + +define linkonce_odr dso_local i32 @_Z4fooTIiET_v() comdat { + ret i32 0 +} diff --git a/llvm/test/CodeGen/X86/stack-size-section.ll b/llvm/test/CodeGen/X86/stack-size-section.ll index 80fa2ccf6cc..7e7ba5b9d4e 100644 --- a/llvm/test/CodeGen/X86/stack-size-section.ll +++ b/llvm/test/CodeGen/X86/stack-size-section.ll @@ -2,7 +2,7 @@ ; CHECK-LABEL: func1: ; CHECK-NEXT: .Lfunc_begin0: -; CHECK: .section .stack_sizes,"",@progbits +; CHECK: .section .stack_sizes,"o",@progbits ; CHECK-NEXT: .quad .Lfunc_begin0 ; CHECK-NEXT: .byte 8 define void @func1(i32, i32) #0 { @@ -13,7 +13,7 @@ define void @func1(i32, i32) #0 { ; CHECK-LABEL: func2: ; CHECK-NEXT: .Lfunc_begin1: -; CHECK: .section .stack_sizes,"",@progbits +; CHECK: .section .stack_sizes,"o",@progbits ; CHECK-NEXT: .quad .Lfunc_begin1 ; CHECK-NEXT: .byte 24 define void @func2() #0 { @@ -22,6 +22,23 @@ define void @func2() #0 { ret void } +; Check that we still put .stack_sizes into the corresponding COMDAT group if any. +; CHECK: .section .text._Z4fooTIiET_v,"axG",@progbits,_Z4fooTIiET_v,comdat +; CHECK: .section .stack_sizes,"Go",@progbits,_Z4fooTIiET_v,comdat,.text._Z4fooTIiET_v,unique,1 +$_Z4fooTIiET_v = comdat any +define linkonce_odr dso_local i32 @_Z4fooTIiET_v() comdat { + ret i32 0 +} + +; Check that we assign a unique ID to .stack_sizes if it is linked with a unique .text section. +; CHECK: .section .text.func3,"ax",@progbits +; CHECK: .section .stack_sizes,"o",@progbits,.text.func3,unique,2 +define dso_local i32 @func3() section ".text.func3" { + %1 = alloca i32, align 4 + store i32 0, i32* %1, align 4 + ret i32 0 +} + ; CHECK-LABEL: dynalloc: ; CHECK-NOT: .section .stack_sizes define void @dynalloc(i32 %N) #0 { |

