summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
diff options
context:
space:
mode:
authorBalaram Makam <bmakam@codeaurora.org>2016-07-05 20:24:05 +0000
committerBalaram Makam <bmakam@codeaurora.org>2016-07-05 20:24:05 +0000
commitd4acd7ed1093fdf8d12d218212373c761df682c3 (patch)
treef83f626e7c85dc04819e9c60adb9075dc6458f55 /llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
parentbec6543d175670fe962d144c0aafcc9aa168fcb8 (diff)
downloadbcm5719-llvm-d4acd7ed1093fdf8d12d218212373c761df682c3.tar.gz
bcm5719-llvm-d4acd7ed1093fdf8d12d218212373c761df682c3.zip
Revert r259387: "AArch64: Implement missed conditional compare sequences."
This reverts commit r259387 because it inserts illegal code after legalization in some backends where i64 OR type is illegal for example. llvm-svn: 274573
Diffstat (limited to 'llvm/lib/Target/AArch64/AArch64ISelLowering.cpp')
-rw-r--r--llvm/lib/Target/AArch64/AArch64ISelLowering.cpp47
1 files changed, 2 insertions, 45 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
index cbdac8998a4..d7d403234dc 100644
--- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
@@ -138,16 +138,6 @@ AArch64TargetLowering::AArch64TargetLowering(const TargetMachine &TM,
setOperationAction(ISD::XOR, MVT::i32, Custom);
setOperationAction(ISD::XOR, MVT::i64, Custom);
- // Custom lowering hooks are needed for OR
- // to fold it into CCMP.
- setOperationAction(ISD::OR, MVT::i32, Custom);
- setOperationAction(ISD::OR, MVT::i64, Custom);
-
- // Custom lowering hooks are needed for AND
- // to fold it into CCMP.
- setOperationAction(ISD::AND, MVT::i32, Custom);
- setOperationAction(ISD::AND, MVT::i64, Custom);
-
// Virtually no operation on f128 is legal, but LLVM can't expand them when
// there's a valid register class, so we need custom operations in most cases.
setOperationAction(ISD::FABS, MVT::f128, Expand);
@@ -1622,27 +1612,6 @@ static SDValue getAArch64Cmp(SDValue LHS, SDValue RHS, ISD::CondCode CC,
return Cmp;
}
-// Attempt to form conditional compare sequences for and/or trees
-// with setcc leafs.
-static SDValue tryLowerToAArch64Cmp(SDValue Op, SelectionDAG &DAG) {
- SDValue LHS = Op.getOperand(0);
- SDValue RHS = Op.getOperand(1);
- if ((LHS.getOpcode() != ISD::SETCC) || (RHS.getOpcode() != ISD::SETCC))
- return Op;
-
- bool CanNegate;
- if (!isConjunctionDisjunctionTree(Op, CanNegate))
- return SDValue();
-
- EVT VT = Op.getValueType();
- SDLoc DL(Op);
- SDValue TVal = DAG.getConstant(1, DL, VT);
- SDValue FVal = DAG.getConstant(0, DL, VT);
- SDValue CCVal;
- SDValue Cmp = getAArch64Cmp(Op, FVal, ISD::SETEQ, CCVal, DAG, DL);
- return DAG.getNode(AArch64ISD::CSEL, DL, VT, FVal, TVal, CCVal, Cmp);
-}
-
static std::pair<SDValue, SDValue>
getAArch64XALUOOp(AArch64CC::CondCode &CC, SDValue Op, SelectionDAG &DAG) {
assert((Op.getValueType() == MVT::i32 || Op.getValueType() == MVT::i64) &&
@@ -1764,18 +1733,6 @@ SDValue AArch64TargetLowering::LowerF128Call(SDValue Op, SelectionDAG &DAG,
return makeLibCall(DAG, Call, MVT::f128, Ops, false, SDLoc(Op)).first;
}
-SDValue AArch64TargetLowering::LowerAND(SDValue Op, SelectionDAG &DAG) const {
- if (Op.getValueType().isVector())
- return LowerVectorAND(Op, DAG);
- return tryLowerToAArch64Cmp(Op, DAG);
-}
-
-SDValue AArch64TargetLowering::LowerOR(SDValue Op, SelectionDAG &DAG) const {
- if (Op.getValueType().isVector())
- return LowerVectorOR(Op, DAG);
- return tryLowerToAArch64Cmp(Op, DAG);
-}
-
static SDValue LowerXOR(SDValue Op, SelectionDAG &DAG) {
SDValue Sel = Op.getOperand(0);
SDValue Other = Op.getOperand(1);
@@ -2429,9 +2386,9 @@ SDValue AArch64TargetLowering::LowerOperation(SDValue Op,
case ISD::FCOPYSIGN:
return LowerFCOPYSIGN(Op, DAG);
case ISD::AND:
- return LowerAND(Op, DAG);
+ return LowerVectorAND(Op, DAG);
case ISD::OR:
- return LowerOR(Op, DAG);
+ return LowerVectorOR(Op, DAG);
case ISD::XOR:
return LowerXOR(Op, DAG);
case ISD::PREFETCH:
OpenPOWER on IntegriCloud