mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
741ec7aba1
Summary: This patch implements -ffunction-sections on AIX. This patch focuses on assembly generation. Follow-on patch needs to handle: 1. -ffunction-sections implication for jump table. 2. Object file generation path and associated testing. Differential Revision: https://reviews.llvm.org/D83875
96 lines
3.2 KiB
LLVM
96 lines
3.2 KiB
LLVM
; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr4 \
|
|
; RUN: -mattr=-altivec -function-sections < %s | \
|
|
; RUN: FileCheck --check-prefix=ASM %s
|
|
; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr4 \
|
|
; RUN: -mattr=-altivec -function-sections < %s | \
|
|
; RUN: FileCheck --check-prefix=ASM %s
|
|
|
|
@alias_foo = alias void (...), bitcast (void ()* @foo to void (...)*)
|
|
|
|
define void @foo() {
|
|
entry:
|
|
ret void
|
|
}
|
|
|
|
define hidden void @hidden_foo() {
|
|
entry:
|
|
ret void
|
|
}
|
|
|
|
define void @bar() {
|
|
entry:
|
|
call void @foo()
|
|
call void @static_overalign_foo()
|
|
call void bitcast (void (...)* @alias_foo to void ()*)()
|
|
call void bitcast (void (...)* @extern_foo to void ()*)()
|
|
call void @hidden_foo()
|
|
ret void
|
|
}
|
|
|
|
declare void @extern_foo(...)
|
|
|
|
define internal void @static_overalign_foo() align 64 {
|
|
entry:
|
|
ret void
|
|
}
|
|
|
|
; ASM: .csect .foo[PR],2
|
|
; ASM-NEXT: .globl foo[DS] # -- Begin function foo
|
|
; ASM-NEXT: .globl .foo[PR]
|
|
; ASM-NEXT: .align 4
|
|
; ASM-NEXT: .csect foo[DS]
|
|
; ASM-NEXT: alias_foo: # @foo
|
|
; ASM-NEXT: .vbyte {{[0-9]+}}, .foo[PR]
|
|
; ASM-NEXT: .vbyte {{[0-9]+}}, TOC[TC0]
|
|
; ASM-NEXT: .vbyte {{[0-9]+}}, 0
|
|
; ASM-NEXT: .csect .foo[PR],2
|
|
; ASM-NEXT: .alias_foo:
|
|
; ASM-NEXT: # %bb.0: # %entry
|
|
; ASM-NEXT: blr
|
|
; ASM: .csect .hidden_foo[PR],2
|
|
; ASM-NEXT: .globl hidden_foo[DS],hidden # -- Begin function hidden_foo
|
|
; ASM-NEXT: .globl .hidden_foo[PR],hidden
|
|
; ASM-NEXT: .align 4
|
|
; ASM-NEXT: .csect hidden_foo[DS]
|
|
; ASM-NEXT: .vbyte {{[0-9]+}}, .hidden_foo[PR] # @hidden_foo
|
|
; ASM-NEXT: .vbyte {{[0-9]+}}, TOC[TC0]
|
|
; ASM-NEXT: .vbyte {{[0-9]+}}, 0
|
|
; ASM-NEXT: .csect .hidden_foo[PR]
|
|
; ASM-NEXT: # %bb.0: # %entry
|
|
; ASM-NEXT: blr
|
|
; ASM: .csect .bar[PR],2
|
|
; ASM-NEXT: .globl bar[DS] # -- Begin function bar
|
|
; ASM-NEXT: .globl .bar[PR]
|
|
; ASM-NEXT: .align 4
|
|
; ASM-NEXT: .csect bar[DS]
|
|
; ASM-NEXT: .vbyte {{[0-9]+}}, .bar[PR] # @bar
|
|
; ASM-NEXT: .vbyte {{[0-9]+}}, TOC[TC0]
|
|
; ASM-NEXT: .vbyte {{[0-9]+}}, 0
|
|
; ASM-NEXT: .csect .bar[PR],2
|
|
; ASM-NEXT: # %bb.0: # %entry
|
|
; ASM: bl .foo[PR]
|
|
; ASM-NEXT: nop
|
|
; ASM-NEXT: bl .static_overalign_foo[PR]
|
|
; ASM-NEXT: nop
|
|
; ASM-NEXT: bl .alias_foo
|
|
; ASM-NEXT: nop
|
|
; ASM-NEXT: bl .extern_foo
|
|
; ASM-NEXT: nop
|
|
; ASM-NEXT: bl .hidden_foo[PR]
|
|
; ASM-NEXT: nop
|
|
; ASM: .csect .static_overalign_foo[PR],6
|
|
; ASM-NEXT: .lglobl static_overalign_foo[DS] # -- Begin function static_overalign_foo
|
|
; ASM-NEXT: .lglobl .static_overalign_foo[PR]
|
|
; ASM-NEXT: .align 6
|
|
; ASM-NEXT: .csect static_overalign_foo[DS]
|
|
; ASM-NEXT: .vbyte {{[0-9]+}}, .static_overalign_foo[PR] # @static_overalign_foo
|
|
; ASM-NEXT: .vbyte {{[0-9]+}}, TOC[TC0]
|
|
; ASM-NEXT: .vbyte {{[0-9]+}}, 0
|
|
; ASM-NEXT: .csect .static_overalign_foo[PR],6
|
|
; ASM-NEXT: # %bb.0: # %entry
|
|
; ASM-NEXT: blr
|
|
; ASM: .extern .extern_foo
|
|
; ASM-NEXT: .extern extern_foo[DS]
|
|
; ASM-NEXT: .globl alias_foo
|
|
; ASM-NEXT: .globl .alias_foo
|