[PATCH] D104849: [SimplifyCFG] Tail-merging all blocks with `resume` terminator
Roman Lebedev via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 24 10:40:49 PDT 2021
lebedev.ri updated this revision to Diff 354302.
lebedev.ri marked an inline comment as done.
lebedev.ri added a comment.
Revisit a test somewhat.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D104849/new/
https://reviews.llvm.org/D104849
Files:
llvm/lib/Transforms/Scalar/SimplifyCFGPass.cpp
llvm/test/Transforms/SimplifyCFG/tail-merge-resume.ll
Index: llvm/test/Transforms/SimplifyCFG/tail-merge-resume.ll
===================================================================
--- llvm/test/Transforms/SimplifyCFG/tail-merge-resume.ll
+++ llvm/test/Transforms/SimplifyCFG/tail-merge-resume.ll
@@ -39,19 +39,20 @@
; CHECK-NEXT: cleanup
; CHECK-NEXT: call void @baz()
; CHECK-NEXT: br label [[RESUME2]]
+; CHECK: common.resume:
+; CHECK-NEXT: [[COMMON_RESUME_OP:%.*]] = phi { i8*, i32 } [ [[LP]], [[RESUME0]] ], [ [[LP]], [[RESUME1]] ], [ [[SEMICOMMON_LP:%.*]], [[RESUME2]] ]
+; CHECK-NEXT: call void @common()
+; CHECK-NEXT: resume { i8*, i32 } [[COMMON_RESUME_OP]]
; CHECK: resume0:
; CHECK-NEXT: call void @qux()
-; CHECK-NEXT: call void @common()
-; CHECK-NEXT: resume { i8*, i32 } [[LP]]
+; CHECK-NEXT: br label [[COMMON_RESUME:%.*]]
; CHECK: resume1:
; CHECK-NEXT: call void @quux()
-; CHECK-NEXT: call void @common()
-; CHECK-NEXT: resume { i8*, i32 } [[LP]]
+; CHECK-NEXT: br label [[COMMON_RESUME]]
; CHECK: resume2:
-; CHECK-NEXT: [[SEMICOMMON_LP:%.*]] = phi { i8*, i32 } [ [[LP2]], [[LPAD2]] ], [ [[LP3]], [[LPAD3]] ]
+; CHECK-NEXT: [[SEMICOMMON_LP]] = phi { i8*, i32 } [ [[LP2]], [[LPAD2]] ], [ [[LP3]], [[LPAD3]] ]
; CHECK-NEXT: call void @quuz()
-; CHECK-NEXT: call void @common()
-; CHECK-NEXT: resume { i8*, i32 } [[SEMICOMMON_LP]]
+; CHECK-NEXT: br label [[COMMON_RESUME]]
;
invoke void @maybe_throws() to label %invoke.cont unwind label %lpad
Index: llvm/lib/Transforms/Scalar/SimplifyCFGPass.cpp
===================================================================
--- llvm/lib/Transforms/Scalar/SimplifyCFGPass.cpp
+++ llvm/lib/Transforms/Scalar/SimplifyCFGPass.cpp
@@ -94,10 +94,15 @@
auto *Term = BB.getTerminator();
- // Fow now only support `ret` function terminators.
+ // Fow now only support `ret`/`resume` function terminators.
// FIXME: lift this restriction.
- if (Term->getOpcode() != Instruction::Ret)
+ switch (Term->getOpcode()) {
+ case Instruction::Ret:
+ case Instruction::Resume:
+ break;
+ default:
continue;
+ }
// We can't tail-merge block that contains a musttail call.
if (BB.getTerminatingMustTailCall())
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D104849.354302.patch
Type: text/x-patch
Size: 2259 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210624/7855af5b/attachment.bin>
More information about the llvm-commits
mailing list