| ; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr4 -mattr=-altivec -data-sections=false < %s | \ | 
 | ; RUN:   FileCheck %s | 
 | ; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr4 -mattr=-altivec -data-sections=false < %s |\ | 
 | ; RUN:   FileCheck %s | 
 |  | 
 | ; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -filetype=obj %s -o %t.o | 
 | ; RUN: llvm-readobj --syms --auxiliary-header %t.o | FileCheck %s --check-prefixes=SYM,AUX32 | 
 |  | 
 | ; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -filetype=obj %s -o %t64.o | 
 | ; RUN: llvm-readobj --syms --auxiliary-header %t64.o | FileCheck %s --check-prefixes=SYM,AUX64 | 
 |  | 
 | @b =  global i32 0, align 4 | 
 | @b_h = hidden global i32 0, align 4 | 
 | @b_e = dllexport global i32 0, align 4 | 
 |  | 
 | define void @foo() { | 
 | entry: | 
 |   ret void | 
 | } | 
 |  | 
 | define hidden void @foo_h(ptr %ip) { | 
 | entry: | 
 |   ret void | 
 | } | 
 |  | 
 | define dllexport void @foo_e(ptr %ip) { | 
 | entry: | 
 |   ret void | 
 | } | 
 |  | 
 | define protected void @foo_protected(ptr %ip) { | 
 | entry: | 
 |   ret void | 
 | } | 
 |  | 
 | define weak hidden void @foo_weak_h() { | 
 | entry: | 
 |   ret void | 
 | } | 
 |  | 
 | define weak dllexport void @foo_weak_e() { | 
 | entry: | 
 |   ret void | 
 | } | 
 |  | 
 | @foo_p = global ptr @zoo_weak_extern_h, align 4 | 
 | declare extern_weak hidden void @zoo_weak_extern_h() | 
 | declare extern_weak dllexport void @zoo_weak_extern_e() | 
 |  | 
 | define i32 @main() { | 
 | entry: | 
 |   %call1= call i32 @bar_h(ptr @b_h) | 
 |   call void @foo_weak_h() | 
 |   %0 = load ptr, ptr @foo_p, align 4 | 
 |   call void %0() | 
 |   ret i32 0 | 
 | } | 
 |  | 
 | declare hidden i32 @bar_h(ptr) | 
 | declare dllexport i32 @bar_e(ptr) | 
 |  | 
 | ; CHECK:        .globl  foo[DS]{{[[:space:]]*([#].*)?$}} | 
 | ; CHECK:        .globl  .foo{{[[:space:]]*([#].*)?$}} | 
 | ; CHECK:        .globl  foo_h[DS],hidden | 
 | ; CHECK:        .globl  .foo_h,hidden | 
 | ; CHECK:        .globl  foo_e[DS],exported | 
 | ; CHECK:        .globl  .foo_e,exported | 
 | ; CHECK:        .globl  foo_protected[DS],protected | 
 | ; CHECK:        .globl  .foo_protected,protected | 
 | ; CHECK:        .weak   foo_weak_h[DS],hidden | 
 | ; CHECK:        .weak   .foo_weak_h,hidden | 
 | ; CHECK:        .weak   foo_weak_e[DS],exported | 
 | ; CHECK:        .weak   .foo_weak_e,exported | 
 |  | 
 | ; CHECK:        .globl  b{{[[:space:]]*([#].*)?$}} | 
 | ; CHECK:        .globl  b_h,hidden | 
 | ; CHECK:        .globl  b_e,exported | 
 |  | 
 | ; CHECK:        .weak   .zoo_weak_extern_h[PR],hidden | 
 | ; CHECK:        .weak   zoo_weak_extern_h[DS],hidden | 
 | ; CHECK:        .weak   .zoo_weak_extern_e[PR],exported | 
 | ; CHECK:        .weak   zoo_weak_extern_e[DS],exported | 
 | ; CHECK:        .extern .bar_h[PR],hidden | 
 | ; CHECK:        .extern bar_h[DS],hidden | 
 | ; CHECK:        .extern .bar_e[PR],exported | 
 | ; CHECK:        .extern bar_e[DS],exported | 
 |  | 
 | ; AUX32:       AuxiliaryHeader { | 
 | ; AUX32-NEXT:    Magic: 0x0 | 
 | ; AUX32-NEXT:    Version: 0x2 | 
 | ; AUX32-NEXT:    Size of .text section: 0x134 | 
 | ; AUX32-NEXT:    Size of .data section: 0x6C | 
 | ; AUX32-NEXT:    Size of .bss section: 0x0 | 
 | ; AUX32-NEXT:    Entry point address: 0x0 | 
 | ; AUX32-NEXT:    .text section start address: 0x0 | 
 | ; AUX32-NEXT:    .data section start address: 0x134 | 
 | ; AUX32-NEXT:  } | 
 |  | 
 | ; AUX64:       AuxiliaryHeader { | 
 | ; AUX64-NEXT:  } | 
 |  | 
 | ; SYM:         Name: .bar_h | 
 | ; SYM-NEXT:    Value (RelocatableAddress): 0x0 | 
 | ; SYM-NEXT:    Section: N_UNDEF | 
 | ; SYM-NEXT:    Type: 0x2000 | 
 | ; SYM-NEXT:    StorageClass: C_EXT (0x2) | 
 |  | 
 | ; SYM:         Name: zoo_weak_extern_h | 
 | ; SYM-NEXT:    Value (RelocatableAddress): 0x0 | 
 | ; SYM-NEXT:    Section: N_UNDEF | 
 | ; SYM-NEXT:    Type: 0x2000 | 
 | ; SYM-NEXT:    StorageClass: C_WEAKEXT (0x6F) | 
 |  | 
 | ; SYM:         Name: .zoo_weak_extern_h | 
 | ; SYM-NEXT:    Value (RelocatableAddress): 0x0 | 
 | ; SYM-NEXT:    Section: N_UNDEF | 
 | ; SYM-NEXT:    Type: 0x2000 | 
 | ; SYM-NEXT:    StorageClass: C_WEAKEXT (0x6F) | 
 |  | 
 | ; SYM:         Name: .zoo_weak_extern_e | 
 | ; SYM-NEXT:    Value (RelocatableAddress): 0x0 | 
 | ; SYM-NEXT:    Section: N_UNDEF | 
 | ; SYM-NEXT:    Type: 0x4000 | 
 | ; SYM-NEXT:    StorageClass: C_WEAKEXT (0x6F) | 
 |  | 
 | ; SYM:         Name: zoo_weak_extern_e | 
 | ; SYM-NEXT:    Value (RelocatableAddress): 0x0 | 
 | ; SYM-NEXT:    Section: N_UNDEF | 
 | ; SYM-NEXT:    Type: 0x4000 | 
 | ; SYM-NEXT:    StorageClass: C_WEAKEXT (0x6F) | 
 |  | 
 | ; SYM:         Name: bar_h | 
 | ; SYM-NEXT:    Value (RelocatableAddress): 0x0 | 
 | ; SYM-NEXT:    Section: N_UNDEF | 
 | ; SYM-NEXT:    Type: 0x2000 | 
 | ; SYM-NEXT:    StorageClass: C_EXT (0x2) | 
 |  | 
 | ; SYM:         Name: .bar_e | 
 | ; SYM-NEXT:    Value (RelocatableAddress): 0x0 | 
 | ; SYM-NEXT:    Section: N_UNDEF | 
 | ; SYM-NEXT:    Type: 0x4000 | 
 | ; SYM-NEXT:    StorageClass: C_EXT (0x2) | 
 |  | 
 | ; SYM:         Name: bar_e | 
 | ; SYM-NEXT:    Value (RelocatableAddress): 0x0 | 
 | ; SYM-NEXT:    Section: N_UNDEF | 
 | ; SYM-NEXT:    Type: 0x4000 | 
 | ; SYM-NEXT:    StorageClass: C_EXT (0x2) | 
 |  | 
 | ; SYM:         Name: .foo | 
 | ; SYM-NEXT:    Value (RelocatableAddress): 0x0 | 
 | ; SYM-NEXT:    Section: .text | 
 | ; SYM-NEXT:    Type: 0x0 | 
 | ; SYM-NEXT:    StorageClass: C_EXT (0x2) | 
 |  | 
 | ; SYM:         Name: .foo_h | 
 | ; SYM-NEXT:    Value (RelocatableAddress): 0x1C | 
 | ; SYM-NEXT:    Section: .text | 
 | ; SYM-NEXT:    Type: 0x2000 | 
 | ; SYM-NEXT:    StorageClass: C_EXT (0x2) | 
 |  | 
 | ; SYM:         Name: .foo_e | 
 | ; SYM-NEXT:    Value (RelocatableAddress): 0x3C | 
 | ; SYM-NEXT:    Section: .text | 
 | ; SYM-NEXT:    Type: 0x4000 | 
 | ; SYM-NEXT:    StorageClass: C_EXT (0x2) | 
 |  | 
 | ; SYM:         Name: .foo_protected | 
 | ; SYM-NEXT:    Value (RelocatableAddress): 0x5C | 
 | ; SYM-NEXT:    Section: .text | 
 | ; SYM-NEXT:    Type: 0x3000 | 
 | ; SYM-NEXT:    StorageClass: C_EXT (0x2) | 
 |  | 
 | ; SYM:         Name: .foo_weak_h | 
 | ; SYM-NEXT:    Value (RelocatableAddress): 0x84 | 
 | ; SYM-NEXT:    Section: .text | 
 | ; SYM-NEXT:    Type: 0x2000 | 
 | ; SYM-NEXT:    StorageClass: C_WEAKEXT (0x6F) | 
 |  | 
 | ; SYM:         Name: .foo_weak_e | 
 | ; SYM-NEXT:    Value (RelocatableAddress): 0xA4 | 
 | ; SYM-NEXT:    Section: .text | 
 | ; SYM-NEXT:    Type: 0x4000 | 
 | ; SYM-NEXT:    StorageClass: C_WEAKEXT (0x6F) | 
 |  | 
 | ; SYM:         Name: b | 
 | ; SYM-NEXT:    Value (RelocatableAddress): 0x134 | 
 | ; SYM-NEXT:    Section: .data | 
 | ; SYM-NEXT:    Type: 0x0 | 
 | ; SYM-NEXT:    StorageClass: C_EXT (0x2) | 
 |  | 
 | ; SYM:         Name: b_h | 
 | ; SYM-NEXT:    Value (RelocatableAddress): 0x138 | 
 | ; SYM-NEXT:    Section: .data | 
 | ; SYM-NEXT:    Type: 0x2000 | 
 | ; SYM-NEXT:    StorageClass: C_EXT (0x2) | 
 |  | 
 | ; SYM:         Name: b_e | 
 | ; SYM-NEXT:    Value (RelocatableAddress): 0x13C | 
 | ; SYM-NEXT:    Section: .data | 
 | ; SYM-NEXT:    Type: 0x4000 | 
 | ; SYM-NEXT:    StorageClass: C_EXT (0x2) | 
 |  | 
 | ; SYM:         Name: foo | 
 | ; SYM-NEXT:    Value (RelocatableAddress): {{[0-9]+}} | 
 | ; SYM-NEXT:    Section: .data | 
 | ; SYM-NEXT:    Type: 0x0 | 
 | ; SYM-NEXT:    StorageClass: C_EXT (0x2) | 
 |  | 
 | ; SYM:         Name: foo_h | 
 | ; SYM-NEXT:    Value (RelocatableAddress): {{[0-9]+}} | 
 | ; SYM-NEXT:    Section: .data | 
 | ; SYM-NEXT:    Type: 0x2000 | 
 | ; SYM-NEXT:    StorageClass: C_EXT (0x2) | 
 |  | 
 | ; SYM:         Name: foo_e | 
 | ; SYM-NEXT:    Value (RelocatableAddress): {{[0-9]+}} | 
 | ; SYM-NEXT:    Section: .data | 
 | ; SYM-NEXT:    Type: 0x4000 | 
 | ; SYM-NEXT:    StorageClass: C_EXT (0x2) | 
 |  | 
 | ; SYM:         Name: foo_protected | 
 | ; SYM-NEXT:    Value (RelocatableAddress): {{[0-9]+}} | 
 | ; SYM-NEXT:    Section: .data | 
 | ; SYM-NEXT:    Type: 0x3000 | 
 | ; SYM-NEXT:    StorageClass: C_EXT (0x2) | 
 |  | 
 | ; SYM:         Name: foo_weak_h | 
 | ; SYM-NEXT:    Value (RelocatableAddress): {{[0-9]+}} | 
 | ; SYM-NEXT:    Section: .data | 
 | ; SYM-NEXT:    Type: 0x2000 | 
 | ; SYM-NEXT:    StorageClass: C_WEAKEXT (0x6F) | 
 |  | 
 | ; SYM:         Name: foo_weak_e | 
 | ; SYM-NEXT:    Value (RelocatableAddress): {{[0-9]+}} | 
 | ; SYM-NEXT:    Section: .data | 
 | ; SYM-NEXT:    Type: 0x4000 | 
 | ; SYM-NEXT:    StorageClass: C_WEAKEXT (0x6F) |