1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 20:51:52 +01:00

[mips][msa] lowerMSABitClear() should use SelectionDAG::getNOT() instead of using a long-winded equivalent.

Now that getConstant(-1, MVT::v2i64) works correctly on MIPS32 we can use
SelectionDAG::getNOT() to produce the bitmask.

llvm-svn: 194819
This commit is contained in:
Daniel Sanders 2013-11-15 16:02:04 +00:00
parent 081e3ce6c8
commit 57e0657380

View File

@ -1368,24 +1368,12 @@ static SDValue lowerMSABinaryBitImmIntr(SDValue Op, SelectionDAG &DAG,
static SDValue lowerMSABitClear(SDValue Op, SelectionDAG &DAG) {
EVT ResTy = Op->getValueType(0);
EVT ViaVecTy = ResTy == MVT::v2i64 ? MVT::v4i32 : ResTy;
SDLoc DL(Op);
SDValue One = DAG.getConstant(1, ResTy);
SDValue Bit = DAG.getNode(ISD::SHL, DL, ResTy, One, Op->getOperand(2));
SDValue AllOnes = DAG.getConstant(-1, MVT::i32);
SDValue AllOnesOperands[16] = { AllOnes, AllOnes, AllOnes, AllOnes,
AllOnes, AllOnes, AllOnes, AllOnes,
AllOnes, AllOnes, AllOnes, AllOnes,
AllOnes, AllOnes, AllOnes, AllOnes };
AllOnes = DAG.getNode(ISD::BUILD_VECTOR, DL, ViaVecTy, AllOnesOperands,
ViaVecTy.getVectorNumElements());
if (ResTy != ViaVecTy)
AllOnes = DAG.getNode(ISD::BITCAST, DL, ResTy, AllOnes);
Bit = DAG.getNode(ISD::XOR, DL, ResTy, Bit, AllOnes);
return DAG.getNode(ISD::AND, DL, ResTy, Op->getOperand(1), Bit);
return DAG.getNode(ISD::AND, DL, ResTy, Op->getOperand(1),
DAG.getNOT(DL, Bit, ResTy));
}
static SDValue lowerMSABitClearImm(SDValue Op, SelectionDAG &DAG) {