xref: /llvm-project/llvm/test/CodeGen/PowerPC/aix-extern-weak.ll (revision f31099ce581d33fdb64e35fee4b56d0a1145cab1)
1; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr4 \
2; RUN:   -mattr=-altivec -data-sections=false -xcoff-traceback-table=false < %s | \
3; RUN:   FileCheck --check-prefixes=COMMON,BIT32 %s
4
5; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr4 \
6; RUN:   -mattr=-altivec -data-sections=false -xcoff-traceback-table=false < %s | \
7; RUN:   FileCheck --check-prefixes=COMMON,BIT64 %s
8
9; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr4 \
10; RUN:   -mattr=-altivec -data-sections=false -xcoff-traceback-table=false \
11; RUN:   -filetype=obj -o %t.o < %s
12; RUN: llvm-readobj --symbols %t.o | FileCheck --check-prefixes=CHECKSYM,CHECKSYM32 %s
13
14; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr4 \
15; RUN:   -mattr=-altivec -data-sections=false -xcoff-traceback-table=false \
16; RUN:   -filetype=obj -o %t64.o < %s
17; RUN: llvm-readobj --symbols %t64.o | FileCheck --check-prefixes=CHECKSYM,CHECKSYM64 %s
18
19@foo_ext_weak_p = global ptr @foo_ext_weak_ref
20@b_w = extern_weak global i32
21
22declare extern_weak void @foo_ext_weak_ref()
23
24define i32 @main() {
25entry:
26  %0 = load ptr, ptr @foo_ext_weak_p
27  call void %0()
28  call void @foo_ext_weak(ptr @b_w)
29  ret i32 0
30}
31
32declare extern_weak void @foo_ext_weak(ptr)
33
34; COMMON:         .globl	main[DS]                # -- Begin function main
35; COMMON-NEXT:    .globl	.main
36; COMMON-NEXT:    .align	4
37; COMMON-NEXT:    .csect main[DS]
38; BIT32-NEXT:     .vbyte	4, .main                   # @main
39; BIT32-NEXT:     .vbyte	4, TOC[TC0]
40; BIT32-NEXT:     .vbyte	4, 0
41; BIT64-NEXT:     .vbyte	8, .main                   # @main
42; BIT64-NEXT:     .vbyte	8, TOC[TC0]
43; BIT64-NEXT:     .vbyte	8, 0
44; COMMON-NEXT:    .csect  ..text..[PR]
45; COMMON-NEXT:    .main:
46
47; COMMON:         .csect  .data[RW]
48; COMMON:         .globl  foo_ext_weak_p
49; BIT32-NEXT:     .align	2
50; BIT64-NEXT:     .align 	3
51; COMMON-NEXT: foo_ext_weak_p:
52; BIT32-NEXT: 	  .vbyte	4, foo_ext_weak_ref[DS]
53; BIT64-NEXT: 	  .vbyte	8, foo_ext_weak_ref[DS]
54; COMMON-NEXT:    .weak   b_w[UA]
55; COMMON-NEXT:    .weak   .foo_ext_weak_ref[PR]
56; COMMON-NEXT:    .weak   foo_ext_weak_ref[DS]
57; COMMON-NEXT:    .weak   .foo_ext_weak[PR]
58; COMMON-NEXT:    .toc
59; COMMON-NEXT: L..C0:
60; COMMON-NEXT:    .tc foo_ext_weak_p[TC],foo_ext_weak_p
61; COMMON-NEXT: L..C1:
62; COMMON-NEXT:    .tc b_w[TC],b_w[UA]
63
64; CHECKSYM:      Symbols [
65; CHECKSYM-NEXT:   Symbol {
66; CHECKSYM-NEXT:     Index: 0
67; CHECKSYM-NEXT:     Name: .file
68; CHECKSYM-NEXT:     Value (SymbolTableIndex): 0x0
69; CHECKSYM-NEXT:     Section: N_DEBUG
70; CHECKSYM-NEXT:     Source Language ID: TB_CPLUSPLUS (0x9)
71; CHECKSYM-NEXT:     CPU Version ID: TCPU_COM (0x3)
72; CHECKSYM-NEXT:     StorageClass: C_FILE (0x67)
73; CHECKSYM-NEXT:     NumberOfAuxEntries: 2
74; CHECKSYM:        Symbol {
75; CHECKSYM-NEXT:     Index: [[#Index:]]
76; CHECKSYM-NEXT:     Name: .foo_ext_weak
77; CHECKSYM-NEXT:     Value (RelocatableAddress): 0x0
78; CHECKSYM-NEXT:     Section: N_UNDEF
79; CHECKSYM-NEXT:     Type: 0x0
80; CHECKSYM-NEXT:     StorageClass: C_WEAKEXT (0x6F)
81; CHECKSYM-NEXT:     NumberOfAuxEntries: 1
82; CHECKSYM-NEXT:     CSECT Auxiliary Entry {
83; CHECKSYM-NEXT:       Index: [[#Index+1]]
84; CHECKSYM-NEXT:       SectionLen: 0
85; CHECKSYM-NEXT:       ParameterHashIndex: 0x0
86; CHECKSYM-NEXT:       TypeChkSectNum: 0x0
87; CHECKSYM-NEXT:       SymbolAlignmentLog2: 0
88; CHECKSYM-NEXT:       SymbolType: XTY_ER (0x0)
89; CHECKSYM-NEXT:       StorageMappingClass: XMC_PR (0x0)
90; CHECKSYM32-NEXT:     StabInfoIndex: 0x0
91; CHECKSYM32-NEXT:     StabSectNum: 0x0
92; CHECKSYM64-NEXT:     Auxiliary Type: AUX_CSECT (0xFB)
93; CHECKSYM-NEXT:     }
94; CHECKSYM-NEXT:   }
95; CHECKSYM-NEXT:   Symbol {
96; CHECKSYM-NEXT:     Index: [[#Index+2]]
97; CHECKSYM-NEXT:     Name: foo_ext_weak_ref
98; CHECKSYM-NEXT:     Value (RelocatableAddress): 0x0
99; CHECKSYM-NEXT:     Section: N_UNDEF
100; CHECKSYM-NEXT:     Type: 0x0
101; CHECKSYM-NEXT:     StorageClass: C_WEAKEXT (0x6F)
102; CHECKSYM-NEXT:     NumberOfAuxEntries: 1
103; CHECKSYM-NEXT:     CSECT Auxiliary Entry {
104; CHECKSYM-NEXT:       Index: [[#Index+3]]
105; CHECKSYM-NEXT:       SectionLen: 0
106; CHECKSYM-NEXT:       ParameterHashIndex: 0x0
107; CHECKSYM-NEXT:       TypeChkSectNum: 0x0
108; CHECKSYM-NEXT:       SymbolAlignmentLog2: 0
109; CHECKSYM-NEXT:       SymbolType: XTY_ER (0x0)
110; CHECKSYM-NEXT:       StorageMappingClass: XMC_DS (0xA)
111; CHECKSYM32-NEXT:     StabInfoIndex: 0x0
112; CHECKSYM32-NEXT:     StabSectNum: 0x0
113; CHECKSYM64-NEXT:     Auxiliary Type: AUX_CSECT (0xFB)
114; CHECKSYM-NEXT:     }
115; CHECKSYM-NEXT:   }
116; CHECKSYM-NEXT:   Symbol {
117; CHECKSYM-NEXT:     Index: [[#Index+4]]
118; CHECKSYM-NEXT:     Name: b_w
119; CHECKSYM-NEXT:     Value (RelocatableAddress): 0x0
120; CHECKSYM-NEXT:     Section: N_UNDEF
121; CHECKSYM-NEXT:     Type: 0x0
122; CHECKSYM-NEXT:     StorageClass: C_WEAKEXT (0x6F)
123; CHECKSYM-NEXT:     NumberOfAuxEntries: 1
124; CHECKSYM-NEXT:     CSECT Auxiliary Entry {
125; CHECKSYM-NEXT:       Index: [[#Index+5]]
126; CHECKSYM-NEXT:       SectionLen: 0
127; CHECKSYM-NEXT:       ParameterHashIndex: 0x0
128; CHECKSYM-NEXT:       TypeChkSectNum: 0x0
129; CHECKSYM-NEXT:       SymbolAlignmentLog2: 0
130; CHECKSYM-NEXT:       SymbolType: XTY_ER (0x0)
131; CHECKSYM-NEXT:       StorageMappingClass: XMC_UA (0x4)
132; CHECKSYM32-NEXT:     StabInfoIndex: 0x0
133; CHECKSYM32-NEXT:     StabSectNum: 0x0
134; CHECKSYM64-NEXT:     Auxiliary Type: AUX_CSECT (0xFB)
135; CHECKSYM-NEXT:     }
136; CHECKSYM-NEXT:   }
137; CHECKSYM-NEXT:   Symbol {
138; CHECKSYM-NEXT:     Index: [[#Index+6]]
139; CHECKSYM-NEXT:     Name: .foo_ext_weak_ref
140; CHECKSYM-NEXT:     Value (RelocatableAddress): 0x0
141; CHECKSYM-NEXT:     Section: N_UNDEF
142; CHECKSYM-NEXT:     Type: 0x0
143; CHECKSYM-NEXT:     StorageClass: C_WEAKEXT (0x6F)
144; CHECKSYM-NEXT:     NumberOfAuxEntries: 1
145; CHECKSYM-NEXT:     CSECT Auxiliary Entry {
146; CHECKSYM-NEXT:       Index: [[#Index+7]]
147; CHECKSYM-NEXT:       SectionLen: 0
148; CHECKSYM-NEXT:       ParameterHashIndex: 0x0
149; CHECKSYM-NEXT:       TypeChkSectNum: 0x0
150; CHECKSYM-NEXT:       SymbolAlignmentLog2: 0
151; CHECKSYM-NEXT:       SymbolType: XTY_ER (0x0)
152; CHECKSYM-NEXT:       StorageMappingClass: XMC_PR (0x0)
153; CHECKSYM32-NEXT:     StabInfoIndex: 0x0
154; CHECKSYM32-NEXT:     StabSectNum: 0x0
155; CHECKSYM64-NEXT:     Auxiliary Type: AUX_CSECT (0xFB)
156; CHECKSYM-NEXT:     }
157; CHECKSYM-NEXT:   }
158; CHECKSYM-NEXT:   Symbol {
159; CHECKSYM-NEXT:     Index: [[#Index+8]]
160; CHECKSYM-NEXT:     Name:
161; CHECKSYM-NEXT:     Value (RelocatableAddress): 0x0
162; CHECKSYM-NEXT:     Section: .text
163; CHECKSYM-NEXT:     Type: 0x0
164; CHECKSYM-NEXT:     StorageClass: C_HIDEXT (0x6B)
165; CHECKSYM-NEXT:     NumberOfAuxEntries: 1
166; CHECKSYM-NEXT:     CSECT Auxiliary Entry {
167; CHECKSYM-NEXT:       Index: [[#Index+9]]
168; CHECKSYM-NEXT:       SectionLen: 80
169; CHECKSYM-NEXT:       ParameterHashIndex: 0x0
170; CHECKSYM-NEXT:       TypeChkSectNum: 0x0
171; CHECKSYM-NEXT:       SymbolAlignmentLog2: 5
172; CHECKSYM-NEXT:       SymbolType: XTY_SD (0x1)
173; CHECKSYM-NEXT:       StorageMappingClass: XMC_PR (0x0)
174; CHECKSYM32-NEXT:     StabInfoIndex: 0x0
175; CHECKSYM32-NEXT:     StabSectNum: 0x0
176; CHECKSYM64-NEXT:     Auxiliary Type: AUX_CSECT (0xFB)
177; CHECKSYM-NEXT:     }
178; CHECKSYM-NEXT:   }
179; CHECKSYM-NEXT:   Symbol {
180; CHECKSYM-NEXT:     Index: [[#Index+10]]
181; CHECKSYM-NEXT:     Name: .main
182; CHECKSYM-NEXT:     Value (RelocatableAddress): 0x0
183; CHECKSYM-NEXT:     Section: .text
184; CHECKSYM-NEXT:     Type: 0x0
185; CHECKSYM-NEXT:     StorageClass: C_EXT (0x2)
186; CHECKSYM-NEXT:     NumberOfAuxEntries: 1
187; CHECKSYM-NEXT:     CSECT Auxiliary Entry {
188; CHECKSYM-NEXT:       Index: [[#Index+11]]
189; CHECKSYM-NEXT:       ContainingCsectSymbolIndex: [[#Index+8]]
190; CHECKSYM-NEXT:       ParameterHashIndex: 0x0
191; CHECKSYM-NEXT:       TypeChkSectNum: 0x0
192; CHECKSYM-NEXT:       SymbolAlignmentLog2: 0
193; CHECKSYM-NEXT:       SymbolType: XTY_LD (0x2)
194; CHECKSYM-NEXT:       StorageMappingClass: XMC_PR (0x0)
195; CHECKSYM32-NEXT:     StabInfoIndex: 0x0
196; CHECKSYM32-NEXT:     StabSectNum: 0x0
197; CHECKSYM64-NEXT:     Auxiliary Type: AUX_CSECT (0xFB)
198; CHECKSYM-NEXT:     }
199; CHECKSYM-NEXT:   }
200; CHECKSYM-NEXT:   Symbol {
201; CHECKSYM-NEXT:     Index: [[#Index+12]]
202; CHECKSYM-NEXT:     Name: .data
203; CHECKSYM-NEXT:     Value (RelocatableAddress): 0x50
204; CHECKSYM-NEXT:     Section: .data
205; CHECKSYM-NEXT:     Type: 0x0
206; CHECKSYM-NEXT:     StorageClass: C_HIDEXT (0x6B)
207; CHECKSYM-NEXT:     NumberOfAuxEntries: 1
208; CHECKSYM-NEXT:     CSECT Auxiliary Entry {
209; CHECKSYM-NEXT:       Index: [[#Index+13]]
210; CHECKSYM32-NEXT:     SectionLen: 4
211; CHECKSYM64-NEXT:     SectionLen: 8
212; CHECKSYM-NEXT:       ParameterHashIndex: 0x0
213; CHECKSYM-NEXT:       TypeChkSectNum: 0x0
214; CHECKSYM32-NEXT:     SymbolAlignmentLog2: 2
215; CHECKSYM64-NEXT:     SymbolAlignmentLog2: 3
216; CHECKSYM-NEXT:       SymbolType: XTY_SD (0x1)
217; CHECKSYM-NEXT:       StorageMappingClass: XMC_RW (0x5)
218; CHECKSYM32-NEXT:     StabInfoIndex: 0x0
219; CHECKSYM32-NEXT:     StabSectNum: 0x0
220; CHECKSYM64-NEXT:     Auxiliary Type: AUX_CSECT (0xFB)
221; CHECKSYM-NEXT:     }
222; CHECKSYM-NEXT:   }
223; CHECKSYM-NEXT:   Symbol {
224; CHECKSYM-NEXT:     Index: [[#Index+14]]
225; CHECKSYM-NEXT:     Name: foo_ext_weak_p
226; CHECKSYM-NEXT:     Value (RelocatableAddress): 0x50
227; CHECKSYM-NEXT:     Section: .data
228; CHECKSYM-NEXT:     Type: 0x0
229; CHECKSYM-NEXT:     StorageClass: C_EXT (0x2)
230; CHECKSYM-NEXT:     NumberOfAuxEntries: 1
231; CHECKSYM-NEXT:     CSECT Auxiliary Entry {
232; CHECKSYM-NEXT:       Index: [[#Index+15]]
233; CHECKSYM-NEXT:       ContainingCsectSymbolIndex: [[#Index+12]]
234; CHECKSYM-NEXT:       ParameterHashIndex: 0x0
235; CHECKSYM-NEXT:       TypeChkSectNum: 0x0
236; CHECKSYM-NEXT:       SymbolAlignmentLog2: 0
237; CHECKSYM-NEXT:       SymbolType: XTY_LD (0x2)
238; CHECKSYM-NEXT:       StorageMappingClass: XMC_RW (0x5)
239; CHECKSYM32-NEXT:     StabInfoIndex: 0x0
240; CHECKSYM32-NEXT:     StabSectNum: 0x0
241; CHECKSYM64-NEXT:     Auxiliary Type: AUX_CSECT (0xFB)
242; CHECKSYM-NEXT:     }
243; CHECKSYM-NEXT:   }
244; CHECKSYM-NEXT:   Symbol {
245; CHECKSYM-NEXT:     Index: [[#Index+16]]
246; CHECKSYM-NEXT:     Name: main
247; CHECKSYM32-NEXT:   Value (RelocatableAddress): 0x54
248; CHECKSYM64-NEXT:   Value (RelocatableAddress): 0x58
249; CHECKSYM-NEXT:     Section: .data
250; CHECKSYM-NEXT:     Type: 0x0
251; CHECKSYM-NEXT:     StorageClass: C_EXT (0x2)
252; CHECKSYM-NEXT:     NumberOfAuxEntries: 1
253; CHECKSYM-NEXT:     CSECT Auxiliary Entry {
254; CHECKSYM-NEXT:       Index: [[#Index+17]]
255; CHECKSYM32-NEXT:     SectionLen: 12
256; CHECKSYM64-NEXT:     SectionLen: 24
257; CHECKSYM-NEXT:       ParameterHashIndex: 0x0
258; CHECKSYM-NEXT:       TypeChkSectNum: 0x0
259; CHECKSYM32-NEXT:     SymbolAlignmentLog2: 2
260; CHECKSYM64-NEXT:     SymbolAlignmentLog2: 3
261; CHECKSYM-NEXT:       SymbolType: XTY_SD (0x1)
262; CHECKSYM-NEXT:       StorageMappingClass: XMC_DS (0xA)
263; CHECKSYM32-NEXT:     StabInfoIndex: 0x0
264; CHECKSYM32-NEXT:     StabSectNum: 0x0
265; CHECKSYM64-NEXT:     Auxiliary Type: AUX_CSECT (0xFB)
266; CHECKSYM-NEXT:     }
267; CHECKSYM-NEXT:   }
268; CHECKSYM-NEXT:   Symbol {
269; CHECKSYM-NEXT:     Index: [[#Index+18]]
270; CHECKSYM-NEXT:     Name: TOC
271; CHECKSYM32-NEXT:   Value (RelocatableAddress): 0x60
272; CHECKSYM64-NEXT:   Value (RelocatableAddress): 0x70
273; CHECKSYM-NEXT:     Section: .data
274; CHECKSYM-NEXT:     Type: 0x0
275; CHECKSYM-NEXT:     StorageClass: C_HIDEXT (0x6B)
276; CHECKSYM-NEXT:     NumberOfAuxEntries: 1
277; CHECKSYM-NEXT:     CSECT Auxiliary Entry {
278; CHECKSYM-NEXT:       Index: [[#Index+19]]
279; CHECKSYM-NEXT:       SectionLen: 0
280; CHECKSYM-NEXT:       ParameterHashIndex: 0x0
281; CHECKSYM-NEXT:       TypeChkSectNum: 0x0
282; CHECKSYM-NEXT:       SymbolAlignmentLog2: 2
283; CHECKSYM-NEXT:       SymbolType: XTY_SD (0x1)
284; CHECKSYM-NEXT:       StorageMappingClass: XMC_TC0 (0xF)
285; CHECKSYM32-NEXT:     StabInfoIndex: 0x0
286; CHECKSYM32-NEXT:     StabSectNum: 0x0
287; CHECKSYM64-NEXT:     Auxiliary Type: AUX_CSECT (0xFB)
288; CHECKSYM-NEXT:     }
289; CHECKSYM-NEXT:   }
290; CHECKSYM-NEXT:   Symbol {
291; CHECKSYM-NEXT:     Index: [[#Index+20]]
292; CHECKSYM-NEXT:     Name: foo_ext_weak_p
293; CHECKSYM32-NEXT:   Value (RelocatableAddress): 0x60
294; CHECKSYM64-NEXT:   Value (RelocatableAddress): 0x70
295; CHECKSYM-NEXT:     Section: .data
296; CHECKSYM-NEXT:     Type: 0x0
297; CHECKSYM-NEXT:     StorageClass: C_HIDEXT (0x6B)
298; CHECKSYM-NEXT:     NumberOfAuxEntries: 1
299; CHECKSYM-NEXT:     CSECT Auxiliary Entry {
300; CHECKSYM-NEXT:       Index: [[#Index+21]]
301; CHECKSYM32-NEXT:     SectionLen: 4
302; CHECKSYM64-NEXT:     SectionLen: 8
303; CHECKSYM-NEXT:       ParameterHashIndex: 0x0
304; CHECKSYM-NEXT:       TypeChkSectNum: 0x0
305; CHECKSYM32-NEXT:     SymbolAlignmentLog2: 2
306; CHECKSYM64-NEXT:     SymbolAlignmentLog2: 3
307; CHECKSYM-NEXT:       SymbolType: XTY_SD (0x1)
308; CHECKSYM-NEXT:       StorageMappingClass: XMC_TC (0x3)
309; CHECKSYM32-NEXT:     StabInfoIndex: 0x0
310; CHECKSYM32-NEXT:     StabSectNum: 0x0
311; CHECKSYM64-NEXT:     Auxiliary Type: AUX_CSECT (0xFB)
312; CHECKSYM-NEXT:     }
313; CHECKSYM-NEXT:   }
314; CHECKSYM-NEXT:   Symbol {
315; CHECKSYM-NEXT:     Index: [[#Index+22]]
316; CHECKSYM-NEXT:     Name: b_w
317; CHECKSYM32-NEXT:   Value (RelocatableAddress): 0x64
318; CHECKSYM64-NEXT:   Value (RelocatableAddress): 0x78
319; CHECKSYM-NEXT:     Section: .data
320; CHECKSYM-NEXT:     Type: 0x0
321; CHECKSYM-NEXT:     StorageClass: C_HIDEXT (0x6B)
322; CHECKSYM-NEXT:     NumberOfAuxEntries: 1
323; CHECKSYM-NEXT:     CSECT Auxiliary Entry {
324; CHECKSYM-NEXT:       Index: [[#Index+23]]
325; CHECKSYM32-NEXT:     SectionLen: 4
326; CHECKSYM64-NEXT:     SectionLen: 8
327; CHECKSYM-NEXT:       ParameterHashIndex: 0x0
328; CHECKSYM-NEXT:       TypeChkSectNum: 0x0
329; CHECKSYM32-NEXT:     SymbolAlignmentLog2: 2
330; CHECKSYM64-NEXT:     SymbolAlignmentLog2: 3
331; CHECKSYM-NEXT:       SymbolType: XTY_SD (0x1)
332; CHECKSYM-NEXT:       StorageMappingClass: XMC_TC (0x3)
333; CHECKSYM32-NEXT:     StabInfoIndex: 0x0
334; CHECKSYM32-NEXT:     StabSectNum: 0x0
335; CHECKSYM64-NEXT:     Auxiliary Type: AUX_CSECT (0xFB)
336; CHECKSYM-NEXT:     }
337; CHECKSYM-NEXT:   }
338; CHECKSYM-NEXT: ]
339