1; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr4 \
2; RUN:     -mattr=-altivec -function-sections < %s | \
3; RUN:   FileCheck --check-prefix=ASM %s
4; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr4 \
5; RUN:     -mattr=-altivec -function-sections < %s | \
6; RUN:   FileCheck --check-prefix=ASM %s
7
8@alias_foo = alias void (...), bitcast (void ()* @foo to void (...)*)
9
10define void @foo() {
11entry:
12  ret void
13}
14
15define hidden void @hidden_foo() {
16entry:
17  ret void
18}
19
20define void @bar() {
21entry:
22  call void @foo()
23  call void @static_overalign_foo()
24  call void bitcast (void (...)* @alias_foo to void ()*)()
25  call void bitcast (void (...)* @extern_foo to void ()*)()
26  call void @hidden_foo()
27  ret void
28}
29
30declare void @extern_foo(...)
31
32define internal void @static_overalign_foo() align 64 {
33entry:
34  ret void
35}
36
37; ASM:        .csect .foo[PR],5
38; ASM-NEXT:  	.globl	foo[DS]                         # -- Begin function foo
39; ASM-NEXT:  	.globl	.foo[PR]
40; ASM-NEXT:  	.align	4
41; ASM-NEXT:  	.csect foo[DS]
42; ASM-NEXT:  alias_foo:                                # @foo
43; ASM-NEXT:  	.vbyte	{{[0-9]+}}, .foo[PR]
44; ASM-NEXT:  	.vbyte	{{[0-9]+}}, TOC[TC0]
45; ASM-NEXT:  	.vbyte	{{[0-9]+}}, 0
46; ASM-NEXT:  	.csect .foo[PR],5
47; ASM-NEXT:  .alias_foo:
48; ASM-NEXT:  # %bb.0:                                # %entry
49; ASM-NEXT:  	blr
50; ASM:        .csect .hidden_foo[PR],5
51; ASM-NEXT:  	.globl	hidden_foo[DS],hidden           # -- Begin function hidden_foo
52; ASM-NEXT:  	.globl	.hidden_foo[PR],hidden
53; ASM-NEXT:  	.align	4
54; ASM-NEXT:  	.csect hidden_foo[DS]
55; ASM-NEXT:  	.vbyte	{{[0-9]+}}, .hidden_foo[PR]              # @hidden_foo
56; ASM-NEXT:  	.vbyte	{{[0-9]+}}, TOC[TC0]
57; ASM-NEXT:  	.vbyte	{{[0-9]+}}, 0
58; ASM-NEXT:  	.csect .hidden_foo[PR]
59; ASM-NEXT:  # %bb.0:                                # %entry
60; ASM-NEXT:  	blr
61; ASM:        .csect .bar[PR],5
62; ASM-NEXT:  	.globl	bar[DS]                         # -- Begin function bar
63; ASM-NEXT:  	.globl	.bar[PR]
64; ASM-NEXT:  	.align	4
65; ASM-NEXT:  	.csect bar[DS]
66; ASM-NEXT:  	.vbyte	{{[0-9]+}}, .bar[PR]                     # @bar
67; ASM-NEXT:  	.vbyte	{{[0-9]+}}, TOC[TC0]
68; ASM-NEXT:  	.vbyte	{{[0-9]+}}, 0
69; ASM-NEXT:  	.csect .bar[PR],5
70; ASM-NEXT:  # %bb.0:                                # %entry
71; ASM:        bl .foo[PR]
72; ASM-NEXT:  	nop
73; ASM-NEXT:  	bl .static_overalign_foo[PR]
74; ASM-NEXT:  	nop
75; ASM-NEXT:  	bl .alias_foo
76; ASM-NEXT:  	nop
77; ASM-NEXT:  	bl .extern_foo
78; ASM-NEXT:  	nop
79; ASM-NEXT:  	bl .hidden_foo[PR]
80; ASM-NEXT:  	nop
81; ASM:        .csect .static_overalign_foo[PR],6
82; ASM-NEXT:  	.lglobl	static_overalign_foo[DS]                  # -- Begin function static_overalign_foo
83; ASM-NEXT:  	.lglobl	.static_overalign_foo[PR]
84; ASM-NEXT:  	.align	6
85; ASM-NEXT:  	.csect static_overalign_foo[DS]
86; ASM-NEXT:  	.vbyte	{{[0-9]+}}, .static_overalign_foo[PR]              # @static_overalign_foo
87; ASM-NEXT:  	.vbyte	{{[0-9]+}}, TOC[TC0]
88; ASM-NEXT:  	.vbyte	{{[0-9]+}}, 0
89; ASM-NEXT:  	.csect .static_overalign_foo[PR],6
90; ASM-NEXT:  # %bb.0:                                # %entry
91; ASM-NEXT:  	blr
92; ASM:        .extern	.extern_foo
93; ASM-NEXT:  	.extern	extern_foo[DS]
94; ASM-NEXT:  	.globl	alias_foo
95; ASM-NEXT:  	.globl	.alias_foo
96