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