400 lines · plain
1; This file tests TOC entry generation and undefined symbol generation.2 3; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff \4; RUN: -xcoff-traceback-table=false < %s | FileCheck --check-prefixes CHECK,CHECK32 %s5; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc64-ibm-aix-xcoff \6; RUN: -xcoff-traceback-table=false < %s 2>&1 | FileCheck --check-prefixes CHECK,CHECK64 %s7 8; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff \9; RUN: --xcoff-traceback-table=false -filetype=obj -o %t.o < %s10; RUN: llvm-readobj --syms %t.o | FileCheck --check-prefixes=SYM,SYM32 %s11 12; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc64-ibm-aix-xcoff \13; RUN: --xcoff-traceback-table=false -filetype=obj -o %t64.o < %s14; RUN: llvm-readobj --syms %t64.o | FileCheck --check-prefixes=SYM,SYM64 %s15 16@a = external global i32, align 417@b = external global i64, align 818@c = external global i16, align 219@globa = common global i32 0, align 420 21@ptr = internal global ptr null, align 422 23declare void @foo()24 25define void @bar() {26 %1 = alloca ptr, align 827 %2 = alloca ptr, align 828 store i32 0, ptr @a, align 429 store i64 0, ptr @b, align 830 store i16 0, ptr @c, align 231 store i32 0, ptr @globa, align 432 store ptr @bar, ptr @ptr, align 433 store ptr @foo, ptr %1, align 834 store ptr @foobar, ptr %2, align 835 ret void36}37 38; 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.39define void @bar2() {40 store i32 0, ptr @a, align 441 store i64 0, ptr @b, align 842 store i16 0, ptr @c, align 243 ret void44}45 46define void @foobar() {47 ret void48}49 50; Test tc entry assembly generation.51 52; CHECK-NOT: .comm a53; CHECK-NOT: .lcomm a54; CHECK-NOT: .comm b55; CHECK-NOT: .lcomm b56; CHECK-NOT: .comm c57; CHECK-NOT: .lcomm c58; CHECK: .comm globa[RW],4,259; CHECK32: .lcomm ptr,4,ptr[BS],260; CHECK64: .lcomm ptr,8,ptr[BS],261; CHECK: .toc62; CHECK-NEXT: L..C0:63; CHECK-NEXT: .tc a[TC],a[UA]64; CHECK-NEXT: L..C1:65; CHECK-NEXT: .tc b[TC],b[UA]66; CHECK-NEXT: L..C2:67; CHECK-NEXT: .tc c[TC],c[UA]68; CHECK-NEXT: L..C3:69; CHECK-NEXT: .tc globa[TC],globa[RW]70; CHECK-NEXT: L..C4:71; CHECK-NEXT: .tc ptr[TC],ptr[BS]72; CHECK-NEXT: L..C5:73; CHECK-NEXT: .tc bar[TC],bar[DS]74; CHECK-NEXT: L..C6:75; CHECK-NEXT: .tc foo[TC],foo[DS]76; CHECK-NEXT: L..C7:77; CHECK-NEXT: .tc foobar[TC],foobar[DS]78 79 80; Test undefined symbol generation.81 82; SYM: Symbol {{[{][[:space:]] *}}Index: [[#UNDEF_INDX:]]{{[[:space:]] *}}Name: a83; SYM-NEXT: Value (RelocatableAddress): 0x084; SYM-NEXT: Section: N_UNDEF85; SYM-NEXT: Type: 0x086; SYM-NEXT: StorageClass: C_EXT (0x2)87; SYM-NEXT: NumberOfAuxEntries: 188; SYM-NEXT: CSECT Auxiliary Entry {89; SYM-NEXT: Index: [[#UNDEF_INDX+1]]90; SYM-NEXT: SectionLen: 091; SYM-NEXT: ParameterHashIndex: 0x092; SYM-NEXT: TypeChkSectNum: 0x093; SYM-NEXT: SymbolAlignmentLog2: 094; SYM-NEXT: SymbolType: XTY_ER (0x0)95; SYM-NEXT: StorageMappingClass: XMC_UA (0x4)96; SYM32-NEXT: StabInfoIndex: 0x097; SYM32-NEXT: StabSectNum: 0x098; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)99; SYM-NEXT: }100; SYM-NEXT: }101; SYM-NEXT: Symbol {102; SYM-NEXT: Index: [[#UNDEF_INDX+2]]103; SYM-NEXT: Name: b104; SYM-NEXT: Value (RelocatableAddress): 0x0105; SYM-NEXT: Section: N_UNDEF106; SYM-NEXT: Type: 0x0107; SYM-NEXT: StorageClass: C_EXT (0x2)108; SYM-NEXT: NumberOfAuxEntries: 1109; SYM-NEXT: CSECT Auxiliary Entry {110; SYM-NEXT: Index: [[#UNDEF_INDX+3]]111; SYM-NEXT: SectionLen: 0112; SYM-NEXT: ParameterHashIndex: 0x0113; SYM-NEXT: TypeChkSectNum: 0x0114; SYM-NEXT: SymbolAlignmentLog2: 0115; SYM-NEXT: SymbolType: XTY_ER (0x0)116; SYM-NEXT: StorageMappingClass: XMC_UA (0x4)117; SYM32-NEXT: StabInfoIndex: 0x0118; SYM32-NEXT: StabSectNum: 0x0119; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)120; SYM-NEXT: }121; SYM-NEXT: }122; SYM-NEXT: Symbol {123; SYM-NEXT: Index: [[#UNDEF_INDX+4]]124; SYM-NEXT: Name: c125; SYM-NEXT: Value (RelocatableAddress): 0x0126; SYM-NEXT: Section: N_UNDEF127; SYM-NEXT: Type: 0x0128; SYM-NEXT: StorageClass: C_EXT (0x2)129; SYM-NEXT: NumberOfAuxEntries: 1130; SYM-NEXT: CSECT Auxiliary Entry {131; SYM-NEXT: Index: [[#UNDEF_INDX+5]]132; SYM-NEXT: SectionLen: 0133; SYM-NEXT: ParameterHashIndex: 0x0134; SYM-NEXT: TypeChkSectNum: 0x0135; SYM-NEXT: SymbolAlignmentLog2: 0136; SYM-NEXT: SymbolType: XTY_ER (0x0)137; SYM-NEXT: StorageMappingClass: XMC_UA (0x4)138; SYM32-NEXT: StabInfoIndex: 0x0139; SYM32-NEXT: StabSectNum: 0x0140; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)141; SYM-NEXT: }142; SYM-NEXT: }143; SYM-NEXT: Symbol {144; SYM-NEXT: Index: [[#UNDEF_INDX+6]]145; SYM-NEXT: Name: .foo146; SYM-NEXT: Value (RelocatableAddress): 0x0147; SYM-NEXT: Section: N_UNDEF148; SYM-NEXT: Type: 0x0149; SYM-NEXT: StorageClass: C_EXT (0x2)150; SYM-NEXT: NumberOfAuxEntries: 1151; SYM-NEXT: CSECT Auxiliary Entry {152; SYM-NEXT: Index: [[#UNDEF_INDX+7]]153; SYM-NEXT: SectionLen: 0154; SYM-NEXT: ParameterHashIndex: 0x0155; SYM-NEXT: TypeChkSectNum: 0x0156; SYM-NEXT: SymbolAlignmentLog2: 0157; SYM-NEXT: SymbolType: XTY_ER (0x0)158; SYM-NEXT: StorageMappingClass: XMC_PR (0x0)159; SYM32-NEXT: StabInfoIndex: 0x0160; SYM32-NEXT: StabSectNum: 0x0161; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)162; SYM-NEXT: }163; SYM-NEXT: }164; SYM-NEXT: Symbol {165; SYM-NEXT: Index: [[#UNDEF_INDX+8]]166; SYM-NEXT: Name: foo167; SYM-NEXT: Value (RelocatableAddress): 0x0168; SYM-NEXT: Section: N_UNDEF169; SYM-NEXT: Type: 0x0170; SYM-NEXT: StorageClass: C_EXT (0x2)171; SYM-NEXT: NumberOfAuxEntries: 1172; SYM-NEXT: CSECT Auxiliary Entry {173; SYM-NEXT: Index: [[#UNDEF_INDX+9]]174; SYM-NEXT: SectionLen: 0175; SYM-NEXT: ParameterHashIndex: 0x0176; SYM-NEXT: TypeChkSectNum: 0x0177; SYM-NEXT: SymbolAlignmentLog2: 0178; SYM-NEXT: SymbolType: XTY_ER (0x0)179; SYM-NEXT: StorageMappingClass: XMC_DS (0xA)180; SYM32-NEXT: StabInfoIndex: 0x0181; SYM32-NEXT: StabSectNum: 0x0182; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)183; SYM-NEXT: }184; SYM-NEXT: }185 186; Test TOC entry symbol generation.187 188; SYM: Symbol {{[{][[:space:]] *}}Index: [[#TOC_INDX:]]{{[[:space:]] *}}Name: TOC189; SYM32-NEXT: Value (RelocatableAddress): 0xA8190; SYM64-NEXT: Value (RelocatableAddress): 0xC0191; SYM-NEXT: Section: .data192; SYM-NEXT: Type: 0x0193; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)194; SYM-NEXT: NumberOfAuxEntries: 1195; SYM-NEXT: CSECT Auxiliary Entry {196; SYM-NEXT: Index: [[#TOC_INDX+1]]197; SYM-NEXT: SectionLen: 0198; SYM-NEXT: ParameterHashIndex: 0x0199; SYM-NEXT: TypeChkSectNum: 0x0200; SYM-NEXT: SymbolAlignmentLog2: 2201; SYM-NEXT: SymbolType: XTY_SD (0x1)202; SYM-NEXT: StorageMappingClass: XMC_TC0 (0xF)203; SYM32-NEXT: StabInfoIndex: 0x0204; SYM32-NEXT: StabSectNum: 0x0205; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)206; SYM-NEXT: }207; SYM-NEXT: }208; SYM-NEXT: Symbol {209; SYM-NEXT: Index: [[#TOC_INDX+2]]210; SYM-NEXT: Name: a211; SYM32-NEXT: Value (RelocatableAddress): 0xA8212; SYM64-NEXT: Value (RelocatableAddress): 0xC0213; SYM-NEXT: Section: .data214; SYM-NEXT: Type: 0x0215; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)216; SYM-NEXT: NumberOfAuxEntries: 1217; SYM-NEXT: CSECT Auxiliary Entry {218; SYM-NEXT: Index: [[#TOC_INDX+3]]219; SYM32-NEXT: SectionLen: 4220; SYM64-NEXT: SectionLen: 8221; SYM-NEXT: ParameterHashIndex: 0x0222; SYM-NEXT: TypeChkSectNum: 0x0223; SYM32-NEXT: SymbolAlignmentLog2: 2224; SYM64-NEXT: SymbolAlignmentLog2: 3225; SYM-NEXT: SymbolType: XTY_SD (0x1)226; SYM-NEXT: StorageMappingClass: XMC_TC (0x3)227; SYM32-NEXT: StabInfoIndex: 0x0228; SYM32-NEXT: StabSectNum: 0x0229; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)230; SYM-NEXT: }231; SYM-NEXT: }232; SYM-NEXT: Symbol {233; SYM-NEXT: Index: [[#TOC_INDX+4]]234; SYM-NEXT: Name: b235; SYM32-NEXT: Value (RelocatableAddress): 0xAC236; SYM64-NEXT: Value (RelocatableAddress): 0xC8237; SYM-NEXT: Section: .data238; SYM-NEXT: Type: 0x0239; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)240; SYM-NEXT: NumberOfAuxEntries: 1241; SYM-NEXT: CSECT Auxiliary Entry {242; SYM-NEXT: Index: [[#TOC_INDX+5]]243; SYM32-NEXT: SectionLen: 4244; SYM64-NEXT: SectionLen: 8245; SYM-NEXT: ParameterHashIndex: 0x0246; SYM-NEXT: TypeChkSectNum: 0x0247; SYM32-NEXT: SymbolAlignmentLog2: 2248; SYM64-NEXT: SymbolAlignmentLog2: 3249; SYM-NEXT: SymbolType: XTY_SD (0x1)250; SYM-NEXT: StorageMappingClass: XMC_TC (0x3)251; SYM32-NEXT: StabInfoIndex: 0x0252; SYM32-NEXT: StabSectNum: 0x0253; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)254; SYM-NEXT: }255; SYM-NEXT: }256; SYM-NEXT: Symbol {257; SYM-NEXT: Index: [[#TOC_INDX+6]]258; SYM-NEXT: Name: c259; SYM32-NEXT: Value (RelocatableAddress): 0xB0260; SYM64-NEXT: Value (RelocatableAddress): 0xD0261; SYM-NEXT: Section: .data262; SYM-NEXT: Type: 0x0263; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)264; SYM-NEXT: NumberOfAuxEntries: 1265; SYM-NEXT: CSECT Auxiliary Entry {266; SYM-NEXT: Index: [[#TOC_INDX+7]]267; SYM32-NEXT: SectionLen: 4268; SYM64-NEXT: SectionLen: 8269; SYM-NEXT: ParameterHashIndex: 0x0270; SYM-NEXT: TypeChkSectNum: 0x0271; SYM32-NEXT: SymbolAlignmentLog2: 2272; SYM64-NEXT: SymbolAlignmentLog2: 3273; SYM-NEXT: SymbolType: XTY_SD (0x1)274; SYM-NEXT: StorageMappingClass: XMC_TC (0x3)275; SYM32-NEXT: StabInfoIndex: 0x0276; SYM32-NEXT: StabSectNum: 0x0277; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)278; SYM-NEXT: }279; SYM-NEXT: }280; SYM-NEXT: Symbol {281; SYM-NEXT: Index: [[#TOC_INDX+8]]282; SYM-NEXT: Name: globa283; SYM32-NEXT: Value (RelocatableAddress): 0xB4284; SYM64-NEXT: Value (RelocatableAddress): 0xD8285; SYM-NEXT: Section: .data286; SYM-NEXT: Type: 0x0287; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)288; SYM-NEXT: NumberOfAuxEntries: 1289; SYM-NEXT: CSECT Auxiliary Entry {290; SYM-NEXT: Index: [[#TOC_INDX+9]]291; SYM32-NEXT: SectionLen: 4292; SYM64-NEXT: SectionLen: 8293; SYM-NEXT: ParameterHashIndex: 0x0294; SYM-NEXT: TypeChkSectNum: 0x0295; SYM32-NEXT: SymbolAlignmentLog2: 2296; SYM64-NEXT: SymbolAlignmentLog2: 3297; SYM-NEXT: SymbolType: XTY_SD (0x1)298; SYM-NEXT: StorageMappingClass: XMC_TC (0x3)299; SYM32-NEXT: StabInfoIndex: 0x0300; SYM32-NEXT: StabSectNum: 0x0301; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)302; SYM-NEXT: }303; SYM-NEXT: }304; SYM-NEXT: Symbol {305; SYM-NEXT: Index: [[#TOC_INDX+10]]306; SYM-NEXT: Name: ptr307; SYM32-NEXT: Value (RelocatableAddress): 0xB8308; SYM64-NEXT: Value (RelocatableAddress): 0xE0309; SYM-NEXT: Section: .data310; SYM-NEXT: Type: 0x0311; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)312; SYM-NEXT: NumberOfAuxEntries: 1313; SYM-NEXT: CSECT Auxiliary Entry {314; SYM-NEXT: Index: [[#TOC_INDX+11]]315; SYM32-NEXT: SectionLen: 4316; SYM64-NEXT: SectionLen: 8317; SYM-NEXT: ParameterHashIndex: 0x0318; SYM-NEXT: TypeChkSectNum: 0x0319; SYM32-NEXT: SymbolAlignmentLog2: 2320; SYM64-NEXT: SymbolAlignmentLog2: 3321; SYM-NEXT: SymbolType: XTY_SD (0x1)322; SYM-NEXT: StorageMappingClass: XMC_TC (0x3)323; SYM32-NEXT: StabInfoIndex: 0x0324; SYM32-NEXT: StabSectNum: 0x0325; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)326; SYM-NEXT: }327; SYM-NEXT: }328; SYM-NEXT: Symbol {329; SYM-NEXT: Index: [[#TOC_INDX+12]]330; SYM-NEXT: Name: bar331; SYM32-NEXT: Value (RelocatableAddress): 0xBC332; SYM64-NEXT: Value (RelocatableAddress): 0xE8333; SYM-NEXT: Section: .data334; SYM-NEXT: Type: 0x0335; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)336; SYM-NEXT: NumberOfAuxEntries: 1337; SYM-NEXT: CSECT Auxiliary Entry {338; SYM-NEXT: Index: [[#TOC_INDX+13]]339; SYM32-NEXT: SectionLen: 4340; SYM64-NEXT: SectionLen: 8341; SYM-NEXT: ParameterHashIndex: 0x0342; SYM-NEXT: TypeChkSectNum: 0x0343; SYM32-NEXT: SymbolAlignmentLog2: 2344; SYM64-NEXT: SymbolAlignmentLog2: 3345; SYM-NEXT: SymbolType: XTY_SD (0x1)346; SYM-NEXT: StorageMappingClass: XMC_TC (0x3)347; SYM32-NEXT: StabInfoIndex: 0x0348; SYM32-NEXT: StabSectNum: 0x0349; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)350; SYM-NEXT: }351; SYM-NEXT: }352; SYM-NEXT: Symbol {353; SYM-NEXT: Index: [[#TOC_INDX+14]]354; SYM-NEXT: Name: foo355; SYM32-NEXT: Value (RelocatableAddress): 0xC0356; SYM64-NEXT: Value (RelocatableAddress): 0xF0357; SYM-NEXT: Section: .data358; SYM-NEXT: Type: 0x0359; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)360; SYM-NEXT: NumberOfAuxEntries: 1361; SYM-NEXT: CSECT Auxiliary Entry {362; SYM-NEXT: Index: [[#TOC_INDX+15]]363; SYM32-NEXT: SectionLen: 4364; SYM64-NEXT: SectionLen: 8365; SYM-NEXT: ParameterHashIndex: 0x0366; SYM-NEXT: TypeChkSectNum: 0x0367; SYM32-NEXT: SymbolAlignmentLog2: 2368; SYM64-NEXT: SymbolAlignmentLog2: 3369; SYM-NEXT: SymbolType: XTY_SD (0x1)370; SYM-NEXT: StorageMappingClass: XMC_TC (0x3)371; SYM32-NEXT: StabInfoIndex: 0x0372; SYM32-NEXT: StabSectNum: 0x0373; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)374; SYM-NEXT: }375; SYM-NEXT: }376; SYM-NEXT: Symbol {377; SYM-NEXT: Index: [[#TOC_INDX+16]]378; SYM-NEXT: Name: foobar379; SYM32-NEXT: Value (RelocatableAddress): 0xC4380; SYM64-NEXT: Value (RelocatableAddress): 0xF8381; SYM-NEXT: Section: .data382; SYM-NEXT: Type: 0x0383; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)384; SYM-NEXT: NumberOfAuxEntries: 1385; SYM-NEXT: CSECT Auxiliary Entry {386; SYM-NEXT: Index: [[#TOC_INDX+17]]387; SYM32-NEXT: SectionLen: 4388; SYM64-NEXT: SectionLen: 8389; SYM-NEXT: ParameterHashIndex: 0x0390; SYM-NEXT: TypeChkSectNum: 0x0391; SYM32-NEXT: SymbolAlignmentLog2: 2392; SYM64-NEXT: SymbolAlignmentLog2: 3393; SYM-NEXT: SymbolType: XTY_SD (0x1)394; SYM-NEXT: StorageMappingClass: XMC_TC (0x3)395; SYM32-NEXT: StabInfoIndex: 0x0396; SYM32-NEXT: StabSectNum: 0x0397; SYM64-NEXT: Auxiliary Type: AUX_CSECT (0xFB)398; SYM-NEXT: }399; SYM-NEXT: }400