[PATCH] D51161: Allow inconsistent offsets for 'noreturn' basic blocks when '-verify-cfiinstrs'

Vladimir Stefanovic via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 23 06:42:44 PDT 2018


vstefanovic created this revision.
vstefanovic added a reviewer: violetav.

With r295105, some 'noreturn' blocks (those that don't return and have no
successors) may be merged.
If such blocks' predecessors have different outgoing offset or register, don't
report an error in CFIInstrInserter verify().

Thanks to Vlad Tsyrklevich for reporting the issue.


Repository:
  rL LLVM

https://reviews.llvm.org/D51161

Files:
  lib/CodeGen/CFIInstrInserter.cpp
  test/CodeGen/X86/cfi-inserter-noreturnblock.mir


Index: test/CodeGen/X86/cfi-inserter-noreturnblock.mir
===================================================================
--- /dev/null
+++ test/CodeGen/X86/cfi-inserter-noreturnblock.mir
@@ -0,0 +1,23 @@
+# RUN: llc -o - %s -mtriple=x86_64-- -verify-cfiinstrs \
+# RUN:     -run-pass=cfi-instr-inserter
+
+# Test that CFI verifier does not report inconsistent offset for the
+# 'noreturn' block.
+--- |
+  define void @testNoreturnBlock() {
+      ret void
+  }
+...
+---
+name: testNoreturnBlock
+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:
+    TRAP
+...
Index: lib/CodeGen/CFIInstrInserter.cpp
===================================================================
--- lib/CodeGen/CFIInstrInserter.cpp
+++ lib/CodeGen/CFIInstrInserter.cpp
@@ -317,6 +317,9 @@
       // outgoing offset and register values of CurrMBB
       if (SuccMBBInfo.IncomingCFAOffset != CurrMBBInfo.OutgoingCFAOffset ||
           SuccMBBInfo.IncomingCFARegister != CurrMBBInfo.OutgoingCFARegister) {
+        // Inconsistent offsets/registers are ok for 'noreturn' blocks.
+        if (SuccMBBInfo.MBB->succ_empty() && !SuccMBBInfo.MBB->isReturnBlock())
+          continue;
         report(CurrMBBInfo, SuccMBBInfo);
         ErrorNum++;
       }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D51161.162170.patch
Type: text/x-patch
Size: 1338 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180823/9e313e31/attachment.bin>


More information about the llvm-commits mailing list