1. 什么是tablegen tablegen是llvm用於開發和維護編譯器中公共特性的條目(e.g. 指令描述, 寄存器描述)的代碼, 使之靈活的描述與構造的自動化工具. 其本質是一個parser, 將輸入的td文件轉化為特定的數據結構后再輸出為易於閱讀的cpp代碼. 更多介紹可見http ...
之前寫tablegen的介紹寫到一半放棄了, 最近培訓需要再拉出來看看, 順便做個筆記. . 語法介紹 官方文檔見這里, 以下是文檔的翻譯. . . 類型系統 tablegen是強類型語言, 其類型系統同時包含low level i.e. bit int 與high level i.e. dag . 以下是tablegen支持的內建類型. bit: 布爾值, 或 . int: 表示 bit整型. ...
2020-03-13 01:47 0 1181 推薦指數:
1. 什么是tablegen tablegen是llvm用於開發和維護編譯器中公共特性的條目(e.g. 指令描述, 寄存器描述)的代碼, 使之靈活的描述與構造的自動化工具. 其本質是一個parser, 將輸入的td文件轉化為特定的數據結構后再輸出為易於閱讀的cpp代碼. 更多介紹可見http ...
ADT(advanced data type)是LLVM針對其業務邏輯自定義的高性能抽象類型, 其定義見include/llvm/ADT目錄. ADT目錄下既包含了DenseMap/SmallVector這類容器封裝, 也包含了APInt等大數運算支持, 還有triple這類從編譯器業務抽象 ...
這周定位一個與DenseMap有關的問題, 正好趁機過一下它的實現. DenseMap(稠密映射)是LLVM自定義的關系類的容器, 我們可以像std::map一樣使用它, 但要注意兩者之間稍稍有些區別. 概述 類似於unorderd_map, DenseMap也是通過哈希實現, 區別 ...
ilocker:關注 Android 安全(新手) QQ: 2597294287 LLVM 的 IR (Intermediate Representation) 是其設計中的最重要的部分。優化器在進行代碼優化時所進行的分析和轉換都是針對 IR 的。 在設計 IR 時,考慮到了很多明確的目標 ...
1. 什么是IR IR(intermediate representation)是LLVM獨創的中間表達式. 經典的compiler架構由前端frontend(讀入源代碼, 通過詞法, 語法與語義分析建立AST), 中端optimizer(優化模塊)與backend(通過指令選擇, 寄存器分配 ...
ilocker:關注 Android 安全(新手) QQ: 2597294287 什么是 PHI node? 所有 LLVM 指令都使用 SSA (Static Single Assignment,靜態一次性賦值) 方式表示。意思是所有變量都只能被賦值一次,這樣做主要是便於后期的代碼優化 ...
好久沒更新博客了, 最近調研安全編譯選項(各類sanitizer), 抽空做個筆記. 本來想系統的分析一下compiler-rt代碼, 但是最近實在太懶了, 所以先介紹最簡單的安全棧safestack, 之后有空再補上compiler-rt框架以及其它sanitizer工具. 1. ...
自從年初手斷了以后好久不寫文字了, 說好的筆耕不輟也忘了(=.=), 今天正好有同學問AntiDepBreaker, 就花點時間看了下代碼(順便水一篇). 背景概述 1. 什么是Anti Depe ...