mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-18 12:29:21 +00:00
Fold isascii into a simple comparison. This speeds up 197.parser by 7.4%,
bringing the LLC time down to the CBE time. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23521 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d21dd0d8ad
commit
a48bc53cad
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user