Kai Nacke 427fb35192 [PPC] Opaque pointer migration, part 1.
The LIT test cases were migrated with the script provided by
Nikita Popov. Due to the size of the change it is split into
several parts.

Reviewed By: nemanja, amyk, nikic, PowerPC

Differential Revision: https://reviews.llvm.org/D135470
2022-10-11 17:24:06 +00:00

400 lines
14 KiB
LLVM

; This file tests TOC entry generation and undefined symbol generation.
; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff \
; RUN: -xcoff-traceback-table=false < %s | FileCheck --check-prefixes CHECK,CHECK32 %s
; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc64-ibm-aix-xcoff \
; RUN: -xcoff-traceback-table=false < %s 2>&1 | FileCheck --check-prefixes CHECK,CHECK64 %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-readobj --syms %t.o | FileCheck --check-prefixes=SYM,SYM32 %s
; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc64-ibm-aix-xcoff \
; RUN: --xcoff-traceback-table=false -filetype=obj -o %t64.o < %s
; RUN: llvm-readobj --syms %t64.o | FileCheck --check-prefixes=SYM,SYM64 %s
@a = external global i32, align 4
@b = external global i64, align 8
@c = external global i16, align 2
@globa = common global i32 0, align 4
@ptr = internal global ptr null, align 4
declare void @foo()
define void @bar() {
%1 = alloca ptr, align 8
%2 = alloca ptr, align 8
store i32 0, ptr @a, align 4
store i64 0, ptr @b, align 8
store i16 0, ptr @c, align 2
store i32 0, ptr @globa, align 4
store ptr @bar, ptr @ptr, align 4
store ptr @foo, ptr %1, align 8
store ptr @foobar, ptr %2, align 8
ret void
}
; We initialize a csect when we first reference an external global, so make sure we don't run into problems when we see it again.
define void @bar2() {
store i32 0, ptr @a, align 4
store i64 0, ptr @b, align 8
store i16 0, ptr @c, align 2
ret void
}
define void @foobar() {
ret void
}
; Test tc entry assembly generation.
; CHECK-NOT: .comm a
; CHECK-NOT: .lcomm a
; CHECK-NOT: .comm b
; CHECK-NOT: .lcomm b
; CHECK-NOT: .comm c
; CHECK-NOT: .lcomm c
; CHECK: .comm globa[RW],4,2
; CHECK32: .lcomm ptr,4,ptr[BS],2
; CHECK64: .lcomm ptr,8,ptr[BS],2
; CHECK: .toc
; CHECK-NEXT: L..C0:
; CHECK-NEXT: .tc a[TC],a[UA]
; CHECK-NEXT: L..C1:
; CHECK-NEXT: .tc b[TC],b[UA]
; CHECK-NEXT: L..C2:
; CHECK-NEXT: .tc c[TC],c[UA]
; CHECK-NEXT: L..C3:
; CHECK-NEXT: .tc globa[TC],globa[RW]
; CHECK-NEXT: L..C4:
; CHECK-NEXT: .tc ptr[TC],ptr[BS]
; CHECK-NEXT: L..C5:
; CHECK-NEXT: .tc bar[TC],bar[DS]
; CHECK-NEXT: L..C6:
; CHECK-NEXT: .tc foo[TC],foo[DS]
; CHECK-NEXT: L..C7:
; CHECK-NEXT: .tc foobar[TC],foobar[DS]
; Test undefined symbol generation.
; SYM: Symbol {{[{][[:space:]] *}}Index: [[#UNDEF_INDX:]]{{[[:space:]] *}}Name: a
; SYM-NEXT: Value (RelocatableAddress): 0x0
; SYM-NEXT: Section: N_UNDEF
; SYM-NEXT: Type: 0x0
; SYM-NEXT: StorageClass: C_EXT (0x2)
; SYM-NEXT: NumberOfAuxEntries: 1
; SYM-NEXT: CSECT Auxiliary Entry {
; SYM-NEXT: Index: [[#UNDEF_INDX+1]]
; SYM-NEXT: SectionLen: 0
; SYM-NEXT: ParameterHashIndex: 0x0
; SYM-NEXT: TypeChkSectNum: 0x0
; SYM-NEXT: SymbolAlignmentLog2: 0
; SYM-NEXT: SymbolType: XTY_ER (0x0)
; SYM-NEXT: StorageMappingClass: XMC_UA (0x4)
; SYM32-NEXT: StabInfoIndex: 0x0
; SYM32-NEXT: StabSectNum: 0x0
; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)
; SYM-NEXT: }
; SYM-NEXT: }
; SYM-NEXT: Symbol {
; SYM-NEXT: Index: [[#UNDEF_INDX+2]]
; SYM-NEXT: Name: b
; SYM-NEXT: Value (RelocatableAddress): 0x0
; SYM-NEXT: Section: N_UNDEF
; SYM-NEXT: Type: 0x0
; SYM-NEXT: StorageClass: C_EXT (0x2)
; SYM-NEXT: NumberOfAuxEntries: 1
; SYM-NEXT: CSECT Auxiliary Entry {
; SYM-NEXT: Index: [[#UNDEF_INDX+3]]
; SYM-NEXT: SectionLen: 0
; SYM-NEXT: ParameterHashIndex: 0x0
; SYM-NEXT: TypeChkSectNum: 0x0
; SYM-NEXT: SymbolAlignmentLog2: 0
; SYM-NEXT: SymbolType: XTY_ER (0x0)
; SYM-NEXT: StorageMappingClass: XMC_UA (0x4)
; SYM32-NEXT: StabInfoIndex: 0x0
; SYM32-NEXT: StabSectNum: 0x0
; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)
; SYM-NEXT: }
; SYM-NEXT: }
; SYM-NEXT: Symbol {
; SYM-NEXT: Index: [[#UNDEF_INDX+4]]
; SYM-NEXT: Name: c
; SYM-NEXT: Value (RelocatableAddress): 0x0
; SYM-NEXT: Section: N_UNDEF
; SYM-NEXT: Type: 0x0
; SYM-NEXT: StorageClass: C_EXT (0x2)
; SYM-NEXT: NumberOfAuxEntries: 1
; SYM-NEXT: CSECT Auxiliary Entry {
; SYM-NEXT: Index: [[#UNDEF_INDX+5]]
; SYM-NEXT: SectionLen: 0
; SYM-NEXT: ParameterHashIndex: 0x0
; SYM-NEXT: TypeChkSectNum: 0x0
; SYM-NEXT: SymbolAlignmentLog2: 0
; SYM-NEXT: SymbolType: XTY_ER (0x0)
; SYM-NEXT: StorageMappingClass: XMC_UA (0x4)
; SYM32-NEXT: StabInfoIndex: 0x0
; SYM32-NEXT: StabSectNum: 0x0
; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)
; SYM-NEXT: }
; SYM-NEXT: }
; SYM-NEXT: Symbol {
; SYM-NEXT: Index: [[#UNDEF_INDX+6]]
; SYM-NEXT: Name: .foo
; SYM-NEXT: Value (RelocatableAddress): 0x0
; SYM-NEXT: Section: N_UNDEF
; SYM-NEXT: Type: 0x0
; SYM-NEXT: StorageClass: C_EXT (0x2)
; SYM-NEXT: NumberOfAuxEntries: 1
; SYM-NEXT: CSECT Auxiliary Entry {
; SYM-NEXT: Index: [[#UNDEF_INDX+7]]
; SYM-NEXT: SectionLen: 0
; SYM-NEXT: ParameterHashIndex: 0x0
; SYM-NEXT: TypeChkSectNum: 0x0
; SYM-NEXT: SymbolAlignmentLog2: 0
; SYM-NEXT: SymbolType: XTY_ER (0x0)
; SYM-NEXT: StorageMappingClass: XMC_PR (0x0)
; SYM32-NEXT: StabInfoIndex: 0x0
; SYM32-NEXT: StabSectNum: 0x0
; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)
; SYM-NEXT: }
; SYM-NEXT: }
; SYM-NEXT: Symbol {
; SYM-NEXT: Index: [[#UNDEF_INDX+8]]
; SYM-NEXT: Name: foo
; SYM-NEXT: Value (RelocatableAddress): 0x0
; SYM-NEXT: Section: N_UNDEF
; SYM-NEXT: Type: 0x0
; SYM-NEXT: StorageClass: C_EXT (0x2)
; SYM-NEXT: NumberOfAuxEntries: 1
; SYM-NEXT: CSECT Auxiliary Entry {
; SYM-NEXT: Index: [[#UNDEF_INDX+9]]
; SYM-NEXT: SectionLen: 0
; SYM-NEXT: ParameterHashIndex: 0x0
; SYM-NEXT: TypeChkSectNum: 0x0
; SYM-NEXT: SymbolAlignmentLog2: 0
; SYM-NEXT: SymbolType: XTY_ER (0x0)
; SYM-NEXT: StorageMappingClass: XMC_DS (0xA)
; SYM32-NEXT: StabInfoIndex: 0x0
; SYM32-NEXT: StabSectNum: 0x0
; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)
; SYM-NEXT: }
; SYM-NEXT: }
; Test TOC entry symbol generation.
; SYM: Symbol {{[{][[:space:]] *}}Index: [[#TOC_INDX:]]{{[[:space:]] *}}Name: TOC
; SYM32-NEXT: Value (RelocatableAddress): 0xA8
; SYM64-NEXT: Value (RelocatableAddress): 0xC0
; SYM-NEXT: Section: .data
; SYM-NEXT: Type: 0x0
; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)
; SYM-NEXT: NumberOfAuxEntries: 1
; SYM-NEXT: CSECT Auxiliary Entry {
; SYM-NEXT: Index: [[#TOC_INDX+1]]
; SYM-NEXT: SectionLen: 0
; SYM-NEXT: ParameterHashIndex: 0x0
; SYM-NEXT: TypeChkSectNum: 0x0
; SYM-NEXT: SymbolAlignmentLog2: 2
; SYM-NEXT: SymbolType: XTY_SD (0x1)
; SYM-NEXT: StorageMappingClass: XMC_TC0 (0xF)
; SYM32-NEXT: StabInfoIndex: 0x0
; SYM32-NEXT: StabSectNum: 0x0
; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)
; SYM-NEXT: }
; SYM-NEXT: }
; SYM-NEXT: Symbol {
; SYM-NEXT: Index: [[#TOC_INDX+2]]
; SYM-NEXT: Name: a
; SYM32-NEXT: Value (RelocatableAddress): 0xA8
; SYM64-NEXT: Value (RelocatableAddress): 0xC0
; SYM-NEXT: Section: .data
; SYM-NEXT: Type: 0x0
; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)
; SYM-NEXT: NumberOfAuxEntries: 1
; SYM-NEXT: CSECT Auxiliary Entry {
; SYM-NEXT: Index: [[#TOC_INDX+3]]
; SYM32-NEXT: SectionLen: 4
; SYM64-NEXT: SectionLen: 8
; SYM-NEXT: ParameterHashIndex: 0x0
; SYM-NEXT: TypeChkSectNum: 0x0
; SYM32-NEXT: SymbolAlignmentLog2: 2
; SYM64-NEXT: SymbolAlignmentLog2: 3
; SYM-NEXT: SymbolType: XTY_SD (0x1)
; SYM-NEXT: StorageMappingClass: XMC_TC (0x3)
; SYM32-NEXT: StabInfoIndex: 0x0
; SYM32-NEXT: StabSectNum: 0x0
; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)
; SYM-NEXT: }
; SYM-NEXT: }
; SYM-NEXT: Symbol {
; SYM-NEXT: Index: [[#TOC_INDX+4]]
; SYM-NEXT: Name: b
; SYM32-NEXT: Value (RelocatableAddress): 0xAC
; SYM64-NEXT: Value (RelocatableAddress): 0xC8
; SYM-NEXT: Section: .data
; SYM-NEXT: Type: 0x0
; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)
; SYM-NEXT: NumberOfAuxEntries: 1
; SYM-NEXT: CSECT Auxiliary Entry {
; SYM-NEXT: Index: [[#TOC_INDX+5]]
; SYM32-NEXT: SectionLen: 4
; SYM64-NEXT: SectionLen: 8
; SYM-NEXT: ParameterHashIndex: 0x0
; SYM-NEXT: TypeChkSectNum: 0x0
; SYM32-NEXT: SymbolAlignmentLog2: 2
; SYM64-NEXT: SymbolAlignmentLog2: 3
; SYM-NEXT: SymbolType: XTY_SD (0x1)
; SYM-NEXT: StorageMappingClass: XMC_TC (0x3)
; SYM32-NEXT: StabInfoIndex: 0x0
; SYM32-NEXT: StabSectNum: 0x0
; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)
; SYM-NEXT: }
; SYM-NEXT: }
; SYM-NEXT: Symbol {
; SYM-NEXT: Index: [[#TOC_INDX+6]]
; SYM-NEXT: Name: c
; SYM32-NEXT: Value (RelocatableAddress): 0xB0
; SYM64-NEXT: Value (RelocatableAddress): 0xD0
; SYM-NEXT: Section: .data
; SYM-NEXT: Type: 0x0
; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)
; SYM-NEXT: NumberOfAuxEntries: 1
; SYM-NEXT: CSECT Auxiliary Entry {
; SYM-NEXT: Index: [[#TOC_INDX+7]]
; SYM32-NEXT: SectionLen: 4
; SYM64-NEXT: SectionLen: 8
; SYM-NEXT: ParameterHashIndex: 0x0
; SYM-NEXT: TypeChkSectNum: 0x0
; SYM32-NEXT: SymbolAlignmentLog2: 2
; SYM64-NEXT: SymbolAlignmentLog2: 3
; SYM-NEXT: SymbolType: XTY_SD (0x1)
; SYM-NEXT: StorageMappingClass: XMC_TC (0x3)
; SYM32-NEXT: StabInfoIndex: 0x0
; SYM32-NEXT: StabSectNum: 0x0
; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)
; SYM-NEXT: }
; SYM-NEXT: }
; SYM-NEXT: Symbol {
; SYM-NEXT: Index: [[#TOC_INDX+8]]
; SYM-NEXT: Name: globa
; SYM32-NEXT: Value (RelocatableAddress): 0xB4
; SYM64-NEXT: Value (RelocatableAddress): 0xD8
; SYM-NEXT: Section: .data
; SYM-NEXT: Type: 0x0
; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)
; SYM-NEXT: NumberOfAuxEntries: 1
; SYM-NEXT: CSECT Auxiliary Entry {
; SYM-NEXT: Index: [[#TOC_INDX+9]]
; SYM32-NEXT: SectionLen: 4
; SYM64-NEXT: SectionLen: 8
; SYM-NEXT: ParameterHashIndex: 0x0
; SYM-NEXT: TypeChkSectNum: 0x0
; SYM32-NEXT: SymbolAlignmentLog2: 2
; SYM64-NEXT: SymbolAlignmentLog2: 3
; SYM-NEXT: SymbolType: XTY_SD (0x1)
; SYM-NEXT: StorageMappingClass: XMC_TC (0x3)
; SYM32-NEXT: StabInfoIndex: 0x0
; SYM32-NEXT: StabSectNum: 0x0
; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)
; SYM-NEXT: }
; SYM-NEXT: }
; SYM-NEXT: Symbol {
; SYM-NEXT: Index: [[#TOC_INDX+10]]
; SYM-NEXT: Name: ptr
; SYM32-NEXT: Value (RelocatableAddress): 0xB8
; SYM64-NEXT: Value (RelocatableAddress): 0xE0
; SYM-NEXT: Section: .data
; SYM-NEXT: Type: 0x0
; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)
; SYM-NEXT: NumberOfAuxEntries: 1
; SYM-NEXT: CSECT Auxiliary Entry {
; SYM-NEXT: Index: [[#TOC_INDX+11]]
; SYM32-NEXT: SectionLen: 4
; SYM64-NEXT: SectionLen: 8
; SYM-NEXT: ParameterHashIndex: 0x0
; SYM-NEXT: TypeChkSectNum: 0x0
; SYM32-NEXT: SymbolAlignmentLog2: 2
; SYM64-NEXT: SymbolAlignmentLog2: 3
; SYM-NEXT: SymbolType: XTY_SD (0x1)
; SYM-NEXT: StorageMappingClass: XMC_TC (0x3)
; SYM32-NEXT: StabInfoIndex: 0x0
; SYM32-NEXT: StabSectNum: 0x0
; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)
; SYM-NEXT: }
; SYM-NEXT: }
; SYM-NEXT: Symbol {
; SYM-NEXT: Index: [[#TOC_INDX+12]]
; SYM-NEXT: Name: bar
; SYM32-NEXT: Value (RelocatableAddress): 0xBC
; SYM64-NEXT: Value (RelocatableAddress): 0xE8
; SYM-NEXT: Section: .data
; SYM-NEXT: Type: 0x0
; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)
; SYM-NEXT: NumberOfAuxEntries: 1
; SYM-NEXT: CSECT Auxiliary Entry {
; SYM-NEXT: Index: [[#TOC_INDX+13]]
; SYM32-NEXT: SectionLen: 4
; SYM64-NEXT: SectionLen: 8
; SYM-NEXT: ParameterHashIndex: 0x0
; SYM-NEXT: TypeChkSectNum: 0x0
; SYM32-NEXT: SymbolAlignmentLog2: 2
; SYM64-NEXT: SymbolAlignmentLog2: 3
; SYM-NEXT: SymbolType: XTY_SD (0x1)
; SYM-NEXT: StorageMappingClass: XMC_TC (0x3)
; SYM32-NEXT: StabInfoIndex: 0x0
; SYM32-NEXT: StabSectNum: 0x0
; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)
; SYM-NEXT: }
; SYM-NEXT: }
; SYM-NEXT: Symbol {
; SYM-NEXT: Index: [[#TOC_INDX+14]]
; SYM-NEXT: Name: foo
; SYM32-NEXT: Value (RelocatableAddress): 0xC0
; SYM64-NEXT: Value (RelocatableAddress): 0xF0
; SYM-NEXT: Section: .data
; SYM-NEXT: Type: 0x0
; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)
; SYM-NEXT: NumberOfAuxEntries: 1
; SYM-NEXT: CSECT Auxiliary Entry {
; SYM-NEXT: Index: [[#TOC_INDX+15]]
; SYM32-NEXT: SectionLen: 4
; SYM64-NEXT: SectionLen: 8
; SYM-NEXT: ParameterHashIndex: 0x0
; SYM-NEXT: TypeChkSectNum: 0x0
; SYM32-NEXT: SymbolAlignmentLog2: 2
; SYM64-NEXT: SymbolAlignmentLog2: 3
; SYM-NEXT: SymbolType: XTY_SD (0x1)
; SYM-NEXT: StorageMappingClass: XMC_TC (0x3)
; SYM32-NEXT: StabInfoIndex: 0x0
; SYM32-NEXT: StabSectNum: 0x0
; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)
; SYM-NEXT: }
; SYM-NEXT: }
; SYM-NEXT: Symbol {
; SYM-NEXT: Index: [[#TOC_INDX+16]]
; SYM-NEXT: Name: foobar
; SYM32-NEXT: Value (RelocatableAddress): 0xC4
; SYM64-NEXT: Value (RelocatableAddress): 0xF8
; SYM-NEXT: Section: .data
; SYM-NEXT: Type: 0x0
; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)
; SYM-NEXT: NumberOfAuxEntries: 1
; SYM-NEXT: CSECT Auxiliary Entry {
; SYM-NEXT: Index: [[#TOC_INDX+17]]
; SYM32-NEXT: SectionLen: 4
; SYM64-NEXT: SectionLen: 8
; SYM-NEXT: ParameterHashIndex: 0x0
; SYM-NEXT: TypeChkSectNum: 0x0
; SYM32-NEXT: SymbolAlignmentLog2: 2
; SYM64-NEXT: SymbolAlignmentLog2: 3
; SYM-NEXT: SymbolType: XTY_SD (0x1)
; SYM-NEXT: StorageMappingClass: XMC_TC (0x3)
; SYM32-NEXT: StabInfoIndex: 0x0
; SYM32-NEXT: StabSectNum: 0x0
; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)
; SYM-NEXT: }
; SYM-NEXT: }