[PATCH] D107016: [DebugInfo][LoopStrengthReduction] Ensure restoration of cached DIExpression when using SCEV-based salvaging

Chris Jackson via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 16 06:49:04 PDT 2021


chrisjackson updated this revision to Diff 366614.
chrisjackson added a comment.

Addressed reviewer comments.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D107016/new/

https://reviews.llvm.org/D107016

Files:
  llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp


Index: llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp
===================================================================
--- llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp
+++ llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp
@@ -6194,15 +6194,17 @@
       // Some DVIs that were single location-op when cached are now multi-op,
       // due to LSR optimisations. However, multi-op salvaging is not yet
       // supported by SCEV salvaging. But, we can attempt a salvage by restoring
-      // the pre-LSR single-op expression.
+      // the pre-LSR single-op location and expression.
       if (DVIRec.DVI->hasArgList()) {
         if (!DVIRec.DVI->getVariableLocationOp(0))
           continue;
         llvm::Type *Ty = DVIRec.DVI->getVariableLocationOp(0)->getType();
         DVIRec.DVI->setRawLocation(
             llvm::ValueAsMetadata::get(UndefValue::get(Ty)));
-        DVIRec.DVI->setExpression(DVIRec.Expr);
       }
+      // LSR may have modified the expression during a salvage attempt, so
+      // restore to the expression that corresponds to the cached SCEV.
+      DVIRec.DVI->setExpression(DVIRec.Expr);
 
       Changed |= RewriteDVIUsingIterCount(DVIRec, IterCountExpr, SE);
     }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D107016.366614.patch
Type: text/x-patch
Size: 1215 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210816/ccc12caf/attachment.bin>


More information about the llvm-commits mailing list