[LLVMdev] FW: RFC: Supporting different sized address space arithmetic
Eli Friedman
eli.friedman at gmail.com
Fri Aug 24 17:37:06 PDT 2012
On Fri, Aug 24, 2012 at 4:07 PM, Villmow, Micah <Micah.Villmow at amd.com> wrote:
>
>
>> -----Original Message-----
>> From: Villmow, Micah
>> Sent: Friday, August 24, 2012 2:56 PM
>> To: 'Eli Friedman'
>> Cc: LLVM Developers Mailing List
>> Subject: RE: [LLVMdev] RFC: Supporting different sized address space
>> arithmetic
>>
>> Eli,
>> There is a patch that implements the beginning what I think is the
>> correct approach to support the backend overloading the size of the
>> pointer for an address space.
>>
>> Does this seem like the right way to do this?
>>
>> I'm guessing I need to handle a few more nodes(IntToPtr/PtrToInt) and
>> atomics, but this already works for what we want to do.
Why do we need the change in lib/CodeGen/Analysis.cpp? If
TargetLowering::getValueType() doesn't work for arbitrary address
spaces, you should fix it.
I think my earlier comments about getIntPtrConstant still hold:
instead of "DAG.getIntPtrConstant(Offset, addrSpace)", you can just
write "DAG.getConstant(Offset, PtrTy)".
+ EVT NewPtrVT = TLI.getPointerTy(dyn_cast<PointerType>(
+ SV->getType())->getAddressSpace());
+ if (PtrVT != NewPtrVT) {
+ // Check to see if we want to change the size of the pointer
+ // based on the address space and if so extend or truncate the pointer.
+ Ptr = DAG.getSExtOrTrunc(Ptr, getCurDebugLoc(), NewPtrVT);
+ PtrVT = NewPtrVT;
+ }
This situation should be impossible: you're checking whether a pointer
has the same type as itself. If you're hitting this, it's just a
symptom of a bug elsewhere. The same applies to other places you
perform this sort of check outside of "bitcast" lowering.
The more broad issue I see here is that we need changes to the IR to
make sure the mid-level optimizers don't break your code;
specifically, using "bitcast" for lossy conversions is unsafe (so you
need a "ptrcast" operation which can perform potentially lossy
conversions), and you need to update TargetData so we can correctly
compute the size of an arbitrary pointer. I was under the impression
that you were planning to propose a fix for those separately, but it
doesn't look like you have.
-Eli
More information about the llvm-dev
mailing list