寻找 llvm v3.5 的目标代码生成模块

summ.c     --(clang -emit-llvm -S)-->   summ.ll   --(llvm-as)---->  summ.bc    --(llc)--->   summ.s

opt -S -O2 实施机器无关优化,跟后端目标代码生成无关,故llc是llvm的后端。

1,示例代码

summ.c

int adddd(int aaa, int bbb, int ccc)
{
        aaa = aaa + bbb;
        aaa = aaa + ccc;

        return aaa;
}

Makefile

BIN_DIR := ../../local_x86_3_5/bin

CLANG   := $(BIN_DIR)/clang
OPT     := $(BIN_DIR)/opt
LLVM-AS := $(BIN_DIR)/llvm-as
LLC     := $(BIN_DIR)/llc

OUT :=  summ.s summ.bc summ.ll summ.clang.O3.s summ.opt.O2.ll summ.opt.O2.bc summ.opt.O2.s

all: $(OUT)


summ.ll: summ.c
        $(CLANG)   -emit-llvm -S summ.c -o summ.ll

summ.bc: summ.ll
        $(LLVM-AS) summ.ll -o summ.bc

summ.s: summ.bc
        $(LLC)     summ.bc -o summ.s

summ.clang.O3.s: summ.c
        $(CLANG) -O3 -S summ.c -o summ.clang.O3.s

summ.opt.O2.ll: summ.ll
        $(OPT) -O2 -S summ.ll -o summ.opt.O2.ll



summ.opt.O2.bc: summ.opt.O2.ll
        $(LLVM-AS) summ.opt.O2.ll -o  summ.opt.O2.bc

summ.opt.O2.s: summ.opt.O2.bc
        $(LLC) summ.opt.O2.bc -o summ.opt.O2.s



.PHONY: clean
clean:
        -rm $(OUT)

2,机器无关优化前后区别

关注 一下 summ.opt.O2.ll 的内容,机器对应的 ASM

3,X86后端分析

llc 是如何将 summ.opt.O2.ll 生成为 summ.opt.O2.s 的呢?

从命令行的角度如下:

$ llvm-as     summ.opt.O2.ll   -o    summ.opt.O2.bc

$ llc    summ.opt.O2.bc   -o   summ.opt.O2.s

关键是这里的 llc 的功能。

接下来分析 llc 的源码大体过程。。。

llc 代码路径:

/home/hipper/ex_llvmorg-3.5.0/llvm-project/llvm/tools/llc/llc.cpp

主要是这个函数:

static int compileModule(char **argv, LLVMContext &Context)

其中,X86 后端机器信息的路径为:

/home/hipper/ex_llvmorg-3.5.0/llvm-project/llvm/lib/Target/X86

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/683140.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Rethinking overlooked aspects in vision-language models

探讨多模态视觉语言模型的一些有趣结论欢迎关注 CVHub!https://mp.weixin.qq.com/s/zouNu-g-33_7JoX3Uscxtw1.Introduction 多模态模型架构上的变化不大,数据的差距比较大,输入分辨率和输入llm的视觉token大小是比较关键的,适配器,VIT和语言模型则不是那么关键。InternVL-…

【ArcGIS微课1000例】0017:ArcGIS中如何将kml(kmz)文件转json(geojson)?

文章目录 一、kml获取方式二、kml转图层三、图层转json一、kml获取方式 kml文件是一种很常用的数据格式,可以从谷歌地球(googleearth)获取某一个地区的kml范围文件,如青海湖(做好的kml文件可以从配套实验数据包0117.rar中获取)。 二、kml转图层 打开【KML转图层】工具,…

java判断对象是否还在被引用

1、代码取消强引用后&#xff0c;gc回收对象 public static void main(String[] args) {Object obj new Object();WeakReference<Object> weakRef new WeakReference<>(obj);System.out.println(weakRef.get());obj null; // 取消强引用,后续gc会被回收,如果不…

Web IDE 在线编辑器综合实践(Web IDE 技术探索 三)

前言 前面两篇文章&#xff0c;我们简单讲述了 WebContainer/api 、Terminal 的基本使用&#xff0c;离完备的在线代码编辑器就差一个代码编辑了。今天通过 monaco editor &#xff0c;来实现初级代码编辑功能&#xff0c;讲述的是整个应用的搭建&#xff0c;并不单独针对monac…

nginx --- 反向代理|负载均衡 | 动静分离

目录 反向代理如何配置 1、反向代理实例一 2、反向代理实例二 ocation 指令说明 Nginx 负载均衡 负载均衡常用算法 应用场景 总结 Nginx实现动静分离 一、什么是动静分离 二、实现方案 三、配置Nginx动静分离 四、验证测试 反向代理如何配置 1、反向代理实例一 实…

css文字超出元素省略,单行、多行省略

通用CSS .box {width: 500px;border: 1px solid red;padding: 10px;line-height: 24px;} 1.单行省略 .singe-line {text-overflow: ellipsis;overflow: hidden;word-break: break-all;white-space: nowrap;}<p>单行省略</p><div class"singe-line box&qu…

tomcat8w.exe指向了别的tomcat

这种情况通常发生是因为Tomcat服务在注册表中的配置指向了错误的可执行文件路径。tomcat8w.exe是一个Windows服务配置工具&#xff0c;它用于管理Tomcat服务&#xff0c;包括设置Path to executable&#xff0c;即指向Tomcat服务实际启动的.exe文件的路径。如果Path to executa…

【LeetCode】40. 组合总和 II

组合总和 II 题目描述&#xff1a; 给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意&#xff1a;解集不能包含重复的组合。 示例…

HTML静态网页成品作业(HTML+CSS+JS)—— 明星EXO介绍网页(5个页面)(table布局)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;使用Javacsript代码实现首页图片轮播切换&#xff0c;table 切换&…

更新关于其宠物产品质量的电子学习课程

​我们受托更新关于其宠物产品质量的电子学习课程。我们决定采用流行的“Corporate Memphis”风格设计插图&#xff0c;这是一种适用于商业的友好卡通风格&#xff08;该名称来源于80年代因其亮丽的色彩和独特的项目方法而闻名的设计团体“Memphis”&#xff09;。我们选择“Co…

使用迁移助手 (SSMA for Oracle) 将Oracle19c数据库迁移到SQL Server2022

如何使用适用于 Oracle 的 SQL Server 迁移助手Microsoft SQL Server Migration Assistant for Oracle (SSMA for Oracle) 将 Oracle 数据库迁移到 SQL Server Microsoft SQL Server Migration Assistant (SSMA) for Oracle is a tool to automate migration from Oracle data…

python写脚本的时候获取设备,没有端口(COM3)

首先python 可以用一下代码 测试端口是不是存在 import serial.tools.list_portsports list(serial.tools.list_ports.comports()) if not ports:print("没有检测到可用的串口设备。") else:for port in ports:print(f"可用串口: {port.device}")如果提示…

C语言 | Leetcode C语言题解之第133题克隆图

题目&#xff1a; 题解&#xff1a; struct Node** visited; int* state; //数组存放结点状态 0&#xff1a;结点未创建 1&#xff1a;仅创建结点 2&#xff1a;结点已创建并已填入所有内容void bfs(struct Node* s) {if (visited[s->val] && state[s->val] 2…

【亚马逊云科技 CSDN 联合巨献】 「对话AI 构建者:从基础到应用的 LLM 全景培训」 限时免费!

&#x1f680;&#x1f31f;【亚马逊云科技 & CSDN 联合巨献】 &#x1f4da;「对话AI 构建者&#xff1a;从基础到应用的 LLM 全景培训」&#x1f525; 限时免费&#xff01; &#x1f4c6; 抓紧时间&#xff01;6月7日前注册&#xff0c;原价 399&#xff0c;现在仅需 0…

【DevOps】网站安全案例分析:真实事件中的经验与教训

目录 一、常见的网站安全事故案例 1. Equifax 数据泄露事件&#xff08;2017年&#xff09; 2. WannaCry 勒索软件攻击事件&#xff08;2017年&#xff09; 3. GitHub DDoS 攻击事件&#xff08;2018年&#xff09; 二、网站安全事件的一般分析方法 1、事件背景调查 2、…

[WWW2024]轻量数据依赖的异常检测重训练方法LARA

开篇 近日&#xff0c;由阿里云计算平台大数据基础工程技术团队主导&#xff0c;与浙江大学合作的论文《LARA: ALight and Anti-overfitting Retraining Approach for Unsupervised Time Series Anomaly Detection 》被WWW2024收录&#xff0c;该方法解决了云服务正常模式随时…

“网络战时代的国家安全:策略、技术和国际合作“

网络战时代&#xff0c;国家安全面临着前所未有的挑战&#xff0c;这要求国家在策略、技术和国际合作方面采取更为综合和先进的应对措施。以下几点概述了这一领域的关键要素&#xff1a; 策略层面&#xff1a; 1. 建立全面的网络战战略&#xff1a;国家需要一个清晰、前瞻性…

C# 判断字符串不等于空的示例

在C#中&#xff0c;要判断一个字符串是否不等于空&#xff08;即它既不是null也不是空字符串""&#xff09;&#xff0c;方法有如下几种&#xff0c;如下。 方法1 使用逻辑运算符和string.IsNullOrEmpty方法 string myString "123"; // 假设要检查的字…

WPF Treeview控件开虚拟化后定位节点

不开虚拟化&#xff0c;可以用下面的方法直接定位 <Window x:Class"WpfApplication2.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"Title"Main…

电脑在线怎么改图片格式?3步改图片格式的操作步骤

在日常生活和工作中经常会因为不同的用途&#xff0c;需要使用不同格式的图片&#xff0c;那么如果遇到图片格式问题时&#xff0c;有什么方法能够快速在线转图片格式呢&#xff1f; 想要快速将图片格式转换成自己需要使用的格式&#xff0c;比较简单的一种方法可以使用网上的…