mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-24 07:35:04 +00:00
[CodeGen] Add MVT::isValid to replace manual validity checks. NFC.
Now that we have MVT::FIRST_VALUETYPE (r225362), we can provide a method checking that the MVT is valid, that is, it's in [FIRST_VALUETYPE, LAST_VALUETYPE[. This commit also uses it in a few asserts, that would previously accept invalid MVTs, such as the default constructed -1. In that case, the code following those asserts would do an out-of-bounds array access. Using MVT::isValid, those assertions fail as expected when passed invalid MVTs. It feels clunky to have such a validity checking function, but it's at least better than the alternative of broken manual checks. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225411 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a36b682c17
commit
a84b573c98
@ -167,6 +167,12 @@ namespace llvm {
|
||||
bool operator>=(const MVT& S) const { return SimpleTy >= S.SimpleTy; }
|
||||
bool operator<=(const MVT& S) const { return SimpleTy <= S.SimpleTy; }
|
||||
|
||||
/// isValid - Return true if this is a valid simple valuetype.
|
||||
bool isValid() const {
|
||||
return (SimpleTy >= MVT::FIRST_VALUETYPE &&
|
||||
SimpleTy < MVT::LAST_VALUETYPE);
|
||||
}
|
||||
|
||||
/// isFloatingPoint - Return true if this is a FP, or a vector FP type.
|
||||
bool isFloatingPoint() const {
|
||||
return ((SimpleTy >= MVT::FIRST_FP_VALUETYPE &&
|
||||
|
@ -595,7 +595,7 @@ public:
|
||||
/// sequence, or the target has a custom expander for it.
|
||||
LegalizeAction
|
||||
getIndexedLoadAction(unsigned IdxMode, MVT VT) const {
|
||||
assert(IdxMode < ISD::LAST_INDEXED_MODE && VT < MVT::LAST_VALUETYPE &&
|
||||
assert(IdxMode < ISD::LAST_INDEXED_MODE && VT.isValid() &&
|
||||
"Table isn't big enough!");
|
||||
unsigned Ty = (unsigned)VT.SimpleTy;
|
||||
return (LegalizeAction)((IndexedModeActions[Ty][IdxMode] & 0xf0) >> 4);
|
||||
@ -613,7 +613,7 @@ public:
|
||||
/// sequence, or the target has a custom expander for it.
|
||||
LegalizeAction
|
||||
getIndexedStoreAction(unsigned IdxMode, MVT VT) const {
|
||||
assert(IdxMode < ISD::LAST_INDEXED_MODE && VT < MVT::LAST_VALUETYPE &&
|
||||
assert(IdxMode < ISD::LAST_INDEXED_MODE && VT.isValid() &&
|
||||
"Table isn't big enough!");
|
||||
unsigned Ty = (unsigned)VT.SimpleTy;
|
||||
return (LegalizeAction)(IndexedModeActions[Ty][IdxMode] & 0x0f);
|
||||
@ -1239,7 +1239,7 @@ protected:
|
||||
/// specified type and indicate what to do about it.
|
||||
void setLoadExtAction(unsigned ExtType, MVT VT,
|
||||
LegalizeAction Action) {
|
||||
assert(ExtType < ISD::LAST_LOADEXT_TYPE && VT < MVT::LAST_VALUETYPE &&
|
||||
assert(ExtType < ISD::LAST_LOADEXT_TYPE && VT.isValid() &&
|
||||
"Table isn't big enough!");
|
||||
LoadExtActions[VT.SimpleTy][ExtType] = (uint8_t)Action;
|
||||
}
|
||||
@ -1248,8 +1248,7 @@ protected:
|
||||
/// specified type and indicate what to do about it.
|
||||
void setTruncStoreAction(MVT ValVT, MVT MemVT,
|
||||
LegalizeAction Action) {
|
||||
assert(ValVT < MVT::LAST_VALUETYPE && MemVT < MVT::LAST_VALUETYPE &&
|
||||
"Table isn't big enough!");
|
||||
assert(ValVT.isValid() && MemVT.isValid() && "Table isn't big enough!");
|
||||
TruncStoreActions[ValVT.SimpleTy][MemVT.SimpleTy] = (uint8_t)Action;
|
||||
}
|
||||
|
||||
@ -1260,7 +1259,7 @@ protected:
|
||||
/// TargetLowering.cpp
|
||||
void setIndexedLoadAction(unsigned IdxMode, MVT VT,
|
||||
LegalizeAction Action) {
|
||||
assert(VT < MVT::LAST_VALUETYPE && IdxMode < ISD::LAST_INDEXED_MODE &&
|
||||
assert(VT.isValid() && IdxMode < ISD::LAST_INDEXED_MODE &&
|
||||
(unsigned)Action < 0xf && "Table isn't big enough!");
|
||||
// Load action are kept in the upper half.
|
||||
IndexedModeActions[(unsigned)VT.SimpleTy][IdxMode] &= ~0xf0;
|
||||
@ -1274,7 +1273,7 @@ protected:
|
||||
/// TargetLowering.cpp
|
||||
void setIndexedStoreAction(unsigned IdxMode, MVT VT,
|
||||
LegalizeAction Action) {
|
||||
assert(VT < MVT::LAST_VALUETYPE && IdxMode < ISD::LAST_INDEXED_MODE &&
|
||||
assert(VT.isValid() && IdxMode < ISD::LAST_INDEXED_MODE &&
|
||||
(unsigned)Action < 0xf && "Table isn't big enough!");
|
||||
// Store action are kept in the lower half.
|
||||
IndexedModeActions[(unsigned)VT.SimpleTy][IdxMode] &= ~0x0f;
|
||||
@ -1285,8 +1284,7 @@ protected:
|
||||
/// target and indicate what to do about it.
|
||||
void setCondCodeAction(ISD::CondCode CC, MVT VT,
|
||||
LegalizeAction Action) {
|
||||
assert(VT < MVT::LAST_VALUETYPE &&
|
||||
(unsigned)CC < array_lengthof(CondCodeActions) &&
|
||||
assert(VT.isValid() && (unsigned)CC < array_lengthof(CondCodeActions) &&
|
||||
"Table isn't big enough!");
|
||||
/// The lower 5 bits of the SimpleTy index into Nth 2bit set from the 32-bit
|
||||
/// value and the upper 27 bits index into the second dimension of the array
|
||||
|
Loading…
x
Reference in New Issue
Block a user