From: Reid Spencer Date: Sat, 3 Mar 2007 16:33:33 +0000 (+0000) Subject: Make sure that when we store a value it is masked to its correct bit X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=bdc75089ab4ae9f67d97fa1653a577cb2217036f;p=oota-llvm.git 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 --- diff --git a/lib/Target/CBackend/CBackend.cpp b/lib/Target/CBackend/CBackend.cpp index f7e25187dda..eeefaa27e99 100644 --- a/lib/Target/CBackend/CBackend.cpp +++ b/lib/Target/CBackend/CBackend.cpp @@ -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(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) {