1; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr4 \ 2; RUN: -mattr=-altivec -data-sections=false < %s | FileCheck --check-prefixes=COMMON,BIT32 %s 3 4; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr4 \ 5; RUN: -mattr=-altivec -data-sections=false < %s | FileCheck --check-prefixes=COMMON,BIT64 %s 6 7; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr4 \ 8; RUN: -mattr=-altivec -data-sections=false -filetype=obj -o %t.o < %s 9; RUN: llvm-readobj --symbols %t.o | FileCheck --check-prefix=CHECKSYM %s 10 11; RUN: not --crash llc -verify-machineinstrs -mcpu=pwr4 -mtriple powerpc64-ibm-aix-xcoff \ 12; RUN: -mattr=-altivec -data-sections=false -filetype=obj -o %t.o 2>&1 < %s | FileCheck --check-prefix=XCOFF64 %s 13; XCOFF64: LLVM ERROR: 64-bit XCOFF object files are not supported yet. 14 15@bar_p = global i32 (...)* @bar_ref, align 4 16@b_e = external global i32, align 4 17 18; Function Attrs: noinline nounwind optnone 19define void @foo() { 20entry: 21 ret void 22} 23 24declare i32 @bar_ref(...) 25 26; Function Attrs: noinline nounwind optnone 27define i32 @main() { 28entry: 29 %call = call i32 @bar_extern(i32* @b_e) 30 call void @foo() 31 %0 = load i32 (...)*, i32 (...)** @bar_p, align 4 32 %callee.knr.cast = bitcast i32 (...)* %0 to i32 ()* 33 %call1 = call i32 %callee.knr.cast() 34 %call2 = call i32 bitcast (i32 (...)* @bar_ref to i32 ()*)() 35 ret i32 0 36} 37 38declare i32 @bar_extern(i32*) 39 40 41; COMMON: .globl foo[DS] # -- Begin function foo 42; COMMON-NEXT: .globl .foo 43; COMMON-NEXT: .align 4 44; COMMON-NEXT: .csect foo[DS] 45; BIT32-NEXT: .vbyte 4, .foo # @foo 46; BIT32-NEXT: .vbyte 4, TOC[TC0] 47; BIT32-NEXT: .vbyte 4, 0 48; BIT64-NEXT: .vbyte 8, .foo # @foo 49; BIT64-NEXT: .vbyte 8, TOC[TC0] 50; BIT64-NEXT: .vbyte 8, 0 51; COMMON-NEXT: .csect .text[PR] 52; COMMON-NEXT: .foo: 53 54; COMMON: .globl main[DS] # -- Begin function main 55; COMMON-NEXT: .globl .main 56; COMMON-NEXT: .align 4 57; COMMON-NEXT: .csect main[DS] 58; BIT32-NEXT: .vbyte 4, .main # @main 59; BIT32-NEXT: .vbyte 4, TOC[TC0] 60; BIT32-NEXT: .vbyte 4, 0 61; BIT64-NEXT: .vbyte 8, .main # @main 62; BIT64-NEXT: .vbyte 8, TOC[TC0] 63; BIT64-NEXT: .vbyte 8, 0 64; COMMON-NEXT: .csect .text[PR] 65; COMMON-NEXT: .main: 66 67; COMMON: .csect .data[RW] 68; COMMON-NEXT: .globl bar_p 69; BIT32-NEXT: .align 2 70; BIT64-NEXT: .align 3 71; COMMON-NEXT: bar_p: 72; BIT32-NEXT: .vbyte 4, bar_ref[DS] 73; BIT64-NEXT: .vbyte 8, bar_ref[DS] 74; COMMON-NEXT: .extern b_e[UA] 75; COMMON-NEXT: .extern .bar_ref 76; COMMON-NEXT: .extern bar_ref[DS] 77; COMMON-NEXT: .extern .bar_extern 78; COMMON-NEXT: .extern bar_extern[DS] 79; COMMON-NEXT: .toc 80; COMMON-NEXT: L..C0: 81; COMMON-NEXT: .tc b_e[TC],b_e[UA] 82; COMMON-NEXT: L..C1: 83; COMMON-NEXT: .tc bar_p[TC],bar_p 84 85; CHECKSYM: Symbols [ 86; CHECKSYM-NEXT: Symbol { 87; CHECKSYM-NEXT: Index: [[#Index:]] 88; CHECKSYM-NEXT: Name: .bar_extern 89; CHECKSYM-NEXT: Value (RelocatableAddress): 0x0 90; CHECKSYM-NEXT: Section: N_UNDEF 91; CHECKSYM-NEXT: Type: 0x0 92; CHECKSYM-NEXT: StorageClass: C_EXT (0x2) 93; CHECKSYM-NEXT: NumberOfAuxEntries: 1 94; CHECKSYM-NEXT: CSECT Auxiliary Entry { 95; CHECKSYM-NEXT: Index: [[#Index+1]] 96; CHECKSYM-NEXT: SectionLen: 0 97; CHECKSYM-NEXT: ParameterHashIndex: 0x0 98; CHECKSYM-NEXT: TypeChkSectNum: 0x0 99; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 100; CHECKSYM-NEXT: SymbolType: XTY_ER (0x0) 101; CHECKSYM-NEXT: StorageMappingClass: XMC_PR (0x0) 102; CHECKSYM-NEXT: StabInfoIndex: 0x0 103; CHECKSYM-NEXT: StabSectNum: 0x0 104; CHECKSYM-NEXT: } 105; CHECKSYM-NEXT: } 106; CHECKSYM-NEXT: Symbol { 107; CHECKSYM-NEXT: Index: [[#Index+2]] 108; CHECKSYM-NEXT: Name: .bar_ref 109; CHECKSYM-NEXT: Value (RelocatableAddress): 0x0 110; CHECKSYM-NEXT: Section: N_UNDEF 111; CHECKSYM-NEXT: Type: 0x0 112; CHECKSYM-NEXT: StorageClass: C_EXT (0x2) 113; CHECKSYM-NEXT: NumberOfAuxEntries: 1 114; CHECKSYM-NEXT: CSECT Auxiliary Entry { 115; CHECKSYM-NEXT: Index: [[#Index+3]] 116; CHECKSYM-NEXT: SectionLen: 0 117; CHECKSYM-NEXT: ParameterHashIndex: 0x0 118; CHECKSYM-NEXT: TypeChkSectNum: 0x0 119; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 120; CHECKSYM-NEXT: SymbolType: XTY_ER (0x0) 121; CHECKSYM-NEXT: StorageMappingClass: XMC_PR (0x0) 122; CHECKSYM-NEXT: StabInfoIndex: 0x0 123; CHECKSYM-NEXT: StabSectNum: 0x0 124; CHECKSYM-NEXT: } 125; CHECKSYM-NEXT: } 126; CHECKSYM-NEXT: Symbol { 127; CHECKSYM-NEXT: Index: [[#Index+4]] 128; CHECKSYM-NEXT: Name: bar_ref 129; CHECKSYM-NEXT: Value (RelocatableAddress): 0x0 130; CHECKSYM-NEXT: Section: N_UNDEF 131; CHECKSYM-NEXT: Type: 0x0 132; CHECKSYM-NEXT: StorageClass: C_EXT (0x2) 133; CHECKSYM-NEXT: NumberOfAuxEntries: 1 134; CHECKSYM-NEXT: CSECT Auxiliary Entry { 135; CHECKSYM-NEXT: Index: [[#Index+5]] 136; CHECKSYM-NEXT: SectionLen: 0 137; CHECKSYM-NEXT: ParameterHashIndex: 0x0 138; CHECKSYM-NEXT: TypeChkSectNum: 0x0 139; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 140; CHECKSYM-NEXT: SymbolType: XTY_ER (0x0) 141; CHECKSYM-NEXT: StorageMappingClass: XMC_DS (0xA) 142; CHECKSYM-NEXT: StabInfoIndex: 0x0 143; CHECKSYM-NEXT: StabSectNum: 0x0 144; CHECKSYM-NEXT: } 145; CHECKSYM-NEXT: } 146; CHECKSYM-NEXT: Symbol { 147; CHECKSYM-NEXT: Index: [[#Index+6]] 148; CHECKSYM-NEXT: Name: b_e 149; CHECKSYM-NEXT: Value (RelocatableAddress): 0x0 150; CHECKSYM-NEXT: Section: N_UNDEF 151; CHECKSYM-NEXT: Type: 0x0 152; CHECKSYM-NEXT: StorageClass: C_EXT (0x2) 153; CHECKSYM-NEXT: NumberOfAuxEntries: 1 154; CHECKSYM-NEXT: CSECT Auxiliary Entry { 155; CHECKSYM-NEXT: Index: [[#Index+7]] 156; CHECKSYM-NEXT: SectionLen: 0 157; CHECKSYM-NEXT: ParameterHashIndex: 0x0 158; CHECKSYM-NEXT: TypeChkSectNum: 0x0 159; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 160; CHECKSYM-NEXT: SymbolType: XTY_ER (0x0) 161; CHECKSYM-NEXT: StorageMappingClass: XMC_UA (0x4) 162; CHECKSYM-NEXT: StabInfoIndex: 0x0 163; CHECKSYM-NEXT: StabSectNum: 0x0 164; CHECKSYM-NEXT: } 165; CHECKSYM-NEXT: } 166; CHECKSYM-NEXT: Symbol { 167; CHECKSYM-NEXT: Index: [[#Index+8]] 168; CHECKSYM-NEXT: Name: bar_extern 169; CHECKSYM-NEXT: Value (RelocatableAddress): 0x0 170; CHECKSYM-NEXT: Section: N_UNDEF 171; CHECKSYM-NEXT: Type: 0x0 172; CHECKSYM-NEXT: StorageClass: C_EXT (0x2) 173; CHECKSYM-NEXT: NumberOfAuxEntries: 1 174; CHECKSYM-NEXT: CSECT Auxiliary Entry { 175; CHECKSYM-NEXT: Index: [[#Index+9]] 176; CHECKSYM-NEXT: SectionLen: 0 177; CHECKSYM-NEXT: ParameterHashIndex: 0x0 178; CHECKSYM-NEXT: TypeChkSectNum: 0x0 179; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 180; CHECKSYM-NEXT: SymbolType: XTY_ER (0x0) 181; CHECKSYM-NEXT: StorageMappingClass: XMC_DS (0xA) 182; CHECKSYM-NEXT: StabInfoIndex: 0x0 183; CHECKSYM-NEXT: StabSectNum: 0x0 184; CHECKSYM-NEXT: } 185; CHECKSYM-NEXT: } 186; CHECKSYM-NEXT: Symbol { 187; CHECKSYM-NEXT: Index: [[#Index+10]] 188; CHECKSYM-NEXT: Name: .text 189; CHECKSYM-NEXT: Value (RelocatableAddress): 0x0 190; CHECKSYM-NEXT: Section: .text 191; CHECKSYM-NEXT: Type: 0x0 192; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B) 193; CHECKSYM-NEXT: NumberOfAuxEntries: 1 194; CHECKSYM-NEXT: CSECT Auxiliary Entry { 195; CHECKSYM-NEXT: Index: [[#Index+11]] 196; CHECKSYM-NEXT: SectionLen: 112 197; CHECKSYM-NEXT: ParameterHashIndex: 0x0 198; CHECKSYM-NEXT: TypeChkSectNum: 0x0 199; CHECKSYM-NEXT: SymbolAlignmentLog2: 4 200; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) 201; CHECKSYM-NEXT: StorageMappingClass: XMC_PR (0x0) 202; CHECKSYM-NEXT: StabInfoIndex: 0x0 203; CHECKSYM-NEXT: StabSectNum: 0x0 204; CHECKSYM-NEXT: } 205; CHECKSYM-NEXT: } 206; CHECKSYM-NEXT: Symbol { 207; CHECKSYM-NEXT: Index: [[#Index+12]] 208; CHECKSYM-NEXT: Name: .foo 209; CHECKSYM-NEXT: Value (RelocatableAddress): 0x0 210; CHECKSYM-NEXT: Section: .text 211; CHECKSYM-NEXT: Type: 0x0 212; CHECKSYM-NEXT: StorageClass: C_EXT (0x2) 213; CHECKSYM-NEXT: NumberOfAuxEntries: 1 214; CHECKSYM-NEXT: CSECT Auxiliary Entry { 215; CHECKSYM-NEXT: Index: [[#Index+13]] 216; CHECKSYM-NEXT: ContainingCsectSymbolIndex: [[#Index+10]] 217; CHECKSYM-NEXT: ParameterHashIndex: 0x0 218; CHECKSYM-NEXT: TypeChkSectNum: 0x0 219; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 220; CHECKSYM-NEXT: SymbolType: XTY_LD (0x2) 221; CHECKSYM-NEXT: StorageMappingClass: XMC_PR (0x0) 222; CHECKSYM-NEXT: StabInfoIndex: 0x0 223; CHECKSYM-NEXT: StabSectNum: 0x0 224; CHECKSYM-NEXT: } 225; CHECKSYM-NEXT: } 226; CHECKSYM-NEXT: Symbol { 227; CHECKSYM-NEXT: Index: [[#Index+14]] 228; CHECKSYM-NEXT: Name: .main 229; CHECKSYM-NEXT: Value (RelocatableAddress): 0x10 230; CHECKSYM-NEXT: Section: .text 231; CHECKSYM-NEXT: Type: 0x0 232; CHECKSYM-NEXT: StorageClass: C_EXT (0x2) 233; CHECKSYM-NEXT: NumberOfAuxEntries: 1 234; CHECKSYM-NEXT: CSECT Auxiliary Entry { 235; CHECKSYM-NEXT: Index: [[#Index+15]] 236; CHECKSYM-NEXT: ContainingCsectSymbolIndex: [[#Index+10]] 237; CHECKSYM-NEXT: ParameterHashIndex: 0x0 238; CHECKSYM-NEXT: TypeChkSectNum: 0x0 239; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 240; CHECKSYM-NEXT: SymbolType: XTY_LD (0x2) 241; CHECKSYM-NEXT: StorageMappingClass: XMC_PR (0x0) 242; CHECKSYM-NEXT: StabInfoIndex: 0x0 243; CHECKSYM-NEXT: StabSectNum: 0x0 244; CHECKSYM-NEXT: } 245; CHECKSYM-NEXT: } 246; CHECKSYM-NEXT: Symbol { 247; CHECKSYM-NEXT: Index: [[#Index+16]] 248; CHECKSYM-NEXT: Name: .data 249; CHECKSYM-NEXT: Value (RelocatableAddress): 0x70 250; CHECKSYM-NEXT: Section: .data 251; CHECKSYM-NEXT: Type: 0x0 252; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B) 253; CHECKSYM-NEXT: NumberOfAuxEntries: 1 254; CHECKSYM-NEXT: CSECT Auxiliary Entry { 255; CHECKSYM-NEXT: Index: [[#Index+17]] 256; CHECKSYM-NEXT: SectionLen: 4 257; CHECKSYM-NEXT: ParameterHashIndex: 0x0 258; CHECKSYM-NEXT: TypeChkSectNum: 0x0 259; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 260; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) 261; CHECKSYM-NEXT: StorageMappingClass: XMC_RW (0x5) 262; CHECKSYM-NEXT: StabInfoIndex: 0x0 263; CHECKSYM-NEXT: StabSectNum: 0x0 264; CHECKSYM-NEXT: } 265; CHECKSYM-NEXT: } 266; CHECKSYM-NEXT: Symbol { 267; CHECKSYM-NEXT: Index: [[#Index+18]] 268; CHECKSYM-NEXT: Name: bar_p 269; CHECKSYM-NEXT: Value (RelocatableAddress): 0x70 270; CHECKSYM-NEXT: Section: .data 271; CHECKSYM-NEXT: Type: 0x0 272; CHECKSYM-NEXT: StorageClass: C_EXT (0x2) 273; CHECKSYM-NEXT: NumberOfAuxEntries: 1 274; CHECKSYM-NEXT: CSECT Auxiliary Entry { 275; CHECKSYM-NEXT: Index: [[#Index+19]] 276; CHECKSYM-NEXT: ContainingCsectSymbolIndex: [[#Index+16]] 277; CHECKSYM-NEXT: ParameterHashIndex: 0x0 278; CHECKSYM-NEXT: TypeChkSectNum: 0x0 279; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 280; CHECKSYM-NEXT: SymbolType: XTY_LD (0x2) 281; CHECKSYM-NEXT: StorageMappingClass: XMC_RW (0x5) 282; CHECKSYM-NEXT: StabInfoIndex: 0x0 283; CHECKSYM-NEXT: StabSectNum: 0x0 284; CHECKSYM-NEXT: } 285; CHECKSYM-NEXT: } 286; CHECKSYM-NEXT: Symbol { 287; CHECKSYM-NEXT: Index: [[#Index+20]] 288; CHECKSYM-NEXT: Name: foo 289; CHECKSYM-NEXT: Value (RelocatableAddress): 0x74 290; CHECKSYM-NEXT: Section: .data 291; CHECKSYM-NEXT: Type: 0x0 292; CHECKSYM-NEXT: StorageClass: C_EXT (0x2) 293; CHECKSYM-NEXT: NumberOfAuxEntries: 1 294; CHECKSYM-NEXT: CSECT Auxiliary Entry { 295; CHECKSYM-NEXT: Index: [[#Index+21]] 296; CHECKSYM-NEXT: SectionLen: 12 297; CHECKSYM-NEXT: ParameterHashIndex: 0x0 298; CHECKSYM-NEXT: TypeChkSectNum: 0x0 299; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 300; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) 301; CHECKSYM-NEXT: StorageMappingClass: XMC_DS (0xA) 302; CHECKSYM-NEXT: StabInfoIndex: 0x0 303; CHECKSYM-NEXT: StabSectNum: 0x0 304; CHECKSYM-NEXT: } 305; CHECKSYM-NEXT: } 306; CHECKSYM-NEXT: Symbol { 307; CHECKSYM-NEXT: Index: [[#Index+22]] 308; CHECKSYM-NEXT: Name: main 309; CHECKSYM-NEXT: Value (RelocatableAddress): 0x80 310; CHECKSYM-NEXT: Section: .data 311; CHECKSYM-NEXT: Type: 0x0 312; CHECKSYM-NEXT: StorageClass: C_EXT (0x2) 313; CHECKSYM-NEXT: NumberOfAuxEntries: 1 314; CHECKSYM-NEXT: CSECT Auxiliary Entry { 315; CHECKSYM-NEXT: Index: [[#Index+23]] 316; CHECKSYM-NEXT: SectionLen: 12 317; CHECKSYM-NEXT: ParameterHashIndex: 0x0 318; CHECKSYM-NEXT: TypeChkSectNum: 0x0 319; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 320; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) 321; CHECKSYM-NEXT: StorageMappingClass: XMC_DS (0xA) 322; CHECKSYM-NEXT: StabInfoIndex: 0x0 323; CHECKSYM-NEXT: StabSectNum: 0x0 324; CHECKSYM-NEXT: } 325; CHECKSYM-NEXT: } 326; CHECKSYM-NEXT: Symbol { 327; CHECKSYM-NEXT: Index: [[#Index+24]] 328; CHECKSYM-NEXT: Name: TOC 329; CHECKSYM-NEXT: Value (RelocatableAddress): 0x8C 330; CHECKSYM-NEXT: Section: .data 331; CHECKSYM-NEXT: Type: 0x0 332; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B) 333; CHECKSYM-NEXT: NumberOfAuxEntries: 1 334; CHECKSYM-NEXT: CSECT Auxiliary Entry { 335; CHECKSYM-NEXT: Index: [[#Index+25]] 336; CHECKSYM-NEXT: SectionLen: 0 337; CHECKSYM-NEXT: ParameterHashIndex: 0x0 338; CHECKSYM-NEXT: TypeChkSectNum: 0x0 339; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 340; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) 341; CHECKSYM-NEXT: StorageMappingClass: XMC_TC0 (0xF) 342; CHECKSYM-NEXT: StabInfoIndex: 0x0 343; CHECKSYM-NEXT: StabSectNum: 0x0 344; CHECKSYM-NEXT: } 345; CHECKSYM-NEXT: } 346; CHECKSYM-NEXT: Symbol { 347; CHECKSYM-NEXT: Index: [[#Index+26]] 348; CHECKSYM-NEXT: Name: b_e 349; CHECKSYM-NEXT: Value (RelocatableAddress): 0x8C 350; CHECKSYM-NEXT: Section: .data 351; CHECKSYM-NEXT: Type: 0x0 352; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B) 353; CHECKSYM-NEXT: NumberOfAuxEntries: 1 354; CHECKSYM-NEXT: CSECT Auxiliary Entry { 355; CHECKSYM-NEXT: Index: [[#Index+27]] 356; CHECKSYM-NEXT: SectionLen: 4 357; CHECKSYM-NEXT: ParameterHashIndex: 0x0 358; CHECKSYM-NEXT: TypeChkSectNum: 0x0 359; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 360; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) 361; CHECKSYM-NEXT: StorageMappingClass: XMC_TC (0x3) 362; CHECKSYM-NEXT: StabInfoIndex: 0x0 363; CHECKSYM-NEXT: StabSectNum: 0x0 364; CHECKSYM-NEXT: } 365; CHECKSYM-NEXT: } 366; CHECKSYM-NEXT: Symbol { 367; CHECKSYM-NEXT: Index: [[#Index+28]] 368; CHECKSYM-NEXT: Name: bar_p 369; CHECKSYM-NEXT: Value (RelocatableAddress): 0x90 370; CHECKSYM-NEXT: Section: .data 371; CHECKSYM-NEXT: Type: 0x0 372; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B) 373; CHECKSYM-NEXT: NumberOfAuxEntries: 1 374; CHECKSYM-NEXT: CSECT Auxiliary Entry { 375; CHECKSYM-NEXT: Index: [[#Index+29]] 376; CHECKSYM-NEXT: SectionLen: 4 377; CHECKSYM-NEXT: ParameterHashIndex: 0x0 378; CHECKSYM-NEXT: TypeChkSectNum: 0x0 379; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 380; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) 381; CHECKSYM-NEXT: StorageMappingClass: XMC_TC (0x3) 382; CHECKSYM-NEXT: StabInfoIndex: 0x0 383; CHECKSYM-NEXT: StabSectNum: 0x0 384; CHECKSYM-NEXT: } 385; CHECKSYM-NEXT: } 386; CHECKSYM-NEXT: ] 387