[PATCH] D97679: [WebAssembly] Handle empty cleanuppads when adding catch_all
Heejin Ahn via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 1 05:35:52 PST 2021
aheejin created this revision.
aheejin added a reviewer: tlively.
Herald added subscribers: wingo, ecnelises, sunfish, hiraditya, jgravelle-google, sbc100, dschuff.
aheejin requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
In `LateEHPrepare::addCatchAlls`, the current code tries to get the
iterator's debug info even when it is `MachineBasicBlock::end()`. This
fixes the bug by adding empty debug info instead in that case.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D97679
Files:
llvm/lib/Target/WebAssembly/WebAssemblyLateEHPrepare.cpp
llvm/test/CodeGen/WebAssembly/exception.mir
Index: llvm/test/CodeGen/WebAssembly/exception.mir
===================================================================
--- llvm/test/CodeGen/WebAssembly/exception.mir
+++ llvm/test/CodeGen/WebAssembly/exception.mir
@@ -12,6 +12,9 @@
define void @unreachable_ehpad_test() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
ret void
}
+ define void @empty_cleanuppad_test() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
+ ret void
+ }
...
---
@@ -81,3 +84,30 @@
; predecessors: %bb.0, %bb.1
RETURN implicit-def dead $arguments
...
+
+---
+# Regression test for a bug that LateEHPrepare::addCatchAll didn't handle empty
+# cleanup pads. (It tried to get debug info from end() iterator.)
+name: empty_cleanuppad_test
+liveins:
+ - { reg: '$arguments' }
+body: |
+ bb.0:
+ successors: %bb.1, %bb.3
+ EH_LABEL <mcsymbol .Ltmp0>
+ CALL @foo, implicit-def dead $arguments, implicit $sp32, implicit $sp64
+ EH_LABEL <mcsymbol .Ltmp1>
+ BR %bb.3, implicit-def dead $arguments
+
+ ;; Empty cleanuppad
+ bb.1 (landing-pad):
+ successors: %bb.2
+ EH_LABEL <mcsymbol .Ltmp2>
+
+ bb.2:
+ successors: %bb.3
+ CLEANUPRET implicit-def dead $arguments
+
+ bb.3:
+ RETURN implicit-def dead $arguments
+...
Index: llvm/lib/Target/WebAssembly/WebAssemblyLateEHPrepare.cpp
===================================================================
--- llvm/lib/Target/WebAssembly/WebAssemblyLateEHPrepare.cpp
+++ llvm/lib/Target/WebAssembly/WebAssemblyLateEHPrepare.cpp
@@ -216,7 +216,8 @@
if (InsertPos == MBB.end() ||
!WebAssembly::isCatch(InsertPos->getOpcode())) {
Changed = true;
- BuildMI(MBB, InsertPos, InsertPos->getDebugLoc(),
+ BuildMI(MBB, InsertPos,
+ InsertPos == MBB.end() ? DebugLoc() : InsertPos->getDebugLoc(),
TII.get(WebAssembly::CATCH_ALL));
}
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D97679.327086.patch
Type: text/x-patch
Size: 1918 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210301/cbe9a23d/attachment.bin>
More information about the llvm-commits
mailing list