mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-05 13:26:55 +00:00
DCE intrinsic instructions without side effects.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21719 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -373,7 +373,26 @@ Constant *llvm::ConstantFoldCall(Function *F,
|
||||
//
|
||||
|
||||
bool llvm::isInstructionTriviallyDead(Instruction *I) {
|
||||
return I->use_empty() && !I->mayWriteToMemory() && !isa<TerminatorInst>(I);
|
||||
if (!I->use_empty() || isa<TerminatorInst>(I)) return false;
|
||||
|
||||
if (!I->mayWriteToMemory()) return true;
|
||||
|
||||
if (CallInst *CI = dyn_cast<CallInst>(I))
|
||||
if (Function *F = CI->getCalledFunction())
|
||||
switch (F->getIntrinsicID()) {
|
||||
default: break;
|
||||
case Intrinsic::vastart:
|
||||
case Intrinsic::vacopy:
|
||||
case Intrinsic::returnaddress:
|
||||
case Intrinsic::frameaddress:
|
||||
case Intrinsic::isunordered:
|
||||
case Intrinsic::ctpop:
|
||||
case Intrinsic::ctlz:
|
||||
case Intrinsic::cttz:
|
||||
case Intrinsic::sqrt:
|
||||
return true; // These intrinsics have no side effects.
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// dceInstruction - Inspect the instruction at *BBI and figure out if it's
|
||||
|
Reference in New Issue
Block a user