[llvm-commits] CVS: llvm/lib/Transforms/IPO/SimplifyLibCalls.cpp
Evan Cheng
evan.cheng at apple.com
Thu Jun 15 21:52:42 PDT 2006
Changes in directory llvm/lib/Transforms/IPO:
SimplifyLibCalls.cpp updated: 1.64 -> 1.65
---
Log message:
Simplify fprintf(file, "%s", str) to fputs(str, file).
---
Diffs of the changes: (+36 -16)
SimplifyLibCalls.cpp | 52 +++++++++++++++++++++++++++++++++++----------------
1 files changed, 36 insertions(+), 16 deletions(-)
Index: llvm/lib/Transforms/IPO/SimplifyLibCalls.cpp
diff -u llvm/lib/Transforms/IPO/SimplifyLibCalls.cpp:1.64 llvm/lib/Transforms/IPO/SimplifyLibCalls.cpp:1.65
--- llvm/lib/Transforms/IPO/SimplifyLibCalls.cpp:1.64 Fri May 12 18:35:26 2006
+++ llvm/lib/Transforms/IPO/SimplifyLibCalls.cpp Thu Jun 15 23:52:30 2006
@@ -229,6 +229,15 @@
return fputc_func;
}
+ /// @brief Return a Function* for the fputs libcall
+ Function* get_fputs(const Type* FILEptr_type) {
+ if (!fputs_func)
+ fputs_func = M->getOrInsertFunction("fputs", Type::IntTy,
+ PointerType::get(Type::SByteTy),
+ FILEptr_type, NULL);
+ return fputs_func;
+ }
+
/// @brief Return a Function* for the fwrite libcall
Function* get_fwrite(const Type* FILEptr_type) {
if (!fwrite_func)
@@ -310,6 +319,7 @@
M = &mod;
TD = &getAnalysis<TargetData>();
fputc_func = 0;
+ fputs_func = 0;
fwrite_func = 0;
memcpy_func = 0;
memchr_func = 0;
@@ -325,7 +335,7 @@
private:
/// Caches for function pointers.
- Function *fputc_func, *fwrite_func;
+ Function *fputc_func, *fputs_func, *fwrite_func;
Function *memcpy_func, *memchr_func;
Function* sqrt_func;
Function *strcpy_func, *strlen_func;
@@ -1340,21 +1350,31 @@
{
uint64_t len = 0;
ConstantArray* CA = 0;
- if (!getConstantStringLength(ci->getOperand(3), len, &CA))
- return false;
-
- // fprintf(file,"%s",str) -> fwrite(fmt,strlen(fmt),1,file)
- const Type* FILEptr_type = ci->getOperand(1)->getType();
- Function* fwrite_func = SLC.get_fwrite(FILEptr_type);
- if (!fwrite_func)
- return false;
- std::vector<Value*> args;
- args.push_back(CastToCStr(ci->getOperand(3), *ci));
- args.push_back(ConstantUInt::get(SLC.getIntPtrType(),len));
- args.push_back(ConstantUInt::get(SLC.getIntPtrType(),1));
- args.push_back(ci->getOperand(1));
- new CallInst(fwrite_func,args,ci->getName(),ci);
- ci->replaceAllUsesWith(ConstantSInt::get(Type::IntTy,len));
+ if (getConstantStringLength(ci->getOperand(3), len, &CA)) {
+ // fprintf(file,"%s",str) -> fwrite(str,strlen(str),1,file)
+ const Type* FILEptr_type = ci->getOperand(1)->getType();
+ Function* fwrite_func = SLC.get_fwrite(FILEptr_type);
+ if (!fwrite_func)
+ return false;
+ std::vector<Value*> args;
+ args.push_back(CastToCStr(ci->getOperand(3), *ci));
+ args.push_back(ConstantUInt::get(SLC.getIntPtrType(),len));
+ args.push_back(ConstantUInt::get(SLC.getIntPtrType(),1));
+ args.push_back(ci->getOperand(1));
+ new CallInst(fwrite_func,args,ci->getName(),ci);
+ ci->replaceAllUsesWith(ConstantSInt::get(Type::IntTy,len));
+ } else {
+ // fprintf(file,"%s",str) -> fputs(str,file)
+ const Type* FILEptr_type = ci->getOperand(1)->getType();
+ Function* fputs_func = SLC.get_fputs(FILEptr_type);
+ if (!fputs_func)
+ return false;
+ std::vector<Value*> args;
+ args.push_back(ci->getOperand(3));
+ args.push_back(ci->getOperand(1));
+ new CallInst(fputs_func,args,ci->getName(),ci);
+ ci->replaceAllUsesWith(ConstantSInt::get(Type::IntTy,len));
+ }
break;
}
case 'c':
More information about the llvm-commits
mailing list