; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff < %s | FileCheck %s ; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc64-ibm-aix-xcoff < %s | FileCheck %s ; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff -filetype=obj -o %t.o < %s ; RUN: llvm-objdump -D --symbol-description %t.o | FileCheck --check-prefix=CHECKOBJ %s ; RUN: llvm-readobj -syms %t.o | FileCheck --check-prefix=CHECKSYM %s @ext_const = constant i32 1, section ".ext_const_sec", align 4 @ext_var = global i32 1, section ".ext_var_sec", align 4 @ext_zvar = global i32 0, section ".ext_zvar_sec", align 4 define dso_local signext i32 @ext_fun() section ".ext_fun_sec" { entry: %0 = load i32, i32* @ext_const, align 4 %1 = load i32, i32* @ext_var, align 4 %add = add nsw i32 %0, %1 %2 = load i32, i32* @ext_zvar, align 4 %add1 = add nsw i32 %add, %2 ret i32 %add1 } ; CHECK: .globl ext_fun[DS] # -- Begin function ext_fun ; CHECK-NEXT: .globl .ext_fun ; CHECK-NEXT: .align 4 ; CHECK-NEXT: .csect ext_fun[DS] ; CHECK: .csect .ext_fun_sec[PR],2 ; CHECK-NEXT: .ext_fun: ; CHECK: .csect .ext_const_sec[RO],2 ; CHECK-NEXT: .globl ext_const ; CHECK-NEXT: .align 2 ; CHECK-NEXT: ext_const: ; CHECK-NEXT: .vbyte 4, 1 # 0x1 ; CHECK-NEXT: .csect .ext_var_sec[RW],2 ; CHECK-NEXT: .globl ext_var ; CHECK-NEXT: .align 2 ; CHECK-NEXT: ext_var: ; CHECK-NEXT: .vbyte 4, 1 # 0x1 ; CHECK-NEXT: .csect .ext_zvar_sec[RW],2 ; CHECK-NEXT: .globl ext_zvar ; CHECK-NEXT: .align 2 ; CHECK-NEXT: ext_zvar: ; CHECK-NEXT: .vbyte 4, 0 # 0x0 ; CHECK-NEXT: .toc ; CHECK-NEXT: L..C0: ; CHECK-NEXT: .tc ext_var[TC],ext_var ; CHECK-NEXT: L..C1: ; CHECK-NEXT: .tc ext_zvar[TC],ext_zvar ; CHECKOBJ: 00000000 (idx: 4) .ext_fun: ; CHECKOBJ-NEXT: 0: 80 62 00 00 lwz 3, 0(2) ; CHECKOBJ-NEXT: 4: 80 82 00 04 lwz 4, 4(2) ; CHECKOBJ-NEXT: 8: 80 63 00 00 lwz 3, 0(3) ; CHECKOBJ-NEXT: c: 80 84 00 00 lwz 4, 0(4) ; CHECKOBJ-NEXT: 10: 7c 63 22 14 add 3, 3, 4 ; CHECKOBJ-NEXT: 14: 38 63 00 01 addi 3, 3, 1 ; CHECKOBJ-NEXT: 18: 4e 80 00 20 blr ; CHECKOBJ-EMPTY: ; CHECKOBJ-NEXT: 0000001c (idx: 8) ext_const: ; CHECKOBJ-NEXT: 1c: 00 00 00 01 ; CHECKOBJ-EMPTY: ; CHECKOBJ-NEXT: Disassembly of section .data: ; CHECKOBJ-EMPTY: ; CHECKOBJ-NEXT: 00000020 (idx: 12) ext_var: ; CHECKOBJ-NEXT: 20: 00 00 00 01 ; CHECKOBJ-EMPTY: ; CHECKOBJ-NEXT: 00000024 (idx: 16) ext_zvar: ; CHECKOBJ-NEXT: 24: 00 00 00 00 ; CHECKOBJ-EMPTY: ; CHECKOBJ-NEXT: 00000028 (idx: 18) ext_fun[DS]: ; CHECKOBJ-NEXT: 28: 00 00 00 00 ; CHECKOBJ-NEXT: 2c: 00 00 00 34 ; CHECKOBJ-NEXT: 30: 00 00 00 00 ; CHECKOBJ-EMPTY: ; CHECKOBJ-NEXT: 00000034 (idx: 22) ext_var[TC]: ; CHECKOBJ-NEXT: 34: 00 00 00 20 ; CHECKOBJ-EMPTY: ; CHECKOBJ-NEXT: 00000038 (idx: 24) ext_zvar[TC]: ; CHECKOBJ-NEXT: 38: 00 00 00 24 ; CHECKSYM: Symbol {{[{][[:space:]] *}}Index: [[#INDX:]]{{[[:space:]] *}}Name: .ext_fun_sec ; CHECKSYM-NEXT: Value (RelocatableAddress): 0x0 ; CHECKSYM-NEXT: Section: .text ; CHECKSYM-NEXT: Type: 0x0 ; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B) ; CHECKSYM-NEXT: NumberOfAuxEntries: 1 ; CHECKSYM-NEXT: CSECT Auxiliary Entry { ; CHECKSYM-NEXT: Index: [[#INDX+1]] ; CHECKSYM-NEXT: SectionLen: 28 ; CHECKSYM-NEXT: ParameterHashIndex: 0x0 ; CHECKSYM-NEXT: TypeChkSectNum: 0x0 ; CHECKSYM-NEXT: SymbolAlignmentLog2: 4 ; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) ; CHECKSYM-NEXT: StorageMappingClass: XMC_PR (0x0) ; CHECKSYM-NEXT: StabInfoIndex: 0x0 ; CHECKSYM-NEXT: StabSectNum: 0x0 ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { ; CHECKSYM-NEXT: Index: [[#INDX+2]] ; CHECKSYM-NEXT: Name: .ext_fun ; CHECKSYM-NEXT: Value (RelocatableAddress): 0x0 ; CHECKSYM-NEXT: Section: .text ; CHECKSYM-NEXT: Type: 0x0 ; CHECKSYM-NEXT: StorageClass: C_EXT (0x2) ; CHECKSYM-NEXT: NumberOfAuxEntries: 1 ; CHECKSYM-NEXT: CSECT Auxiliary Entry { ; CHECKSYM-NEXT: Index: [[#INDX+3]] ; CHECKSYM-NEXT: ContainingCsectSymbolIndex: [[#INDX]] ; CHECKSYM-NEXT: ParameterHashIndex: 0x0 ; CHECKSYM-NEXT: TypeChkSectNum: 0x0 ; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 ; CHECKSYM-NEXT: SymbolType: XTY_LD (0x2) ; CHECKSYM-NEXT: StorageMappingClass: XMC_PR (0x0) ; CHECKSYM-NEXT: StabInfoIndex: 0x0 ; CHECKSYM-NEXT: StabSectNum: 0x0 ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { ; CHECKSYM-NEXT: Index: [[#INDX+4]] ; CHECKSYM-NEXT: Name: .ext_const_sec ; CHECKSYM-NEXT: Value (RelocatableAddress): 0x1C ; CHECKSYM-NEXT: Section: .text ; CHECKSYM-NEXT: Type: 0x0 ; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B) ; CHECKSYM-NEXT: NumberOfAuxEntries: 1 ; CHECKSYM-NEXT: CSECT Auxiliary Entry { ; CHECKSYM-NEXT: Index: [[#INDX+5]] ; CHECKSYM-NEXT: SectionLen: 4 ; CHECKSYM-NEXT: ParameterHashIndex: 0x0 ; CHECKSYM-NEXT: TypeChkSectNum: 0x0 ; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 ; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) ; CHECKSYM-NEXT: StorageMappingClass: XMC_RO (0x1) ; CHECKSYM-NEXT: StabInfoIndex: 0x0 ; CHECKSYM-NEXT: StabSectNum: 0x0 ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { ; CHECKSYM-NEXT: Index: [[#INDX+6]] ; CHECKSYM-NEXT: Name: ext_const ; CHECKSYM-NEXT: Value (RelocatableAddress): 0x1C ; CHECKSYM-NEXT: Section: .text ; CHECKSYM-NEXT: Type: 0x0 ; CHECKSYM-NEXT: StorageClass: C_EXT (0x2) ; CHECKSYM-NEXT: NumberOfAuxEntries: 1 ; CHECKSYM-NEXT: CSECT Auxiliary Entry { ; CHECKSYM-NEXT: Index: [[#INDX+7]] ; CHECKSYM-NEXT: ContainingCsectSymbolIndex: [[#INDX+4]] ; CHECKSYM-NEXT: ParameterHashIndex: 0x0 ; CHECKSYM-NEXT: TypeChkSectNum: 0x0 ; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 ; CHECKSYM-NEXT: SymbolType: XTY_LD (0x2) ; CHECKSYM-NEXT: StorageMappingClass: XMC_RO (0x1) ; CHECKSYM-NEXT: StabInfoIndex: 0x0 ; CHECKSYM-NEXT: StabSectNum: 0x0 ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { ; CHECKSYM-NEXT: Index: [[#INDX+8]] ; CHECKSYM-NEXT: Name: .ext_var_sec ; CHECKSYM-NEXT: Value (RelocatableAddress): 0x20 ; CHECKSYM-NEXT: Section: .data ; CHECKSYM-NEXT: Type: 0x0 ; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B) ; CHECKSYM-NEXT: NumberOfAuxEntries: 1 ; CHECKSYM-NEXT: CSECT Auxiliary Entry { ; CHECKSYM-NEXT: Index: [[#INDX+9]] ; CHECKSYM-NEXT: SectionLen: 4 ; CHECKSYM-NEXT: ParameterHashIndex: 0x0 ; CHECKSYM-NEXT: TypeChkSectNum: 0x0 ; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 ; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) ; CHECKSYM-NEXT: StorageMappingClass: XMC_RW (0x5) ; CHECKSYM-NEXT: StabInfoIndex: 0x0 ; CHECKSYM-NEXT: StabSectNum: 0x0 ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { ; CHECKSYM-NEXT: Index: [[#INDX+10]] ; CHECKSYM-NEXT: Name: ext_var ; CHECKSYM-NEXT: Value (RelocatableAddress): 0x20 ; CHECKSYM-NEXT: Section: .data ; CHECKSYM-NEXT: Type: 0x0 ; CHECKSYM-NEXT: StorageClass: C_EXT (0x2) ; CHECKSYM-NEXT: NumberOfAuxEntries: 1 ; CHECKSYM-NEXT: CSECT Auxiliary Entry { ; CHECKSYM-NEXT: Index: [[#INDX+11]] ; CHECKSYM-NEXT: ContainingCsectSymbolIndex: [[#INDX+8]] ; CHECKSYM-NEXT: ParameterHashIndex: 0x0 ; CHECKSYM-NEXT: TypeChkSectNum: 0x0 ; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 ; CHECKSYM-NEXT: SymbolType: XTY_LD (0x2) ; CHECKSYM-NEXT: StorageMappingClass: XMC_RW (0x5) ; CHECKSYM-NEXT: StabInfoIndex: 0x0 ; CHECKSYM-NEXT: StabSectNum: 0x0 ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { ; CHECKSYM-NEXT: Index: [[#INDX+12]] ; CHECKSYM-NEXT: Name: .ext_zvar_sec ; CHECKSYM-NEXT: Value (RelocatableAddress): 0x24 ; CHECKSYM-NEXT: Section: .data ; CHECKSYM-NEXT: Type: 0x0 ; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B) ; CHECKSYM-NEXT: NumberOfAuxEntries: 1 ; CHECKSYM-NEXT: CSECT Auxiliary Entry { ; CHECKSYM-NEXT: Index: [[#INDX+13]] ; CHECKSYM-NEXT: SectionLen: 4 ; CHECKSYM-NEXT: ParameterHashIndex: 0x0 ; CHECKSYM-NEXT: TypeChkSectNum: 0x0 ; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 ; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) ; CHECKSYM-NEXT: StorageMappingClass: XMC_RW (0x5) ; CHECKSYM-NEXT: StabInfoIndex: 0x0 ; CHECKSYM-NEXT: StabSectNum: 0x0 ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { ; CHECKSYM-NEXT: Index: [[#INDX+14]] ; CHECKSYM-NEXT: Name: ext_zvar ; CHECKSYM-NEXT: Value (RelocatableAddress): 0x24 ; CHECKSYM-NEXT: Section: .data ; CHECKSYM-NEXT: Type: 0x0 ; CHECKSYM-NEXT: StorageClass: C_EXT (0x2) ; CHECKSYM-NEXT: NumberOfAuxEntries: 1 ; CHECKSYM-NEXT: CSECT Auxiliary Entry { ; CHECKSYM-NEXT: Index: [[#INDX+15]] ; CHECKSYM-NEXT: ContainingCsectSymbolIndex: [[#INDX+12]] ; CHECKSYM-NEXT: ParameterHashIndex: 0x0 ; CHECKSYM-NEXT: TypeChkSectNum: 0x0 ; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 ; CHECKSYM-NEXT: SymbolType: XTY_LD (0x2) ; CHECKSYM-NEXT: StorageMappingClass: XMC_RW (0x5) ; CHECKSYM-NEXT: StabInfoIndex: 0x0 ; CHECKSYM-NEXT: StabSectNum: 0x0 ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: Symbol { ; CHECKSYM-NEXT: Index: [[#INDX+16]] ; CHECKSYM-NEXT: Name: ext_fun ; CHECKSYM-NEXT: Value (RelocatableAddress): 0x28 ; CHECKSYM-NEXT: Section: .data ; CHECKSYM-NEXT: Type: 0x0 ; CHECKSYM-NEXT: StorageClass: C_EXT (0x2) ; CHECKSYM-NEXT: NumberOfAuxEntries: 1 ; CHECKSYM-NEXT: CSECT Auxiliary Entry { ; CHECKSYM-NEXT: Index: [[#INDX+17]] ; CHECKSYM-NEXT: SectionLen: 12 ; CHECKSYM-NEXT: ParameterHashIndex: 0x0 ; CHECKSYM-NEXT: TypeChkSectNum: 0x0 ; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 ; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) ; CHECKSYM-NEXT: StorageMappingClass: XMC_DS (0xA) ; CHECKSYM-NEXT: StabInfoIndex: 0x0 ; CHECKSYM-NEXT: StabSectNum: 0x0 ; CHECKSYM-NEXT: } ; CHECKSYM-NEXT: }