Skip to content
This repository was archived by the owner on Nov 1, 2021. It is now read-only.

Commit 726d93c

Browse files
committed
[MC] Suppress .Lcfi labels when emitting textual assembly
Summary: This suppresses the generation of .Lcfi labels in our textual assembler. It was annoying that this generated cascading .Lcfi labels: llc foo.ll -o - | llvm-mc | llvm-mc After three trips through MCAsmStreamer, we'd have three labels in the output when none are necessary. We should only bother creating the labels and frame data when making a real object file. This supercedes D38605, which moved the entire .seh_ implementation into MCObjectStreamer. This has the advantage that we do more checking when emitting textual assembly, as a minor efficiency cost. Outputting textual assembly is not performance critical, so this shouldn't matter. Reviewers: majnemer, MatzeB Subscribers: qcolombet, nemanjai, javed.absar, eraman, hiraditya, JDevlieghere, llvm-commits Differential Revision: https://reviews.llvm.org/D38638 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@315259 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 520952c commit 726d93c

File tree

95 files changed

+23
-2957
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

95 files changed

+23
-2957
lines changed

include/llvm/MC/MCObjectStreamer.h

+1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ class MCObjectStreamer : public MCStreamer {
4343
virtual void EmitInstToData(const MCInst &Inst, const MCSubtargetInfo&) = 0;
4444
void EmitCFIStartProcImpl(MCDwarfFrameInfo &Frame) override;
4545
void EmitCFIEndProcImpl(MCDwarfFrameInfo &Frame) override;
46+
MCSymbol *EmitCFILabel() override;
4647

4748
protected:
4849
MCObjectStreamer(MCContext &Context, MCAsmBackend &TAB, raw_pwrite_stream &OS,

include/llvm/MC/MCStreamer.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,6 @@ class MCStreamer {
173173
MCDwarfFrameInfo *getCurrentDwarfFrameInfo();
174174
void EnsureValidDwarfFrame();
175175

176-
MCSymbol *EmitCFILabel();
177176
MCSymbol *EmitCFICommon();
178177

179178
/// Similar to DwarfFrameInfos, but for SEH unwind info. Chained frames may
@@ -203,6 +202,10 @@ class MCStreamer {
203202
virtual void EmitCFIStartProcImpl(MCDwarfFrameInfo &Frame);
204203
virtual void EmitCFIEndProcImpl(MCDwarfFrameInfo &CurFrame);
205204

205+
/// When emitting an object file, create and emit a real label. When emitting
206+
/// textual assembly, this should do nothing to avoid polluting our output.
207+
virtual MCSymbol *EmitCFILabel();
208+
206209
WinEH::FrameInfo *getCurrentWinFrameInfo() {
207210
return CurrentWinFrameInfo;
208211
}

lib/MC/MCObjectStreamer.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,12 @@ void MCObjectStreamer::EmitValueImpl(const MCExpr *Value, unsigned Size,
146146
DF->getContents().resize(DF->getContents().size() + Size, 0);
147147
}
148148

149+
MCSymbol *MCObjectStreamer::EmitCFILabel() {
150+
MCSymbol *Label = getContext().createTempSymbol("cfi", true);
151+
EmitLabel(Label);
152+
return Label;
153+
}
154+
149155
void MCObjectStreamer::EmitCFIStartProcImpl(MCDwarfFrameInfo &Frame) {
150156
// We need to create a local symbol to avoid relocations.
151157
Frame.Begin = getContext().createTempSymbol();

lib/MC/MCStreamer.cpp

+6-4
Original file line numberDiff line numberDiff line change
@@ -355,13 +355,13 @@ void MCStreamer::EmitCFIEndProc() {
355355
void MCStreamer::EmitCFIEndProcImpl(MCDwarfFrameInfo &Frame) {
356356
// Put a dummy non-null value in Frame.End to mark that this frame has been
357357
// closed.
358-
Frame.End = (MCSymbol *) 1;
358+
Frame.End = (MCSymbol *)1;
359359
}
360360

361361
MCSymbol *MCStreamer::EmitCFILabel() {
362-
MCSymbol *Label = getContext().createTempSymbol("cfi", true);
363-
EmitLabel(Label);
364-
return Label;
362+
// Return a dummy non-null value so that label fields appear filled in when
363+
// generating textual assembly.
364+
return (MCSymbol *)1;
365365
}
366366

367367
MCSymbol *MCStreamer::EmitCFICommon() {
@@ -735,6 +735,8 @@ void MCStreamer::EmitWindowsUnwindTables() {
735735
void MCStreamer::Finish() {
736736
if (!DwarfFrameInfos.empty() && !DwarfFrameInfos.back().End)
737737
report_fatal_error("Unfinished frame!");
738+
if (!WinFrameInfos.empty() && !WinFrameInfos.back()->End)
739+
report_fatal_error("Unfinished frame!");
738740

739741
MCTargetStreamer *TS = getTargetStreamer();
740742
if (TS)

test/CodeGen/AArch64/arm64-patchpoint-webkit_jscc.ll

-6
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
define void @jscall_patchpoint_codegen(i64 %p1, i64 %p2, i64 %p3, i64 %p4) {
1414
entry:
1515
; CHECK-LABEL: jscall_patchpoint_codegen:
16-
; CHECK: Lcfi
1716
; CHECK: str x{{.+}}, [sp]
1817
; CHECK-NEXT: mov x0, x{{.+}}
1918
; CHECK: Ltmp
@@ -22,7 +21,6 @@ entry:
2221
; CHECK: movk x16, #48879
2322
; CHECK-NEXT: blr x16
2423
; FAST-LABEL: jscall_patchpoint_codegen:
25-
; FAST: Lcfi
2624
; FAST: str x{{.+}}, [sp]
2725
; FAST: Ltmp
2826
; FAST-NEXT: mov x16, #281470681743360
@@ -40,7 +38,6 @@ entry:
4038
define i64 @jscall_patchpoint_codegen2(i64 %callee) {
4139
entry:
4240
; CHECK-LABEL: jscall_patchpoint_codegen2:
43-
; CHECK: Lcfi
4441
; CHECK: orr w[[REG:[0-9]+]], wzr, #0x6
4542
; CHECK-NEXT: str x[[REG]], [sp, #24]
4643
; CHECK-NEXT: orr w[[REG:[0-9]+]], wzr, #0x4
@@ -53,7 +50,6 @@ entry:
5350
; CHECK-NEXT: movk x16, #48879
5451
; CHECK-NEXT: blr x16
5552
; FAST-LABEL: jscall_patchpoint_codegen2:
56-
; FAST: Lcfi
5753
; FAST: orr [[REG1:x[0-9]+]], xzr, #0x2
5854
; FAST-NEXT: orr [[REG2:w[0-9]+]], wzr, #0x4
5955
; FAST-NEXT: orr [[REG3:x[0-9]+]], xzr, #0x6
@@ -74,7 +70,6 @@ entry:
7470
define i64 @jscall_patchpoint_codegen3(i64 %callee) {
7571
entry:
7672
; CHECK-LABEL: jscall_patchpoint_codegen3:
77-
; CHECK: Lcfi
7873
; CHECK: mov w[[REG:[0-9]+]], #10
7974
; CHECK-NEXT: str x[[REG]], [sp, #48]
8075
; CHECK-NEXT: orr w[[REG:[0-9]+]], wzr, #0x8
@@ -91,7 +86,6 @@ entry:
9186
; CHECK-NEXT: movk x16, #48879
9287
; CHECK-NEXT: blr x16
9388
; FAST-LABEL: jscall_patchpoint_codegen3:
94-
; FAST: Lcfi
9589
; FAST: orr [[REG1:x[0-9]+]], xzr, #0x2
9690
; FAST-NEXT: orr [[REG2:w[0-9]+]], wzr, #0x4
9791
; FAST-NEXT: orr [[REG3:x[0-9]+]], xzr, #0x6

test/CodeGen/PowerPC/empty-functions.ll

-2
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,7 @@ entry:
3131
; LINUX-FP-NEXT: {{^}}#
3232
; LINUX-FP-NEXT: stwu 1, -16(1)
3333
; LINUX-FP-NEXT: stw 31, 12(1)
34-
; LINUX-FP-NEXT: {{^}}.L{{.*}}:{{$}}
3534
; LINUX-FP-NEXT: .cfi_def_cfa_offset 16
36-
; LINUX-FP-NEXT: {{^}}.L{{.*}}:{{$}}
3735
; LINUX-FP-NEXT: .cfi_offset r31, -4
3836
; LINUX-FP-NEXT: mr 31, 1
3937
; LINUX-FP-NEXT: {{^}}.L[[END:.*]]:{{$}}

test/CodeGen/PowerPC/memCmpUsedInZeroEqualityComparison.ll

-2
Original file line numberDiff line numberDiff line change
@@ -207,9 +207,7 @@ define i1 @length2_eq_nobuiltin_attr(i8* %X, i8* %Y) {
207207
; CHECK-NEXT: mflr 0
208208
; CHECK-NEXT: std 0, 16(1)
209209
; CHECK-NEXT: stdu 1, -32(1)
210-
; CHECK-NEXT: .Lcfi0:
211210
; CHECK-NEXT: .cfi_def_cfa_offset 32
212-
; CHECK-NEXT: .Lcfi1:
213211
; CHECK-NEXT: .cfi_offset lr, 16
214212
; CHECK-NEXT: li 5, 2
215213
; CHECK-NEXT: bl memcmp

test/CodeGen/X86/2011-10-19-widen_vselect.ll

-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ define void @full_test() {
6969
; X32-LABEL: full_test:
7070
; X32: # BB#0: # %entry
7171
; X32-NEXT: subl $60, %esp
72-
; X32-NEXT: .Lcfi0:
7372
; X32-NEXT: .cfi_def_cfa_offset 64
7473
; X32-NEXT: movsd {{.*#+}} xmm2 = mem[0],zero
7574
; X32-NEXT: cvttps2dq %xmm2, %xmm0

test/CodeGen/X86/GlobalISel/add-scalar.ll

-3
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,9 @@ define i64 @test_add_i64(i64 %arg1, i64 %arg2) {
1111
; X32-LABEL: test_add_i64:
1212
; X32: # BB#0:
1313
; X32-NEXT: pushl %ebp
14-
; X32-NEXT: .Lcfi0:
1514
; X32-NEXT: .cfi_def_cfa_offset 8
16-
; X32-NEXT: .Lcfi1:
1715
; X32-NEXT: .cfi_offset %ebp, -8
1816
; X32-NEXT: movl %esp, %ebp
19-
; X32-NEXT: .Lcfi2:
2017
; X32-NEXT: .cfi_def_cfa_register %ebp
2118
; X32-NEXT: movl 16(%ebp), %eax
2219
; X32-NEXT: movl 20(%ebp), %edx

test/CodeGen/X86/GlobalISel/brcond.ll

-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ define i32 @test_1(i32 %a, i32 %b, i32 %tValue, i32 %fValue) {
2121
; X32-LABEL: test_1:
2222
; X32: # BB#0: # %entry
2323
; X32-NEXT: pushl %eax
24-
; X32-NEXT: .Lcfi0:
2524
; X32-NEXT: .cfi_def_cfa_offset 8
2625
; X32-NEXT: movl {{[0-9]+}}(%esp), %eax
2726
; X32-NEXT: cmpl %eax, {{[0-9]+}}(%esp)

test/CodeGen/X86/GlobalISel/callingconv.ll

-24
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,6 @@ define <8 x i32> @test_v8i32_args(<8 x i32> %arg1, <8 x i32> %arg2) {
113113
; X32-LABEL: test_v8i32_args:
114114
; X32: # BB#0:
115115
; X32-NEXT: subl $12, %esp
116-
; X32-NEXT: .Lcfi0:
117116
; X32-NEXT: .cfi_def_cfa_offset 16
118117
; X32-NEXT: movups 16(%esp), %xmm1
119118
; X32-NEXT: movaps %xmm2, %xmm0
@@ -133,7 +132,6 @@ define void @test_trivial_call() {
133132
; X32-LABEL: test_trivial_call:
134133
; X32: # BB#0:
135134
; X32-NEXT: subl $12, %esp
136-
; X32-NEXT: .Lcfi1:
137135
; X32-NEXT: .cfi_def_cfa_offset 16
138136
; X32-NEXT: calll trivial_callee
139137
; X32-NEXT: addl $12, %esp
@@ -142,7 +140,6 @@ define void @test_trivial_call() {
142140
; X64-LABEL: test_trivial_call:
143141
; X64: # BB#0:
144142
; X64-NEXT: pushq %rax
145-
; X64-NEXT: .Lcfi0:
146143
; X64-NEXT: .cfi_def_cfa_offset 16
147144
; X64-NEXT: callq trivial_callee
148145
; X64-NEXT: popq %rax
@@ -156,7 +153,6 @@ define void @test_simple_arg_call(i32 %in0, i32 %in1) {
156153
; X32-LABEL: test_simple_arg_call:
157154
; X32: # BB#0:
158155
; X32-NEXT: subl $12, %esp
159-
; X32-NEXT: .Lcfi2:
160156
; X32-NEXT: .cfi_def_cfa_offset 16
161157
; X32-NEXT: movl 16(%esp), %eax
162158
; X32-NEXT: movl 20(%esp), %ecx
@@ -169,7 +165,6 @@ define void @test_simple_arg_call(i32 %in0, i32 %in1) {
169165
; X64-LABEL: test_simple_arg_call:
170166
; X64: # BB#0:
171167
; X64-NEXT: pushq %rax
172-
; X64-NEXT: .Lcfi1:
173168
; X64-NEXT: .cfi_def_cfa_offset 16
174169
; X64-NEXT: movl %edi, %eax
175170
; X64-NEXT: movl %esi, %edi
@@ -186,7 +181,6 @@ define void @test_simple_arg8_call(i32 %in0) {
186181
; X32-LABEL: test_simple_arg8_call:
187182
; X32: # BB#0:
188183
; X32-NEXT: subl $44, %esp
189-
; X32-NEXT: .Lcfi3:
190184
; X32-NEXT: .cfi_def_cfa_offset 48
191185
; X32-NEXT: movl 48(%esp), %eax
192186
; X32-NEXT: movl %eax, (%esp)
@@ -204,7 +198,6 @@ define void @test_simple_arg8_call(i32 %in0) {
204198
; X64-LABEL: test_simple_arg8_call:
205199
; X64: # BB#0:
206200
; X64-NEXT: subq $24, %rsp
207-
; X64-NEXT: .Lcfi2:
208201
; X64-NEXT: .cfi_def_cfa_offset 32
209202
; X64-NEXT: movl %edi, (%rsp)
210203
; X64-NEXT: movl %edi, 8(%rsp)
@@ -225,7 +218,6 @@ define i32 @test_simple_return_callee() {
225218
; X32-LABEL: test_simple_return_callee:
226219
; X32: # BB#0:
227220
; X32-NEXT: subl $12, %esp
228-
; X32-NEXT: .Lcfi4:
229221
; X32-NEXT: .cfi_def_cfa_offset 16
230222
; X32-NEXT: movl $5, %eax
231223
; X32-NEXT: movl %eax, (%esp)
@@ -237,7 +229,6 @@ define i32 @test_simple_return_callee() {
237229
; X64-LABEL: test_simple_return_callee:
238230
; X64: # BB#0:
239231
; X64-NEXT: pushq %rax
240-
; X64-NEXT: .Lcfi3:
241232
; X64-NEXT: .cfi_def_cfa_offset 16
242233
; X64-NEXT: movl $5, %edi
243234
; X64-NEXT: callq simple_return_callee
@@ -254,7 +245,6 @@ define <8 x i32> @test_split_return_callee(<8 x i32> %arg1, <8 x i32> %arg2) {
254245
; X32-LABEL: test_split_return_callee:
255246
; X32: # BB#0:
256247
; X32-NEXT: subl $44, %esp
257-
; X32-NEXT: .Lcfi5:
258248
; X32-NEXT: .cfi_def_cfa_offset 48
259249
; X32-NEXT: movaps %xmm0, (%esp) # 16-byte Spill
260250
; X32-NEXT: movaps %xmm1, 16(%esp) # 16-byte Spill
@@ -269,7 +259,6 @@ define <8 x i32> @test_split_return_callee(<8 x i32> %arg1, <8 x i32> %arg2) {
269259
; X64-LABEL: test_split_return_callee:
270260
; X64: # BB#0:
271261
; X64-NEXT: subq $40, %rsp
272-
; X64-NEXT: .Lcfi4:
273262
; X64-NEXT: .cfi_def_cfa_offset 48
274263
; X64-NEXT: movaps %xmm0, (%rsp) # 16-byte Spill
275264
; X64-NEXT: movaps %xmm1, 16(%rsp) # 16-byte Spill
@@ -289,7 +278,6 @@ define void @test_indirect_call(void()* %func) {
289278
; X32-LABEL: test_indirect_call:
290279
; X32: # BB#0:
291280
; X32-NEXT: subl $12, %esp
292-
; X32-NEXT: .Lcfi6:
293281
; X32-NEXT: .cfi_def_cfa_offset 16
294282
; X32-NEXT: calll *16(%esp)
295283
; X32-NEXT: addl $12, %esp
@@ -298,7 +286,6 @@ define void @test_indirect_call(void()* %func) {
298286
; X64-LABEL: test_indirect_call:
299287
; X64: # BB#0:
300288
; X64-NEXT: pushq %rax
301-
; X64-NEXT: .Lcfi5:
302289
; X64-NEXT: .cfi_def_cfa_offset 16
303290
; X64-NEXT: callq *%rdi
304291
; X64-NEXT: popq %rax
@@ -312,17 +299,12 @@ define void @test_abi_exts_call(i8* %addr) {
312299
; X32-LABEL: test_abi_exts_call:
313300
; X32: # BB#0:
314301
; X32-NEXT: pushl %ebx
315-
; X32-NEXT: .Lcfi7:
316302
; X32-NEXT: .cfi_def_cfa_offset 8
317303
; X32-NEXT: pushl %esi
318-
; X32-NEXT: .Lcfi8:
319304
; X32-NEXT: .cfi_def_cfa_offset 12
320305
; X32-NEXT: pushl %eax
321-
; X32-NEXT: .Lcfi9:
322306
; X32-NEXT: .cfi_def_cfa_offset 16
323-
; X32-NEXT: .Lcfi10:
324307
; X32-NEXT: .cfi_offset %esi, -12
325-
; X32-NEXT: .Lcfi11:
326308
; X32-NEXT: .cfi_offset %ebx, -8
327309
; X32-NEXT: movl 16(%esp), %eax
328310
; X32-NEXT: movb (%eax), %bl
@@ -342,9 +324,7 @@ define void @test_abi_exts_call(i8* %addr) {
342324
; X64-LABEL: test_abi_exts_call:
343325
; X64: # BB#0:
344326
; X64-NEXT: pushq %rbx
345-
; X64-NEXT: .Lcfi6:
346327
; X64-NEXT: .cfi_def_cfa_offset 16
347-
; X64-NEXT: .Lcfi7:
348328
; X64-NEXT: .cfi_offset %rbx, -16
349329
; X64-NEXT: movb (%rdi), %al
350330
; X64-NEXT: movzbl %al, %ebx
@@ -368,7 +348,6 @@ define void @test_variadic_call_1(i8** %addr_ptr, i32* %val_ptr) {
368348
; X32-LABEL: test_variadic_call_1:
369349
; X32: # BB#0:
370350
; X32-NEXT: subl $12, %esp
371-
; X32-NEXT: .Lcfi12:
372351
; X32-NEXT: .cfi_def_cfa_offset 16
373352
; X32-NEXT: movl 16(%esp), %eax
374353
; X32-NEXT: movl 20(%esp), %ecx
@@ -383,7 +362,6 @@ define void @test_variadic_call_1(i8** %addr_ptr, i32* %val_ptr) {
383362
; X64-LABEL: test_variadic_call_1:
384363
; X64: # BB#0:
385364
; X64-NEXT: pushq %rax
386-
; X64-NEXT: .Lcfi8:
387365
; X64-NEXT: .cfi_def_cfa_offset 16
388366
; X64-NEXT: movq (%rdi), %rdi
389367
; X64-NEXT: movl (%rsi), %esi
@@ -402,7 +380,6 @@ define void @test_variadic_call_2(i8** %addr_ptr, double* %val_ptr) {
402380
; X32-LABEL: test_variadic_call_2:
403381
; X32: # BB#0:
404382
; X32-NEXT: subl $12, %esp
405-
; X32-NEXT: .Lcfi13:
406383
; X32-NEXT: .cfi_def_cfa_offset 16
407384
; X32-NEXT: movl 16(%esp), %eax
408385
; X32-NEXT: movl 20(%esp), %ecx
@@ -421,7 +398,6 @@ define void @test_variadic_call_2(i8** %addr_ptr, double* %val_ptr) {
421398
; X64-LABEL: test_variadic_call_2:
422399
; X64: # BB#0:
423400
; X64-NEXT: pushq %rax
424-
; X64-NEXT: .Lcfi9:
425401
; X64-NEXT: .cfi_def_cfa_offset 16
426402
; X64-NEXT: movq (%rdi), %rdi
427403
; X64-NEXT: movq (%rsi), %rcx

test/CodeGen/X86/GlobalISel/frameIndex.ll

-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ define i32* @allocai32() {
1515
; X32-LABEL: allocai32:
1616
; X32: # BB#0:
1717
; X32-NEXT: pushl %eax
18-
; X32-NEXT: .Lcfi0:
1918
; X32-NEXT: .cfi_def_cfa_offset 8
2019
; X32-NEXT: movl %esp, %eax
2120
; X32-NEXT: popl %ecx

test/CodeGen/X86/TruncAssertZext.ll

-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ define i64 @main() {
1616
; CHECK-LABEL: main:
1717
; CHECK: # BB#0:
1818
; CHECK-NEXT: pushq %rax
19-
; CHECK-NEXT: .Lcfi0:
2019
; CHECK-NEXT: .cfi_def_cfa_offset 16
2120
; CHECK-NEXT: callq foo
2221
; CHECK-NEXT: movabsq $-4294967041, %rcx # imm = 0xFFFFFFFF000000FF

0 commit comments

Comments
 (0)