1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-22 18:54:02 +01:00
llvm-mirror/test/CodeGen/PowerPC/aix-xcoff-funcsect.ll
jasonliu 741ec7aba1 [XCOFF][AIX] Enable -ffunction-sections
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
2020-07-30 13:30:01 +00:00

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