if we have a large GEP offset on a 32-bit or other target, make

sure to print the value properly sext'd to the right pointer size.
This fixes PR3481.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63843 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner
2009-02-05 06:55:21 +00:00
parent 5734c94ec2
commit 4798bbeaf5
2 changed files with 15 additions and 0 deletions
+6
View File
@@ -815,6 +815,12 @@ void AsmPrinter::EmitConstantValueOnly(const Constant *CV) {
SmallVector<Value*, 8> idxVec(CE->op_begin()+1, CE->op_end());
if (int64_t Offset = TD->getIndexedOffset(ptrVal->getType(), &idxVec[0],
idxVec.size())) {
// Truncate/sext the offset to the pointer size.
if (TD->getPointerSizeInBits() != 64) {
int SExtAmount = 64-TD->getPointerSizeInBits();
Offset = (Offset << SExtAmount) >> SExtAmount;
}
if (Offset)
O << '(';
EmitConstantValueOnly(ptrVal);