blob: 8b7032af6600087578e564e654b7f558325c1ac9 [file] [log] [blame]
jasonliu3bbe7a62020-01-30 15:50:49 +00001; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mtriple powerpc-ibm-aix-xcoff -mattr=-altivec -filetype=obj -o %t.o < %s
2; RUN: llvm-readobj --section-headers --file-header %t.o | \
3; RUN: FileCheck --check-prefix=OBJ %s
4; RUN: llvm-readobj --relocs --expand-relocs %t.o | FileCheck --check-prefix=RELOC %s
5; RUN: llvm-readobj -t %t.o | FileCheck --check-prefix=SYM %s
6; RUN: llvm-objdump -D %t.o | FileCheck --check-prefix=DIS %s
7
8; RUN: not llc -verify-machineinstrs -mcpu=pwr4 -mtriple powerpc64-ibm-aix-xcoff -mattr=-altivec -filetype=obj < %s 2>&1 | \
9; RUN: FileCheck --check-prefix=XCOFF64 %s
10; XCOFF64: LLVM ERROR: 64-bit XCOFF object files are not supported yet.
11
12@globalA = global i32 1, align 4
13@globalB = global i32 2, align 4
14@arr = global <{ i32, [9 x i32] }> <{ i32 3, [9 x i32] zeroinitializer }>, align 4
15@p = global i32* bitcast (i8* getelementptr (i8, i8* bitcast (<{ i32, [9 x i32] }>* @arr to i8*), i64 16) to i32*), align 4
16
17define i32 @foo() {
18entry:
19 %call = call i32 @bar(i32 1)
20 %0 = load i32, i32* @globalA, align 4
21 %add = add nsw i32 %call, %0
22 %1 = load i32, i32* @globalB, align 4
23 %add1 = add nsw i32 %add, %1
24 ret i32 %add1
25}
26
27declare i32 @bar(i32)
28
29; OBJ: File: {{.*}}aix-xcoff-reloc.ll.tmp.o
30; OBJ-NEXT: Format: aixcoff-rs6000
31; OBJ-NEXT: Arch: powerpc
32; OBJ-NEXT: AddressSize: 32bit
33; OBJ-NEXT: FileHeader {
34; OBJ-NEXT: Magic: 0x1DF
35; OBJ-NEXT: NumberOfSections: 2
36; OBJ-NEXT: TimeStamp: None (0x0)
37; OBJ-NEXT: SymbolTableOffset: 0x13C
38; OBJ-NEXT: SymbolTableEntries: 26
39; OBJ-NEXT: OptionalHeaderSize: 0x0
40; OBJ-NEXT: Flags: 0x0
41; OBJ-NEXT: }
42; OBJ-NEXT: Sections [
43; OBJ-NEXT: Section {
44; OBJ-NEXT: Index: 1
45; OBJ-NEXT: Name: .text
46; OBJ-NEXT: PhysicalAddress: 0x0
47; OBJ-NEXT: VirtualAddress: 0x0
48; OBJ-NEXT: Size: 0x40
49; OBJ-NEXT: RawDataOffset: 0x64
50; OBJ-NEXT: RelocationPointer: 0xEC
51; OBJ-NEXT: LineNumberPointer: 0x0
52; OBJ-NEXT: NumberOfRelocations: 3
53; OBJ-NEXT: NumberOfLineNumbers: 0
54; OBJ-NEXT: Type: STYP_TEXT (0x20)
55; OBJ-NEXT: }
56; OBJ-NEXT: Section {
57; OBJ-NEXT: Index: 2
58; OBJ-NEXT: Name: .data
59; OBJ-NEXT: PhysicalAddress: 0x40
60; OBJ-NEXT: VirtualAddress: 0x40
61; OBJ-NEXT: Size: 0x48
62; OBJ-NEXT: RawDataOffset: 0xA4
63; OBJ-NEXT: RelocationPointer: 0x10A
64; OBJ-NEXT: LineNumberPointer: 0x0
65; OBJ-NEXT: NumberOfRelocations: 5
66; OBJ-NEXT: NumberOfLineNumbers: 0
67; OBJ-NEXT: Type: STYP_DATA (0x40)
68; OBJ-NEXT: }
69; OBJ-NEXT: ]
70
71
72; RELOC: File: {{.*}}aix-xcoff-reloc.ll.tmp.o
73; RELOC-NEXT: Format: aixcoff-rs6000
74; RELOC-NEXT: Arch: powerpc
75; RELOC-NEXT: AddressSize: 32bit
76; RELOC-NEXT: Relocations [
77; RELOC-NEXT: Section (index: 1) .text {
78; RELOC-NEXT: Relocation {
79; RELOC-NEXT: Virtual Address: 0x10
80; RELOC-NEXT: Symbol: .bar (0)
81; RELOC-NEXT: IsSigned: Yes
82; RELOC-NEXT: FixupBitValue: 0
83; RELOC-NEXT: Length: 26
84; RELOC-NEXT: Type: R_RBR (0x1A)
85; RELOC-NEXT: }
86; RELOC-NEXT: Relocation {
87; RELOC-NEXT: Virtual Address: 0x1A
88; RELOC-NEXT: Symbol: globalA (22)
89; RELOC-NEXT: IsSigned: No
90; RELOC-NEXT: FixupBitValue: 0
91; RELOC-NEXT: Length: 16
92; RELOC-NEXT: Type: R_TOC (0x3)
93; RELOC-NEXT: }
94; RELOC-NEXT: Relocation {
95; RELOC-NEXT: Virtual Address: 0x1E
96; RELOC-NEXT: Symbol: globalB (24)
97; RELOC-NEXT: IsSigned: No
98; RELOC-NEXT: FixupBitValue: 0
99; RELOC-NEXT: Length: 16
100; RELOC-NEXT: Type: R_TOC (0x3)
101; RELOC-NEXT: }
102; RELOC-NEXT: }
103; RELOC-NEXT: Section (index: 2) .data {
104; RELOC-NEXT: Relocation {
105; RELOC-NEXT: Virtual Address: 0x70
106; RELOC-NEXT: Symbol: arr (12)
107; RELOC-NEXT: IsSigned: No
108; RELOC-NEXT: FixupBitValue: 0
109; RELOC-NEXT: Length: 32
110; RELOC-NEXT: Type: R_POS (0x0)
111; RELOC-NEXT: }
112; RELOC-NEXT: Relocation {
113; RELOC-NEXT: Virtual Address: 0x74
114; RELOC-NEXT: Symbol: .foo (4)
115; RELOC-NEXT: IsSigned: No
116; RELOC-NEXT: FixupBitValue: 0
117; RELOC-NEXT: Length: 32
118; RELOC-NEXT: Type: R_POS (0x0)
119; RELOC-NEXT: }
120; RELOC-NEXT: Relocation {
121; RELOC-NEXT: Virtual Address: 0x78
122; RELOC-NEXT: Symbol: TOC (20)
123; RELOC-NEXT: IsSigned: No
124; RELOC-NEXT: FixupBitValue: 0
125; RELOC-NEXT: Length: 32
126; RELOC-NEXT: Type: R_POS (0x0)
127; RELOC-NEXT: }
128; RELOC-NEXT: Relocation {
129; RELOC-NEXT: Virtual Address: 0x80
130; RELOC-NEXT: Symbol: globalA (8)
131; RELOC-NEXT: IsSigned: No
132; RELOC-NEXT: FixupBitValue: 0
133; RELOC-NEXT: Length: 32
134; RELOC-NEXT: Type: R_POS (0x0)
135; RELOC-NEXT: }
136; RELOC-NEXT: Relocation {
137; RELOC-NEXT: Virtual Address: 0x84
138; RELOC-NEXT: Symbol: globalB (10)
139; RELOC-NEXT: IsSigned: No
140; RELOC-NEXT: FixupBitValue: 0
141; RELOC-NEXT: Length: 32
142; RELOC-NEXT: Type: R_POS (0x0)
143; RELOC-NEXT: }
144; RELOC-NEXT: }
145; RELOC-NEXT: ]
146
147; SYM: Symbols [
148; SYM-NEXT: Symbol {
149; SYM-NEXT: Index: 0
150; SYM-NEXT: Name: .bar
151; SYM-NEXT: Value (RelocatableAddress): 0x0
152; SYM-NEXT: Section: N_UNDEF
153; SYM-NEXT: Type: 0x0
154; SYM-NEXT: StorageClass: C_EXT (0x2)
155; SYM-NEXT: NumberOfAuxEntries: 1
156; SYM-NEXT: CSECT Auxiliary Entry {
157; SYM-NEXT: Index: 1
158; SYM-NEXT: SectionLen: 0
159; SYM-NEXT: ParameterHashIndex: 0x0
160; SYM-NEXT: TypeChkSectNum: 0x0
161; SYM-NEXT: SymbolAlignmentLog2: 0
162; SYM-NEXT: SymbolType: XTY_ER (0x0)
163; SYM-NEXT: StorageMappingClass: XMC_PR (0x0)
164; SYM-NEXT: StabInfoIndex: 0x0
165; SYM-NEXT: StabSectNum: 0x0
166; SYM-NEXT: }
167; SYM-NEXT: }
168; SYM-NEXT: Symbol {
169; SYM-NEXT: Index: 2
170; SYM-NEXT: Name: .text
171; SYM-NEXT: Value (RelocatableAddress): 0x0
172; SYM-NEXT: Section: .text
173; SYM-NEXT: Type: 0x0
174; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)
175; SYM-NEXT: NumberOfAuxEntries: 1
176; SYM-NEXT: CSECT Auxiliary Entry {
177; SYM-NEXT: Index: 3
178; SYM-NEXT: SectionLen: 64
179; SYM-NEXT: ParameterHashIndex: 0x0
180; SYM-NEXT: TypeChkSectNum: 0x0
181; SYM-NEXT: SymbolAlignmentLog2: 4
182; SYM-NEXT: SymbolType: XTY_SD (0x1)
183; SYM-NEXT: StorageMappingClass: XMC_PR (0x0)
184; SYM-NEXT: StabInfoIndex: 0x0
185; SYM-NEXT: StabSectNum: 0x0
186; SYM-NEXT: }
187; SYM-NEXT: }
188; SYM-NEXT: Symbol {
189; SYM-NEXT: Index: 4
190; SYM-NEXT: Name: .foo
191; SYM-NEXT: Value (RelocatableAddress): 0x0
192; SYM-NEXT: Section: .text
193; SYM-NEXT: Type: 0x0
194; SYM-NEXT: StorageClass: C_EXT (0x2)
195; SYM-NEXT: NumberOfAuxEntries: 1
196; SYM-NEXT: CSECT Auxiliary Entry {
197; SYM-NEXT: Index: 5
198; SYM-NEXT: ContainingCsectSymbolIndex: 2
199; SYM-NEXT: ParameterHashIndex: 0x0
200; SYM-NEXT: TypeChkSectNum: 0x0
201; SYM-NEXT: SymbolAlignmentLog2: 0
202; SYM-NEXT: SymbolType: XTY_LD (0x2)
203; SYM-NEXT: StorageMappingClass: XMC_PR (0x0)
204; SYM-NEXT: StabInfoIndex: 0x0
205; SYM-NEXT: StabSectNum: 0x0
206; SYM-NEXT: }
207; SYM-NEXT: }
208; SYM-NEXT: Symbol {
209; SYM-NEXT: Index: 6
210; SYM-NEXT: Name: .data
211; SYM-NEXT: Value (RelocatableAddress): 0x40
212; SYM-NEXT: Section: .data
213; SYM-NEXT: Type: 0x0
214; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)
215; SYM-NEXT: NumberOfAuxEntries: 1
216; SYM-NEXT: CSECT Auxiliary Entry {
217; SYM-NEXT: Index: 7
218; SYM-NEXT: SectionLen: 52
219; SYM-NEXT: ParameterHashIndex: 0x0
220; SYM-NEXT: TypeChkSectNum: 0x0
221; SYM-NEXT: SymbolAlignmentLog2: 2
222; SYM-NEXT: SymbolType: XTY_SD (0x1)
223; SYM-NEXT: StorageMappingClass: XMC_RW (0x5)
224; SYM-NEXT: StabInfoIndex: 0x0
225; SYM-NEXT: StabSectNum: 0x0
226; SYM-NEXT: }
227; SYM-NEXT: }
228; SYM-NEXT: Symbol {
229; SYM-NEXT: Index: 8
230; SYM-NEXT: Name: globalA
231; SYM-NEXT: Value (RelocatableAddress): 0x40
232; SYM-NEXT: Section: .data
233; SYM-NEXT: Type: 0x0
234; SYM-NEXT: StorageClass: C_EXT (0x2)
235; SYM-NEXT: NumberOfAuxEntries: 1
236; SYM-NEXT: CSECT Auxiliary Entry {
237; SYM-NEXT: Index: 9
238; SYM-NEXT: ContainingCsectSymbolIndex: 6
239; SYM-NEXT: ParameterHashIndex: 0x0
240; SYM-NEXT: TypeChkSectNum: 0x0
241; SYM-NEXT: SymbolAlignmentLog2: 0
242; SYM-NEXT: SymbolType: XTY_LD (0x2)
243; SYM-NEXT: StorageMappingClass: XMC_RW (0x5)
244; SYM-NEXT: StabInfoIndex: 0x0
245; SYM-NEXT: StabSectNum: 0x0
246; SYM-NEXT: }
247; SYM-NEXT: }
248; SYM-NEXT: Symbol {
249; SYM-NEXT: Index: 10
250; SYM-NEXT: Name: globalB
251; SYM-NEXT: Value (RelocatableAddress): 0x44
252; SYM-NEXT: Section: .data
253; SYM-NEXT: Type: 0x0
254; SYM-NEXT: StorageClass: C_EXT (0x2)
255; SYM-NEXT: NumberOfAuxEntries: 1
256; SYM-NEXT: CSECT Auxiliary Entry {
257; SYM-NEXT: Index: 11
258; SYM-NEXT: ContainingCsectSymbolIndex: 6
259; SYM-NEXT: ParameterHashIndex: 0x0
260; SYM-NEXT: TypeChkSectNum: 0x0
261; SYM-NEXT: SymbolAlignmentLog2: 0
262; SYM-NEXT: SymbolType: XTY_LD (0x2)
263; SYM-NEXT: StorageMappingClass: XMC_RW (0x5)
264; SYM-NEXT: StabInfoIndex: 0x0
265; SYM-NEXT: StabSectNum: 0x0
266; SYM-NEXT: }
267; SYM-NEXT: }
268; SYM-NEXT: Symbol {
269; SYM-NEXT: Index: 12
270; SYM-NEXT: Name: arr
271; SYM-NEXT: Value (RelocatableAddress): 0x48
272; SYM-NEXT: Section: .data
273; SYM-NEXT: Type: 0x0
274; SYM-NEXT: StorageClass: C_EXT (0x2)
275; SYM-NEXT: NumberOfAuxEntries: 1
276; SYM-NEXT: CSECT Auxiliary Entry {
277; SYM-NEXT: Index: 13
278; SYM-NEXT: ContainingCsectSymbolIndex: 6
279; SYM-NEXT: ParameterHashIndex: 0x0
280; SYM-NEXT: TypeChkSectNum: 0x0
281; SYM-NEXT: SymbolAlignmentLog2: 0
282; SYM-NEXT: SymbolType: XTY_LD (0x2)
283; SYM-NEXT: StorageMappingClass: XMC_RW (0x5)
284; SYM-NEXT: StabInfoIndex: 0x0
285; SYM-NEXT: StabSectNum: 0x0
286; SYM-NEXT: }
287; SYM-NEXT: }
288; SYM-NEXT: Symbol {
289; SYM-NEXT: Index: 14
290; SYM-NEXT: Name: p
291; SYM-NEXT: Value (RelocatableAddress): 0x70
292; SYM-NEXT: Section: .data
293; SYM-NEXT: Type: 0x0
294; SYM-NEXT: StorageClass: C_EXT (0x2)
295; SYM-NEXT: NumberOfAuxEntries: 1
296; SYM-NEXT: CSECT Auxiliary Entry {
297; SYM-NEXT: Index: 15
298; SYM-NEXT: ContainingCsectSymbolIndex: 6
299; SYM-NEXT: ParameterHashIndex: 0x0
300; SYM-NEXT: TypeChkSectNum: 0x0
301; SYM-NEXT: SymbolAlignmentLog2: 0
302; SYM-NEXT: SymbolType: XTY_LD (0x2)
303; SYM-NEXT: StorageMappingClass: XMC_RW (0x5)
304; SYM-NEXT: StabInfoIndex: 0x0
305; SYM-NEXT: StabSectNum: 0x0
306; SYM-NEXT: }
307; SYM-NEXT: }
308; SYM-NEXT: Symbol {
309; SYM-NEXT: Index: 16
310; SYM-NEXT: Name: foo
311; SYM-NEXT: Value (RelocatableAddress): 0x74
312; SYM-NEXT: Section: .data
313; SYM-NEXT: Type: 0x0
314; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)
315; SYM-NEXT: NumberOfAuxEntries: 1
316; SYM-NEXT: CSECT Auxiliary Entry {
317; SYM-NEXT: Index: 17
318; SYM-NEXT: SectionLen: 12
319; SYM-NEXT: ParameterHashIndex: 0x0
320; SYM-NEXT: TypeChkSectNum: 0x0
321; SYM-NEXT: SymbolAlignmentLog2: 0
322; SYM-NEXT: SymbolType: XTY_SD (0x1)
323; SYM-NEXT: StorageMappingClass: XMC_DS (0xA)
324; SYM-NEXT: StabInfoIndex: 0x0
325; SYM-NEXT: StabSectNum: 0x0
326; SYM-NEXT: }
327; SYM-NEXT: }
328; SYM-NEXT: Symbol {
329; SYM-NEXT: Index: 18
330; SYM-NEXT: Name: foo
331; SYM-NEXT: Value (RelocatableAddress): 0x74
332; SYM-NEXT: Section: .data
333; SYM-NEXT: Type: 0x0
334; SYM-NEXT: StorageClass: C_EXT (0x2)
335; SYM-NEXT: NumberOfAuxEntries: 1
336; SYM-NEXT: CSECT Auxiliary Entry {
337; SYM-NEXT: Index: 19
338; SYM-NEXT: ContainingCsectSymbolIndex: 16
339; SYM-NEXT: ParameterHashIndex: 0x0
340; SYM-NEXT: TypeChkSectNum: 0x0
341; SYM-NEXT: SymbolAlignmentLog2: 0
342; SYM-NEXT: SymbolType: XTY_LD (0x2)
343; SYM-NEXT: StorageMappingClass: XMC_DS (0xA)
344; SYM-NEXT: StabInfoIndex: 0x0
345; SYM-NEXT: StabSectNum: 0x0
346; SYM-NEXT: }
347; SYM-NEXT: }
348; SYM-NEXT: Symbol {
349; SYM-NEXT: Index: 20
350; SYM-NEXT: Name: TOC
351; SYM-NEXT: Value (RelocatableAddress): 0x80
352; SYM-NEXT: Section: .data
353; SYM-NEXT: Type: 0x0
354; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)
355; SYM-NEXT: NumberOfAuxEntries: 1
356; SYM-NEXT: CSECT Auxiliary Entry {
357; SYM-NEXT: Index: 21
358; SYM-NEXT: SectionLen: 0
359; SYM-NEXT: ParameterHashIndex: 0x0
360; SYM-NEXT: TypeChkSectNum: 0x0
361; SYM-NEXT: SymbolAlignmentLog2: 2
362; SYM-NEXT: SymbolType: XTY_SD (0x1)
363; SYM-NEXT: StorageMappingClass: XMC_TC0 (0xF)
364; SYM-NEXT: StabInfoIndex: 0x0
365; SYM-NEXT: StabSectNum: 0x0
366; SYM-NEXT: }
367; SYM-NEXT: }
368; SYM-NEXT: Symbol {
369; SYM-NEXT: Index: 22
370; SYM-NEXT: Name: globalA
371; SYM-NEXT: Value (RelocatableAddress): 0x80
372; SYM-NEXT: Section: .data
373; SYM-NEXT: Type: 0x0
374; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)
375; SYM-NEXT: NumberOfAuxEntries: 1
376; SYM-NEXT: CSECT Auxiliary Entry {
377; SYM-NEXT: Index: 23
378; SYM-NEXT: SectionLen: 4
379; SYM-NEXT: ParameterHashIndex: 0x0
380; SYM-NEXT: TypeChkSectNum: 0x0
381; SYM-NEXT: SymbolAlignmentLog2: 2
382; SYM-NEXT: SymbolType: XTY_SD (0x1)
383; SYM-NEXT: StorageMappingClass: XMC_TC (0x3)
384; SYM-NEXT: StabInfoIndex: 0x0
385; SYM-NEXT: StabSectNum: 0x0
386; SYM-NEXT: }
387; SYM-NEXT: }
388; SYM-NEXT: Symbol {
389; SYM-NEXT: Index: 24
390; SYM-NEXT: Name: globalB
391; SYM-NEXT: Value (RelocatableAddress): 0x84
392; SYM-NEXT: Section: .data
393; SYM-NEXT: Type: 0x0
394; SYM-NEXT: StorageClass: C_HIDEXT (0x6B)
395; SYM-NEXT: NumberOfAuxEntries: 1
396; SYM-NEXT: CSECT Auxiliary Entry {
397; SYM-NEXT: Index: 25
398; SYM-NEXT: SectionLen: 4
399; SYM-NEXT: ParameterHashIndex: 0x0
400; SYM-NEXT: TypeChkSectNum: 0x0
401; SYM-NEXT: SymbolAlignmentLog2: 2
402; SYM-NEXT: SymbolType: XTY_SD (0x1)
403; SYM-NEXT: StorageMappingClass: XMC_TC (0x3)
404; SYM-NEXT: StabInfoIndex: 0x0
405; SYM-NEXT: StabSectNum: 0x0
406; SYM-NEXT: }
407; SYM-NEXT: }
408; SYM-NEXT: ]
409
410
411; DIS: {{.*}}aix-xcoff-reloc.ll.tmp.o: file format aixcoff-rs6000
412; DIS: Disassembly of section .text:
413; DIS: 00000000 .text:
414; DIS-NEXT: 0: 7c 08 02 a6 mflr 0
415; DIS-NEXT: 4: 90 01 00 08 stw 0, 8(1)
416; DIS-NEXT: 8: 94 21 ff c0 stwu 1, -64(1)
417; DIS-NEXT: c: 38 60 00 01 li 3, 1
418; DIS-NEXT: 10: 4b ff ff f1 bl .-16
419; DIS-NEXT: 14: 60 00 00 00 nop
420; DIS-NEXT: 18: 80 82 00 00 lwz 4, 0(2)
421; DIS-NEXT: 1c: 80 a2 00 04 lwz 5, 4(2)
422; DIS-NEXT: 20: 80 84 00 00 lwz 4, 0(4)
423; DIS-NEXT: 24: 80 a5 00 00 lwz 5, 0(5)
424; DIS-NEXT: 28: 7c 63 22 14 add 3, 3, 4
425; DIS-NEXT: 2c: 7c 63 2a 14 add 3, 3, 5
426; DIS-NEXT: 30: 38 21 00 40 addi 1, 1, 64
427; DIS-NEXT: 34: 80 01 00 08 lwz 0, 8(1)
428; DIS-NEXT: 38: 7c 08 03 a6 mtlr 0
429; DIS-NEXT: 3c: 4e 80 00 20 blr
430
431; DIS: Disassembly of section .data:
432; DIS: 00000040 globalA:
433; DIS-NEXT: 40: 00 00 00 01 <unknown>
434; DIS: 00000044 globalB:
435; DIS-NEXT: 44: 00 00 00 02 <unknown>
436; DIS: 00000048 arr:
437; DIS-NEXT: 48: 00 00 00 03 <unknown>
438; DIS-NEXT: ...
439; DIS: 00000070 p:
440; DIS-NEXT: 70: 00 00 00 58 <unknown>
441; DIS: 00000074 foo:
442; DIS-NEXT: 74: 00 00 00 00 <unknown>
443; DIS-NEXT: 78: 00 00 00 80 <unknown>
444; DIS-NEXT: 7c: 00 00 00 00 <unknown>
445; DIS: 00000080 globalA:
446; DIS-NEXT: 80: 00 00 00 40 <unknown>
447; DIS: 00000084 globalB:
448; DIS-NEXT: 84: 00 00 00 44 <unknown>