編譯原理筆記

2021-10-25 19:32:16 字數 788 閱讀 7122

機器無關的優化

基於target 的優化

**生成

由於tvm中新增自定義硬體加速器的最後一步,需要llvm編譯器支援自定義pass,所以就大概看了下編譯原理,下面mark一下。

編譯可大概歸納為:前端->中間->後端,下面引用教程上的一張圖

剝去源程式中的注釋和空白符。

對程式開頭的巨集定義和檔案包含進行處理

產生用於語法分析的詞法記號序列。

parser讀取詞法分析器提供的記號流,檢查他是否能由源語言的文法產生並輸出分析樹的某種表示。

在看linux核心**的時候,經常會看到likely(x)和unlikely(x)巨集的使用。那這兩個巨集有什麼作用呢?

這兩個巨集在核心中的定義如下:

# define likely(x) __builtin_expect(!!(x), 1)

# define unlikely(x) __builtin_expect(!!(x), 0)

可見這裡使用了gcc的內建函式__builtin_expect()。

使用__builtin_expect (long exp, long c)函式可以幫助gcc優化程式編譯後的指令序列,使彙編指令盡可能的順序執行,從而提高cpu預取指令的正確率和執行效率。

__builtin_expect(exp, c)接受兩個long型的引數,用來告訴gcc:exp==c的可能性比較大。

例如,__builtin_expect(exp, 1) 表示程式執行過程中,exp取到1的可能性比較大。該函式的返回值為exp自身。

編譯原理 筆記

第一講 編譯過過程概述 主要介紹了 1 什麼是編譯是編譯程式?2 編譯程式的作用 3 編譯過程 4 編譯程式的組成及各部分的作用。第二講 上下文無關文法和語言 主要介紹了 1 語法 語義等概念,2 回顧了關於程式語言定義,初等資料型別,資料結構,高階高階語言的一般特性,程式結構,語句與控制結構等內容...

編譯原理筆記 一

編譯原理 1.1編譯器就是個程式,讀入某種語言編寫的程式,翻譯成另一種語言的程式。並能告知源程式的錯誤。1.11 編譯的分析綜合模型 編譯由兩部分組成,分析和綜合。分析部分將源程式切分成一些基本塊並形成源程式的中間表示,綜合部分把源程式的中間表示轉換成目標程式。分析期間 源程式的操作將被確定下來並表...

重點筆記 編譯原理

1 用組合語言或高階語言編寫的程式,必須先送入計算機,經過轉換成用機器語言表示的目標程式 這個過程叫做編譯 才能由計算機執行。執行轉換過程的程式叫做編譯程式。匯程式設計序是指沒有編譯過的組合語言原始檔。編譯程式轉換過的叫做目標程式,也就是機器語言。2 編譯程式是一種翻譯程式 3 通常乙個編譯程式中,...