Use TopTTI->getGEPCost from within getUserCost
authorHal Finkel <hfinkel@anl.gov>
Tue, 1 Apr 2014 18:50:06 +0000 (18:50 +0000)
committerHal Finkel <hfinkel@anl.gov>
Tue, 1 Apr 2014 18:50:06 +0000 (18:50 +0000)
The implementation of getUserCost had duplicated (and hard-coded) the default
logic in getGEPCost. Instead, it is better to use getGEPCost directly, which
limits the default logic to the implementation of one function, and allows
targets to override the behavior.

No functionality change intended.

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

lib/Analysis/TargetTransformInfo.cpp

index 75d053c6891cc50936de07701b0968b375d683e1..04d09f1372a93abf5cc1dac0f9433658aeca0442 100644 (file)
@@ -415,10 +415,10 @@ struct NoTTI final : ImmutablePass, TargetTransformInfo {
     if (isa<PHINode>(U))
       return TCC_Free; // Model all PHI nodes as free.
 
-    if (const GEPOperator *GEP = dyn_cast<GEPOperator>(U))
-      // In the basic model we just assume that all-constant GEPs will be
-      // folded into their uses via addressing modes.
-      return GEP->hasAllConstantIndices() ? TCC_Free : TCC_Basic;
+    if (const GEPOperator *GEP = dyn_cast<GEPOperator>(U)) {
+      SmallVector<const Value *, 4> Indices(GEP->idx_begin(), GEP->idx_end());
+      return TopTTI->getGEPCost(GEP->getPointerOperand(), Indices);
+    }
 
     if (ImmutableCallSite CS = U) {
       const Function *F = CS.getCalledFunction();