Skip to content

Commit

Permalink
MCStreamer: Use "cfi" for CFI related temp labels.
Browse files Browse the repository at this point in the history
Choosing a "cfi" name makes the intend a bit clearer in an assembly dump
and more importantly the assembly dumps are slightly more stable as the
numbers don't move around anymore when unrelated code calls
createTempSymbol() more or less often.
As they are temp labels the name doesn't influence the generated object
code.

Differential Revision: https://reviews.llvm.org/D27244

llvm-svn: 288290
  • Loading branch information
MatzeB committed Nov 30, 2016
1 parent d195d4c commit 39c3c89
Show file tree
Hide file tree
Showing 44 changed files with 401 additions and 407 deletions.
1 change: 1 addition & 0 deletions llvm/include/llvm/MC/MCStreamer.h
Expand Up @@ -169,6 +169,7 @@ class MCStreamer {
MCDwarfFrameInfo *getCurrentDwarfFrameInfo();
void EnsureValidDwarfFrame();

MCSymbol *EmitCFILabel();
MCSymbol *EmitCFICommon();

std::vector<WinEH::FrameInfo *> WinFrameInfos;
Expand Down
43 changes: 18 additions & 25 deletions llvm/lib/MC/MCStreamer.cpp
Expand Up @@ -341,13 +341,17 @@ void MCStreamer::EmitCFIEndProcImpl(MCDwarfFrameInfo &Frame) {
Frame.End = (MCSymbol *) 1;
}

MCSymbol *MCStreamer::EmitCFICommon() {
EnsureValidDwarfFrame();
MCSymbol *Label = getContext().createTempSymbol();
MCSymbol *MCStreamer::EmitCFILabel() {
MCSymbol *Label = getContext().createTempSymbol("cfi", true);
EmitLabel(Label);
return Label;
}

MCSymbol *MCStreamer::EmitCFICommon() {
EnsureValidDwarfFrame();
return EmitCFILabel();
}

void MCStreamer::EmitCFIDefCfa(int64_t Register, int64_t Offset) {
MCSymbol *Label = EmitCFICommon();
MCCFIInstruction Instruction =
Expand Down Expand Up @@ -504,8 +508,7 @@ void MCStreamer::EmitWinCFIStartProc(const MCSymbol *Symbol) {
if (CurrentWinFrameInfo && !CurrentWinFrameInfo->End)
report_fatal_error("Starting a function before ending the previous one!");

MCSymbol *StartProc = getContext().createTempSymbol();
EmitLabel(StartProc);
MCSymbol *StartProc = EmitCFILabel();

WinFrameInfos.push_back(new WinEH::FrameInfo(Symbol, StartProc));
CurrentWinFrameInfo = WinFrameInfos.back();
Expand All @@ -517,16 +520,14 @@ void MCStreamer::EmitWinCFIEndProc() {
if (CurrentWinFrameInfo->ChainedParent)
report_fatal_error("Not all chained regions terminated!");

MCSymbol *Label = getContext().createTempSymbol();
EmitLabel(Label);
MCSymbol *Label = EmitCFILabel();
CurrentWinFrameInfo->End = Label;
}

void MCStreamer::EmitWinCFIStartChained() {
EnsureValidWinFrameInfo();

MCSymbol *StartProc = getContext().createTempSymbol();
EmitLabel(StartProc);
MCSymbol *StartProc = EmitCFILabel();

WinFrameInfos.push_back(new WinEH::FrameInfo(CurrentWinFrameInfo->Function,
StartProc, CurrentWinFrameInfo));
Expand All @@ -539,8 +540,7 @@ void MCStreamer::EmitWinCFIEndChained() {
if (!CurrentWinFrameInfo->ChainedParent)
report_fatal_error("End of a chained region outside a chained region!");

MCSymbol *Label = getContext().createTempSymbol();
EmitLabel(Label);
MCSymbol *Label = EmitCFILabel();

CurrentWinFrameInfo->End = Label;
CurrentWinFrameInfo =
Expand Down Expand Up @@ -604,8 +604,7 @@ void MCStreamer::EmitSyntaxDirective() {}
void MCStreamer::EmitWinCFIPushReg(unsigned Register) {
EnsureValidWinFrameInfo();

MCSymbol *Label = getContext().createTempSymbol();
EmitLabel(Label);
MCSymbol *Label = EmitCFILabel();

WinEH::Instruction Inst = Win64EH::Instruction::PushNonVol(Label, Register);
CurrentWinFrameInfo->Instructions.push_back(Inst);
Expand All @@ -620,8 +619,7 @@ void MCStreamer::EmitWinCFISetFrame(unsigned Register, unsigned Offset) {
if (Offset > 240)
report_fatal_error("Frame offset must be less than or equal to 240!");

MCSymbol *Label = getContext().createTempSymbol();
EmitLabel(Label);
MCSymbol *Label = EmitCFILabel();

WinEH::Instruction Inst =
Win64EH::Instruction::SetFPReg(Label, Register, Offset);
Expand All @@ -636,8 +634,7 @@ void MCStreamer::EmitWinCFIAllocStack(unsigned Size) {
if (Size & 7)
report_fatal_error("Misaligned stack allocation!");

MCSymbol *Label = getContext().createTempSymbol();
EmitLabel(Label);
MCSymbol *Label = EmitCFILabel();

WinEH::Instruction Inst = Win64EH::Instruction::Alloc(Label, Size);
CurrentWinFrameInfo->Instructions.push_back(Inst);
Expand All @@ -648,8 +645,7 @@ void MCStreamer::EmitWinCFISaveReg(unsigned Register, unsigned Offset) {
if (Offset & 7)
report_fatal_error("Misaligned saved register offset!");

MCSymbol *Label = getContext().createTempSymbol();
EmitLabel(Label);
MCSymbol *Label = EmitCFILabel();

WinEH::Instruction Inst =
Win64EH::Instruction::SaveNonVol(Label, Register, Offset);
Expand All @@ -661,8 +657,7 @@ void MCStreamer::EmitWinCFISaveXMM(unsigned Register, unsigned Offset) {
if (Offset & 0x0F)
report_fatal_error("Misaligned saved vector register offset!");

MCSymbol *Label = getContext().createTempSymbol();
EmitLabel(Label);
MCSymbol *Label = EmitCFILabel();

WinEH::Instruction Inst =
Win64EH::Instruction::SaveXMM(Label, Register, Offset);
Expand All @@ -674,8 +669,7 @@ void MCStreamer::EmitWinCFIPushFrame(bool Code) {
if (CurrentWinFrameInfo->Instructions.size() > 0)
report_fatal_error("If present, PushMachFrame must be the first UOP");

MCSymbol *Label = getContext().createTempSymbol();
EmitLabel(Label);
MCSymbol *Label = EmitCFILabel();

WinEH::Instruction Inst = Win64EH::Instruction::PushMachFrame(Label, Code);
CurrentWinFrameInfo->Instructions.push_back(Inst);
Expand All @@ -684,8 +678,7 @@ void MCStreamer::EmitWinCFIPushFrame(bool Code) {
void MCStreamer::EmitWinCFIEndProlog() {
EnsureValidWinFrameInfo();

MCSymbol *Label = getContext().createTempSymbol();
EmitLabel(Label);
MCSymbol *Label = EmitCFILabel();

CurrentWinFrameInfo->PrologEnd = Label;
}
Expand Down
12 changes: 6 additions & 6 deletions llvm/test/CodeGen/AArch64/arm64-patchpoint-webkit_jscc.ll
Expand Up @@ -13,7 +13,7 @@
define void @jscall_patchpoint_codegen(i64 %p1, i64 %p2, i64 %p3, i64 %p4) {
entry:
; CHECK-LABEL: jscall_patchpoint_codegen:
; CHECK: Ltmp
; CHECK: Lcfi
; CHECK: str x{{.+}}, [sp]
; CHECK-NEXT: mov x0, x{{.+}}
; CHECK: Ltmp
Expand All @@ -22,7 +22,7 @@ entry:
; CHECK: movk x16, #48879
; CHECK-NEXT: blr x16
; FAST-LABEL: jscall_patchpoint_codegen:
; FAST: Ltmp
; FAST: Lcfi
; FAST: str x{{.+}}, [sp]
; FAST: Ltmp
; FAST-NEXT: mov x16, #281470681743360
Expand All @@ -40,7 +40,7 @@ entry:
define i64 @jscall_patchpoint_codegen2(i64 %callee) {
entry:
; CHECK-LABEL: jscall_patchpoint_codegen2:
; CHECK: Ltmp
; CHECK: Lcfi
; CHECK: orr w[[REG:[0-9]+]], wzr, #0x6
; CHECK-NEXT: str x[[REG]], [sp, #24]
; CHECK-NEXT: orr w[[REG:[0-9]+]], wzr, #0x4
Expand All @@ -53,7 +53,7 @@ entry:
; CHECK-NEXT: movk x16, #48879
; CHECK-NEXT: blr x16
; FAST-LABEL: jscall_patchpoint_codegen2:
; FAST: Ltmp
; FAST: Lcfi
; FAST: orr [[REG1:x[0-9]+]], xzr, #0x2
; FAST-NEXT: orr [[REG2:w[0-9]+]], wzr, #0x4
; FAST-NEXT: orr [[REG3:x[0-9]+]], xzr, #0x6
Expand All @@ -74,7 +74,7 @@ entry:
define i64 @jscall_patchpoint_codegen3(i64 %callee) {
entry:
; CHECK-LABEL: jscall_patchpoint_codegen3:
; CHECK: Ltmp
; CHECK: Lcfi
; CHECK: mov w[[REG:[0-9]+]], #10
; CHECK-NEXT: str x[[REG]], [sp, #48]
; CHECK-NEXT: orr w[[REG:[0-9]+]], wzr, #0x8
Expand All @@ -91,7 +91,7 @@ entry:
; CHECK-NEXT: movk x16, #48879
; CHECK-NEXT: blr x16
; FAST-LABEL: jscall_patchpoint_codegen3:
; FAST: Ltmp
; FAST: Lcfi
; FAST: orr [[REG1:x[0-9]+]], xzr, #0x2
; FAST-NEXT: orr [[REG2:w[0-9]+]], wzr, #0x4
; FAST-NEXT: orr [[REG3:x[0-9]+]], xzr, #0x6
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/CodeGen/X86/avg.ll
Expand Up @@ -258,7 +258,7 @@ define void @avg_v64i8(<64 x i8>* %a, <64 x i8>* %b) {
; SSE2-LABEL: avg_v64i8:
; SSE2: # BB#0:
; SSE2-NEXT: subq $152, %rsp
; SSE2-NEXT: .Ltmp0:
; SSE2-NEXT: .Lcfi0:
; SSE2-NEXT: .cfi_def_cfa_offset 160
; SSE2-NEXT: movdqa (%rdi), %xmm1
; SSE2-NEXT: movdqa 16(%rdi), %xmm2
Expand Down

0 comments on commit 39c3c89

Please sign in to comment.