[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