1; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mtriple powerpc-ibm-aix-xcoff < %s | FileCheck %s 2; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mtriple powerpc64-ibm-aix-xcoff < %s | FileCheck %s 3; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mtriple powerpc-ibm-aix-xcoff -filetype=obj -o %t.o < %s 4; RUN: llvm-objdump -D --symbol-description %t.o | FileCheck --check-prefix=CHECKOBJ %s 5; RUN: llvm-readobj -syms %t.o | FileCheck --check-prefix=CHECKSYM %s 6 7@ext_const = constant i32 1, section ".ext_const_sec", align 4 8@ext_var = global i32 1, section ".ext_var_sec", align 4 9@ext_zvar = global i32 0, section ".ext_zvar_sec", align 4 10 11define dso_local signext i32 @ext_fun() section ".ext_fun_sec" { 12entry: 13 %0 = load i32, i32* @ext_const, align 4 14 %1 = load i32, i32* @ext_var, align 4 15 %add = add nsw i32 %0, %1 16 %2 = load i32, i32* @ext_zvar, align 4 17 %add1 = add nsw i32 %add, %2 18 ret i32 %add1 19} 20 21; CHECK: .globl ext_fun[DS] # -- Begin function ext_fun 22; CHECK-NEXT: .globl .ext_fun 23; CHECK-NEXT: .align 4 24; CHECK-NEXT: .csect ext_fun[DS] 25; CHECK: .csect .ext_fun_sec[PR],2 26; CHECK-NEXT: .ext_fun: 27; CHECK: .csect .ext_const_sec[RO],2 28; CHECK-NEXT: .globl ext_const 29; CHECK-NEXT: .align 2 30; CHECK-NEXT: ext_const: 31; CHECK-NEXT: .vbyte 4, 1 # 0x1 32; CHECK-NEXT: .csect .ext_var_sec[RW],2 33; CHECK-NEXT: .globl ext_var 34; CHECK-NEXT: .align 2 35; CHECK-NEXT: ext_var: 36; CHECK-NEXT: .vbyte 4, 1 # 0x1 37; CHECK-NEXT: .csect .ext_zvar_sec[RW],2 38; CHECK-NEXT: .globl ext_zvar 39; CHECK-NEXT: .align 2 40; CHECK-NEXT: ext_zvar: 41; CHECK-NEXT: .vbyte 4, 0 # 0x0 42; CHECK-NEXT: .toc 43; CHECK-NEXT: L..C0: 44; CHECK-NEXT: .tc ext_var[TC],ext_var 45; CHECK-NEXT: L..C1: 46; CHECK-NEXT: .tc ext_zvar[TC],ext_zvar 47 48; CHECKOBJ: 00000000 (idx: 4) .ext_fun: 49; CHECKOBJ-NEXT: 0: 80 62 00 00 lwz 3, 0(2) 50; CHECKOBJ-NEXT: 4: 80 82 00 04 lwz 4, 4(2) 51; CHECKOBJ-NEXT: 8: 80 63 00 00 lwz 3, 0(3) 52; CHECKOBJ-NEXT: c: 80 84 00 00 lwz 4, 0(4) 53; CHECKOBJ-NEXT: 10: 7c 63 22 14 add 3, 3, 4 54; CHECKOBJ-NEXT: 14: 38 63 00 01 addi 3, 3, 1 55; CHECKOBJ-NEXT: 18: 4e 80 00 20 blr 56; CHECKOBJ-EMPTY: 57; CHECKOBJ-NEXT: 0000001c (idx: 8) ext_const: 58; CHECKOBJ-NEXT: 1c: 00 00 00 01 <unknown> 59; CHECKOBJ-EMPTY: 60; CHECKOBJ-NEXT: Disassembly of section .data: 61; CHECKOBJ-EMPTY: 62; CHECKOBJ-NEXT: 00000020 (idx: 12) ext_var: 63; CHECKOBJ-NEXT: 20: 00 00 00 01 <unknown> 64; CHECKOBJ-EMPTY: 65; CHECKOBJ-NEXT: 00000024 (idx: 16) ext_zvar: 66; CHECKOBJ-NEXT: 24: 00 00 00 00 <unknown> 67; CHECKOBJ-EMPTY: 68; CHECKOBJ-NEXT: 00000028 (idx: 18) ext_fun[DS]: 69; CHECKOBJ-NEXT: 28: 00 00 00 00 <unknown> 70; CHECKOBJ-NEXT: 2c: 00 00 00 34 <unknown> 71; CHECKOBJ-NEXT: 30: 00 00 00 00 <unknown> 72; CHECKOBJ-EMPTY: 73; CHECKOBJ-NEXT: 00000034 (idx: 22) ext_var[TC]: 74; CHECKOBJ-NEXT: 34: 00 00 00 20 <unknown> 75; CHECKOBJ-EMPTY: 76; CHECKOBJ-NEXT: 00000038 (idx: 24) ext_zvar[TC]: 77; CHECKOBJ-NEXT: 38: 00 00 00 24 <unknown> 78 79; CHECKSYM: Symbol {{[{][[:space:]] *}}Index: [[#INDX:]]{{[[:space:]] *}}Name: .ext_fun_sec 80; CHECKSYM-NEXT: Value (RelocatableAddress): 0x0 81; CHECKSYM-NEXT: Section: .text 82; CHECKSYM-NEXT: Type: 0x0 83; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B) 84; CHECKSYM-NEXT: NumberOfAuxEntries: 1 85; CHECKSYM-NEXT: CSECT Auxiliary Entry { 86; CHECKSYM-NEXT: Index: [[#INDX+1]] 87; CHECKSYM-NEXT: SectionLen: 28 88; CHECKSYM-NEXT: ParameterHashIndex: 0x0 89; CHECKSYM-NEXT: TypeChkSectNum: 0x0 90; CHECKSYM-NEXT: SymbolAlignmentLog2: 4 91; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) 92; CHECKSYM-NEXT: StorageMappingClass: XMC_PR (0x0) 93; CHECKSYM-NEXT: StabInfoIndex: 0x0 94; CHECKSYM-NEXT: StabSectNum: 0x0 95; CHECKSYM-NEXT: } 96; CHECKSYM-NEXT: } 97; CHECKSYM-NEXT: Symbol { 98; CHECKSYM-NEXT: Index: [[#INDX+2]] 99; CHECKSYM-NEXT: Name: .ext_fun 100; CHECKSYM-NEXT: Value (RelocatableAddress): 0x0 101; CHECKSYM-NEXT: Section: .text 102; CHECKSYM-NEXT: Type: 0x0 103; CHECKSYM-NEXT: StorageClass: C_EXT (0x2) 104; CHECKSYM-NEXT: NumberOfAuxEntries: 1 105; CHECKSYM-NEXT: CSECT Auxiliary Entry { 106; CHECKSYM-NEXT: Index: [[#INDX+3]] 107; CHECKSYM-NEXT: ContainingCsectSymbolIndex: [[#INDX]] 108; CHECKSYM-NEXT: ParameterHashIndex: 0x0 109; CHECKSYM-NEXT: TypeChkSectNum: 0x0 110; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 111; CHECKSYM-NEXT: SymbolType: XTY_LD (0x2) 112; CHECKSYM-NEXT: StorageMappingClass: XMC_PR (0x0) 113; CHECKSYM-NEXT: StabInfoIndex: 0x0 114; CHECKSYM-NEXT: StabSectNum: 0x0 115; CHECKSYM-NEXT: } 116; CHECKSYM-NEXT: } 117; CHECKSYM-NEXT: Symbol { 118; CHECKSYM-NEXT: Index: [[#INDX+4]] 119; CHECKSYM-NEXT: Name: .ext_const_sec 120; CHECKSYM-NEXT: Value (RelocatableAddress): 0x1C 121; CHECKSYM-NEXT: Section: .text 122; CHECKSYM-NEXT: Type: 0x0 123; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B) 124; CHECKSYM-NEXT: NumberOfAuxEntries: 1 125; CHECKSYM-NEXT: CSECT Auxiliary Entry { 126; CHECKSYM-NEXT: Index: [[#INDX+5]] 127; CHECKSYM-NEXT: SectionLen: 4 128; CHECKSYM-NEXT: ParameterHashIndex: 0x0 129; CHECKSYM-NEXT: TypeChkSectNum: 0x0 130; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 131; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) 132; CHECKSYM-NEXT: StorageMappingClass: XMC_RO (0x1) 133; CHECKSYM-NEXT: StabInfoIndex: 0x0 134; CHECKSYM-NEXT: StabSectNum: 0x0 135; CHECKSYM-NEXT: } 136; CHECKSYM-NEXT: } 137; CHECKSYM-NEXT: Symbol { 138; CHECKSYM-NEXT: Index: [[#INDX+6]] 139; CHECKSYM-NEXT: Name: ext_const 140; CHECKSYM-NEXT: Value (RelocatableAddress): 0x1C 141; CHECKSYM-NEXT: Section: .text 142; CHECKSYM-NEXT: Type: 0x0 143; CHECKSYM-NEXT: StorageClass: C_EXT (0x2) 144; CHECKSYM-NEXT: NumberOfAuxEntries: 1 145; CHECKSYM-NEXT: CSECT Auxiliary Entry { 146; CHECKSYM-NEXT: Index: [[#INDX+7]] 147; CHECKSYM-NEXT: ContainingCsectSymbolIndex: [[#INDX+4]] 148; CHECKSYM-NEXT: ParameterHashIndex: 0x0 149; CHECKSYM-NEXT: TypeChkSectNum: 0x0 150; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 151; CHECKSYM-NEXT: SymbolType: XTY_LD (0x2) 152; CHECKSYM-NEXT: StorageMappingClass: XMC_RO (0x1) 153; CHECKSYM-NEXT: StabInfoIndex: 0x0 154; CHECKSYM-NEXT: StabSectNum: 0x0 155; CHECKSYM-NEXT: } 156; CHECKSYM-NEXT: } 157; CHECKSYM-NEXT: Symbol { 158; CHECKSYM-NEXT: Index: [[#INDX+8]] 159; CHECKSYM-NEXT: Name: .ext_var_sec 160; CHECKSYM-NEXT: Value (RelocatableAddress): 0x20 161; CHECKSYM-NEXT: Section: .data 162; CHECKSYM-NEXT: Type: 0x0 163; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B) 164; CHECKSYM-NEXT: NumberOfAuxEntries: 1 165; CHECKSYM-NEXT: CSECT Auxiliary Entry { 166; CHECKSYM-NEXT: Index: [[#INDX+9]] 167; CHECKSYM-NEXT: SectionLen: 4 168; CHECKSYM-NEXT: ParameterHashIndex: 0x0 169; CHECKSYM-NEXT: TypeChkSectNum: 0x0 170; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 171; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) 172; CHECKSYM-NEXT: StorageMappingClass: XMC_RW (0x5) 173; CHECKSYM-NEXT: StabInfoIndex: 0x0 174; CHECKSYM-NEXT: StabSectNum: 0x0 175; CHECKSYM-NEXT: } 176; CHECKSYM-NEXT: } 177; CHECKSYM-NEXT: Symbol { 178; CHECKSYM-NEXT: Index: [[#INDX+10]] 179; CHECKSYM-NEXT: Name: ext_var 180; CHECKSYM-NEXT: Value (RelocatableAddress): 0x20 181; CHECKSYM-NEXT: Section: .data 182; CHECKSYM-NEXT: Type: 0x0 183; CHECKSYM-NEXT: StorageClass: C_EXT (0x2) 184; CHECKSYM-NEXT: NumberOfAuxEntries: 1 185; CHECKSYM-NEXT: CSECT Auxiliary Entry { 186; CHECKSYM-NEXT: Index: [[#INDX+11]] 187; CHECKSYM-NEXT: ContainingCsectSymbolIndex: [[#INDX+8]] 188; CHECKSYM-NEXT: ParameterHashIndex: 0x0 189; CHECKSYM-NEXT: TypeChkSectNum: 0x0 190; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 191; CHECKSYM-NEXT: SymbolType: XTY_LD (0x2) 192; CHECKSYM-NEXT: StorageMappingClass: XMC_RW (0x5) 193; CHECKSYM-NEXT: StabInfoIndex: 0x0 194; CHECKSYM-NEXT: StabSectNum: 0x0 195; CHECKSYM-NEXT: } 196; CHECKSYM-NEXT: } 197; CHECKSYM-NEXT: Symbol { 198; CHECKSYM-NEXT: Index: [[#INDX+12]] 199; CHECKSYM-NEXT: Name: .ext_zvar_sec 200; CHECKSYM-NEXT: Value (RelocatableAddress): 0x24 201; CHECKSYM-NEXT: Section: .data 202; CHECKSYM-NEXT: Type: 0x0 203; CHECKSYM-NEXT: StorageClass: C_HIDEXT (0x6B) 204; CHECKSYM-NEXT: NumberOfAuxEntries: 1 205; CHECKSYM-NEXT: CSECT Auxiliary Entry { 206; CHECKSYM-NEXT: Index: [[#INDX+13]] 207; CHECKSYM-NEXT: SectionLen: 4 208; CHECKSYM-NEXT: ParameterHashIndex: 0x0 209; CHECKSYM-NEXT: TypeChkSectNum: 0x0 210; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 211; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) 212; CHECKSYM-NEXT: StorageMappingClass: XMC_RW (0x5) 213; CHECKSYM-NEXT: StabInfoIndex: 0x0 214; CHECKSYM-NEXT: StabSectNum: 0x0 215; CHECKSYM-NEXT: } 216; CHECKSYM-NEXT: } 217; CHECKSYM-NEXT: Symbol { 218; CHECKSYM-NEXT: Index: [[#INDX+14]] 219; CHECKSYM-NEXT: Name: ext_zvar 220; CHECKSYM-NEXT: Value (RelocatableAddress): 0x24 221; CHECKSYM-NEXT: Section: .data 222; CHECKSYM-NEXT: Type: 0x0 223; CHECKSYM-NEXT: StorageClass: C_EXT (0x2) 224; CHECKSYM-NEXT: NumberOfAuxEntries: 1 225; CHECKSYM-NEXT: CSECT Auxiliary Entry { 226; CHECKSYM-NEXT: Index: [[#INDX+15]] 227; CHECKSYM-NEXT: ContainingCsectSymbolIndex: [[#INDX+12]] 228; CHECKSYM-NEXT: ParameterHashIndex: 0x0 229; CHECKSYM-NEXT: TypeChkSectNum: 0x0 230; CHECKSYM-NEXT: SymbolAlignmentLog2: 0 231; CHECKSYM-NEXT: SymbolType: XTY_LD (0x2) 232; CHECKSYM-NEXT: StorageMappingClass: XMC_RW (0x5) 233; CHECKSYM-NEXT: StabInfoIndex: 0x0 234; CHECKSYM-NEXT: StabSectNum: 0x0 235; CHECKSYM-NEXT: } 236; CHECKSYM-NEXT: } 237; CHECKSYM-NEXT: Symbol { 238; CHECKSYM-NEXT: Index: [[#INDX+16]] 239; CHECKSYM-NEXT: Name: ext_fun 240; CHECKSYM-NEXT: Value (RelocatableAddress): 0x28 241; CHECKSYM-NEXT: Section: .data 242; CHECKSYM-NEXT: Type: 0x0 243; CHECKSYM-NEXT: StorageClass: C_EXT (0x2) 244; CHECKSYM-NEXT: NumberOfAuxEntries: 1 245; CHECKSYM-NEXT: CSECT Auxiliary Entry { 246; CHECKSYM-NEXT: Index: [[#INDX+17]] 247; CHECKSYM-NEXT: SectionLen: 12 248; CHECKSYM-NEXT: ParameterHashIndex: 0x0 249; CHECKSYM-NEXT: TypeChkSectNum: 0x0 250; CHECKSYM-NEXT: SymbolAlignmentLog2: 2 251; CHECKSYM-NEXT: SymbolType: XTY_SD (0x1) 252; CHECKSYM-NEXT: StorageMappingClass: XMC_DS (0xA) 253; CHECKSYM-NEXT: StabInfoIndex: 0x0 254; CHECKSYM-NEXT: StabSectNum: 0x0 255; CHECKSYM-NEXT: } 256; CHECKSYM-NEXT: } 257