BBVectorize: Don't make calls to SE when the result is unused.
authorHal Finkel <hfinkel@anl.gov>
Tue, 30 Oct 2012 18:55:49 +0000 (18:55 +0000)
committerHal Finkel <hfinkel@anl.gov>
Tue, 30 Oct 2012 18:55:49 +0000 (18:55 +0000)
SE was being called during the instruction-fusion process (when the result
is unreliable, and thus ignored). No functionality change is intended.

llvm-svn: 167037

llvm/lib/Transforms/Vectorize/BBVectorize.cpp

index 7486af6..dafec2c 100644 (file)
@@ -547,7 +547,7 @@ namespace {
     bool getPairPtrInfo(Instruction *I, Instruction *J,
         Value *&IPtr, Value *&JPtr, unsigned &IAlignment, unsigned &JAlignment,
         unsigned &IAddressSpace, unsigned &JAddressSpace,
-        int64_t &OffsetInElmts) {
+        int64_t &OffsetInElmts, bool ComputeOffset = true) {
       OffsetInElmts = 0;
       if (LoadInst *LI = dyn_cast<LoadInst>(I)) {
         LoadInst *LJ = cast<LoadInst>(J);
@@ -567,6 +567,9 @@ namespace {
         JAddressSpace = SJ->getPointerAddressSpace();
       }
 
+      if (!ComputeOffset)
+        return true;
+
       const SCEV *IPtrSCEV = SE->getSCEV(IPtr);
       const SCEV *JPtrSCEV = SE->getSCEV(JPtr);
 
@@ -1677,7 +1680,7 @@ namespace {
     // been precomputed (OffsetInElmts must be unused here).
     (void) getPairPtrInfo(I, J, IPtr, JPtr, IAlignment, JAlignment,
                           IAddressSpace, JAddressSpace,
-                          OffsetInElmts);
+                          OffsetInElmts, false);
 
     // The pointer value is taken to be the one with the lowest offset.
     Value *VPtr;