fix a problem Eli noticed where we would compile the attached ptrtoint

to:

.quad X

even on a 32-bit system, where X is not 64-bits.  There isn't much that
we can do here, so we just print:

.quad	((X) & 4294967295)

instead.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77818 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2009-08-01 22:25:12 +00:00
parent cea01bfe7d
commit c19ee610f6
2 changed files with 21 additions and 13 deletions

View File

@ -910,6 +910,16 @@ void AsmPrinter::EmitConstantValueOnly(const Constant *CV) {
const TargetData *TD = TM.getTargetData();
unsigned Opcode = CE->getOpcode();
switch (Opcode) {
case Instruction::Trunc:
case Instruction::ZExt:
case Instruction::SExt:
case Instruction::FPTrunc:
case Instruction::FPExt:
case Instruction::UIToFP:
case Instruction::SIToFP:
case Instruction::FPToUI:
case Instruction::FPToSI:
llvm_unreachable("FIXME: Don't support this constant cast expr");
case Instruction::GetElementPtr: {
// generate a symbolic expression for the byte address
const Constant *ptrVal = CE->getOperand(0);
@ -934,17 +944,6 @@ void AsmPrinter::EmitConstantValueOnly(const Constant *CV) {
}
break;
}
case Instruction::Trunc:
case Instruction::ZExt:
case Instruction::SExt:
case Instruction::FPTrunc:
case Instruction::FPExt:
case Instruction::UIToFP:
case Instruction::SIToFP:
case Instruction::FPToUI:
case Instruction::FPToSI:
llvm_unreachable("FIXME: Don't yet support this kind of constant cast expr");
break;
case Instruction::BitCast:
return EmitConstantValueOnly(CE->getOperand(0));
@ -965,12 +964,13 @@ void AsmPrinter::EmitConstantValueOnly(const Constant *CV) {
// We can emit the pointer value into this slot if the slot is an
// integer slot greater or equal to the size of the pointer.
if (TD->getTypeAllocSize(Ty) >= TD->getTypeAllocSize(Op->getType()))
if (TD->getTypeAllocSize(Ty) == TD->getTypeAllocSize(Op->getType()))
return EmitConstantValueOnly(Op);
O << "((";
EmitConstantValueOnly(Op);
APInt ptrMask = APInt::getAllOnesValue(TD->getTypeAllocSizeInBits(Ty));
APInt ptrMask =
APInt::getAllOnesValue(TD->getTypeAllocSizeInBits(Op->getType()));
SmallString<40> S;
ptrMask.toStringUnsigned(S);

View File

@ -0,0 +1,8 @@
; RUN: llvm-as < %s | llc -mtriple=i386-linux | FileCheck %s
%union.x = type { i64 }
; CHECK: .globl r
; CHECK: r:
; CHECK: .quad ((r) & 4294967295)
@r = global %union.x { i64 ptrtoint (%union.x* @r to i64) }, align 4