mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-27 22:55:15 +00:00
Remove Synthesizable from the Type system; as MMX vector
types are no longer Legal on X86, we don't need it. No functional change. 8499854. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116947 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9b25940474
commit
e93d99cf07
@ -204,13 +204,6 @@ public:
|
||||
return VT.isSimple() && RegClassForVT[VT.getSimpleVT().SimpleTy] != 0;
|
||||
}
|
||||
|
||||
/// isTypeSynthesizable - Return true if it's OK for the compiler to create
|
||||
/// new operations of this type. All Legal types are synthesizable except
|
||||
/// MMX vector types on X86. Non-Legal types are not synthesizable.
|
||||
bool isTypeSynthesizable(EVT VT) const {
|
||||
return isTypeLegal(VT) && Synthesizable[VT.getSimpleVT().SimpleTy];
|
||||
}
|
||||
|
||||
class ValueTypeActionImpl {
|
||||
/// ValueTypeActions - For each value type, keep a LegalizeAction enum
|
||||
/// that indicates how instruction selection should deal with the type.
|
||||
@ -1037,12 +1030,10 @@ protected:
|
||||
/// addRegisterClass - Add the specified register class as an available
|
||||
/// regclass for the specified value type. This indicates the selector can
|
||||
/// handle values of that class natively.
|
||||
void addRegisterClass(EVT VT, TargetRegisterClass *RC,
|
||||
bool isSynthesizable = true) {
|
||||
void addRegisterClass(EVT VT, TargetRegisterClass *RC) {
|
||||
assert((unsigned)VT.getSimpleVT().SimpleTy < array_lengthof(RegClassForVT));
|
||||
AvailableRegClasses.push_back(std::make_pair(VT, RC));
|
||||
RegClassForVT[VT.getSimpleVT().SimpleTy] = RC;
|
||||
Synthesizable[VT.getSimpleVT().SimpleTy] = isSynthesizable;
|
||||
}
|
||||
|
||||
/// findRepresentativeClass - Return the largest legal super-reg register class
|
||||
@ -1674,11 +1665,6 @@ private:
|
||||
/// approximate register pressure.
|
||||
uint8_t RepRegClassCostForVT[MVT::LAST_VALUETYPE];
|
||||
|
||||
/// Synthesizable indicates whether it is OK for the compiler to create new
|
||||
/// operations using this type. All Legal types are Synthesizable except
|
||||
/// MMX types on X86. Non-Legal types are not Synthesizable.
|
||||
bool Synthesizable[MVT::LAST_VALUETYPE];
|
||||
|
||||
/// TransformToType - For any value types we are promoting or expanding, this
|
||||
/// contains the value type that we are changing to. For Expanded types, this
|
||||
/// contains one step of the expand (e.g. i64 -> i32), even if there are
|
||||
|
@ -1293,7 +1293,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_Binary(SDNode *N) {
|
||||
EVT WidenEltVT = WidenVT.getVectorElementType();
|
||||
EVT VT = WidenVT;
|
||||
unsigned NumElts = VT.getVectorNumElements();
|
||||
while (!TLI.isTypeSynthesizable(VT) && NumElts != 1) {
|
||||
while (!TLI.isTypeLegal(VT) && NumElts != 1) {
|
||||
NumElts = NumElts / 2;
|
||||
VT = EVT::getVectorVT(*DAG.getContext(), WidenEltVT, NumElts);
|
||||
}
|
||||
@ -1319,7 +1319,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_Binary(SDNode *N) {
|
||||
unsigned ConcatEnd = 0; // Current ConcatOps index.
|
||||
int Idx = 0; // Current Idx into input vectors.
|
||||
|
||||
// NumElts := greatest synthesizable vector size (at most WidenVT)
|
||||
// NumElts := greatest legal vector size (at most WidenVT)
|
||||
// while (orig. vector has unhandled elements) {
|
||||
// take munches of size NumElts from the beginning and add to ConcatOps
|
||||
// NumElts := next smaller supported vector size or 1
|
||||
@ -1337,7 +1337,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_Binary(SDNode *N) {
|
||||
do {
|
||||
NumElts = NumElts / 2;
|
||||
VT = EVT::getVectorVT(*DAG.getContext(), WidenEltVT, NumElts);
|
||||
} while (!TLI.isTypeSynthesizable(VT) && NumElts != 1);
|
||||
} while (!TLI.isTypeLegal(VT) && NumElts != 1);
|
||||
|
||||
if (NumElts == 1) {
|
||||
for (unsigned i = 0; i != CurNumElts; ++i, ++Idx) {
|
||||
@ -1374,7 +1374,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_Binary(SDNode *N) {
|
||||
do {
|
||||
NextSize *= 2;
|
||||
NextVT = EVT::getVectorVT(*DAG.getContext(), WidenEltVT, NextSize);
|
||||
} while (!TLI.isTypeSynthesizable(NextVT));
|
||||
} while (!TLI.isTypeLegal(NextVT));
|
||||
|
||||
if (!VT.isVector()) {
|
||||
// Scalar type, create an INSERT_VECTOR_ELEMENT of type NextVT
|
||||
@ -1444,7 +1444,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_Convert(SDNode *N) {
|
||||
return DAG.getNode(Opcode, dl, WidenVT, InOp);
|
||||
}
|
||||
|
||||
if (TLI.isTypeSynthesizable(InWidenVT)) {
|
||||
if (TLI.isTypeLegal(InWidenVT)) {
|
||||
// Because the result and the input are different vector types, widening
|
||||
// the result could create a legal type but widening the input might make
|
||||
// it an illegal type that might lead to repeatedly splitting the input
|
||||
@ -1587,7 +1587,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_BIT_CONVERT(SDNode *N) {
|
||||
NewInVT = EVT::getVectorVT(*DAG.getContext(), InVT, NewNumElts);
|
||||
}
|
||||
|
||||
if (TLI.isTypeSynthesizable(NewInVT)) {
|
||||
if (TLI.isTypeLegal(NewInVT)) {
|
||||
// Because the result and the input are different vector types, widening
|
||||
// the result could create a legal type but widening the input might make
|
||||
// it an illegal type that might lead to repeatedly splitting the input
|
||||
@ -1727,7 +1727,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_CONVERT_RNDSAT(SDNode *N) {
|
||||
SatOp, CvtCode);
|
||||
}
|
||||
|
||||
if (TLI.isTypeSynthesizable(InWidenVT)) {
|
||||
if (TLI.isTypeLegal(InWidenVT)) {
|
||||
// Because the result and the input are different vector types, widening
|
||||
// the result could create a legal type but widening the input might make
|
||||
// it an illegal type that might lead to repeatedly splitting the input
|
||||
@ -2054,7 +2054,7 @@ SDValue DAGTypeLegalizer::WidenVecOp_BIT_CONVERT(SDNode *N) {
|
||||
if (InWidenSize % Size == 0 && !VT.isVector() && VT != MVT::x86mmx) {
|
||||
unsigned NewNumElts = InWidenSize / Size;
|
||||
EVT NewVT = EVT::getVectorVT(*DAG.getContext(), VT, NewNumElts);
|
||||
if (TLI.isTypeSynthesizable(NewVT)) {
|
||||
if (TLI.isTypeLegal(NewVT)) {
|
||||
SDValue BitOp = DAG.getNode(ISD::BIT_CONVERT, dl, NewVT, InOp);
|
||||
return DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, VT, BitOp,
|
||||
DAG.getIntPtrConstant(0));
|
||||
@ -2152,7 +2152,7 @@ static EVT FindMemType(SelectionDAG& DAG, const TargetLowering &TLI,
|
||||
unsigned MemVTWidth = MemVT.getSizeInBits();
|
||||
if (MemVT.getSizeInBits() <= WidenEltWidth)
|
||||
break;
|
||||
if (TLI.isTypeSynthesizable(MemVT) && (WidenWidth % MemVTWidth) == 0 &&
|
||||
if (TLI.isTypeLegal(MemVT) && (WidenWidth % MemVTWidth) == 0 &&
|
||||
(MemVTWidth <= Width ||
|
||||
(Align!=0 && MemVTWidth<=AlignInBits && MemVTWidth<=Width+WidenEx))) {
|
||||
RetVT = MemVT;
|
||||
@ -2166,7 +2166,7 @@ static EVT FindMemType(SelectionDAG& DAG, const TargetLowering &TLI,
|
||||
VT >= (unsigned)MVT::FIRST_VECTOR_VALUETYPE; --VT) {
|
||||
EVT MemVT = (MVT::SimpleValueType) VT;
|
||||
unsigned MemVTWidth = MemVT.getSizeInBits();
|
||||
if (TLI.isTypeSynthesizable(MemVT) && WidenEltVT == MemVT.getVectorElementType() &&
|
||||
if (TLI.isTypeLegal(MemVT) && WidenEltVT == MemVT.getVectorElementType() &&
|
||||
(WidenWidth % MemVTWidth) == 0 &&
|
||||
(MemVTWidth <= Width ||
|
||||
(Align!=0 && MemVTWidth<=AlignInBits && MemVTWidth<=Width+WidenEx))) {
|
||||
|
@ -793,7 +793,7 @@ void TargetLowering::computeRegisterProperties() {
|
||||
EVT SVT = (MVT::SimpleValueType)nVT;
|
||||
if (SVT.getVectorElementType() == EltVT &&
|
||||
SVT.getVectorNumElements() > NElts &&
|
||||
isTypeSynthesizable(SVT)) {
|
||||
isTypeLegal(SVT)) {
|
||||
TransformToType[i] = SVT;
|
||||
RegisterTypeForVT[i] = SVT;
|
||||
NumRegistersForVT[i] = 1;
|
||||
|
@ -623,7 +623,7 @@ X86TargetLowering::X86TargetLowering(X86TargetMachine &TM)
|
||||
// FIXME: In order to prevent SSE instructions being expanded to MMX ones
|
||||
// with -msoft-float, disable use of MMX as well.
|
||||
if (!UseSoftFloat && !DisableMMX && Subtarget->hasMMX()) {
|
||||
addRegisterClass(MVT::x86mmx, X86::VR64RegisterClass, false);
|
||||
addRegisterClass(MVT::x86mmx, X86::VR64RegisterClass);
|
||||
// No operations on x86mmx supported, everything uses intrinsics.
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user