Fold isascii into a simple comparison. This speeds up 197.parser by 7.4%,

bringing the LLC time down to the CBE time.

llvm-svn: 23521
This commit is contained in:
Chris Lattner 2005-09-29 06:17:27 +00:00
parent 5de939e791
commit 87ef943a4c
1 changed files with 26 additions and 0 deletions

View File

@ -1745,6 +1745,32 @@ public:
}
} isdigitOptimizer;
struct isasciiOptimization : public LibCallOptimization {
public:
isasciiOptimization()
: LibCallOptimization("isascii", "Number of 'isascii' calls simplified") {}
virtual bool ValidateCalledFunction(const Function *F, SimplifyLibCalls &SLC){
return F->arg_size() == 1 && F->arg_begin()->getType()->isInteger() &&
F->getReturnType()->isInteger();
}
/// @brief Perform the isascii optimization.
virtual bool OptimizeCall(CallInst *CI, SimplifyLibCalls &SLC) {
// isascii(c) -> (unsigned)c < 128
Value *V = CI->getOperand(1);
if (V->getType()->isSigned())
V = new CastInst(V, V->getType()->getUnsignedVersion(), V->getName(), CI);
Value *Cmp = BinaryOperator::createSetLT(V, ConstantUInt::get(V->getType(),
128),
V->getName()+".isascii", CI);
if (Cmp->getType() != CI->getType())
Cmp = new CastInst(Cmp, CI->getType(), Cmp->getName(), CI);
CI->replaceAllUsesWith(Cmp);
CI->eraseFromParent();
return true;
}
} isasciiOptimizer;
/// This LibCallOptimization will simplify calls to the "toascii" library