[PATCH] D78765: [TRE] Fix bug in handling of switch statements
Layton Kifer via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 23 15:47:38 PDT 2020
laytonio created this revision.
laytonio added reviewers: nlewycky, lattner, Carrot, efriedma.
Herald added a subscriber: hiraditya.
Herald added a project: LLVM.
Switch values are only dynamic constant if the return can only be reached from one case. The current implementation only checks that its not the default but not if other cases can result in the same jump.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D78765
Files:
llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp
Index: llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp
===================================================================
--- llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp
+++ llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp
@@ -385,7 +385,7 @@
if (BasicBlock *UniquePred = RI->getParent()->getUniquePredecessor())
if (SwitchInst *SI = dyn_cast<SwitchInst>(UniquePred->getTerminator()))
if (SI->getCondition() == V)
- return SI->getDefaultDest() != RI->getParent();
+ return SI->findCaseDest(RI->getParent()) != nullptr;
// Not a constant or immutable argument, we can't safely transform.
return false;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D78765.259731.patch
Type: text/x-patch
Size: 666 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200423/15e82fdb/attachment.bin>
More information about the llvm-commits
mailing list