diff --git a/llvm/include/llvm/CodeGen/BasicTTIImpl.h b/llvm/include/llvm/CodeGen/BasicTTIImpl.h index d5c0b83ea6f7..ee755c7890a8 100644 --- a/llvm/include/llvm/CodeGen/BasicTTIImpl.h +++ b/llvm/include/llvm/CodeGen/BasicTTIImpl.h @@ -1121,9 +1121,12 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase { /// Get intrinsic cost based on arguments. unsigned getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA, TTI::TargetCostKind CostKind) { - Intrinsic::ID IID = ICA.getID(); + // Check for generically free intrinsics. + if (BaseT::getIntrinsicInstrCost(ICA, CostKind) == 0) + return 0; // Special case some scalar intrinsics. + Intrinsic::ID IID = ICA.getID(); if (CostKind != TTI::TCK_RecipThroughput) { switch (IID) { default: @@ -1143,9 +1146,6 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase { return BaseT::getIntrinsicInstrCost(ICA, CostKind); } - if (BaseT::getIntrinsicInstrCost(ICA, CostKind) == 0) - return 0; - // TODO: Combine these two logic paths. if (ICA.isTypeBasedOnly()) return getTypeBasedIntrinsicInstrCost(ICA, CostKind);