diff options
-rw-r--r-- | llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp b/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp index 9bba359ce71..c2986951e48 100644 --- a/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp +++ b/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp @@ -1836,6 +1836,11 @@ Value *LibCallSimplifier::optimizeFWrite(CallInst *CI, IRBuilder<> &B) { Value *LibCallSimplifier::optimizeFPuts(CallInst *CI, IRBuilder<> &B) { optimizeErrorReporting(CI, B, 1); + // Don't rewrite fputs to fwrite when optimising for size because fwrite + // requires more arguments and thus extra MOVs are required. + if (CI->getParent()->getParent()->optForSize()) + return nullptr; + // We can't optimize if return value is used. if (!CI->use_empty()) return nullptr; @@ -2056,8 +2061,6 @@ Value *LibCallSimplifier::optimizeCall(CallInst *CI) { case LibFunc::fwrite: return optimizeFWrite(CI, Builder); case LibFunc::fputs: - if (CI->getParent()->getParent()->optForSize()) - return nullptr; return optimizeFPuts(CI, Builder); case LibFunc::log: case LibFunc::log10: |