@@ -15007,55 +15007,13 @@ AArch64TargetLowering::LowerDYNAMIC_STACKALLOC(SDValue Op,
15007
15007
return SDValue();
15008
15008
}
15009
15009
15010
- // When x and y are extended, lower:
15011
- // avgfloor(x, y) -> (x + y) >> 1
15012
- // avgceil(x, y) -> (x + y + 1) >> 1
15013
-
15014
- // Otherwise, lower to:
15015
- // avgfloor(x, y) -> (x >> 1) + (y >> 1) + (x & y & 1)
15016
- // avgceil(x, y) -> (x >> 1) + (y >> 1) + ((x || y) & 1)
15017
15010
SDValue AArch64TargetLowering::LowerAVG(SDValue Op, SelectionDAG &DAG,
15018
15011
unsigned NewOp) const {
15019
15012
if (Subtarget->hasSVE2())
15020
15013
return LowerToPredicatedOp(Op, DAG, NewOp);
15021
15014
15022
- SDLoc dl(Op);
15023
- SDValue OpA = Op->getOperand(0);
15024
- SDValue OpB = Op->getOperand(1);
15025
- EVT VT = Op.getValueType();
15026
- bool IsCeil =
15027
- (Op->getOpcode() == ISD::AVGCEILS || Op->getOpcode() == ISD::AVGCEILU);
15028
- bool IsSigned =
15029
- (Op->getOpcode() == ISD::AVGFLOORS || Op->getOpcode() == ISD::AVGCEILS);
15030
- unsigned ShiftOpc = IsSigned ? ISD::SRA : ISD::SRL;
15031
-
15032
- assert(VT.isScalableVector() && "Only expect to lower scalable vector op!");
15033
-
15034
- auto IsZeroExtended = [&DAG](SDValue &Node) {
15035
- KnownBits Known = DAG.computeKnownBits(Node, 0);
15036
- return Known.Zero.isSignBitSet();
15037
- };
15038
-
15039
- auto IsSignExtended = [&DAG](SDValue &Node) {
15040
- return (DAG.ComputeNumSignBits(Node, 0) > 1);
15041
- };
15042
-
15043
- SDValue ConstantOne = DAG.getConstant(1, dl, VT);
15044
- if ((!IsSigned && IsZeroExtended(OpA) && IsZeroExtended(OpB)) ||
15045
- (IsSigned && IsSignExtended(OpA) && IsSignExtended(OpB))) {
15046
- SDValue Add = DAG.getNode(ISD::ADD, dl, VT, OpA, OpB);
15047
- if (IsCeil)
15048
- Add = DAG.getNode(ISD::ADD, dl, VT, Add, ConstantOne);
15049
- return DAG.getNode(ShiftOpc, dl, VT, Add, ConstantOne);
15050
- }
15051
-
15052
- SDValue ShiftOpA = DAG.getNode(ShiftOpc, dl, VT, OpA, ConstantOne);
15053
- SDValue ShiftOpB = DAG.getNode(ShiftOpc, dl, VT, OpB, ConstantOne);
15054
-
15055
- SDValue tmp = DAG.getNode(IsCeil ? ISD::OR : ISD::AND, dl, VT, OpA, OpB);
15056
- tmp = DAG.getNode(ISD::AND, dl, VT, tmp, ConstantOne);
15057
- SDValue Add = DAG.getNode(ISD::ADD, dl, VT, ShiftOpA, ShiftOpB);
15058
- return DAG.getNode(ISD::ADD, dl, VT, Add, tmp);
15015
+ // Default to expand.
15016
+ return SDValue();
15059
15017
}
15060
15018
15061
15019
SDValue AArch64TargetLowering::LowerVSCALE(SDValue Op,
0 commit comments