From 467269a40ec598ae498b8e319fd152c931d252b8 Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Fri, 15 Jul 2016 21:10:29 +0000 Subject: [PATCH] CodeGen: avoid emitting unnecessary CFI Remove unnecessary clutter in assembly output. When using SjLj EH, the CFI is not actually used for anything. Do not emit the CFI needlessly. The minor test adjustments are interesting. The prologue test was just overzealous matcching. The interesting case is the LSDA change. It was originally added to ensure that various compilations did not mangle the name (it explicitly checked the name!). However, subsequent cleanups made it more reliant on the CFI to find the name. Parse the generated code flow to generically find the label still. llvm-svn: 275614 --- llvm/lib/CodeGen/AsmPrinter/DwarfCFIException.cpp | 9 +++++---- llvm/test/CodeGen/ARM/2009-08-31-LSDA-Name.ll | 8 +++++--- llvm/test/DebugInfo/ARM/prologue_end.ll | 1 - 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfCFIException.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfCFIException.cpp index 5cc063e6c955..2eae1b234473 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfCFIException.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfCFIException.cpp @@ -66,13 +66,13 @@ DwarfCFIException::~DwarfCFIException() {} /// endModule - Emit all exception information that should come after the /// content. void DwarfCFIException::endModule() { - if (moveTypeModule == AsmPrinter::CFI_M_Debug) - Asm->OutStreamer->EmitCFISections(false, true); - // SjLj uses this pass and it doesn't need this info. if (!Asm->MAI->usesCFIForEH()) return; + if (moveTypeModule == AsmPrinter::CFI_M_Debug) + Asm->OutStreamer->EmitCFISections(false, true); + const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering(); unsigned PerEncoding = TLOF.getPersonalityEncoding(); @@ -133,7 +133,8 @@ void DwarfCFIException::beginFunction(const MachineFunction *MF) { shouldEmitLSDA = shouldEmitPersonality && LSDAEncoding != dwarf::DW_EH_PE_omit; - shouldEmitCFI = shouldEmitPersonality || shouldEmitMoves; + shouldEmitCFI = MF->getMMI().getContext().getAsmInfo()->usesCFIForEH() && + (shouldEmitPersonality || shouldEmitMoves); beginFragment(&*MF->begin(), getExceptionSym); } diff --git a/llvm/test/CodeGen/ARM/2009-08-31-LSDA-Name.ll b/llvm/test/CodeGen/ARM/2009-08-31-LSDA-Name.ll index d402c16ccacb..0a9fd8955746 100644 --- a/llvm/test/CodeGen/ARM/2009-08-31-LSDA-Name.ll +++ b/llvm/test/CodeGen/ARM/2009-08-31-LSDA-Name.ll @@ -1,8 +1,10 @@ ; RUN: llc < %s -mtriple=arm-apple-darwin9 -march=arm | FileCheck %s -; CHECK: .cfi_lsda 16, [[LABEL:.*]] -; CHECK: .long [[LABEL]]- -; CHECK: [[LABEL]]: +; CHECK: ldr r0, [[CPI_PERSONALITY:[A-Za-z0-9_]+]] +; CHECK: ldr r0, [[CPI_LSDA:[A-Za-z0-9_]+]] +; CHECK: [[CPI_LSDA]]: +; CHECK: .long [[LSDA_LABEL:[A-Za-z0-9_]+]]- +; CHECK: [[LSDA_LABEL]]: ; CHECK: .byte 255 @ @LPStart Encoding = omit %struct.A = type { i32* } diff --git a/llvm/test/DebugInfo/ARM/prologue_end.ll b/llvm/test/DebugInfo/ARM/prologue_end.ll index 533d1c825540..43e3c51ecc70 100644 --- a/llvm/test/DebugInfo/ARM/prologue_end.ll +++ b/llvm/test/DebugInfo/ARM/prologue_end.ll @@ -9,7 +9,6 @@ define void @prologue_end_test() nounwind uwtable !dbg !4 { ; CHECK: prologue_end_test: - ; CHECK: .cfi_startproc ; CHECK: push {r7, lr} ; CHECK: {{mov r7, sp|add r7, sp}} ; CHECK: sub sp