forked from OSchip/llvm-project
Sign-extend integer constants from original type size to 64 bits!
llvm-svn: 3958
This commit is contained in:
parent
46aeb8c7c2
commit
66303bb9a5
|
@ -373,11 +373,15 @@ ChooseRegOrImmed(Value* val,
|
|||
else if (CPV->getType()->isSigned())
|
||||
intValue = cast<ConstantSInt>(CPV)->getValue();
|
||||
else
|
||||
{ // get the int value and sign-extend if original was less than 64 bits
|
||||
intValue = (int64_t) cast<ConstantUInt>(CPV)->getValue();
|
||||
switch(CPV->getType()->getPrimitiveID())
|
||||
{
|
||||
assert(CPV->getType()->isUnsigned() && "Not pointer, bool, or integer?");
|
||||
uint64_t V = cast<ConstantUInt>(CPV)->getValue();
|
||||
if (V >= INT64_MAX) return MachineOperand::MO_VirtualRegister;
|
||||
intValue = (int64_t) V;
|
||||
case Type::UByteTyID: intValue = (int64_t) (int8_t) intValue; break;
|
||||
case Type::UShortTyID: intValue = (int64_t) (short) intValue; break;
|
||||
case Type::UIntTyID: intValue = (int64_t) (int) intValue; break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
return ChooseRegOrImmed(intValue, CPV->getType()->isSigned(),
|
||||
|
|
Loading…
Reference in New Issue