[LLVMdev] Help with PPC64 JIT

Will Schmidt will_schmidt at vnet.ibm.com
Fri Jul 20 06:35:19 PDT 2012


On Fri, 2012-07-20 at 08:36 +0200, Duncan Sands wrote:
> Hi Adhemerval Zanella, the old JIT infrastructure is going away, to be replaced
> by "MC-JIT" (try passing -use-mcjit to lli).  It sounds like you are working on
> the old JIT, so I suggest you work instead on getting MC-JIT working on powerpc.

Hi Duncan, 
   Thanks for the pointers.  We hadn't stumbled across the MC-JIT refs
in our digging so far.  (LLVM GettingStarted.html doesn't mention it,
and (FIXME: T.B.D.) under llvm/lib/mc, so I suppose the MC jit is fairly
recent?)
Are we safe to assume the old JIT infrastructure will be completely
replaced, or are there likely to be 'users' that may still need
functionality?
I imagine since the old jit is where Adhemerval was focused, the
build/test steps must still be referencing it.

Thanks, 
-Will 




> 
> Ciao, Duncan.
> > I am currently working with PPC64 JIT support for LLVM. So far I could make function calls
> > work by adding function descriptors in 'lib/Target/PowerPC/PPCJITInfo.h' and adding a
> > virtual method at 'LLVM::TargetJITInfo' that is called within 'JITEmitter::finishFunction'
> > just after 'sys::Memory::InvalidateInstructionCache' to update the Global Mapping with
> > function descriptor instead of the function address. The JIT function descriptor is
> > loaded correctly in 'JIT::runFunction', instead of assuming the JIT function code is
> > an ODP.
> >
> > Now I'm trying to make the relocation work properly. Using the testcase '2003-01-04-ArgumentBug'
> > the assembly generated for main functions is the following:
> >
> > .L.main:
> > # BB#0:
> >          mflr 0
> >          std 0, 16(1)
> >          stdu 1, -112(1)
> >          lis 3, .LCPI1_0 at ha
> >          li 4, 1
> >          lfs 1, .LCPI1_0 at l(3)
> >          li 3, 0
> >          bl foo
> >          nop
> >          addi 1, 1, 112
> >          ld 0, 16(1)
> >          mtlr 0
> >          blr
> >
> > Which is correct, however for the JIT one generated in memory the relocations generate some issues.
> >
> > First the 'lis 3, .LCPI1_0 at ha' can possible overflow which will generate an wrong relocation.
> > Since the const data will be place just before the function code in JIT generation, my first
> > approach was to point the functions descriptor TOC to the JIT function base, so the 'lis' relocation
> > could be rewritten as 'addis 3,2,.LCPI1 at TOC@ha'.
> >
> > And there where I could use some help: is it the best approach? Where is the best place to make this
> > kind of analysis? Is there another way to make code adjustments for JIT?
> >
> > At fist I though to put the logic at 'lib/Target/PowerPC/PPCJITInfo.cpp', but from what I could
> > understand the 'relocate' function method is indeed just to operate on the relocation
> > addresses, not to change the upcode.
> >
> > Any advices/tips/suggestion would be appreciated.
> >
> 
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> 





More information about the llvm-dev mailing list