共找到2條詞條名為Whirl的結果 展開
- 中間表示語言
- 詞語
Whirl
中間表示語言
WHIRL 是 Open64 編譯器使用的一種編譯器中間表示語言。WHIRL不僅是貫穿於整個編譯進行的全過程的一種信息傳遞方式,更是編譯優化、前後端溝通的載體。
WHIRL是Open64編譯器使用的一種編譯器中間表示語言。這套表示語言是為了提高編譯器執行效率而設計的,
WHIRL是根據編譯的全流程進行設計的,並且同一套WHIRL可以應用在編譯的前後端全過程中,這包括WOPT(全局優化),LNO(LOOP Nest Optimizer),IPA(跨函數分析),CG(彙編代碼生成)等優化、編譯過程中。
在編譯流程進行中,編譯器使用的 IR 由含有高層表示信息的VH WHIRL 轉化為了 High WHIRL, Middle WHIRL, Middle WHIRL 經過 WOPT 轉換為了 Low WHIRL, CG過程 可以將Low WHIRL轉化為彙編代碼,進而可以調用系統的彙編、鏈接工具,生成二進位程序。
WHIRL 的構成是按照語法層級的高低來分層,在每個層的內部又分為ST、TY、INITO等模塊
全局結構有以下幾個部分構成:
WHIRL Node (可執行的指令 AST)
Scope Table(Scoping 使用)
Symbol Table (ST_TAB)
Type Table (TY_TAB)
Program Unit Table 函數 (PU_TAB)
Initializable Value Table (INITV_TAB)
Initializable Object Table (INTIO_TAB)
Block Table 塊數據 (BLK_TABLE)
Array Bounds Table 數據上下界 (ARB_TAB)
Field Table 成員表 (FLD_TAB)
Constant Table 實數常量表 (TCON_TAB)
String Table 內部使用的字元串 (STR_TAB)
Constant String Table 字元串常量 (TCON_STR_TAB)
Label Table 標籤 (LABEL_TAB)
Symbol Attributes Table 輔助信息 (ST_ATTR_TAB)
Type List (函數參數) (TYLIST_TAB)
Debug symbol Table (DST_TAB)
File Info (FILE_INFO)
BE_ST_TAB (後端專用)
... 其他自定義Map
局部結構是指在PU內部使用的相關數據結構
Symbol Table (ST_TAB)
Initializable Object Table (INTIO_TAB)
Label Table 標籤 (LABEL_TAB)
Pseudo Register Table 偽寄存器 (PREG_TAB)
Symbol Attributes Table 輔助信息 (ST_ATTR_TAB)
New_<表名>
譬如對於 Symbol Table(ST_TAB),就是 New_ST
<表名>_Init,
例如 ST_Init()
大部分表都可以拿到某一條數據的IDX (index), 後續可以直接通過IDX來
WHIRL 之中使用的數據類型包括以下幾種:
B 邏輯型 (0或者1)
I1 8-bit 有符號整數
I2 16-bit 有符號整數
I4 32-bit有符號整數
I8 64-bit 有符號整數
U1 8-bit 無符號整數
U2 16-bit 無符號整數
U4 32-bit 無符號整數
U8 64-bit 無符號整數
A4 32-bit 地址(和U4類似)
A8 64-bit地址(和U8類似)
F4 32-bit IEEE 浮點數
F8 64-bit IEEE 浮點數
F10 80-bit IEEE 浮點數
F16 128-bit IEEE浮點數
FQ 128-bit SGI浮點數
C4 32-bit 複數 (64 bits total).
C8 64-bit 複數 (128 bits total).
CQ 128-bit 複數 (256 bits total).
V Void
M Struct
BS bits
WHIRL的歷史可以追溯到1970年代SGI的編譯研發工作之中。