blob: 3d245e9d396d300cbcd10d1f8a79f733ba630335 [file] [log] [blame]
Timur Iskhodzhanov4a83bf12014-01-30 17:53:45 +00001; RUN: llc -mcpu=core2 -mtriple=i686-pc-win32 -O0 < %s | FileCheck --check-prefix=X86 %s
Reid Kleckner83ebad32015-12-16 18:28:12 +00002; RUN: llc -mcpu=core2 -mtriple=i686-pc-win32 -o - -O0 < %s | llvm-mc -triple=i686-pc-win32 -filetype=obj | llvm-readobj -s -sr -codeview | FileCheck --check-prefix=OBJ32 %s
Timur Iskhodzhanov4a83bf12014-01-30 17:53:45 +00003; RUN: llc -mcpu=core2 -mtriple=x86_64-pc-win32 -O0 < %s | FileCheck --check-prefix=X64 %s
Reid Kleckner83ebad32015-12-16 18:28:12 +00004; RUN: llc -mcpu=core2 -mtriple=x86_64-pc-win32 -o - -O0 < %s | llvm-mc -triple=x86_64-pc-win32 -filetype=obj | llvm-readobj -s -sr -codeview | FileCheck --check-prefix=OBJ64 %s
Timur Iskhodzhanovf166f6c2014-01-30 01:39:17 +00005
6; This LL file was generated by running clang on the following code:
7; D:\asm.c:
8; 1 void g(void);
9; 2
10; 3 void f(void) {
11; 4 __asm align 4;
12; 5 g();
13; 6 }
14
Timur Iskhodzhanove32ef932014-03-26 08:45:02 +000015; X86-LABEL: _f:
Reid Kleckner2214ed82016-01-29 00:49:42 +000016; X86: .cv_file 1 "D:\\asm.c"
17; X86: .cv_loc 0 1 4 0 is_stmt 0
18; X86: .cv_loc 0 1 5 0
David Majnemerb9257152014-11-04 08:03:31 +000019; X86: calll _g
Reid Kleckner2214ed82016-01-29 00:49:42 +000020; X86: .cv_loc 0 1 6 0
David Majnemerb9257152014-11-04 08:03:31 +000021; X86: ret
Reid Klecknerf9c275f2016-02-10 20:55:49 +000022; X86: [[END_OF_F:.?Lfunc_end.*]]:
Adrian McCarthy4333daa2016-11-02 21:30:35 +000023
Timur Iskhodzhanov2bc90fd2014-10-24 01:27:45 +000024; Line table
Adrian McCarthy4333daa2016-11-02 21:30:35 +000025; X86: .cv_linetable 0, _f, [[END_OF_F]]
Timur Iskhodzhanovf166f6c2014-01-30 01:39:17 +000026; File index to string table offset subsection
Reid Klecknere8a236f2016-06-06 23:41:38 +000027; X86-NEXT: .cv_filechecksums
Timur Iskhodzhanovf166f6c2014-01-30 01:39:17 +000028; String table
Reid Klecknere8a236f2016-06-06 23:41:38 +000029; X86-NEXT: .cv_stringtable
Timur Iskhodzhanovf166f6c2014-01-30 01:39:17 +000030
31; OBJ32: Section {
32; OBJ32: Name: .debug$S (2E 64 65 62 75 67 24 53)
Reid Kleckner2214ed82016-01-29 00:49:42 +000033; OBJ32: Characteristics [ (0x42300040)
Timur Iskhodzhanovf166f6c2014-01-30 01:39:17 +000034; OBJ32: ]
Reid Kleckner83ebad32015-12-16 18:28:12 +000035; OBJ32: CodeViewDebugInfo [
Timur Iskhodzhanov2bc90fd2014-10-24 01:27:45 +000036; OBJ32: Subsection [
Reid Kleckner72e2ba72016-01-13 19:32:35 +000037; OBJ32-NEXT: SubSectionType: Symbols (0xF1)
Timur Iskhodzhanov2bc90fd2014-10-24 01:27:45 +000038; OBJ32: ProcStart {
Reid Kleckner72e2ba72016-01-13 19:32:35 +000039; OBJ32: CodeSize: 0x6
40; OBJ32: DisplayName: f
41; OBJ32: LinkageName: _f
42; OBJ32: }
Zachary Turnercac29ae2016-05-24 17:30:25 +000043; OBJ32: ProcEnd {
44; OBJ32: }
Timur Iskhodzhanovf166f6c2014-01-30 01:39:17 +000045; OBJ32-NEXT: ]
46; OBJ32: FunctionLineTable [
47; OBJ32-NEXT: Name: _f
Reid Kleckner2214ed82016-01-29 00:49:42 +000048; OBJ32-NEXT: Flags: 0x0
Timur Iskhodzhanovf166f6c2014-01-30 01:39:17 +000049; OBJ32-NEXT: CodeSize: 0x6
50; OBJ32-NEXT: FilenameSegment [
David Majnemer04948362016-01-13 01:05:16 +000051; OBJ32-NEXT: Filename: D:\asm.c
Timur Iskhodzhanovf166f6c2014-01-30 01:39:17 +000052; FIXME: An empty __asm stmt creates an extra entry.
53; We seem to know that these offsets are the same statically during the
Timur Iskhodzhanovf33d8b92014-01-30 23:14:38 +000054; execution of endModule(). See PR18679 for the details.
David Majnemer04948362016-01-13 01:05:16 +000055; OBJ32-NEXT: +0x0 [
56; OBJ32-NEXT: LineNumberStart: 4
57; OBJ32-NEXT: LineNumberEndDelta: 0
Reid Kleckner828883b2016-01-29 16:39:04 +000058; OBJ32-NEXT: IsStatement: No
David Majnemer04948362016-01-13 01:05:16 +000059; OBJ32-NEXT: ]
60; OBJ32-NEXT: +0x0 [
61; OBJ32-NEXT: LineNumberStart: 5
62; OBJ32-NEXT: LineNumberEndDelta: 0
Reid Kleckner828883b2016-01-29 16:39:04 +000063; OBJ32-NEXT: IsStatement: No
David Majnemer04948362016-01-13 01:05:16 +000064; OBJ32-NEXT: ]
65; OBJ32-NEXT: +0x5 [
66; OBJ32-NEXT: LineNumberStart: 6
67; OBJ32-NEXT: LineNumberEndDelta: 0
Reid Kleckner828883b2016-01-29 16:39:04 +000068; OBJ32-NEXT: IsStatement: No
Timur Iskhodzhanovf166f6c2014-01-30 01:39:17 +000069; OBJ32-NEXT: ]
70; OBJ32-NEXT: ]
Timur Iskhodzhanovf166f6c2014-01-30 01:39:17 +000071
Timur Iskhodzhanove32ef932014-03-26 08:45:02 +000072; X64-LABEL: f:
Reid Kleckner2214ed82016-01-29 00:49:42 +000073; X64: .cv_file 1 "D:\\asm.c"
74; X64: .cv_loc 0 1 3 0 is_stmt 0
David Majnemer011980c2016-01-01 06:50:01 +000075; X64: subq $40, %rsp
Reid Kleckner2214ed82016-01-29 00:49:42 +000076; X64: .cv_loc 0 1 4 0
77; X64: .cv_loc 0 1 5 0
David Majnemerb9257152014-11-04 08:03:31 +000078; X64: callq g
Reid Kleckner2214ed82016-01-29 00:49:42 +000079; X64: .cv_loc 0 1 6 0
David Majnemer011980c2016-01-01 06:50:01 +000080; X64: addq $40, %rsp
Timur Iskhodzhanovf166f6c2014-01-30 01:39:17 +000081; X64-NEXT: ret
Reid Klecknerf9c275f2016-02-10 20:55:49 +000082; X64: [[END_OF_F:.?Lfunc_end.*]]:
Adrian McCarthy4333daa2016-11-02 21:30:35 +000083
Timur Iskhodzhanov2bc90fd2014-10-24 01:27:45 +000084; Line table
Adrian McCarthy4333daa2016-11-02 21:30:35 +000085; X64: .cv_linetable 0, f, [[END_OF_F]]
Timur Iskhodzhanovf166f6c2014-01-30 01:39:17 +000086; File index to string table offset subsection
Reid Klecknere8a236f2016-06-06 23:41:38 +000087; X64-NEXT: .cv_filechecksums
Timur Iskhodzhanovf166f6c2014-01-30 01:39:17 +000088; String table
Reid Klecknere8a236f2016-06-06 23:41:38 +000089; X64-NEXT: .cv_stringtable
Timur Iskhodzhanovf166f6c2014-01-30 01:39:17 +000090
91; OBJ64: Section {
92; OBJ64: Name: .debug$S (2E 64 65 62 75 67 24 53)
Reid Kleckner2214ed82016-01-29 00:49:42 +000093; OBJ64: Characteristics [ (0x42300040)
Timur Iskhodzhanovf166f6c2014-01-30 01:39:17 +000094; OBJ64: ]
Timur Iskhodzhanov2bc90fd2014-10-24 01:27:45 +000095; OBJ64: Subsection [
Reid Kleckner72e2ba72016-01-13 19:32:35 +000096; OBJ64-NEXT: SubSectionType: Symbols (0xF1)
Timur Iskhodzhanov2bc90fd2014-10-24 01:27:45 +000097; OBJ64: ProcStart {
Reid Kleckner72e2ba72016-01-13 19:32:35 +000098; OBJ64: CodeSize: 0xE
99; OBJ64: DisplayName: f
100; OBJ64: LinkageName: f
101; OBJ64: }
Zachary Turnercac29ae2016-05-24 17:30:25 +0000102; OBJ64-NEXT: ProcEnd {
103; OBJ64-NEXT: }
Timur Iskhodzhanovf166f6c2014-01-30 01:39:17 +0000104; OBJ64-NEXT: ]
105; OBJ64: FunctionLineTable [
106; OBJ64-NEXT: Name: f
Reid Kleckner2214ed82016-01-29 00:49:42 +0000107; OBJ64-NEXT: Flags: 0x0
David Majnemer011980c2016-01-01 06:50:01 +0000108; OBJ64-NEXT: CodeSize: 0xE
Timur Iskhodzhanovf166f6c2014-01-30 01:39:17 +0000109; OBJ64-NEXT: FilenameSegment [
110; OBJ64-NEXT: Filename: D:\asm.c
Timur Iskhodzhanovf166f6c2014-01-30 01:39:17 +0000111; FIXME: An empty __asm stmt creates an extra entry.
Timur Iskhodzhanovf33d8b92014-01-30 23:14:38 +0000112; See PR18679 for the details.
David Majnemer04948362016-01-13 01:05:16 +0000113; OBJ64-NEXT: +0x0 [
114; OBJ64-NEXT: LineNumberStart: 3
115; OBJ64-NEXT: LineNumberEndDelta: 0
Reid Kleckner828883b2016-01-29 16:39:04 +0000116; OBJ64-NEXT: IsStatement: No
David Majnemer04948362016-01-13 01:05:16 +0000117; OBJ64-NEXT: ]
118; OBJ64-NEXT: +0x4 [
119; OBJ64-NEXT: LineNumberStart: 4
120; OBJ64-NEXT: LineNumberEndDelta: 0
Reid Kleckner828883b2016-01-29 16:39:04 +0000121; OBJ64-NEXT: IsStatement: No
David Majnemer04948362016-01-13 01:05:16 +0000122; OBJ64-NEXT: ]
123; OBJ64-NEXT: +0x4 [
124; OBJ64-NEXT: LineNumberStart: 5
125; OBJ64-NEXT: LineNumberEndDelta: 0
Reid Kleckner828883b2016-01-29 16:39:04 +0000126; OBJ64-NEXT: IsStatement: No
David Majnemer04948362016-01-13 01:05:16 +0000127; OBJ64-NEXT: ]
128; OBJ64-NEXT: +0x9 [
129; OBJ64-NEXT: LineNumberStart: 6
130; OBJ64-NEXT: LineNumberEndDelta: 0
Reid Kleckner828883b2016-01-29 16:39:04 +0000131; OBJ64-NEXT: IsStatement: No
David Majnemer04948362016-01-13 01:05:16 +0000132; OBJ64-NEXT: ]
Timur Iskhodzhanovf166f6c2014-01-30 01:39:17 +0000133; OBJ64-NEXT: ]
134; OBJ64-NEXT: ]
Timur Iskhodzhanovf166f6c2014-01-30 01:39:17 +0000135
136; Function Attrs: nounwind
Peter Collingbourned4bff302015-11-05 22:03:56 +0000137define void @f() #0 !dbg !4 {
Timur Iskhodzhanovf166f6c2014-01-30 01:39:17 +0000138entry:
139 call void asm sideeffect inteldialect ".align 4", "~{dirflag},~{fpsr},~{flags}"() #2, !dbg !12
140 call void @g(), !dbg !13
141 ret void, !dbg !14
142}
143
144declare void @g() #1
145
146attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
147attributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
148attributes #2 = { nounwind }
149
150!llvm.dbg.cu = !{!0}
151!llvm.module.flags = !{!9, !10}
152!llvm.ident = !{!11}
153
Adrian Prantl75819ae2016-04-15 15:57:41 +0000154!0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.5 ", isOptimized: false, emissionKind: FullDebug, file: !1, enums: !2, retainedTypes: !2, globals: !2, imports: !2)
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +0000155!1 = !DIFile(filename: "<unknown>", directory: "D:\5C")
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +0000156!2 = !{}
Adrian Prantl75819ae2016-04-15 15:57:41 +0000157!4 = distinct !DISubprogram(name: "f", line: 3, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 3, file: !5, scope: !6, type: !7, variables: !2)
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +0000158!5 = !DIFile(filename: "asm.c", directory: "D:\5C")
159!6 = !DIFile(filename: "asm.c", directory: "D:C")
160!7 = !DISubroutineType(types: !8)
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +0000161!8 = !{null}
Reid Kleckner12d2c122015-08-05 22:26:20 +0000162!9 = !{i32 2, !"CodeView", i32 1}
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +0000163!10 = !{i32 1, !"Debug Info Version", i32 3}
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +0000164!11 = !{!"clang version 3.5 "}
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +0000165!12 = !DILocation(line: 4, scope: !4)
166!13 = !DILocation(line: 5, scope: !4)
167!14 = !DILocation(line: 6, scope: !4)