• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: llc < %s | FileCheck %s --check-prefix=ASM
2; RUN: llc -filetype=obj < %s | llvm-readobj -codeview | FileCheck %s --check-prefix=OBJ
3
4; C source:
5; int getval(void);
6; void usevals(int, ...);
7; int csr1() {
8;   int a = getval();
9;   usevals(a);
10;   usevals(a);
11;   return a;
12; }
13; int csr2() {
14;   int a = getval();
15;   int b = getval();
16;   usevals(a, b);
17;   usevals(a, b);
18;   return a;
19; }
20; int csr3() {
21;   int a = getval();
22;   int b = getval();
23;   int c = getval();
24;   usevals(a, b, c);
25;   usevals(a, b, c);
26;   return a;
27; }
28; int csr4() {
29;   int a = getval();
30;   int b = getval();
31;   int c = getval();
32;   int d = getval();
33;   usevals(a, b, c, d);
34;   usevals(a, b, c, d);
35;   return a;
36; }
37; int spill() {
38;   int a = getval();
39;   int b = getval();
40;   int c = getval();
41;   int d = getval();
42;   int e = getval();
43;   usevals(a, b, c, d, e);
44;   usevals(a, b, c, d, e);
45;   return a;
46; }
47
48; ModuleID = 't.c'
49source_filename = "t.c"
50target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32"
51target triple = "i386-pc-windows-msvc19.11.25508"
52
53; Function Attrs: nounwind
54define i32 @csr1() local_unnamed_addr #0 !dbg !8 {
55entry:
56  %call = tail call i32 @getval() #3, !dbg !14
57  tail call void @llvm.dbg.value(metadata i32 %call, metadata !13, metadata !DIExpression()), !dbg !15
58  tail call void (i32, ...) @usevals(i32 %call) #3, !dbg !16
59  tail call void (i32, ...) @usevals(i32 %call) #3, !dbg !17
60  ret i32 %call, !dbg !18
61}
62
63; ASM-LABEL: _csr1:                                  # @csr1
64; ASM:         .cv_fpo_proc    _csr1
65; ASM:         pushl   %esi
66; ASM:         .cv_fpo_pushreg %esi
67; ASM:         .cv_fpo_endprologue
68; ASM:         #DEBUG_VALUE: csr1:a <- $esi
69; ASM:         retl
70; ASM:         .cv_fpo_endproc
71
72; OBJ-LABEL: SubSectionType: FrameData (0xF5)
73; OBJ-NEXT: SubSectionSize:
74; OBJ-NEXT: LinkageName: _csr1
75; OBJ-NEXT: FrameData {
76; OBJ-NEXT:   RvaStart: 0x0
77; OBJ-NEXT:   CodeSize: 0x1E
78; OBJ-NEXT:   LocalSize: 0x0
79; OBJ-NEXT:   ParamsSize: 0x0
80; OBJ-NEXT:   MaxStackSize: 0x0
81; OBJ-NEXT:   FrameFunc: $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + =
82; OBJ-NEXT:   PrologSize: 0x1
83; OBJ-NEXT:   SavedRegsSize: 0x0
84; OBJ-NEXT:   Flags [ (0x4)
85; OBJ-NEXT:     IsFunctionStart (0x4)
86; OBJ-NEXT:   ]
87; OBJ-NEXT: }
88; OBJ-NEXT: FrameData {
89; OBJ-NEXT:   RvaStart: 0x1
90; OBJ-NEXT:   CodeSize: 0x1D
91; OBJ-NEXT:   LocalSize: 0x0
92; OBJ-NEXT:   ParamsSize: 0x0
93; OBJ-NEXT:   MaxStackSize: 0x0
94; OBJ-NEXT:   FrameFunc: $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $esi $T0 4 - ^ =
95; OBJ-NEXT:   PrologSize: 0x0
96; OBJ-NEXT:   SavedRegsSize: 0x4
97; OBJ-NEXT:   Flags [ (0x0)
98; OBJ-NEXT:   ]
99; OBJ-NEXT: }
100; OBJ-NOT: FrameData
101
102declare i32 @getval() local_unnamed_addr #1
103
104declare void @usevals(i32, ...) local_unnamed_addr #1
105
106; Function Attrs: nounwind
107define i32 @csr2() local_unnamed_addr #0 !dbg !19 {
108entry:
109  %call = tail call i32 @getval() #3, !dbg !23
110  tail call void @llvm.dbg.value(metadata i32 %call, metadata !21, metadata !DIExpression()), !dbg !24
111  %call1 = tail call i32 @getval() #3, !dbg !25
112  tail call void @llvm.dbg.value(metadata i32 %call1, metadata !22, metadata !DIExpression()), !dbg !26
113  tail call void (i32, ...) @usevals(i32 %call, i32 %call1) #3, !dbg !27
114  tail call void (i32, ...) @usevals(i32 %call, i32 %call1) #3, !dbg !28
115  ret i32 %call, !dbg !29
116}
117
118; ASM-LABEL: _csr2:                                  # @csr2
119; ASM:         .cv_fpo_proc    _csr2
120; ASM:         pushl   %edi
121; ASM:         .cv_fpo_pushreg %edi
122; ASM:         pushl   %esi
123; ASM:         .cv_fpo_pushreg %esi
124; ASM:         .cv_fpo_endprologue
125; ASM:         #DEBUG_VALUE: csr2:a <- $esi
126; ASM:         #DEBUG_VALUE: csr2:b <- $edi
127; ASM:         retl
128; ASM:         .cv_fpo_endproc
129
130; OBJ-LABEL: SubSectionType: FrameData (0xF5)
131; OBJ-NEXT: SubSectionSize:
132; OBJ-NEXT: LinkageName: _csr2
133; OBJ-NEXT: FrameData {
134; OBJ-NEXT:   RvaStart: 0x0
135; OBJ-NEXT:   CodeSize: 0x29
136; OBJ-NEXT:   LocalSize: 0x0
137; OBJ-NEXT:   ParamsSize: 0x0
138; OBJ-NEXT:   MaxStackSize: 0x0
139; OBJ-NEXT:   FrameFunc: $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + =
140; OBJ-NEXT:   PrologSize: 0x2
141; OBJ-NEXT:   SavedRegsSize: 0x0
142; OBJ-NEXT:   Flags [ (0x4)
143; OBJ-NEXT:     IsFunctionStart (0x4)
144; OBJ-NEXT:   ]
145; OBJ-NEXT: }
146; OBJ-NEXT: FrameData {
147; OBJ-NEXT:   RvaStart: 0x1
148; OBJ-NEXT:   CodeSize: 0x28
149; OBJ-NEXT:   LocalSize: 0x0
150; OBJ-NEXT:   ParamsSize: 0x0
151; OBJ-NEXT:   MaxStackSize: 0x0
152; OBJ-NEXT:   FrameFunc: $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $edi $T0 4 - ^ =
153; OBJ-NEXT:   PrologSize: 0x1
154; OBJ-NEXT:   SavedRegsSize: 0x4
155; OBJ-NEXT:   Flags [ (0x0)
156; OBJ-NEXT:   ]
157; OBJ-NEXT: }
158; OBJ-NEXT: FrameData {
159; OBJ-NEXT:   RvaStart: 0x2
160; OBJ-NEXT:   CodeSize: 0x27
161; OBJ-NEXT:   LocalSize: 0x0
162; OBJ-NEXT:   ParamsSize: 0x0
163; OBJ-NEXT:   MaxStackSize: 0x0
164; OBJ-NEXT:   FrameFunc: $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $edi $T0 4 - ^ = $esi $T0 8 - ^ =
165; OBJ-NEXT:   PrologSize: 0x0
166; OBJ-NEXT:   SavedRegsSize: 0x8
167; OBJ-NEXT:   Flags [ (0x0)
168; OBJ-NEXT:   ]
169; OBJ-NEXT: }
170; OBJ-NOT: FrameData
171
172; Function Attrs: nounwind
173define i32 @csr3() local_unnamed_addr #0 !dbg !30 {
174entry:
175  %call = tail call i32 @getval() #3, !dbg !35
176  tail call void @llvm.dbg.value(metadata i32 %call, metadata !32, metadata !DIExpression()), !dbg !36
177  %call1 = tail call i32 @getval() #3, !dbg !37
178  tail call void @llvm.dbg.value(metadata i32 %call1, metadata !33, metadata !DIExpression()), !dbg !38
179  %call2 = tail call i32 @getval() #3, !dbg !39
180  tail call void @llvm.dbg.value(metadata i32 %call2, metadata !34, metadata !DIExpression()), !dbg !40
181  tail call void (i32, ...) @usevals(i32 %call, i32 %call1, i32 %call2) #3, !dbg !41
182  tail call void (i32, ...) @usevals(i32 %call, i32 %call1, i32 %call2) #3, !dbg !42
183  ret i32 %call, !dbg !43
184}
185
186; ASM-LABEL: _csr3:                                  # @csr3
187; ASM:         .cv_fpo_proc    _csr3
188; ASM:         pushl   %ebx
189; ASM:         .cv_fpo_pushreg %ebx
190; ASM:         pushl   %edi
191; ASM:         .cv_fpo_pushreg %edi
192; ASM:         pushl   %esi
193; ASM:         .cv_fpo_pushreg %esi
194; ASM:         .cv_fpo_endprologue
195; ASM:         #DEBUG_VALUE: csr3:a <- $esi
196; ASM:         #DEBUG_VALUE: csr3:b <- $edi
197; ASM:         #DEBUG_VALUE: csr3:c <- $ebx
198; ASM:         retl
199; ASM:         .cv_fpo_endproc
200
201; OBJ-LABEL: SubSectionType: FrameData (0xF5)
202; OBJ-NEXT: SubSectionSize:
203; OBJ-NEXT: LinkageName: _csr3
204; OBJ-NEXT: FrameData {
205; OBJ-NEXT:   RvaStart: 0x0
206; OBJ-NEXT:   CodeSize: 0x34
207; OBJ-NEXT:   LocalSize: 0x0
208; OBJ-NEXT:   ParamsSize: 0x0
209; OBJ-NEXT:   MaxStackSize: 0x0
210; OBJ-NEXT:   FrameFunc: $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + =
211; OBJ-NEXT:   PrologSize: 0x3
212; OBJ-NEXT:   SavedRegsSize: 0x0
213; OBJ-NEXT:   Flags [ (0x4)
214; OBJ-NEXT:     IsFunctionStart (0x4)
215; OBJ-NEXT:   ]
216; OBJ-NEXT: }
217; OBJ-NEXT: FrameData {
218; OBJ-NEXT:   RvaStart: 0x1
219; OBJ-NEXT:   CodeSize: 0x33
220; OBJ-NEXT:   LocalSize: 0x0
221; OBJ-NEXT:   ParamsSize: 0x0
222; OBJ-NEXT:   MaxStackSize: 0x0
223; OBJ-NEXT:   FrameFunc: $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ =
224; OBJ-NEXT:   PrologSize: 0x2
225; OBJ-NEXT:   SavedRegsSize: 0x4
226; OBJ-NEXT:   Flags [ (0x0)
227; OBJ-NEXT:   ]
228; OBJ-NEXT: }
229; OBJ-NEXT: FrameData {
230; OBJ-NEXT:   RvaStart: 0x2
231; OBJ-NEXT:   CodeSize: 0x32
232; OBJ-NEXT:   LocalSize: 0x0
233; OBJ-NEXT:   ParamsSize: 0x0
234; OBJ-NEXT:   MaxStackSize: 0x0
235; OBJ-NEXT:   FrameFunc: $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = $edi $T0 8 - ^ =
236; OBJ-NEXT:   PrologSize: 0x1
237; OBJ-NEXT:   SavedRegsSize: 0x8
238; OBJ-NEXT:   Flags [ (0x0)
239; OBJ-NEXT:   ]
240; OBJ-NEXT: }
241; OBJ-NEXT: FrameData {
242; OBJ-NEXT:   RvaStart: 0x3
243; OBJ-NEXT:   CodeSize: 0x31
244; OBJ-NEXT:   LocalSize: 0x0
245; OBJ-NEXT:   ParamsSize: 0x0
246; OBJ-NEXT:   MaxStackSize: 0x0
247; OBJ-NEXT:   FrameFunc: $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $ebx $T0 4 - ^ = $edi $T0 8 - ^ = $esi $T0 12 - ^ =
248; OBJ-NEXT:   PrologSize: 0x0
249; OBJ-NEXT:   SavedRegsSize: 0xC
250; OBJ-NEXT:   Flags [ (0x0)
251; OBJ-NEXT:   ]
252; OBJ-NEXT: }
253; OBJ-NOT: FrameData
254
255; Function Attrs: nounwind
256define i32 @csr4() local_unnamed_addr #0 !dbg !44 {
257entry:
258  %call = tail call i32 @getval() #3, !dbg !50
259  tail call void @llvm.dbg.value(metadata i32 %call, metadata !46, metadata !DIExpression()), !dbg !51
260  %call1 = tail call i32 @getval() #3, !dbg !52
261  tail call void @llvm.dbg.value(metadata i32 %call1, metadata !47, metadata !DIExpression()), !dbg !53
262  %call2 = tail call i32 @getval() #3, !dbg !54
263  tail call void @llvm.dbg.value(metadata i32 %call2, metadata !48, metadata !DIExpression()), !dbg !55
264  %call3 = tail call i32 @getval() #3, !dbg !56
265  tail call void @llvm.dbg.value(metadata i32 %call3, metadata !49, metadata !DIExpression()), !dbg !57
266  tail call void (i32, ...) @usevals(i32 %call, i32 %call1, i32 %call2, i32 %call3) #3, !dbg !58
267  tail call void (i32, ...) @usevals(i32 %call, i32 %call1, i32 %call2, i32 %call3) #3, !dbg !59
268  ret i32 %call, !dbg !60
269}
270
271; ASM-LABEL: _csr4:                                  # @csr4
272; ASM:         .cv_fpo_proc    _csr4
273; ASM:         pushl   %ebp
274; ASM:         .cv_fpo_pushreg %ebp
275; ASM:         pushl   %ebx
276; ASM:         .cv_fpo_pushreg %ebx
277; ASM:         pushl   %edi
278; ASM:         .cv_fpo_pushreg %edi
279; ASM:         pushl   %esi
280; ASM:         .cv_fpo_pushreg %esi
281; ASM:         .cv_fpo_endprologue
282; ASM:         #DEBUG_VALUE: csr4:a <- $esi
283; ASM:         #DEBUG_VALUE: csr4:b <- $edi
284; ASM:         #DEBUG_VALUE: csr4:c <- $ebx
285; ASM:         #DEBUG_VALUE: csr4:d <- $ebp
286; ASM:         retl
287; ASM:         .cv_fpo_endproc
288
289; OBJ-LABEL: SubSectionType: FrameData (0xF5)
290; OBJ-NEXT: SubSectionSize:
291; OBJ-NEXT: LinkageName: _csr4
292; OBJ-NEXT: FrameData {
293; OBJ-NEXT:   RvaStart: 0x0
294; OBJ-NEXT:   CodeSize: 0x3F
295; OBJ-NEXT:   LocalSize: 0x0
296; OBJ-NEXT:   ParamsSize: 0x0
297; OBJ-NEXT:   MaxStackSize: 0x0
298; OBJ-NEXT:   FrameFunc: $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + =
299; OBJ-NEXT:   PrologSize: 0x4
300; OBJ-NEXT:   SavedRegsSize: 0x0
301; OBJ-NEXT:   Flags [ (0x4)
302; OBJ-NEXT:     IsFunctionStart (0x4)
303; OBJ-NEXT:   ]
304; OBJ-NEXT: }
305; OBJ-NEXT: FrameData {
306; OBJ-NEXT:   RvaStart: 0x1
307; OBJ-NEXT:   CodeSize: 0x3E
308; OBJ-NEXT:   LocalSize: 0x0
309; OBJ-NEXT:   ParamsSize: 0x0
310; OBJ-NEXT:   MaxStackSize: 0x0
311; OBJ-NEXT:   FrameFunc: $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ =
312; OBJ-NEXT:   PrologSize: 0x3
313; OBJ-NEXT:   SavedRegsSize: 0x4
314; OBJ-NEXT:   Flags [ (0x0)
315; OBJ-NEXT:   ]
316; OBJ-NEXT: }
317; OBJ-NEXT: FrameData {
318; OBJ-NEXT:   RvaStart: 0x2
319; OBJ-NEXT:   CodeSize: 0x3D
320; OBJ-NEXT:   LocalSize: 0x0
321; OBJ-NEXT:   ParamsSize: 0x0
322; OBJ-NEXT:   MaxStackSize: 0x0
323; OBJ-NEXT:   FrameFunc: $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ =
324; OBJ-NEXT:   PrologSize: 0x2
325; OBJ-NEXT:   SavedRegsSize: 0x8
326; OBJ-NEXT:   Flags [ (0x0)
327; OBJ-NEXT:   ]
328; OBJ-NEXT: }
329; OBJ-NEXT: FrameData {
330; OBJ-NEXT:   RvaStart: 0x3
331; OBJ-NEXT:   CodeSize: 0x3C
332; OBJ-NEXT:   LocalSize: 0x0
333; OBJ-NEXT:   ParamsSize: 0x0
334; OBJ-NEXT:   MaxStackSize: 0x0
335; OBJ-NEXT:   FrameFunc: $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ = $edi $T0 12 - ^ =
336; OBJ-NEXT:   PrologSize: 0x1
337; OBJ-NEXT:   SavedRegsSize: 0xC
338; OBJ-NEXT:   Flags [ (0x0)
339; OBJ-NEXT:   ]
340; OBJ-NEXT: }
341; OBJ-NEXT: FrameData {
342; OBJ-NEXT:   RvaStart: 0x4
343; OBJ-NEXT:   CodeSize: 0x3B
344; OBJ-NEXT:   LocalSize: 0x0
345; OBJ-NEXT:   ParamsSize: 0x0
346; OBJ-NEXT:   MaxStackSize: 0x0
347; OBJ-NEXT:   FrameFunc: $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ = $edi $T0 12 - ^ = $esi $T0 16 - ^ =
348; OBJ-NEXT:   PrologSize: 0x0
349; OBJ-NEXT:   SavedRegsSize: 0x10
350; OBJ-NEXT:   Flags [ (0x0)
351; OBJ-NEXT:   ]
352; OBJ-NEXT: }
353; OBJ-NOT: FrameData
354
355; Function Attrs: nounwind
356define i32 @spill() local_unnamed_addr #0 !dbg !61 {
357entry:
358  %call = tail call i32 @getval() #3, !dbg !68
359  tail call void @llvm.dbg.value(metadata i32 %call, metadata !63, metadata !DIExpression()), !dbg !69
360  %call1 = tail call i32 @getval() #3, !dbg !70
361  tail call void @llvm.dbg.value(metadata i32 %call1, metadata !64, metadata !DIExpression()), !dbg !71
362  %call2 = tail call i32 @getval() #3, !dbg !72
363  tail call void @llvm.dbg.value(metadata i32 %call2, metadata !65, metadata !DIExpression()), !dbg !73
364  %call3 = tail call i32 @getval() #3, !dbg !74
365  tail call void @llvm.dbg.value(metadata i32 %call3, metadata !66, metadata !DIExpression()), !dbg !75
366  %call4 = tail call i32 @getval() #3, !dbg !76
367  tail call void @llvm.dbg.value(metadata i32 %call4, metadata !67, metadata !DIExpression()), !dbg !77
368  tail call void (i32, ...) @usevals(i32 %call, i32 %call1, i32 %call2, i32 %call3, i32 %call4) #3, !dbg !78
369  tail call void (i32, ...) @usevals(i32 %call, i32 %call1, i32 %call2, i32 %call3, i32 %call4) #3, !dbg !79
370  ret i32 %call, !dbg !80
371}
372
373; ASM-LABEL: _spill:                                  # @spill
374; ASM:         .cv_fpo_proc    _spill
375; ASM:         pushl   %ebp
376; ASM:         .cv_fpo_pushreg %ebp
377; ASM:         pushl   %ebx
378; ASM:         .cv_fpo_pushreg %ebx
379; ASM:         pushl   %edi
380; ASM:         .cv_fpo_pushreg %edi
381; ASM:         pushl   %esi
382; ASM:         .cv_fpo_pushreg %esi
383; ASM:         subl    $8, %esp
384; ASM:         .cv_fpo_stackalloc 8
385; ASM:         .cv_fpo_endprologue
386; ASM:         retl
387; ASM:         .cv_fpo_endproc
388
389; OBJ-LABEL: SubSectionType: FrameData (0xF5)
390; OBJ-NEXT: SubSectionSize:
391; OBJ-NEXT: LinkageName: _spill
392; OBJ-NEXT: FrameData {
393; OBJ-NEXT:   RvaStart: 0x0
394; OBJ-NEXT:   CodeSize: 0x5A
395; OBJ-NEXT:   LocalSize: 0x0
396; OBJ-NEXT:   ParamsSize: 0x0
397; OBJ-NEXT:   MaxStackSize: 0x0
398; OBJ-NEXT:   FrameFunc: $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + =
399; OBJ-NEXT:   PrologSize: 0x7
400; OBJ-NEXT:   SavedRegsSize: 0x0
401; OBJ-NEXT:   Flags [ (0x4)
402; OBJ-NEXT:     IsFunctionStart (0x4)
403; OBJ-NEXT:   ]
404; OBJ-NEXT: }
405; OBJ-NEXT: FrameData {
406; OBJ-NEXT:   RvaStart: 0x1
407; OBJ-NEXT:   CodeSize: 0x59
408; OBJ-NEXT:   LocalSize: 0x0
409; OBJ-NEXT:   ParamsSize: 0x0
410; OBJ-NEXT:   MaxStackSize: 0x0
411; OBJ-NEXT:   FrameFunc: $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ =
412; OBJ-NEXT:   PrologSize: 0x6
413; OBJ-NEXT:   SavedRegsSize: 0x4
414; OBJ-NEXT:   Flags [ (0x0)
415; OBJ-NEXT:   ]
416; OBJ-NEXT: }
417; OBJ-NEXT: FrameData {
418; OBJ-NEXT:   RvaStart: 0x2
419; OBJ-NEXT:   CodeSize: 0x58
420; OBJ-NEXT:   LocalSize: 0x0
421; OBJ-NEXT:   ParamsSize: 0x0
422; OBJ-NEXT:   MaxStackSize: 0x0
423; OBJ-NEXT:   FrameFunc: $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ =
424; OBJ-NEXT:   PrologSize: 0x5
425; OBJ-NEXT:   SavedRegsSize: 0x8
426; OBJ-NEXT:   Flags [ (0x0)
427; OBJ-NEXT:   ]
428; OBJ-NEXT: }
429; OBJ-NEXT: FrameData {
430; OBJ-NEXT:   RvaStart: 0x3
431; OBJ-NEXT:   CodeSize: 0x57
432; OBJ-NEXT:   LocalSize: 0x0
433; OBJ-NEXT:   ParamsSize: 0x0
434; OBJ-NEXT:   MaxStackSize: 0x0
435; OBJ-NEXT:   FrameFunc: $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ = $edi $T0 12 - ^ =
436; OBJ-NEXT:   PrologSize: 0x4
437; OBJ-NEXT:   SavedRegsSize: 0xC
438; OBJ-NEXT:   Flags [ (0x0)
439; OBJ-NEXT:   ]
440; OBJ-NEXT: }
441; OBJ-NEXT: FrameData {
442; OBJ-NEXT:   RvaStart: 0x4
443; OBJ-NEXT:   CodeSize: 0x56
444; OBJ-NEXT:   LocalSize: 0x0
445; OBJ-NEXT:   ParamsSize: 0x0
446; OBJ-NEXT:   MaxStackSize: 0x0
447; OBJ-NEXT:   FrameFunc: $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ = $edi $T0 12 - ^ = $esi $T0 16 - ^ =
448; OBJ-NEXT:   PrologSize: 0x3
449; OBJ-NEXT:   SavedRegsSize: 0x10
450; OBJ-NEXT:   Flags [ (0x0)
451; OBJ-NEXT:   ]
452; OBJ-NEXT: }
453; OBJ-NEXT: FrameData {
454; OBJ-NEXT:   RvaStart: 0x7
455; OBJ-NEXT:   CodeSize: 0x53
456; OBJ-NEXT:   LocalSize: 0x8
457; OBJ-NEXT:   ParamsSize: 0x0
458; OBJ-NEXT:   MaxStackSize: 0x0
459; OBJ-NEXT:   FrameFunc: $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = $ebx $T0 8 - ^ = $edi $T0 12 - ^ = $esi $T0 16 - ^ =
460; OBJ-NEXT:   PrologSize: 0x0
461; OBJ-NEXT:   SavedRegsSize: 0x10
462; OBJ-NEXT:   Flags [ (0x0)
463; OBJ-NEXT:   ]
464; OBJ-NEXT: }
465; OBJ-NOT: FrameData
466
467; Function Attrs: nounwind readnone speculatable
468declare void @llvm.dbg.value(metadata, metadata, metadata) #2
469
470attributes #0 = { nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pentium4" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
471attributes #1 = { "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pentium4" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
472attributes #2 = { nounwind readnone speculatable }
473attributes #3 = { nounwind }
474
475!llvm.dbg.cu = !{!0}
476!llvm.module.flags = !{!3, !4, !5, !6}
477!llvm.ident = !{!7}
478
479!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 6.0.0 ", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
480!1 = !DIFile(filename: "t.c", directory: "C:\5Csrc\5Cllvm-project\5Cbuild", checksumkind: CSK_MD5, checksum: "0b1c85f8a0bfb41380df1fcaeadde306")
481!2 = !{}
482!3 = !{i32 1, !"NumRegisterParameters", i32 0}
483!4 = !{i32 2, !"CodeView", i32 1}
484!5 = !{i32 2, !"Debug Info Version", i32 3}
485!6 = !{i32 1, !"wchar_size", i32 2}
486!7 = !{!"clang version 6.0.0 "}
487!8 = distinct !DISubprogram(name: "csr1", scope: !1, file: !1, line: 3, type: !9, isLocal: false, isDefinition: true, scopeLine: 3, isOptimized: true, unit: !0, retainedNodes: !12)
488!9 = !DISubroutineType(types: !10)
489!10 = !{!11}
490!11 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
491!12 = !{!13}
492!13 = !DILocalVariable(name: "a", scope: !8, file: !1, line: 4, type: !11)
493!14 = !DILocation(line: 4, column: 11, scope: !8)
494!15 = !DILocation(line: 4, column: 7, scope: !8)
495!16 = !DILocation(line: 5, column: 3, scope: !8)
496!17 = !DILocation(line: 6, column: 3, scope: !8)
497!18 = !DILocation(line: 7, column: 3, scope: !8)
498!19 = distinct !DISubprogram(name: "csr2", scope: !1, file: !1, line: 9, type: !9, isLocal: false, isDefinition: true, scopeLine: 9, isOptimized: true, unit: !0, retainedNodes: !20)
499!20 = !{!21, !22}
500!21 = !DILocalVariable(name: "a", scope: !19, file: !1, line: 10, type: !11)
501!22 = !DILocalVariable(name: "b", scope: !19, file: !1, line: 11, type: !11)
502!23 = !DILocation(line: 10, column: 11, scope: !19)
503!24 = !DILocation(line: 10, column: 7, scope: !19)
504!25 = !DILocation(line: 11, column: 11, scope: !19)
505!26 = !DILocation(line: 11, column: 7, scope: !19)
506!27 = !DILocation(line: 12, column: 3, scope: !19)
507!28 = !DILocation(line: 13, column: 3, scope: !19)
508!29 = !DILocation(line: 14, column: 3, scope: !19)
509!30 = distinct !DISubprogram(name: "csr3", scope: !1, file: !1, line: 16, type: !9, isLocal: false, isDefinition: true, scopeLine: 16, isOptimized: true, unit: !0, retainedNodes: !31)
510!31 = !{!32, !33, !34}
511!32 = !DILocalVariable(name: "a", scope: !30, file: !1, line: 17, type: !11)
512!33 = !DILocalVariable(name: "b", scope: !30, file: !1, line: 18, type: !11)
513!34 = !DILocalVariable(name: "c", scope: !30, file: !1, line: 19, type: !11)
514!35 = !DILocation(line: 17, column: 11, scope: !30)
515!36 = !DILocation(line: 17, column: 7, scope: !30)
516!37 = !DILocation(line: 18, column: 11, scope: !30)
517!38 = !DILocation(line: 18, column: 7, scope: !30)
518!39 = !DILocation(line: 19, column: 11, scope: !30)
519!40 = !DILocation(line: 19, column: 7, scope: !30)
520!41 = !DILocation(line: 20, column: 3, scope: !30)
521!42 = !DILocation(line: 21, column: 3, scope: !30)
522!43 = !DILocation(line: 22, column: 3, scope: !30)
523!44 = distinct !DISubprogram(name: "csr4", scope: !1, file: !1, line: 24, type: !9, isLocal: false, isDefinition: true, scopeLine: 24, isOptimized: true, unit: !0, retainedNodes: !45)
524!45 = !{!46, !47, !48, !49}
525!46 = !DILocalVariable(name: "a", scope: !44, file: !1, line: 25, type: !11)
526!47 = !DILocalVariable(name: "b", scope: !44, file: !1, line: 26, type: !11)
527!48 = !DILocalVariable(name: "c", scope: !44, file: !1, line: 27, type: !11)
528!49 = !DILocalVariable(name: "d", scope: !44, file: !1, line: 28, type: !11)
529!50 = !DILocation(line: 25, column: 11, scope: !44)
530!51 = !DILocation(line: 25, column: 7, scope: !44)
531!52 = !DILocation(line: 26, column: 11, scope: !44)
532!53 = !DILocation(line: 26, column: 7, scope: !44)
533!54 = !DILocation(line: 27, column: 11, scope: !44)
534!55 = !DILocation(line: 27, column: 7, scope: !44)
535!56 = !DILocation(line: 28, column: 11, scope: !44)
536!57 = !DILocation(line: 28, column: 7, scope: !44)
537!58 = !DILocation(line: 29, column: 3, scope: !44)
538!59 = !DILocation(line: 30, column: 3, scope: !44)
539!60 = !DILocation(line: 31, column: 3, scope: !44)
540!61 = distinct !DISubprogram(name: "spill", scope: !1, file: !1, line: 33, type: !9, isLocal: false, isDefinition: true, scopeLine: 33, isOptimized: true, unit: !0, retainedNodes: !62)
541!62 = !{!63, !64, !65, !66, !67}
542!63 = !DILocalVariable(name: "a", scope: !61, file: !1, line: 34, type: !11)
543!64 = !DILocalVariable(name: "b", scope: !61, file: !1, line: 35, type: !11)
544!65 = !DILocalVariable(name: "c", scope: !61, file: !1, line: 36, type: !11)
545!66 = !DILocalVariable(name: "d", scope: !61, file: !1, line: 37, type: !11)
546!67 = !DILocalVariable(name: "e", scope: !61, file: !1, line: 38, type: !11)
547!68 = !DILocation(line: 34, column: 11, scope: !61)
548!69 = !DILocation(line: 34, column: 7, scope: !61)
549!70 = !DILocation(line: 35, column: 11, scope: !61)
550!71 = !DILocation(line: 35, column: 7, scope: !61)
551!72 = !DILocation(line: 36, column: 11, scope: !61)
552!73 = !DILocation(line: 36, column: 7, scope: !61)
553!74 = !DILocation(line: 37, column: 11, scope: !61)
554!75 = !DILocation(line: 37, column: 7, scope: !61)
555!76 = !DILocation(line: 38, column: 11, scope: !61)
556!77 = !DILocation(line: 38, column: 7, scope: !61)
557!78 = !DILocation(line: 39, column: 3, scope: !61)
558!79 = !DILocation(line: 40, column: 3, scope: !61)
559!80 = !DILocation(line: 41, column: 3, scope: !61)
560