[LLVMdev] Questions about LLVM IR encoding

David A. Greene greened at obbligato.org
Tue Feb 22 12:34:55 PST 2011


张乐 <yueguoguo1024 at gmail.com> writes:

> Hi all, I am new to LLVM (even the field of compiler) and currently I am engaged in the work of adapting LLVM IR to M5 simulator to observe
> the enhancement of the novel architecture we design.
> Simply speaking if you know little about M5, my aim is to know how LLVM IR is interpreted and encoded, then try to implement it in the
> framework of M5.
> I have read the LLVM documents, yet I still have some questions as follows:
>  
> 1. As IR is target-independent, how can we encode them into bit-code executable files without specific targets' information?  
> 2. The "bitstream container format" as the document refers, is XML-like, and I wonder how does LLVM translate it into executable format such
> as bit-code.

If I'm understanding you correctly, you want to treat LLVM IR as an ISA
and simulate that in M5, writing a new M5 target to execute LLVM IR in
bitcode format.  Is that right?

I don't think that's a good option.  While it can theoretically be done,
you're going to miss very important machine aspects such as:

- limited register set
- alignment issues
- calling sequence
- instruction/text size

There are others, but all of the above can impact performance in major
ways.  Not modeling them is going to give you very inaccurate results.

If you can express your architectural enhancement in one of the existing
targets, I would do that.  At the very worst you can create new
instructions (say, for x86) and insert them into the asm stream with raw
.byte directives in the .s file.  I've done that many times in the past.

Another option is to create a new Target in LLVM and define the ISA you
want to evaluate.  This is a lot more work as it requires a new Target
in LLVM and a new implementation for M5 but it gives you more
flexibility and makes future changes easier.

I would go with one of the existing Targets if possible and add any new
instructions you need.  That's going to give you the most realistic
results.

                          -Dave




More information about the llvm-dev mailing list