[LLVMdev] Re: questions about LLVM

John Criswell criswell at cs.uiuc.edu
Wed Nov 17 14:36:53 PST 2004


Dinakar Dhurjati wrote:
> Hi Shuo,
> 
> I am CCing your questions to the LLVM developers list so others can 
> reply or correct me.
> 
>> I have a few questions about LLVM:
>> (1) The LLVM tutorial says LLVM can be used in architecture research. 
>> If I want to run my program on an instruction set defined by myself, 
>> is LLVM a right tool to do that?
> 
> I don't think so.

I think it depends on what you need and what tools you currently have.

If you have developed your own instruction set, then LLVM might be 
useful to you as an optimizing compiler for your instruction set.

The problem is that LLVM won't have a code generator for your 
instruction set.  You'd have to do one of the following:

1. Write a code generator (the LLVM code base makes this relatively easy).

2. Use the C Backend to generate C code from LLVM code, and then use a C 
compiler that targets your instruction set to compile the resulting code.

The first option is good if there is no compiler for your instruction 
set and you need to write one quickly.  The second option is good if you 
have a basic compiler for your instruction set but need LLVM to provide 
more agressive optimization.

> 
>> In this aspect, is LLVM similar to SimpleScalar simulator?
>>
> I am not familiar with a SimpleScalar simulators, may be others will reply.
> 
>> (2) Can I compile large applications, such as Apache server, into LLVM 
>> virtual instructions, then use LLVM intepreter to execute it?
>>
> Sure. I believe the website  http://safecode.cs.uiuc.edu runs on just in 
> time (JIT) execution of apache webserver compiled to llvm virtual 
> instructions.

Dinakar is correct; the SAFECode website is a version of Apache compiled 
with LLVM and running on the LLVM x86 JIT.

Povray is another large C program that we've compiled with LLVM, and 
we've successfully compiled other small to midsize programs (see 
http://llvm.cs.uiuc.edu/testresults/X86/ for some examples).  I don't 
know what other large applications we've compiled; anybody care to comment?

The known issues that are most likely to cause you grief are:

o C bitfields (don't always work properly)
o Inline assembly code (unsupported; probably the most common 
compilation problem overall)
o Non-standard GCC union initializers

> 
>> (3) If my program calls libc functions, e.g., malloc(), are the 
>> instructions of malloc transformed to LLVM virtual instructions and 
>> intepreted during its execution?
>>
> In general most library calls get translated to the LLVM's call 
> instructions and they will be executed natively using the native libary 
> call when you use the interpreter or the JIT.  But if you can compile 
> the library call in to LLVM instructions and link it in to your 
> application then there is no reason why you shouldn't be able to 
> interpret instructions of that call .
> 
> Dinakar
> 
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev

-- John T.


-- 
*********************************************************************
* John T. Criswell                         Email: criswell at uiuc.edu *
* Research Programmer                                               *
* University of Illinois at Urbana-Champaign                        *
*                                                                   *
* "It's today!" said Piglet. "My favorite day," said Pooh.          *
*********************************************************************




More information about the llvm-dev mailing list