mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-01 01:30:36 +00:00
Extend the floating point heuristic to consider NaN checks unlikely.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@142687 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
7102b703bf
commit
675c02b0b9
@ -391,15 +391,28 @@ bool BranchProbabilityAnalysis::calcFloatingPointHeuristics(BasicBlock *BB) {
|
||||
|
||||
Value *Cond = BI->getCondition();
|
||||
FCmpInst *FCmp = dyn_cast<FCmpInst>(Cond);
|
||||
if (!FCmp || !FCmp->isEquality())
|
||||
if (!FCmp)
|
||||
return false;
|
||||
|
||||
bool isProb;
|
||||
if (FCmp->isEquality()) {
|
||||
// f1 == f2 -> Unlikely
|
||||
// f1 != f2 -> Likely
|
||||
isProb = !FCmp->isTrueWhenEqual();
|
||||
} else if (FCmp->getPredicate() == FCmpInst::FCMP_ORD) {
|
||||
// !isnan -> Likely
|
||||
isProb = true;
|
||||
} else if (FCmp->getPredicate() == FCmpInst::FCMP_UNO) {
|
||||
// isnan -> Unlikely
|
||||
isProb = false;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
BasicBlock *Taken = BI->getSuccessor(0);
|
||||
BasicBlock *NonTaken = BI->getSuccessor(1);
|
||||
|
||||
// f1 == f2 -> Unlikely
|
||||
// f1 != f2 -> Likely
|
||||
if (FCmp->isTrueWhenEqual())
|
||||
if (!isProb)
|
||||
std::swap(Taken, NonTaken);
|
||||
|
||||
BP->setEdgeWeight(BB, Taken, FPH_TAKEN_WEIGHT);
|
||||
|
Loading…
x
Reference in New Issue
Block a user