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