Eliminate use of magic numbers to access OpActions. It also has the effect of allowing more than 31 scalar value types. MAX_ALLOWED_VALUETYPE had already been updated to 64 a while back.

llvm-svn: 103743
This commit is contained in:
Evan Cheng 2010-05-13 23:25:21 +00:00
parent 2a26ec8d20
commit 0adc50cd1a
1 changed files with 7 additions and 5 deletions

View File

@ -202,12 +202,14 @@ public:
} }
unsigned I = VT.getSimpleVT().SimpleTy; unsigned I = VT.getSimpleVT().SimpleTy;
assert(I<4*array_lengthof(ValueTypeActions)*sizeof(ValueTypeActions[0])); assert(I<4*array_lengthof(ValueTypeActions)*sizeof(ValueTypeActions[0]));
return (LegalizeAction)((ValueTypeActions[I>>4] >> ((2*I) & 31)) & 3); unsigned Mask = (unsigned)MVT::MAX_ALLOWED_VALUETYPE-1;
return (LegalizeAction)((ValueTypeActions[I>>4] >> ((2*I) & Mask)) & 3);
} }
void setTypeAction(EVT VT, LegalizeAction Action) { void setTypeAction(EVT VT, LegalizeAction Action) {
unsigned I = VT.getSimpleVT().SimpleTy; unsigned I = VT.getSimpleVT().SimpleTy;
assert(I<4*array_lengthof(ValueTypeActions)*sizeof(ValueTypeActions[0])); assert(I<4*array_lengthof(ValueTypeActions)*sizeof(ValueTypeActions[0]));
ValueTypeActions[I>>4] |= Action << ((I*2) & 31); unsigned Mask = (unsigned)MVT::MAX_ALLOWED_VALUETYPE-1;
ValueTypeActions[I>>4] |= Action << ((I*2) & Mask);
} }
}; };
@ -360,9 +362,9 @@ public:
(unsigned)VT.getSimpleVT().SimpleTy < sizeof(OpActions[0][0])*8 && (unsigned)VT.getSimpleVT().SimpleTy < sizeof(OpActions[0][0])*8 &&
"Table isn't big enough!"); "Table isn't big enough!");
unsigned I = (unsigned) VT.getSimpleVT().SimpleTy; unsigned I = (unsigned) VT.getSimpleVT().SimpleTy;
unsigned J = I & 31; unsigned J = I & ((unsigned)MVT::MAX_ALLOWED_VALUETYPE-1);
I = I >> 5; I = I >> 5;
return (LegalizeAction)((OpActions[I][Op] >> (J*2) ) & 3); return (LegalizeAction)((OpActions[I][Op] >> (J*2)) & 3);
} }
/// isOperationLegalOrCustom - Return true if the specified operation is /// isOperationLegalOrCustom - Return true if the specified operation is
@ -987,7 +989,7 @@ protected:
void setOperationAction(unsigned Op, MVT VT, void setOperationAction(unsigned Op, MVT VT,
LegalizeAction Action) { LegalizeAction Action) {
unsigned I = (unsigned)VT.SimpleTy; unsigned I = (unsigned)VT.SimpleTy;
unsigned J = I & 31; unsigned J = I & ((unsigned)MVT::MAX_ALLOWED_VALUETYPE - 1);
I = I >> 5; I = I >> 5;
OpActions[I][Op] &= ~(uint64_t(3UL) << (J*2)); OpActions[I][Op] &= ~(uint64_t(3UL) << (J*2));
OpActions[I][Op] |= (uint64_t)Action << (J*2); OpActions[I][Op] |= (uint64_t)Action << (J*2);