[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 07:13:20 PDT 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rL331635: Add option -verify-cfiinstrs to run verifier in CFIInstrInserter (authored by petarj, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D46444?vs=145454&id=145461#toc
Repository:
rL LLVM
https://reviews.llvm.org/D46444
Files:
llvm/trunk/lib/CodeGen/CFIInstrInserter.cpp
llvm/trunk/test/CodeGen/X86/cfi-inserter-verify-inconsistent-offset.mir
llvm/trunk/test/CodeGen/X86/cfi-inserter-verify-inconsistent-register.mir
Index: llvm/trunk/test/CodeGen/X86/cfi-inserter-verify-inconsistent-register.mir
===================================================================
--- llvm/trunk/test/CodeGen/X86/cfi-inserter-verify-inconsistent-register.mir
+++ llvm/trunk/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: llvm/trunk/test/CodeGen/X86/cfi-inserter-verify-inconsistent-offset.mir
===================================================================
--- llvm/trunk/test/CodeGen/X86/cfi-inserter-verify-inconsistent-offset.mir
+++ llvm/trunk/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: llvm/trunk/lib/CodeGen/CFIInstrInserter.cpp
===================================================================
--- llvm/trunk/lib/CodeGen/CFIInstrInserter.cpp
+++ llvm/trunk/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.145461.patch
Type: text/x-patch
Size: 3110 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180507/d1025406/attachment.bin>
More information about the llvm-commits
mailing list