mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-24 22:24:54 +00:00
instcombine: Migrate puts optimizations
This patch migrates the puts optimizations from the simplify-libcalls pass into the instcombine library call simplifier. All the simplifiers from simplify-libcalls have now been migrated to instcombine. Yay! Just a few other bits to migrate (prototype attribute inference and a few statistics) and simplify-libcalls can finally be put to rest. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@168925 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -81,41 +81,6 @@ public:
|
||||
} // End anonymous namespace.
|
||||
|
||||
|
||||
namespace {
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Formatting and IO Optimizations
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
//===---------------------------------------===//
|
||||
// 'puts' Optimizations
|
||||
|
||||
struct PutsOpt : public LibCallOptimization {
|
||||
virtual Value *CallOptimizer(Function *Callee, CallInst *CI, IRBuilder<> &B) {
|
||||
// Require one fixed pointer argument and an integer/void result.
|
||||
FunctionType *FT = Callee->getFunctionType();
|
||||
if (FT->getNumParams() < 1 || !FT->getParamType(0)->isPointerTy() ||
|
||||
!(FT->getReturnType()->isIntegerTy() ||
|
||||
FT->getReturnType()->isVoidTy()))
|
||||
return 0;
|
||||
|
||||
// Check for a constant string.
|
||||
StringRef Str;
|
||||
if (!getConstantStringInfo(CI->getArgOperand(0), Str))
|
||||
return 0;
|
||||
|
||||
if (Str.empty() && CI->use_empty()) {
|
||||
// puts("") -> putchar('\n')
|
||||
Value *Res = EmitPutChar(B.getInt32('\n'), B, TD, TLI);
|
||||
if (CI->use_empty() || !Res) return Res;
|
||||
return B.CreateIntCast(Res, CI->getType(), true);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
} // end anonymous namespace.
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// SimplifyLibCalls Pass Implementation
|
||||
//===----------------------------------------------------------------------===//
|
||||
@@ -127,8 +92,6 @@ namespace {
|
||||
TargetLibraryInfo *TLI;
|
||||
|
||||
StringMap<LibCallOptimization*> Optimizations;
|
||||
// Formatting and IO Optimizations
|
||||
PutsOpt Puts;
|
||||
|
||||
bool Modified; // This is only used by doInitialization.
|
||||
public:
|
||||
@@ -183,8 +146,6 @@ void SimplifyLibCalls::AddOpt(LibFunc::Func F1, LibFunc::Func F2,
|
||||
/// Optimizations - Populate the Optimizations map with all the optimizations
|
||||
/// we know.
|
||||
void SimplifyLibCalls::InitOptimizations() {
|
||||
// Formatting and IO Optimizations
|
||||
Optimizations["puts"] = &Puts;
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user