[PATCH] D123546: Check users of instrinsics instead of traversing entire function.

Anna Thomas via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 11 13:56:24 PDT 2022


anna created this revision.
anna added a reviewer: mkazantsev.
Herald added a subscriber: hiraditya.
Herald added a project: All.
anna requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Updated LowerGuardIntrinsic and LowerWidenableCondition to check for
users of the respective intrinsic, instead of checking for guards and
widenable conditions by traversing the entire function.

This is an NFC. Should save some compile time.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D123546

Files:
  llvm/lib/Transforms/Scalar/LowerGuardIntrinsic.cpp
  llvm/lib/Transforms/Scalar/LowerWidenableCondition.cpp


Index: llvm/lib/Transforms/Scalar/LowerWidenableCondition.cpp
===================================================================
--- llvm/lib/Transforms/Scalar/LowerWidenableCondition.cpp
+++ llvm/lib/Transforms/Scalar/LowerWidenableCondition.cpp
@@ -47,9 +47,13 @@
 
   using namespace llvm::PatternMatch;
   SmallVector<CallInst *, 8> ToLower;
-  for (auto &I : instructions(F))
-    if (match(&I, m_Intrinsic<Intrinsic::experimental_widenable_condition>()))
-      ToLower.push_back(cast<CallInst>(&I));
+  // Traverse through the users of WCDecl.
+  // This is presumably cheaper than traversing all instructions in the
+  // function.
+  for (auto *U : WCDecl->users())
+    if (auto *CI = dyn_cast<CallInst>(U))
+      if (CI->getFunction() == &F)
+        ToLower.push_back(CI);
 
   if (ToLower.empty())
     return false;
Index: llvm/lib/Transforms/Scalar/LowerGuardIntrinsic.cpp
===================================================================
--- llvm/lib/Transforms/Scalar/LowerGuardIntrinsic.cpp
+++ llvm/lib/Transforms/Scalar/LowerGuardIntrinsic.cpp
@@ -48,9 +48,13 @@
     return false;
 
   SmallVector<CallInst *, 8> ToLower;
-  for (auto &I : instructions(F))
-    if (isGuard(&I))
-      ToLower.push_back(cast<CallInst>(&I));
+  // Traverse through the users of GuardDecl.
+  // This is presumably cheaper than traversing all instructions in the
+  // function.
+  for (auto *U : GuardDecl->users())
+    if (auto *CI = dyn_cast<CallInst>(U))
+      if (CI->getFunction() == &F)
+        ToLower.push_back(CI);
 
   if (ToLower.empty())
     return false;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D123546.422033.patch
Type: text/x-patch
Size: 1580 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220411/4a9ab71c/attachment.bin>


More information about the llvm-commits mailing list