mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
Add helpers for checking if a value is a target boolean constant.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@205335 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6b10f3a87d
commit
1ff5f1a061
@ -1934,6 +1934,14 @@ public:
|
||||
void CommitTargetLoweringOpt(const TargetLoweringOpt &TLO);
|
||||
};
|
||||
|
||||
/// Return if the N is a constant or constant vector equal to the true value
|
||||
/// from getBooleanContents().
|
||||
bool isConstTrueVal(const SDNode *N) const;
|
||||
|
||||
/// Return if the N is a constant or constant vector equal to the false value
|
||||
/// from getBooleanContents().
|
||||
bool isConstFalseVal(const SDNode *N) const;
|
||||
|
||||
/// Try to simplify a setcc built with the specified operands and cc. If it is
|
||||
/// unable to simplify it, return a null SDValue.
|
||||
SDValue SimplifySetCC(EVT VT, SDValue N0, SDValue N1,
|
||||
|
@ -1117,6 +1117,54 @@ static bool ValueHasExactlyOneBitSet(SDValue Val, const SelectionDAG &DAG) {
|
||||
(KnownOne.countPopulation() == 1);
|
||||
}
|
||||
|
||||
bool TargetLowering::isConstTrueVal(const SDNode *N) const {
|
||||
if (!N)
|
||||
return false;
|
||||
|
||||
bool IsVec = false;
|
||||
const ConstantSDNode *CN = dyn_cast<ConstantSDNode>(N);
|
||||
if (!CN) {
|
||||
const BuildVectorSDNode *BV = dyn_cast<BuildVectorSDNode>(N);
|
||||
if (!BV)
|
||||
return false;
|
||||
|
||||
IsVec = true;
|
||||
CN = BV->getConstantSplatValue();
|
||||
}
|
||||
|
||||
switch (getBooleanContents(IsVec)) {
|
||||
case UndefinedBooleanContent:
|
||||
return CN->getAPIntValue()[0];
|
||||
case ZeroOrOneBooleanContent:
|
||||
return CN->isOne();
|
||||
case ZeroOrNegativeOneBooleanContent:
|
||||
return CN->isAllOnesValue();
|
||||
}
|
||||
|
||||
llvm_unreachable("Invalid boolean contents");
|
||||
}
|
||||
|
||||
bool TargetLowering::isConstFalseVal(const SDNode *N) const {
|
||||
if (!N)
|
||||
return false;
|
||||
|
||||
bool IsVec = false;
|
||||
const ConstantSDNode *CN = dyn_cast<ConstantSDNode>(N);
|
||||
if (!CN) {
|
||||
const BuildVectorSDNode *BV = dyn_cast<BuildVectorSDNode>(N);
|
||||
if (!BV)
|
||||
return false;
|
||||
|
||||
IsVec = true;
|
||||
CN = BV->getConstantSplatValue();
|
||||
}
|
||||
|
||||
if (getBooleanContents(IsVec) == UndefinedBooleanContent)
|
||||
return !CN->getAPIntValue()[0];
|
||||
|
||||
return CN->isNullValue();
|
||||
}
|
||||
|
||||
/// SimplifySetCC - Try to simplify a setcc built with the specified operands
|
||||
/// and cc. If it is unable to simplify it, return a null SDValue.
|
||||
SDValue
|
||||
|
Loading…
Reference in New Issue
Block a user