summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp7
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:
OpenPOWER on IntegriCloud