[LLVMdev] Primer with LLVM

Francisco Puentes fpuentes at udc.es
Sat Jan 8 09:16:47 PST 2005


> >>> Would be great if we append into the documentation several "patters"
> >>> to show how perform with LLVM. It would accelerate the learn curve for
> >>> beginners like me, avoiding basic errors and mistakes. If I reach a
> >>> good level with LLVM I can make these.
> >>
> >> I'm not sure if I understand what you mean.  Are you looking for an
> >> "LLVM programmer's guide"?  If so, we have one of those:
> >>
> >>   http://llvm.cs.uiuc.edu/docs/ProgrammersManual.html
> >

It is not that I need, this document shows how to generate a representation
of code, and I start my work from a bytecode/assembly file (maybe in
memory). 

In pseudo code:

(0) Create an empty "Module"
(1) Load a source file (which contains byte/assembly code) maybe from memory
(2) Compile it into a "Module" 
(3) Link last one with first one.
(4) Go to step (1) until no more sources
//In this point I have a "Module" which contains the byte code 
//from the sources
(5) Generate native (x86) code from generated module 
(6) Localize entry point (¿main?)
(7) Execute it

(Apologize my English)

I have points 0-4 working, but I am confused about point 5 and maybe 6.

> > I am a recently LLVM user, and I found that LLVM is hard to use at first
> > sight. It would be nice if people like me can have documents like
> "howto"
> > but code-oriented (versus manual-oriented). Something like code extracts
> > with common (and basic) problems.
> 
> That is exactly what the ProgrammersManual *is*.  In particular, this
> section:
> http://llvm.cs.uiuc.edu/docs/ProgrammersManual.html#common
> 

Yes, i agree. But only with one LLVM state; not with compile, link and
execute stages.

> is exactly the sort of thing you're looking for.  Note that we don't have
> every possible subject documented, so if you see a missing subject, please
> send in a patch to the documentation.
>

Ok.
 
> > Last URL is a document to generate code from scratch until a "Module",
> and I
> > need generate it from a "Module" thru native code....
> 
> No it's not.  Working with LLVM Module's are the same no matter if you do
> it runtime, compile time, are generating C, LLVM, or native machine code.
> All of the same principles apply.
> 
> >> There are a lot of documents, both for extending LLVM and building new
> >> projects _with_ LLVM here:
> >>
> >>   http://llvm.cs.uiuc.edu/docs/
> >
> > ... and nothing of these cover this topic.
> >
> > (If I am wrong get right me!!)
> 
> I'm not sure I understand exactly what you want to do, so let me restate
> your objective to make sure I have it correct.  You want to build a
> representation of a program in memory, then emit machine code to memory,
> then get the address of the entry point and call it.  Is this correct?
> 

All ok, except first step. I don't need build the program representation; in
fact I read it from file/memory (bytecode/assembly).

> >>> Have you a sample to generate code into memory?
> >>
> >> Take a look at llvm/examples/HowToUseJIT and llvm/examples/Fibonacci in
> >> the LLVM distribution, or online via cvsweb.
> >>
> >
> > Looking................ (each dot is a minute)
> >
> > Well, these examples are JIT-based. I really need generate into memory
> > native code, extract the address of a function (aka "main") and execute
> it.
> 
> If my characterization of your goals (above) is correct, the JIT is
> exactly what you want.
> 

But JIT generate code **Just In Time**, and it is slower than generate all
at once and then execute it. I need a real compiler not an execution
environment. Last one will be build by me.

> >> --
> >> Misha Brukman :: http://misha.brukman.net :: http://llvm.cs.uiuc.edu
> >
> > Apologize my inexperience with LLVM, but I *really* don't find an
> example to
> > generate code into memory from a "Module".
> 
> That is the JIT.
> 

¿sure?

> -Chris
> 
> --
> http://nondot.org/sabre/
> http://llvm.cs.uiuc.edu/
> 
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev





More information about the llvm-dev mailing list