LLVM (Low Level Virtual Machine) 低階虛擬機技術

編譯器設計

編譯器簡介

高階語言

語法理論

剖析器

語意理論

符號表

直譯器

型態系統

中間碼

目標語言

最佳化

錯誤處理

進階議題

原始碼下載

程式實作

C 語言

案例研究

JavaScript

V8

Lua

Oberon

NeoPascal

pcc

tcc

gcc

C--

Lex

YACC

AntLR

LLVM

CLang

訊息

相關網站

參考文獻

最新修改

簡體版

English

C 語言:

struct RT {
  char A;
  int B[10][20];
  char C;
};
struct ST {
  int X;
  double Y;
  struct RT Z;
};

int *foo(struct ST *s) {
  return &s[1].Z.B[5][13];
}

轉換成 LLVM IR

%RT = type { i8 , [10 x [20 x i32]], i8  }
%ST = type { i32, double, %RT }

define i32* @foo(%ST* %s) {
entry:
  %reg = getelementptr %ST* %s, i32 1, i32 2, i32 1, i32 5, i32 13
  ret i32* %reg
}

語意:

  define i32* @foo(%ST* %s) {
    %t1 = getelementptr %ST* %s, i32 1                        ; yields %ST*:%t1
    %t2 = getelementptr %ST* %t1, i32 0, i32 2                ; yields %RT*:%t2
    %t3 = getelementptr %RT* %t2, i32 0, i32 1                ; yields [10 x [20 x i32]]*:%t3
    %t4 = getelementptr [10 x [20 x i32]]* %t3, i32 0, i32 5  ; yields [20 x i32]*:%t4
    %t5 = getelementptr [20 x i32]* %t4, i32 0, i32 13        ; yields i32*:%t5
    ret i32* %t5
  }

參考文獻

  1. http://llvm.org/
  2. 演講:窮得只剩下 Compiler — 淺談編譯技術的革命
  3. jserv: 身騎 LLVM,過三關 《注意:在 Mix 二樓》— http://www.linux.org.tw/node/660
  4. AsmJit : C++ 封裝的 Just-In-Time Assembler — http://blog.linux.org.tw/~jserv/archives/002089.html
  5. The Complete Syntax of Lua — http://www.lua.org/manual/5.1/manual.html#8

Facebook

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License