Index: llvm/trunk/lib/CodeGen/ExpandMemCmp.cpp =================================================================== --- llvm/trunk/lib/CodeGen/ExpandMemCmp.cpp +++ llvm/trunk/lib/CodeGen/ExpandMemCmp.cpp @@ -36,6 +36,14 @@ cl::desc("The number of loads per basic block for inline expansion of " "memcmp that is only being compared against zero.")); +static cl::opt MaxLoadsPerMemcmp( + "max-loads-per-memcmp", cl::Hidden, + cl::desc("Set maximum number of loads used in expanded memcmp")); + +static cl::opt MaxLoadsPerMemcmpOptSize( + "max-loads-per-memcmp-opt-size", cl::Hidden, + cl::desc("Set maximum number of loads used in expanded memcmp for -Os/Oz")); + namespace { @@ -741,8 +749,13 @@ const auto *const Options = TTI->enableMemCmpExpansion(IsUsedForZeroCmp); if (!Options) return false; - const unsigned MaxNumLoads = - TLI->getMaxExpandSizeMemcmp(CI->getFunction()->hasOptSize()); + const unsigned MaxNumLoads = CI->getFunction()->hasOptSize() + ? (MaxLoadsPerMemcmpOptSize.getNumOccurrences() + ? MaxLoadsPerMemcmpOptSize + : TLI->getMaxExpandSizeMemcmp(true)) + : (MaxLoadsPerMemcmp.getNumOccurrences() + ? MaxLoadsPerMemcmp + : TLI->getMaxExpandSizeMemcmp(false)); unsigned NumLoadsPerBlock = MemCmpEqZeroNumLoadsPerBlock.getNumOccurrences() ? MemCmpEqZeroNumLoadsPerBlock