mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 19:12:56 +02:00
[ARM] Compute known bits for ARMISD::CMOV
We can conservatively know that CMOV's known bits are the intersection of known bits for each of its operands. This helps PerformCMOVToBFICombine find more opportunities. I tried hard to create a testcase for this and failed - we have to sufficiently confuse DAG.computeKnownBits which can see through all the cheap tricks I tried to narrow my larger testcase down :( This code is actually exercised in CodeGen/ARM/bfi.ll, there's just no functional difference because DAG.computeKnownBits gets the right answer in that case. llvm-svn: 252168
This commit is contained in:
parent
7b3b9d960d
commit
eb33c2d7ba
@ -10243,6 +10243,16 @@ static void computeKnownBits(SelectionDAG &DAG, SDValue Op, APInt &KnownZero,
|
|||||||
KnownOne &= Mask;
|
KnownOne &= Mask;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (Op.getOpcode() == ARMISD::CMOV) {
|
||||||
|
APInt KZ2(KnownZero.getBitWidth(), 0);
|
||||||
|
APInt KO2(KnownOne.getBitWidth(), 0);
|
||||||
|
computeKnownBits(DAG, Op.getOperand(1), KnownZero, KnownOne);
|
||||||
|
computeKnownBits(DAG, Op.getOperand(2), KZ2, KO2);
|
||||||
|
|
||||||
|
KnownZero &= KZ2;
|
||||||
|
KnownOne &= KO2;
|
||||||
|
return;
|
||||||
|
}
|
||||||
return DAG.computeKnownBits(Op, KnownZero, KnownOne);
|
return DAG.computeKnownBits(Op, KnownZero, KnownOne);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user