diff options
| author | Tim Northover <tnorthover@apple.com> | 2014-05-12 14:13:17 +0000 |
|---|---|---|
| committer | Tim Northover <tnorthover@apple.com> | 2014-05-12 14:13:17 +0000 |
| commit | 2625a993f926878c43e5dd5832f8d5405777fae1 (patch) | |
| tree | d81fa7f25ec1e73622327e74c7242e2a37f60ede /llvm/lib/Target/ARM64/ARM64ISelDAGToDAG.cpp | |
| parent | 3dd8ef6b4948726b9d3473fb70152ed9085337d3 (diff) | |
| download | bcm5719-llvm-2625a993f926878c43e5dd5832f8d5405777fae1.tar.gz bcm5719-llvm-2625a993f926878c43e5dd5832f8d5405777fae1.zip | |
ARM64: merge "extend" and "shift" addressing-mode enums.
In terms of assembly, these have too much overlap to be neatly modelled as
disjoint classes: in many cases "lsl" is an acceptable alternative to either
"uxtw" or "uxtx".
llvm-svn: 208563
Diffstat (limited to 'llvm/lib/Target/ARM64/ARM64ISelDAGToDAG.cpp')
| -rw-r--r-- | llvm/lib/Target/ARM64/ARM64ISelDAGToDAG.cpp | 42 |
1 files changed, 21 insertions, 21 deletions
diff --git a/llvm/lib/Target/ARM64/ARM64ISelDAGToDAG.cpp b/llvm/lib/Target/ARM64/ARM64ISelDAGToDAG.cpp index f216f79255e..050663d9812 100644 --- a/llvm/lib/Target/ARM64/ARM64ISelDAGToDAG.cpp +++ b/llvm/lib/Target/ARM64/ARM64ISelDAGToDAG.cpp @@ -300,10 +300,10 @@ bool ARM64DAGToDAGISel::SelectNegArithImmed(SDValue N, SDValue &Val, /// getShiftTypeForNode - Translate a shift node to the corresponding /// ShiftType value. -static ARM64_AM::ShiftType getShiftTypeForNode(SDValue N) { +static ARM64_AM::ShiftExtendType getShiftTypeForNode(SDValue N) { switch (N.getOpcode()) { default: - return ARM64_AM::InvalidShift; + return ARM64_AM::InvalidShiftExtend; case ISD::SHL: return ARM64_AM::LSL; case ISD::SRL: @@ -331,8 +331,8 @@ bool ARM64DAGToDAGISel::isWorthFolding(SDValue V) const { /// supported. bool ARM64DAGToDAGISel::SelectShiftedRegister(SDValue N, bool AllowROR, SDValue &Reg, SDValue &Shift) { - ARM64_AM::ShiftType ShType = getShiftTypeForNode(N); - if (ShType == ARM64_AM::InvalidShift) + ARM64_AM::ShiftExtendType ShType = getShiftTypeForNode(N); + if (ShType == ARM64_AM::InvalidShiftExtend) return false; if (!AllowROR && ShType == ARM64_AM::ROR) return false; @@ -352,8 +352,8 @@ bool ARM64DAGToDAGISel::SelectShiftedRegister(SDValue N, bool AllowROR, /// getExtendTypeForNode - Translate an extend node to the corresponding /// ExtendType value. -static ARM64_AM::ExtendType getExtendTypeForNode(SDValue N, - bool IsLoadStore = false) { +static ARM64_AM::ShiftExtendType +getExtendTypeForNode(SDValue N, bool IsLoadStore = false) { if (N.getOpcode() == ISD::SIGN_EXTEND || N.getOpcode() == ISD::SIGN_EXTEND_INREG) { EVT SrcVT; @@ -371,7 +371,7 @@ static ARM64_AM::ExtendType getExtendTypeForNode(SDValue N, else if (SrcVT == MVT::i64) return ARM64_AM::SXTX; - return ARM64_AM::InvalidExtend; + return ARM64_AM::InvalidShiftExtend; } else if (N.getOpcode() == ISD::ZERO_EXTEND || N.getOpcode() == ISD::ANY_EXTEND) { EVT SrcVT = N.getOperand(0).getValueType(); @@ -384,26 +384,26 @@ static ARM64_AM::ExtendType getExtendTypeForNode(SDValue N, else if (SrcVT == MVT::i64) return ARM64_AM::UXTX; - return ARM64_AM::InvalidExtend; + return ARM64_AM::InvalidShiftExtend; } else if (N.getOpcode() == ISD::AND) { ConstantSDNode *CSD = dyn_cast<ConstantSDNode>(N.getOperand(1)); if (!CSD) - return ARM64_AM::InvalidExtend; + return ARM64_AM::InvalidShiftExtend; uint64_t AndMask = CSD->getZExtValue(); switch (AndMask) { default: - return ARM64_AM::InvalidExtend; + return ARM64_AM::InvalidShiftExtend; case 0xFF: - return !IsLoadStore ? ARM64_AM::UXTB : ARM64_AM::InvalidExtend; + return !IsLoadStore ? ARM64_AM::UXTB : ARM64_AM::InvalidShiftExtend; case 0xFFFF: - return !IsLoadStore ? ARM64_AM::UXTH : ARM64_AM::InvalidExtend; + return !IsLoadStore ? ARM64_AM::UXTH : ARM64_AM::InvalidShiftExtend; case 0xFFFFFFFF: return ARM64_AM::UXTW; } } - return ARM64_AM::InvalidExtend; + return ARM64_AM::InvalidShiftExtend; } // Helper for SelectMLAV64LaneV128 - Recognize high lane extracts. @@ -536,7 +536,7 @@ SDNode *ARM64DAGToDAGISel::SelectMULLV64LaneV128(unsigned IntNo, SDNode *N) { bool ARM64DAGToDAGISel::SelectArithExtendedRegister(SDValue N, SDValue &Reg, SDValue &Shift) { unsigned ShiftVal = 0; - ARM64_AM::ExtendType Ext; + ARM64_AM::ShiftExtendType Ext; if (N.getOpcode() == ISD::SHL) { ConstantSDNode *CSD = dyn_cast<ConstantSDNode>(N.getOperand(1)); @@ -547,13 +547,13 @@ bool ARM64DAGToDAGISel::SelectArithExtendedRegister(SDValue N, SDValue &Reg, return false; Ext = getExtendTypeForNode(N.getOperand(0)); - if (Ext == ARM64_AM::InvalidExtend) + if (Ext == ARM64_AM::InvalidShiftExtend) return false; Reg = N.getOperand(0).getOperand(0); } else { Ext = getExtendTypeForNode(N); - if (Ext == ARM64_AM::InvalidExtend) + if (Ext == ARM64_AM::InvalidShiftExtend) return false; Reg = N.getOperand(0); @@ -692,8 +692,8 @@ bool ARM64DAGToDAGISel::SelectExtendedSHL(SDValue N, unsigned Size, ConstantSDNode *CSD = dyn_cast<ConstantSDNode>(N.getOperand(1)); if (CSD && (CSD->getZExtValue() & 0x7) == CSD->getZExtValue()) { - ARM64_AM::ExtendType Ext = getExtendTypeForNode(N.getOperand(0), true); - if (Ext == ARM64_AM::InvalidExtend) { + ARM64_AM::ShiftExtendType Ext = getExtendTypeForNode(N.getOperand(0), true); + if (Ext == ARM64_AM::InvalidShiftExtend) { Ext = ARM64_AM::UXTX; Offset = WidenIfNeeded(CurDAG, N.getOperand(0)); } else { @@ -753,10 +753,10 @@ bool ARM64DAGToDAGISel::SelectAddrModeRO(SDValue N, unsigned Size, return true; } - ARM64_AM::ExtendType Ext = ARM64_AM::UXTX; + ARM64_AM::ShiftExtendType Ext = ARM64_AM::UXTX; // Try to match an unshifted extend on the LHS. if (IsExtendedRegisterWorthFolding && - (Ext = getExtendTypeForNode(LHS, true)) != ARM64_AM::InvalidExtend) { + (Ext = getExtendTypeForNode(LHS, true)) != ARM64_AM::InvalidShiftExtend) { Base = RHS; Offset = WidenIfNeeded(CurDAG, LHS.getOperand(0)); Imm = CurDAG->getTargetConstant(ARM64_AM::getMemExtendImm(Ext, false), @@ -767,7 +767,7 @@ bool ARM64DAGToDAGISel::SelectAddrModeRO(SDValue N, unsigned Size, // Try to match an unshifted extend on the RHS. if (IsExtendedRegisterWorthFolding && - (Ext = getExtendTypeForNode(RHS, true)) != ARM64_AM::InvalidExtend) { + (Ext = getExtendTypeForNode(RHS, true)) != ARM64_AM::InvalidShiftExtend) { Base = LHS; Offset = WidenIfNeeded(CurDAG, RHS.getOperand(0)); Imm = CurDAG->getTargetConstant(ARM64_AM::getMemExtendImm(Ext, false), |

