; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff \
; RUN: -xcoff-traceback-table=false < %s | FileCheck %s
; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc64-ibm-aix-xcoff \
; RUN: -xcoff-traceback-table=false < %s | FileCheck %s
; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff \
; RUN: -xcoff-traceback-table=false -filetype=obj -o %t.o < %s
; RUN: llvm-objdump -D --symbol-description %t.o | FileCheck --check-prefix=CHECKOBJ %s
; RUN: llvm-readobj -s %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, ptr @ext_const, align 4
%1 = load i32, ptr @ext_var, align 4
%add = add nsw i32 %0, %1
%2 = load i32, ptr @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],5
; 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: [[#INDX:]]) .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: [[#INDX+4]]) ext_const:
; CHECKOBJ-NEXT: 1c: 00 00 00 01 <unknown>
; CHECKOBJ-EMPTY:
; CHECKOBJ-NEXT: Disassembly of section .data:
; CHECKOBJ-EMPTY:
; CHECKOBJ-NEXT: 00000020 (idx: [[#INDX+8]]) ext_var:
; CHECKOBJ-NEXT: 20: 00 00 00 01 <unknown>
; CHECKOBJ-EMPTY:
; CHECKOBJ-NEXT: 00000024 (idx: [[#INDX+12]]) ext_zvar:
; CHECKOBJ-NEXT: 24: 00 00 00 00 <unknown>
; CHECKOBJ-EMPTY:
; CHECKOBJ-NEXT: 00000028 (idx: [[#INDX+14]]) ext_fun[DS]:
; CHECKOBJ-NEXT: 28: 00 00 00 00 <unknown>
; CHECKOBJ-NEXT: 2c: 00 00 00 34 <unknown>
; CHECKOBJ-NEXT: 30: 00 00 00 00 <unknown>
; CHECKOBJ-EMPTY:
; CHECKOBJ-NEXT: 00000034 (idx: [[#INDX+18]]) ext_var[TC]:
; CHECKOBJ-NEXT: 34: 00 00 00 20 <unknown>
; CHECKOBJ-EMPTY:
; CHECKOBJ-NEXT: 00000038 (idx: [[#INDX+20]]) ext_zvar[TC]:
; CHECKOBJ-NEXT: 38: 00 00 00 24 <unknown>
; 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: 5
; 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: }