mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-15 22:28:18 +00:00
[AArch64 NEON] Fix pattern match failed on FP_ROUND from v1f128 to v1f64.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200109 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -541,6 +541,7 @@ private:
|
|||||||
SDValue ScalarizeVecOp_CONCAT_VECTORS(SDNode *N);
|
SDValue ScalarizeVecOp_CONCAT_VECTORS(SDNode *N);
|
||||||
SDValue ScalarizeVecOp_EXTRACT_VECTOR_ELT(SDNode *N);
|
SDValue ScalarizeVecOp_EXTRACT_VECTOR_ELT(SDNode *N);
|
||||||
SDValue ScalarizeVecOp_STORE(StoreSDNode *N, unsigned OpNo);
|
SDValue ScalarizeVecOp_STORE(StoreSDNode *N, unsigned OpNo);
|
||||||
|
SDValue ScalarizeVecOp_FP_ROUND(SDNode *N, unsigned OpNo);
|
||||||
|
|
||||||
//===--------------------------------------------------------------------===//
|
//===--------------------------------------------------------------------===//
|
||||||
// Vector Splitting Support: LegalizeVectorTypes.cpp
|
// Vector Splitting Support: LegalizeVectorTypes.cpp
|
||||||
|
@@ -384,6 +384,9 @@ bool DAGTypeLegalizer::ScalarizeVectorOperand(SDNode *N, unsigned OpNo) {
|
|||||||
case ISD::STORE:
|
case ISD::STORE:
|
||||||
Res = ScalarizeVecOp_STORE(cast<StoreSDNode>(N), OpNo);
|
Res = ScalarizeVecOp_STORE(cast<StoreSDNode>(N), OpNo);
|
||||||
break;
|
break;
|
||||||
|
case ISD::FP_ROUND:
|
||||||
|
Res = ScalarizeVecOp_FP_ROUND(N, OpNo);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -467,6 +470,15 @@ SDValue DAGTypeLegalizer::ScalarizeVecOp_STORE(StoreSDNode *N, unsigned OpNo){
|
|||||||
N->getOriginalAlignment(), N->getTBAAInfo());
|
N->getOriginalAlignment(), N->getTBAAInfo());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// ScalarizeVecOp_FP_ROUND - If the value to round is a vector that needs
|
||||||
|
/// to be scalarized, it must be <1 x ty>. Convert the element instead.
|
||||||
|
SDValue DAGTypeLegalizer::ScalarizeVecOp_FP_ROUND(SDNode *N, unsigned OpNo) {
|
||||||
|
SDValue Elt = GetScalarizedVector(N->getOperand(0));
|
||||||
|
SDValue Res = DAG.getNode(ISD::FP_ROUND, SDLoc(N),
|
||||||
|
N->getValueType(0).getVectorElementType(), Elt,
|
||||||
|
N->getOperand(1));
|
||||||
|
return DAG.getNode(ISD::SCALAR_TO_VECTOR, SDLoc(N), N->getValueType(0), Res);
|
||||||
|
}
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// Result Vector Splitting
|
// Result Vector Splitting
|
||||||
|
Reference in New Issue
Block a user