[LLVMdev] LLVM IR is a compiler IR

Jin Gu Kang
Wed, 05 Oct 2011 06:48:00 -0000

Hi Talin,

I had a talk in London developer meeting about More Target Independent Bitcode.
(You can download the slides from http://llvm.org/devmtg/2011-09-16/)

I have been also trying to make bitcode with more higher abstraction level.
I made new compilation strategy using more target indepent bitcode as followins,
(This didn't consider about Jit or Interpreter like lli)

C/C++ source code
------------------------------------------ using front-end complier
Target Independent Bitcode
------------------------------------------ using translator
Traget Dependent Bitcode
------------------------------------------ using opt with optimization passes
Optimized Target Dependent Bitcode
------------------------------------------ using LLC
Target Assembly code

I can show you simple example with this strategy.

C/C++ source code
  1 struct foo {
  2 char a:4;
  3 long long b:61;
  4 int c:30;
  5 };
  6
  7 struct foo var;
Target Independent Bitcode
  1 ; ModuleID = 'gu.c'
  2 target datalayout =
"e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32
-f64:64:64-v64:64:64-v128:128:128-a0:0:64-f192:32:32"
  3 target triple = "ovm-none-linux"
  4
  5 %struct.foo = type { i4(char), i61(longlong), i30(int) }
  6
  7 @var = common global %struct.foo zeroinitializer  ; <%struct.foo*>
[#uses=0]
Target Dependent Bitcode
ARM
  1 ; ModuleID = 'gu.mod.opt.arm.bc'
  2 target datalayout =
"e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32
-f64:64:64-v64:64:64-v128:128:128-a0:0:64"
  3 target triple = "armv5-none-linux-gnueabi"
  4
  5 %struct.foo = type <{ i8, [7 x i8], i64, i32, [4 x i8] }>
  6
  7 @var = common global %struct.foo zeroinitializer  ; <%struct.foo*>
[#uses=0]
X86
  1 ; ModuleID = 'gu.mod.opt.x86.bc'
  2 target datalayout =
"e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32
-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32"
  3 target triple = "i386-pc-linux-gnu"
  4
  5 %struct.foo = type <{ i8, [3 x i8], i64, i32 }>
  6
  7 @var = common global %struct.foo zeroinitializer  ; <%struct.foo*>
[#uses=0]



I have inserted additional information into bitcode and have modified some codes
of LLVM.



I am interested in having conversation about achieving the goals of the
"near miss" users

of LLVM collaboratively. :)



Thanks,

Jin-Gu Kang
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20111005/0ed2785f/attachment.html>