[LLVMdev] Can I add GlobalVariable in MachineFunctionPass ?

Justin Holewinski justin.holewinski at gmail.com
Mon Aug 5 08:27:05 PDT 2013


If you're running a MachineFunctionPass, then the code has already been
lowered to machine instructions and modifying the original IR will most
likely not do what you want.  You should only be using the IR as an
immutable object for reference.  If you want to change the IR, I would
suggest using a FunctionPass instead of a MachineFunctionPass.  Unless you
need codegen data.

At the MachineInstr level, to allocate local memory you can use the
MachineFrameInfo interface.  This provides methods like CreateStackObject
to allocate a new stack slot (which will be lowered to local memory in
PTX).  The return value of these methods is an integer that represents a
FrameIndex.  You can treat this as a pointer to your allocated object.  You
will also need to emit the proper MachineInstr-level loads and stores to
access the object.


On Mon, Aug 5, 2013 at 11:00 AM, Anthony Yu <swpenim at gmail.com> wrote:

> Micah,
>
> As you expected, I am trying to create local memory but in the NVPTX
> backend. It's really not convenient that I can't create local memory in
> runOnMachineFunction.
> Hmm....
> Since I should do it at doInitialization stage, I also need to do some
> tricks in global variable and AsmPrinter to resize it.
> Did you use the similar way?
>
> Antony
>
>
>
>
> 2013/8/5 Micah Villmow <micah.villmow at smachines.com>
>
>> Antony,
>>  What are you trying to accomplish in this case? I did something very
>> similar in the AMDIL backend, but it was not the cleanest solution and you
>> are correct it has to be do at doInitialization stage and not at
>> runOnMachineFunction.
>> Micah
>>
>> > -----Original Message-----
>> > From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu]
>> > On Behalf Of Antony Yu
>> > Sent: Monday, August 05, 2013 3:41 AM
>> > To: llvmdev at cs.uiuc.edu
>> > Subject: [LLVMdev] Can I add GlobalVariable in MachineFunctionPass ?
>> >
>> > Hello,
>> >
>> > I want to add a global variable of arrayType in my MachineFunctionPass.
>> > However, I only get const Module from
>> > MachineFunction.getMMI().getModule().
>> > I can't add any global variable to a const Module.
>> > Another way is to add a global variable in doInitialization in my
>> > MachineFunctionPass, but I can't determine the size of my arrayType for
>> > global variable in doInitialization.
>> >
>> > Is there any suggestion that can help me achieve this?
>> >
>> > Thanks in advance.
>> > Antony Yu
>> >
>> >
>> >
>> > --
>> > View this message in context:
>> http://llvm.1065342.n5.nabble.com/Can-I-add-
>> > GlobalVariable-in-MachineFunctionPass-tp60165.html
>> > Sent from the LLVM - Dev mailing list archive at Nabble.com.
>> > _______________________________________________
>> > LLVM Developers mailing list
>> > LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>> > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>


-- 

Thanks,

Justin Holewinski
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130805/d0db945b/attachment.html>


More information about the llvm-dev mailing list