原文:LLVM筆記(9) - 指令選擇(一) 概述

本文最初是基於對新員工培訓, 使其快速上手編譯器后端代碼而寫的入門簡介. 為方便閱讀又根據模塊細分為若干章, 內容以分析代碼為主, 偶爾也會穿插一些理論擴展. 什么是指令選擇 指令選擇 instruction selection 是將中間語言轉換成匯編或機器代碼的過程. 如果僅為單一語言在單一目標上實現指令選擇, 可以使用手工編碼的方法. 否則通過使用自動代碼生成器生成代碼, 編譯器開發人員只需負 ...

2020-05-03 15:50 1 2764 推薦指數:

查看詳情

LLVM筆記(13) - 指令選擇(五) select

本節主要介紹指令選擇的具體步驟(select). select是將基於ISD SDNode的DAG替換成基於機器指令節點的DAG的過程. select基本流程 在完成combine與legalize之后SelectionDAGISel::CodeGenAndEmitDAG()會調 ...

Mon May 25 05:53:00 CST 2020 0 2019
LLVM筆記(12) - 指令選擇(四) legalize

本節介紹指令選擇中legalize的概念, 為中端IR精確匹配機器指令需要同時檢查操作符與操作數, 在正式指令選擇前對不合法的操作符或操作數作出轉換的過程即legalize. 通常情況下給定一個后端架構其支持的指令集: 不一定能支持表達所有中端IR的操作. 一個顯而易見的例子是在一個不支持 ...

Thu May 14 10:01:00 CST 2020 0 1710
LLVM筆記(11) - 指令選擇(三) combine

本節將要介紹指令選擇中combine優化的概念, combine的目的是簡化DAG, 合並/消除冗余節點, 為生成更優的指令做准備. 大部分combine是與架構無關的優化, 但LLVM也提供了修改combine的custom接口. 盡管本節介紹的是combine的流程, 但combine ...

Fri May 08 08:51:00 CST 2020 0 1709
LLVM筆記(10) - 指令選擇(二) lowering

本節主要介紹SelectionDAG的構成與lowering的過程. SelectionDAG是LLVM指令選擇的基礎框架, 不論是O0編譯時使用的FastISel還是O2編譯時使用的SelectionDAGISel都會使用SelectionDAG來描述輸入的程序流. 將輸入的IR轉換成 ...

Wed May 06 05:13:00 CST 2020 1 3364
LLVM 筆記(五)—— LLVM IR

ilocker:關注 Android 安全(新手) QQ: 2597294287 LLVM 的 IR (Intermediate Representation) 是其設計中的最重要的部分。優化器在進行代碼優化時所進行的分析和轉換都是針對 IR 的。 在設計 IR 時,考慮到了很多明確的目標 ...

Sun Oct 25 22:29:00 CST 2015 0 2166
LLVM從小白到放棄(一)- LLVM概述LLVM環境搭建

LLVM從小白到放棄(一)- LLVM概述LLVM環境搭建 LLVM的歷史 LLVM計划啟動於2000年,開始由美國UIUC大學的Chris Lattner博士主持開展,后來Apple也加入其中。最初的目的是開發一套提供中間代碼和編譯基礎設施的虛擬系統。 LLVM命名最早源自於底層 ...

Thu Apr 14 19:31:00 CST 2022 0 4386
LLVM與Clang的概述及關系

LLVM是構架編譯器(compiler)的框架系統,以C++編寫而成,用於優化以任意程序語言編寫的程序的編譯時間(compile-time)、鏈接時間(link-time)、運行時間(run-time)以及空閑時間(idle-time),對開發者保持開放,並兼容已有腳本。LLVM計划啟動於2000 ...

Fri Aug 05 07:00:00 CST 2016 0 10863
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM