[PATCH] D22394: CodeGen: avoid emitting unnecessary CFI

Saleem Abdulrasool via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 14 19:22:14 PDT 2016


compnerd created this revision.
compnerd added reviewers: grosbach, kledzik.
compnerd added a subscriber: llvm-commits.
compnerd set the repository for this revision to rL LLVM.

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.

Repository:
  rL LLVM

https://reviews.llvm.org/D22394

Files:
  lib/CodeGen/AsmPrinter/DwarfCFIException.cpp
  test/CodeGen/ARM/2009-08-31-LSDA-Name.ll
  test/DebugInfo/ARM/prologue_end.ll

Index: test/DebugInfo/ARM/prologue_end.ll
===================================================================
--- test/DebugInfo/ARM/prologue_end.ll
+++ 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
Index: test/CodeGen/ARM/2009-08-31-LSDA-Name.ll
===================================================================
--- test/CodeGen/ARM/2009-08-31-LSDA-Name.ll
+++ 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* }
Index: lib/CodeGen/AsmPrinter/DwarfCFIException.cpp
===================================================================
--- lib/CodeGen/AsmPrinter/DwarfCFIException.cpp
+++ lib/CodeGen/AsmPrinter/DwarfCFIException.cpp
@@ -66,13 +66,13 @@
 /// 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 @@
   shouldEmitLSDA = shouldEmitPersonality &&
     LSDAEncoding != dwarf::DW_EH_PE_omit;
 
-  shouldEmitCFI = shouldEmitPersonality || shouldEmitMoves;
+  shouldEmitCFI = MF->getMMI().getContext().getAsmInfo()->usesCFIForEH() &&
+                  (shouldEmitPersonality || shouldEmitMoves);
   beginFragment(&*MF->begin(), getExceptionSym);
 }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D22394.64078.patch
Type: text/x-patch
Size: 2257 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160715/6074640a/attachment.bin>


More information about the llvm-commits mailing list