Make sure that when we store a value it is masked to its correct bit

width. This helps CBE work with non-standard integer bit widths.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34885 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Reid Spencer 2007-03-03 16:33:33 +00:00
parent e0929364e8
commit bdc75089ab

View File

@ -2815,7 +2815,21 @@ void CWriter::visitStoreInst(StoreInst &I) {
writeOperand(I.getPointerOperand());
if (I.isVolatile()) Out << ')';
Out << " = ";
writeOperand(I.getOperand(0));
Value *Operand = I.getOperand(0);
Constant *BitMask = 0;
if (const IntegerType* ITy = dyn_cast<IntegerType>(Operand->getType()))
if (!ITy->isPowerOf2ByteWidth())
// We have a bit width that doesn't match an even power-of-2 byte
// size. Consequently we must & the value with the type's bit mask
BitMask = ConstantInt::get(ITy, ITy->getBitMask());
if (BitMask)
Out << "((";
writeOperand(Operand);
if (BitMask) {
Out << ") & ";
printConstant(BitMask);
Out << ")";
}
}
void CWriter::visitGetElementPtrInst(GetElementPtrInst &I) {