[PATCH] D15405: [SelectionDAGBuilder] Adds support for landingpads of token type

Chen Li via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 14 23:05:41 PST 2015


chenli retitled this revision from "[EHPersonality] Add a new personality enum to represent langindPad of token type" to "[SelectionDAGBuilder] Adds support for landingpads of token type".
chenli updated the summary for this revision.
chenli removed a reviewer: reames.
chenli updated this revision to Diff 42821.
chenli added a comment.

Update patch with initial approach as described by the updated summary.


http://reviews.llvm.org/D15405

Files:
  lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
  test/CodeGen/X86/inconsistent_landingpad.ll
  test/CodeGen/X86/token_landingpad.ll

Index: test/CodeGen/X86/token_landingpad.ll
===================================================================
--- /dev/null
+++ test/CodeGen/X86/token_landingpad.ll
@@ -0,0 +1,22 @@
+; RUN: llc < %s | FileCheck %s
+
+; This test verifies that SelectionDAG can handle landingPad of token type.
+
+define void @test() personality i32 (...)* @dummy_personality {
+; CHECK: .cfi_personality 155, _dummy_personality
+entry:
+  invoke void @dummy()
+          to label %return unwind label %unwind
+
+unwind:                                           ; preds = %entry
+  %lp = landingpad token
+            cleanup
+  br label %return
+
+return:                                           ; preds = %entry
+  ret void
+}
+
+declare void @dummy()
+
+declare i32 @dummy_personality(...)
Index: test/CodeGen/X86/inconsistent_landingpad.ll
===================================================================
--- /dev/null
+++ test/CodeGen/X86/inconsistent_landingpad.ll
@@ -0,0 +1,30 @@
+; RUN: not llvm-as -disable-output <%s 2>&1 | FileCheck %s
+
+define void @test() personality i32 (...)* @dummy_personality {
+; CHECK: The landingpad instruction should have a consistent result type inside a function
+entry:
+  invoke void @dummy1()
+          to label %next unwind label %unwind1
+
+unwind1:
+  %lp1 = landingpad token
+            cleanup
+  br label %return
+
+next:
+  invoke void @dummy2()
+          to label %return unwind label %unwind2
+
+unwind2:
+  %lp2 = landingpad { i8*, i32 }
+            cleanup
+  br label %return
+
+return:
+  ret void
+}
+
+declare void @dummy1()
+declare void @dummy2()
+
+declare i32 @dummy_personality(...)
Index: lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
===================================================================
--- lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
+++ lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
@@ -2177,6 +2177,13 @@
       TLI.getExceptionSelectorRegister(PersonalityFn) == 0)
     return;
 
+  // If landingpad's return type is token type, we don't create DAG nodes
+  // for its exception pointer and selector value. The extraction of exception
+  // pointer or selector value from token type landingpads is not currently
+  // supported.
+  if (LP.getType()->isTokenTy())
+    return;
+
   SmallVector<EVT, 2> ValueVTs;
   SDLoc dl = getCurSDLoc();
   ComputeValueVTs(TLI, DAG.getDataLayout(), LP.getType(), ValueVTs);


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D15405.42821.patch
Type: text/x-patch
Size: 2403 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151215/c1e7dbaf/attachment.bin>


More information about the llvm-commits mailing list