[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