]> granicus.if.org Git - llvm/commitdiff
[LoopDataPrefetch][AArch64FalkorHWPFFix] Preserve ScalarEvolution
authorGeoff Berry <gberry@codeaurora.org>
Wed, 16 Aug 2017 19:03:16 +0000 (19:03 +0000)
committerGeoff Berry <gberry@codeaurora.org>
Wed, 16 Aug 2017 19:03:16 +0000 (19:03 +0000)
Summary:
Mark LoopDataPrefetch and AArch64FalkorHWPFFix passes as preserving
ScalarEvolution since they do not alter loop structure and should not
alter any SCEV values (though LoopDataPrefetch may introduce new
instructions that won't have cached SCEV values yet).

This can result in slight code differences, mainly w.r.t. nsw/nuw flags
on SCEVs, since these are computed somewhat lazily when a zext/sext
instruction is encountered.  As a result, passes after the modified
passes may see SCEVs with more nsw/nuw flags present.

Reviewers: sanjoy, anemet

Subscribers: aemerson, rengolin, mzolotukhin, javed.absar, kristof.beyls, mcrosier, llvm-commits

Differential Revision: https://reviews.llvm.org/D36716

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@311032 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/AArch64/AArch64FalkorHWPFFix.cpp
lib/Transforms/Scalar/LoopDataPrefetch.cpp

index 4c429c76c3b379926c0acdee113c696446de6223..3dd82f648b1b74e7c384c709acbe57555a9bd130 100644 (file)
@@ -92,9 +92,7 @@ public:
     AU.addRequired<LoopInfoWrapperPass>();
     AU.addPreserved<LoopInfoWrapperPass>();
     AU.addRequired<ScalarEvolutionWrapperPass>();
-    // FIXME: For some reason, preserving SE here breaks LSR (even if
-    // this pass changes nothing).
-    // AU.addPreserved<ScalarEvolutionWrapperPass>();
+    AU.addPreserved<ScalarEvolutionWrapperPass>();
   }
 
   bool runOnFunction(Function &F) override;
index d09af32a99fd9b988275709dc72699b8d485daa1..42dc38c37e0e47d50e7ab3a11c476a156fb173d4 100644 (file)
@@ -120,9 +120,7 @@ public:
     AU.addPreserved<LoopInfoWrapperPass>();
     AU.addRequired<OptimizationRemarkEmitterWrapperPass>();
     AU.addRequired<ScalarEvolutionWrapperPass>();
-    // FIXME: For some reason, preserving SE here breaks LSR (even if
-    // this pass changes nothing).
-    // AU.addPreserved<ScalarEvolutionWrapperPass>();
+    AU.addPreserved<ScalarEvolutionWrapperPass>();
     AU.addRequired<TargetTransformInfoWrapperPass>();
   }