[PATCH] D46444: Add option -verify-cfiinstrs to run verifier in CFIInstrInserter

Petar Jovanovic via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon May 7 06:12:46 PDT 2018


petarj updated this revision to Diff 145454.
petarj added a comment.

Adding the test cases for -verify-cfiinstrs.


Repository:
  rL LLVM

https://reviews.llvm.org/D46444

Files:
  lib/CodeGen/CFIInstrInserter.cpp
  test/CodeGen/X86/cfi-inserter-verify-inconsistent-offset.mir
  test/CodeGen/X86/cfi-inserter-verify-inconsistent-register.mir


Index: test/CodeGen/X86/cfi-inserter-verify-inconsistent-register.mir
===================================================================
--- test/CodeGen/X86/cfi-inserter-verify-inconsistent-register.mir
+++ test/CodeGen/X86/cfi-inserter-verify-inconsistent-register.mir
@@ -0,0 +1,26 @@
+# RUN: not llc -o - %s -mtriple=x86_64-- -verify-cfiinstrs \
+# RUN:     -run-pass=cfi-instr-inserter 2>&1 | FileCheck %s
+# Test that CFI verifier finds inconsistent register between bb.end and one of
+# its precedessors.
+--- |
+  define void @inconsistentRegister() {
+    bb.end:
+      ret void
+  }
+...
+---
+# CHECK: *** Inconsistent CFA register and/or offset between pred and succ ***
+# CHECK: Succ: bb.end
+# CHECK: LLVM ERROR: Found 1 in/out CFI information errors.
+name: inconsistentRegister
+body: |
+  bb.0:
+    CFI_INSTRUCTION def_cfa_register $rbp
+    JNE_1 %bb.2, implicit undef $eflags
+
+  bb.1:
+    CFI_INSTRUCTION def_cfa $rsp, 8
+
+  bb.2.bb.end:
+    RET 0
+...
Index: test/CodeGen/X86/cfi-inserter-verify-inconsistent-offset.mir
===================================================================
--- test/CodeGen/X86/cfi-inserter-verify-inconsistent-offset.mir
+++ test/CodeGen/X86/cfi-inserter-verify-inconsistent-offset.mir
@@ -0,0 +1,26 @@
+# RUN: not llc -o - %s -mtriple=x86_64-- -verify-cfiinstrs \
+# RUN:     -run-pass=cfi-instr-inserter 2>&1 | FileCheck %s
+# Test that CFI verifier finds inconsistent offset between bb.end and one of
+# its precedessors.
+--- |
+  define void @inconsistentOffset() {
+    bb.end:
+      ret void
+  }
+...
+---
+# CHECK: *** Inconsistent CFA register and/or offset between pred and succ ***
+# CHECK: Succ: bb.end
+# CHECK: LLVM ERROR: Found 1 in/out CFI information errors.
+name: inconsistentOffset
+body: |
+  bb.0:
+    CFI_INSTRUCTION def_cfa_offset 24
+    JNE_1 %bb.2, implicit undef $eflags
+
+  bb.1:
+    CFI_INSTRUCTION def_cfa_offset 32
+
+  bb.2.bb.end:
+    RET 0
+...
Index: lib/CodeGen/CFIInstrInserter.cpp
===================================================================
--- lib/CodeGen/CFIInstrInserter.cpp
+++ lib/CodeGen/CFIInstrInserter.cpp
@@ -29,6 +29,11 @@
 #include "llvm/Target/TargetMachine.h"
 using namespace llvm;
 
+static cl::opt<bool> VerifyCFI("verify-cfiinstrs",
+    cl::desc("Verify Call Frame Information instructions"),
+    cl::init(false),
+    cl::Hidden);
+
 namespace {
 class CFIInstrInserter : public MachineFunctionPass {
  public:
@@ -50,11 +55,12 @@
 
     MBBVector.resize(MF.getNumBlockIDs());
     calculateCFAInfo(MF);
-#ifndef NDEBUG
-    if (unsigned ErrorNum = verify(MF))
-      report_fatal_error("Found " + Twine(ErrorNum) +
-                         " in/out CFI information errors.");
-#endif
+
+    if (VerifyCFI) {
+      if (unsigned ErrorNum = verify(MF))
+        report_fatal_error("Found " + Twine(ErrorNum) +
+                           " in/out CFI information errors.");
+    }
     bool insertedCFI = insertCFIInstrs(MF);
     MBBVector.clear();
     return insertedCFI;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D46444.145454.patch
Type: text/x-patch
Size: 3011 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180507/c52d7d67/attachment.bin>


More information about the llvm-commits mailing list