GCC RISCV 后端 -- GIMPLE IR 表示的一些理解

? ? ? ? C/C++源代碼經過 GCC 解析(Parse)及轉換后,通過 GIMPLE IR 予以表示(Representation)。其中,一個C/C++源文件,通過 宏處理后,形成一個 轉譯單元(Translation Unit),在 GCC 內部,通過下面結構予以表示:

????????Symbol Table?

? ? ? ? ? ? ? ? -- Global Variables

? ? ? ? ? ? ? ? -- Call Graph

? ? ? ? ? ? ? ? ? ? ? ? -- Functions

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -- Control Flow Graph

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -- Basic Blocks

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -- instructions

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -- defintions and uses

? ? ? ? 上述表達,可以清楚地看到程序的控制流走向。在最末端的指令層級(Instructions),GIMPLE IR 指令 或 RTL IR 指令,一般表達為三地址模式的操作(3 - Addresses operations),即

?Op result, src0, src1

? ? ? ? 那么,對于不同的指令,抽象來看,都會有其 定義的值/變量(Definitions),以及有其 使用的值或變量(Uses),如上面的,result 為 其定義(defintion),src0, src1為其使用(use)。

? ? ? ? 在 GIMPLE IR 和 RTL IR 中,會通過 指令的編號來作為其使用(use)的引用。

? ? ? ? 那么,通過對指令的定義及使用的分析,逐步往上,擴展到 基礎塊(Basic Block),控制流圖(Control Flow Graph)等,實現程序的數據流分析(Data-Flow Analysis)。

? ? ? ? 例如,將GIMPLE IR 轉換成 SSA(Static Single Assignment)的模式,使得每個值對應唯一的變量,這樣就簡化了數據流的分析。然后,基于SSA,就可以實現 constant propagation 等優化。

? ? ? ? 又例如,Domination Tree 的構建,Live-variable 等。都是基于上述的框架,通過分析指令的定義與使用,得出數據流(Data-Flow / Value-Flow)的信息。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/74170.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74170.shtml
英文地址,請注明出處:http://en.pswp.cn/web/74170.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JAVA設計模式之適配器模式《太白金星有點煩》

太白金星握著月光凝成的鼠標,第108次檢查南天門服務器的運行日志。這個剛從天樞院調來的三等仙官,此刻正盯著瑤池主機房里的青銅鼎發愁——鼎身上"天地同壽"的云紋間,漂浮著三界香火系統每分鐘吞吐的十萬條功德數據。看著居高不下的…

以太坊DApp開發腳手架:Scaffold-ETH 2 詳細介紹與搭建教程

一、什么是Scaffold-ETH 2 Scaffold-ETH 2是一個開源的最新工具包,類似于腳手架。用于在以太坊區塊鏈上構建去中心化應用程序 (DApp)。它旨在使開發人員更容易創建和部署智能合約,并構建與這些合約交互的用戶界面。 Scaffold-ETH…

畢業設計:實現一個基于Python、Flask和OpenCV的人臉打卡Web系統(六)

畢業設計:實現一個基于Python、Flask和OpenCV的人臉打卡Web系統(六) Flask Flask是一個使用 Python 編寫的輕量級 Web 應用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎則使用 Jinja2 。Flask使用 BSD 授權。 Flask也被稱為 “microframework” ,因為它使用簡單的核心,…

第十一章 VGA顯示圖片(還不會)

FPGA至簡設計實例 前言 一、項目背景 1. IP核概述 IP 核(Intellectual Property core)指的是知識產權核或知識產權模塊,其是具有特定電路功能的硬件描述語言程序,在EDA技術開發中具有十分重要的地位。美國著名的Dataquest咨詢公司將 半導體產業的IP定義為“用于ASIC或FPGA…

浙江大學公開課|第二季|從大模型、智能體到復雜AI應用系統的構建——以產業大腦為例

大家好,我是吾鳴。 前沿回顧 吾鳴之前給大家分享過浙江大學DeepSeek系列公開課第一季,第一季一共八講,內容介紹豐富,內容之廣,看完粉絲朋友直呼浙大良心。這八講公開課名稱分別是: 第一期(上&…

Spring AOP中為所有類型通知傳遞參數的完整示例,包含詳細注釋和參數傳遞方式

以下是Spring AOP中為所有類型通知傳遞參數的完整示例,包含詳細注釋和參數傳遞方式: // 1. 目標類(被增強的類) package com.example;public class TargetService {public void doTask(String param) {System.out.println("…

【Git教程】將dev分支合并到master后,那么dev分支該如何處理

將 dev 合并到 master 后的分支狀態與操作指南 1. 合并后的分支狀態 dev 分支不會消失: Git 的 git merge 命令僅將 dev 的內容合并到 master,不會刪除 dev 分支。合并后,dev 分支仍然存在,其歷史記錄和代碼保持不變。 分支的 H…

【go】異常處理panic和recover

panic 和 recover 當然能觸發程序宕機退出的,也可以是我們自己,比如經過檢查判斷,當前環境無法達到我們程序進行的預期條件時(比如一個服務指定監聽端口被其他程序占用),可以手動觸發 panic,讓…

CSS層疊順序

介紹 在 CSS 中,元素的層疊順序決定了當多個元素重疊時(跟布局沒有完全的關系,也就是說層疊順序只會在幾個疊放元素上進行比較,而不會改變布局),哪個元素顯示在最上面,哪個元素顯示在最下面。 …

數制——FPGA

1、定點數 定點數的三種表示方式: 原碼:符號位 絕對值 表示方法 反碼:正數的反碼表示 與原碼表示一致,負數的反碼表示 除符號位,其他位全都取反 補碼:正數的補碼表示 與原碼表示一致,負數的補碼…

在用redis當中可能遇到的問題解決方案以及redis中的一些名詞解釋

在用redis當中可能遇到的問題解決方案以及redis中的一些名詞解釋 Redis篇一、緩存穿透:解決方案:緩存空數據布隆過濾器 二、緩存擊穿解決方案互斥鎖,強一致性,性能差,速度慢邏輯過期,數據不同步&#xff0c…

一文詳解QT環境搭建:Windows使用CLion配置QT開發環境

在當今的軟件開發領域,跨平臺應用的需求日益增長,Qt作為一款流行的C圖形用戶界面庫,因其強大的功能和易用性而備受開發者青睞。與此同時,CLion作為一款專為C/C打造的強大IDE,提供了豐富的特性和高效的編碼體驗。本文將…

【區塊鏈安全 | 第二十四篇】單位和全局可用變量(二)

文章目錄 單位和全局可用變量(Units and Globally Available Variables)特殊變量和函數1. 區塊和交易屬性2. ABI 編碼和解碼函數3. bytes 成員函數4. string 成員函數5. 錯誤處理6. 數學和加密函數7. 地址類型成員函數8. 與合約相關9. 類型信息 單位和全…

一種監控錄像視頻恢復的高效解決方案,從每一幀中尋找可能性

該軟件旨在恢復從監控設備中刪除或丟失的視頻。該程序經過調整以處理大多數流行供應商的閉路電視系統中使用的專有格式,并通過智能重建引擎進行了增強,能夠為監控記錄提供任何通用解決方案都無法實現的恢復結果。如果不需要持續使用該軟件,則…

網紅指路機器人是否支持環境監測功能?

嘿呀,你可知道?如今的叁仟網紅指路機器人那可太牛啦!它們可不單單局限于為行人指明方向,還紛紛兼職當起了 “環境小衛士”,為咱們的城市生活注入了前所未有的超智能便利。就拿那個依托叁仟智慧桿打造的數智指路機器人來…

Navicat導出mysql數據庫表結構說明到excel、word,單表導出方式記錄

目前只找到一張一張表導出的方式 使用information_schema傳入表名查詢 字段名根據需要自行刪減,一般保留序號、字段名、類型、說明就行 SELECT COLUMNS.ORDINAL_POSITION AS 序號, COLUMNS.COLUMN_NAME AS 字段名, COLUMNS.COLUMN_TYPE AS 類型(長度), COLUMNS.N…

MySQL主從數據庫搭建

此方案可適用于Centos 7、OpenEuler、Ubuntu操作系統。 在國產銀河麒麟V10中,虛擬機中啟動的麒麟系統使用當前方案并未遇到問題,但是在服務器上安裝時,執行到初始化時出現了找不到依賴問題(目前已解決安裝問題),后續我會繼續更新該問題解決方案。 1. 創建主、從安裝目錄…

`git commit --amend` 詳解:修改提交記錄的正確方式

文章目錄 git commit --amend 詳解:修改提交記錄的正確方式1. 修改提交信息2. 補充遺漏的文件3. 結合 --amend 進行交互式修改4. 已推送提交的修改總結 git commit --amend 詳解:修改提交記錄的正確方式 git commit --amend 用于修改最近一次的提交&…

為什么package.json里的npm和npm -v版本不一致?

這個情況出現是因為package.json里的 npm 版本和系統實際使用的 npm 版本是兩個不同的概念。讓我來解釋一下: 原因解釋 全局 npm vs 項目依賴: npm -v顯示的是系統全局安裝的 npm 版本(位于/usr/bin/npm或類似路徑)package.jso…

python系統之綜合案例:用python打造智能詩詞生成助手

不為失敗找理由,只為成功找方法。所有的不甘,因為還心存夢想,所以在你放棄之前,好好拼一把,只怕心老,不怕路長。 python系列之綜合案例 前言一、項目描述二、項目需求三、 項目實現1、開發準備2、代碼實現 …