mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-05 12:31:33 +00:00
If queried as to whether an operation is legal
for a particular MVT, return false if the type is illegal rather than barfing. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52229 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ca9bcb0fda
commit
4c54067f67
@ -295,8 +295,9 @@ public:
|
|||||||
/// isOperationLegal - Return true if the specified operation is legal on this
|
/// isOperationLegal - Return true if the specified operation is legal on this
|
||||||
/// target.
|
/// target.
|
||||||
bool isOperationLegal(unsigned Op, MVT VT) const {
|
bool isOperationLegal(unsigned Op, MVT VT) const {
|
||||||
return getOperationAction(Op, VT) == Legal ||
|
return VT.isSimple() &&
|
||||||
getOperationAction(Op, VT) == Custom;
|
(getOperationAction(Op, VT) == Legal ||
|
||||||
|
getOperationAction(Op, VT) == Custom);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// getLoadXAction - Return how this load with extension should be treated:
|
/// getLoadXAction - Return how this load with extension should be treated:
|
||||||
@ -309,7 +310,7 @@ public:
|
|||||||
"Table isn't big enough!");
|
"Table isn't big enough!");
|
||||||
return (LegalizeAction)((LoadXActions[LType] >> (2*VT.getSimpleVT())) & 3);
|
return (LegalizeAction)((LoadXActions[LType] >> (2*VT.getSimpleVT())) & 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// isLoadXLegal - Return true if the specified load with extension is legal
|
/// isLoadXLegal - Return true if the specified load with extension is legal
|
||||||
/// on this target.
|
/// on this target.
|
||||||
bool isLoadXLegal(unsigned LType, MVT VT) const {
|
bool isLoadXLegal(unsigned LType, MVT VT) const {
|
||||||
@ -317,7 +318,7 @@ public:
|
|||||||
(getLoadXAction(LType, VT) == Legal ||
|
(getLoadXAction(LType, VT) == Legal ||
|
||||||
getLoadXAction(LType, VT) == Custom);
|
getLoadXAction(LType, VT) == Custom);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// getTruncStoreAction - Return how this store with truncation should be
|
/// getTruncStoreAction - Return how this store with truncation should be
|
||||||
/// treated: either it is legal, needs to be promoted to a larger size, needs
|
/// treated: either it is legal, needs to be promoted to a larger size, needs
|
||||||
/// to be expanded to some other code sequence, or the target has a custom
|
/// to be expanded to some other code sequence, or the target has a custom
|
||||||
@ -330,7 +331,7 @@ public:
|
|||||||
return (LegalizeAction)((TruncStoreActions[ValVT.getSimpleVT()] >>
|
return (LegalizeAction)((TruncStoreActions[ValVT.getSimpleVT()] >>
|
||||||
(2*MemVT.getSimpleVT())) & 3);
|
(2*MemVT.getSimpleVT())) & 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// isTruncStoreLegal - Return true if the specified store with truncation is
|
/// isTruncStoreLegal - Return true if the specified store with truncation is
|
||||||
/// legal on this target.
|
/// legal on this target.
|
||||||
bool isTruncStoreLegal(MVT ValVT, MVT MemVT) const {
|
bool isTruncStoreLegal(MVT ValVT, MVT MemVT) const {
|
||||||
@ -355,10 +356,11 @@ public:
|
|||||||
/// isIndexedLoadLegal - Return true if the specified indexed load is legal
|
/// isIndexedLoadLegal - Return true if the specified indexed load is legal
|
||||||
/// on this target.
|
/// on this target.
|
||||||
bool isIndexedLoadLegal(unsigned IdxMode, MVT VT) const {
|
bool isIndexedLoadLegal(unsigned IdxMode, MVT VT) const {
|
||||||
return getIndexedLoadAction(IdxMode, VT) == Legal ||
|
return VT.isSimple() &&
|
||||||
getIndexedLoadAction(IdxMode, VT) == Custom;
|
(getIndexedLoadAction(IdxMode, VT) == Legal ||
|
||||||
|
getIndexedLoadAction(IdxMode, VT) == Custom);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// getIndexedStoreAction - Return how the indexed store should be treated:
|
/// getIndexedStoreAction - Return how the indexed store should be treated:
|
||||||
/// either it is legal, needs to be promoted to a larger size, needs to be
|
/// either it is legal, needs to be promoted to a larger size, needs to be
|
||||||
/// expanded to some other code sequence, or the target has a custom expander
|
/// expanded to some other code sequence, or the target has a custom expander
|
||||||
@ -375,10 +377,11 @@ public:
|
|||||||
/// isIndexedStoreLegal - Return true if the specified indexed load is legal
|
/// isIndexedStoreLegal - Return true if the specified indexed load is legal
|
||||||
/// on this target.
|
/// on this target.
|
||||||
bool isIndexedStoreLegal(unsigned IdxMode, MVT VT) const {
|
bool isIndexedStoreLegal(unsigned IdxMode, MVT VT) const {
|
||||||
return getIndexedStoreAction(IdxMode, VT) == Legal ||
|
return VT.isSimple() &&
|
||||||
getIndexedStoreAction(IdxMode, VT) == Custom;
|
(getIndexedStoreAction(IdxMode, VT) == Legal ||
|
||||||
|
getIndexedStoreAction(IdxMode, VT) == Custom);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// getConvertAction - Return how the conversion should be treated:
|
/// getConvertAction - Return how the conversion should be treated:
|
||||||
/// either it is legal, needs to be promoted to a larger size, needs to be
|
/// either it is legal, needs to be promoted to a larger size, needs to be
|
||||||
/// expanded to some other code sequence, or the target has a custom expander
|
/// expanded to some other code sequence, or the target has a custom expander
|
||||||
@ -395,8 +398,9 @@ public:
|
|||||||
/// isConvertLegal - Return true if the specified conversion is legal
|
/// isConvertLegal - Return true if the specified conversion is legal
|
||||||
/// on this target.
|
/// on this target.
|
||||||
bool isConvertLegal(MVT FromVT, MVT ToVT) const {
|
bool isConvertLegal(MVT FromVT, MVT ToVT) const {
|
||||||
return getConvertAction(FromVT, ToVT) == Legal ||
|
return FromVT.isSimple() && ToVT.isSimple() &&
|
||||||
getConvertAction(FromVT, ToVT) == Custom;
|
(getConvertAction(FromVT, ToVT) == Legal ||
|
||||||
|
getConvertAction(FromVT, ToVT) == Custom);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// getTypeToPromoteTo - If the action for this operation is to promote, this
|
/// getTypeToPromoteTo - If the action for this operation is to promote, this
|
||||||
|
Loading…
Reference in New Issue
Block a user