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:
- As IR is target-independent, how can we encode them into bit-code executable files without specific targets’ information?
- 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.
I have made several tests as the document suggests, but I conclude with nothing helpful to my work.
The result of my experiment is attached.
It is a simple add program, and from the bc file generated by llvm-bcanalyzer I cannot relate it to the original IR.
For example, the expressions of
<INST_STORE2 op0=6 op1=1 op2=3 op3=0/>
<INST_STORE2 op0=5 op1=3 op2=3 op3=0/>
actually represent those of
store i32 1, i32* %a, align 4
store i32 2, i32* %b, align 4
in the .ll file.
Despite the explicit opcode matches in the two forms, I am confused of the information of op0, op1 etc in the .bc file.
What does it mean? This is not very clearly clarified in the document, or may I omit something?
Can anybody please lend me a hand?
Thanks very much sincerely!