当前位置: 首页 > article >正文

道 RAG 基础概念知识点/面试题总结

指令替换项目需求将加法指令替换为减法项目目录如下/MyProject├── CMakeLists.txt # CMake 配置文件├── build/ #构建目录│ └── test.c #测试编译代码└── mypass2.cpp # pass 项目代码一测试代码示例test.c// test.c#includeint my_add(int a, int b) {return a b;}int main() {int x 10;int y 20;printf(Result: %d\n, my_add(x, y));return 0;}二编写Pass其他的固定的模板之前文章注释有这里我只注释当前项目重要的部分代码流程 遍历指令并匹配ADD指令-替换为sub指令#include llvm/IR/PassManager.h#include llvm/Passes/PassBuilder.h#include llvm/Passes/PassPlugin.h#include llvm/Support/raw_ostream.h#include llvm/IR/Function.h#include llvm/IR/BasicBlock.h#include llvm/IR/Instruction.h#include llvm/IR/Instructions.h#include llvm/IR/IRBuilder.h // --- 【新增】必须包含这个头文件using namespace llvm;namespace {struct mypass3 : public PassInfoMixin {PreservedAnalyses run(Function F, FunctionAnalysisManager ) {errs() Analyzing Function: F.getName() \n;bool changed false;//这里的2个循环获取的是遍历函数的指令(函数-代码块-指令)for (BasicBlock BB : F) {for (Instruction Inst : BB) {]//判断当前的指令是ADD指令(加法)if (Inst.getOpcode() Instruction::Add) {errs() Found ADD, changing to SUB...\n Inst \n;//创建IR构建器//在修改IR时需要用到构建器IRBuilder builder(Inst);//这里时获取ADD的操作数//%add add nsw i32 %0, %1中的%0和%1Value *lhs Inst.getOperand(0); // 左操作数Value *rhs Inst.getOperand(1); // 右操作数//这里是构建新的指令sub//其中参数是//1左操作数//2操作数//3返回的变量名相当于%add add nsw i32 %0, %1中的%addValue *newSub builder.CreateSub(lhs, rhs, new_sub);//替换指令Inst.replaceAllUsesWith(newSub);errs() Replaced with SUB: \n *lhs \n *rhs \n *newSub \n;changed true;}}}if (changed) {return PreservedAnalyses::none();}return PreservedAnalyses::all();}};}extern C LLVM_ATTRIBUTE_WEAK ::llvm::PassPluginLibraryInfollvmGetPassPluginInfo() {return {LLVM_PLUGIN_API_VERSION,mypass3,v0.1,[](PassBuilder PB) {PB.registerPipelineParsingCallback([](StringRef Name, FunctionPassManager FPM,ArrayRef) {if (Name mypass3) {FPM.addPass(mypass3());return true;}return false;});}};}三Pass的构建下面引用的是之前文章的内容构建LLVM Pass需要写CMakeLists.txt构建声明1. 配置CMake配置文件CMakeLists.txt下面的cmake配置可以直接拿去用我已经标注好需要修改的位置#cmake 版本可通过 cmake --version 判断cmake_minimum_required(VERSION 4.1.1) #----修改 cmake版本号#项目名字project(mypass2) #----修改 项目名称#导入项目的 LLVM cmake 配置文件路径(如果根据我之前文章安装这里就相同)set(LLVM_DIR D:/LLVM/llvm-project/build/lib/cmake/llvm)#----修改 llvm cmake配置路径#寻找 LLVM 的包文件#REQUIRED 找不到 LLVM 则停止构建#强制使用 LLVM 安装时生成的配置文件进行定位find_package(LLVM REQUIRED CONFIG)#将 LLVM 的 CMake 模块路径添加到当前 CMake 搜索路径中以便后续使用 include(AddLLVM)。list(APPEND CMAKE_MODULE_PATH ${LLVM_CMAKE_DIR})#引入 LLVM 提供的专用 CMake 宏include(AddLLVM)#将 LLVM 的头文件目录如 llvm/IR/Function.h加入编译器的搜索路径include_directories(${LLVM_INCLUDE_DIRS})#导入 LLVM 编译时使用的宏定义add_definitions(${LLVM_DEFINITIONS})#设置 C 标准为 C17。(这里如果不用17编译会报错)set(CMAKE_CXX_STANDARD 17)#强制要求必须支持 C17如果编译器不支持则失败。set(CMAKE_CXX_STANDARD_REQUIRED ON)#创建一个模块化的库(.dll)add_library(mypass2 MODULE mypass2.cpp) #----修改 项目名称文件名#windows不用会报错导出符号#LLVM Pass 需要暴露一些特定的入口点如 getAnalysisUsage给 opt 工具调用。set_target_properties(mypass2 PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON) #----修改 项目名称# 指定该 Pass 需要链接的 LLVM 核心组件。# LLVMCore: 提供 IR、Function、Module 等核心类。# LLVMSupport: 提供各种辅助工具类如 errs() 输出。target_link_libraries(mypass2 LLVMCore LLVMSupport) #----修改 项目名称文件名# 为该目标设置特定的编译器选项。# /utf-8: 告诉 MSVC 编译器使用 UTF-8 编码处理源代码防止中文注释引起的乱码或编译错误。target_pile_options(mypass2 PRIVATE /utf-8)#----修改 项目名称文件名2.编译并构建Pass打开visual studio的工作台我这里是x64 Native Tools mand Prompt for VS 2022进到build目录#构建项目#其中-DCMAKE_BUILD_TYPERelWithDebInfo不选会报错由于我之前编译的是带符号的relase版本cmake -G Ninja -DCMAKE_BUILD_TYPERelWithDebInfo ..#编译ninja最后出现下面提示即为编译成功[2/2] Linking CXX shared module mypass2.dll四使用当前的pass进到build目录#把.c文件编译为.ll#-O1 使用O1优化这里我尝试-O0不优化会导致我的pass无法应用#-Xclang -disable-llvm-passes 不使用默认的pass优化clang -S -emit-llvm -O1 -Xclang -disable-llvm-passes test.c -S -o test.ll#使用passopt -load-pass-pluginmypass2.dll -passesmypass2 test.ll -S -o test_opt.ll#编译使用pass后的execlang test_opt.ll -o test_opt.exe#编译使用pass前的execlang test.ll -o test.exe输出结果运行test.exe不使用pass输出结果如下Result: 30运行test_opt.exe使用pass后输出结果如下Result: -10稳掏潮弊

相关文章:

道 RAG 基础概念知识点/面试题总结

指令替换 项目需求:将加法指令替换为减法 项目目录如下 /MyProject ├── CMakeLists.txt # CMake 配置文件 ├── build/ #构建目录 │ └── test.c #测试编译代码 └── mypass2.cpp # pass 项目代码 一,测试代码示例 test.c // test.c #includ…...

Cesium实战:手把手教你实现一个可拖拽编辑的交互式绘图工具(点线面圆矩形)

Cesium交互式绘图工具开发实战:从基础绘制到可编辑图形引擎 在三维地理信息系统开发中,交互式绘图功能已经成为行业标配需求。本文将深入探讨如何基于Cesium构建一个功能完备的绘图工具模块,不仅实现基础的点线面绘制,更重点解决图…...

Talk It 文字转语音:优缺点分析,寻找替代方案

您是否尝试过 Talkit,但发现它难以满足您的文本转语音需求?或者您只是想在安装 Talkit 应用之前了解一下它?无论如何,您都可以在本文中找到答案。我们测试了这款应用以及一些替代方案,并在下文中进行了总结。您可以轻松…...

马斯克起诉OpenAI开庭,索赔最高1800亿美元,案件责任认定5月21日结束

奥尔特曼、布罗克曼到场,马斯克未出席 当地时间4月27日上午,案件如期开庭,进入陪审团遴选阶段。据彭博社报道,奥尔特曼和布罗克曼亲自到场,这对于知名科技高管来说较为罕见,一般不会出庭,马斯克…...

ARM处理器ETB调试系统架构与配置指南

1. ARM RealView ETB调试系统架构解析嵌入式追踪缓冲器(ETT Buffer)作为ARM处理器调试体系的核心组件,其硬件架构由三大部分构成:追踪数据采集单元(ETM)、数据缓冲单元(ETB)以及调试接口单元(JTAG)。在ARM926EJ-S和ARM1136J-S等经典处理器中,…...

Windows 11任务栏歌词插件终极指南:桌面歌词悬浮完整方案

Windows 11任务栏歌词插件终极指南:桌面歌词悬浮完整方案 【免费下载链接】Taskbar-Lyrics BetterNCM插件,在任务栏上嵌入歌词,目前仅建议Windows 11 项目地址: https://gitcode.com/gh_mirrors/ta/Taskbar-Lyrics 还在为听歌时需要频…...

基于安卓的家电以旧换新评估系统毕设源码

博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在构建一个基于安卓平台的智能化家电以旧换新评估系统,以解决传统家电回收评估过程中存在的信息不对称、评估标准不统一及资源利用效率低下等…...

AMD Ryzen终极调试指南:SMUDebugTool深度使用教程

AMD Ryzen终极调试指南:SMUDebugTool深度使用教程 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcod…...

ChatGPT 图像2.0发布:开发者最该关注的5个变化与上手清单

先说结论 如果你只记一件事:这次不是“画得更好看”这么简单,而是“更能按指令把图做对”。 对开发者最直接的价值是:做封面图、流程图、UI 草图、运营图时,返工次数会明显下降。一、ChatGPT 图像 2.0 到底是什么 根据 OpenAI 202…...

基于vue的鲜花销售网站[vue]-计算机毕业设计源码+LW文档

摘要:随着互联网技术的发展和人们消费习惯的改变,线上鲜花销售市场前景广阔。本文介绍了一个基于Vue框架开发的鲜花销售网站,详细阐述了其设计目标、采用的相关技术、需求分析、系统设计以及具体的实现过程。该网站实现了用户管理、商品展示与…...

【论文解读】Deformable Mamba for Wide Field of View Segmentation

论文题目:Deformable Mamba for Wide Field of View Segmentation 论文链接:https://arxiv.org/pdf/2411.164811. Abstract 宽视场(WFoV)图像分割对于自动驾驶至关重要,但面临着两大挑战:一是广角镜头带来的…...

升级鸿蒙6后,大家担心的痛点都搞定啦!真香!

朋友们,被用户追着说“还不去适配鸿蒙”的产品经理委托我发篇贴。 最近我在各大极客论坛看到好多鸿蒙6先锋用户在担心:鸿蒙6是真流畅,但你们升级后最怕的不是“卡”,而是“空”——书架空了、网盘空了、连看视频的快乐都没了。 …...

(课堂笔记)SQL 高级查询技巧:行列转换、重复数据、递归查询、连续登录

📝SQL高级查询技巧本笔记总结了SQL数据处理中的5个核心技巧:1)行列转换:使用CASE WHEN/PIVOT实现行转列,UNION ALL/UNPIVOT实现列转行;2)伪列应用:ROWNUM分页查询,ROWID精确去重;3)重…...

League Akari终极指南:英雄联盟智能自动化工具完全教程

League Akari终极指南:英雄联盟智能自动化工具完全教程 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League Akari是一款基于英雄…...

FPGA图像处理提速秘籍:用双口RAM乒乓操作实现1080P视频流无缝缓存(实战篇)

FPGA图像处理提速秘籍:双口RAM乒乓操作实现1080P视频流无缝缓存实战 在实时视频处理领域,1080P60fps的高清视频流对硬件处理能力提出了严峻挑战。当数据速率达到148.5MHz(1920108060)时,传统单缓存架构往往难以避免帧…...

别再只会画板子了!用AD16仿真验证你的电路设计,保姆级避坑指南

从原理图到可靠设计:AD16电路仿真实战避坑手册 在硬件开发流程中,电路仿真常常被工程师们视为"可有可无"的步骤——直到某次打板后发现设计存在致命缺陷。Altium Designer 16内置的混合信号仿真工具,实际上是一个被严重低估的设计验…...

OpenCore Configurator:黑苹果引导配置的终极图形化解决方案

OpenCore Configurator:黑苹果引导配置的终极图形化解决方案 【免费下载链接】OpenCore-Configurator A configurator for the OpenCore Bootloader 项目地址: https://gitcode.com/gh_mirrors/op/OpenCore-Configurator 在非苹果硬件上运行macOS&#xff08…...

STM32F103驱动四路直流减速电机:DRV8848硬件连接与PWM配置避坑指南

STM32F103驱动四路直流减速电机:DRV8848硬件连接与PWM配置避坑指南 在机器人底盘或智能小车项目中,直流减速电机的稳定驱动是核心环节。许多嵌入式开发者初次使用STM32F103搭配DRV8848驱动模块时,常会遇到电机不转、异常抖动或控制失准等问题…...

告别绿幕!3分钟掌握OBS AI背景移除插件,让直播画面瞬间升级

告别绿幕!3分钟掌握OBS AI背景移除插件,让直播画面瞬间升级 【免费下载链接】obs-backgroundremoval An OBS plugin for removing background in portrait images (video), making it easy to replace the background when recording or streaming. 项…...

2026主流GEO优化公司实测推荐-技术自研与交付能力TOP5综合排行

一、市场形势:2026年GEO从“可选”到“必选”2026年,生成式AI已成为用户获取信息的第一入口。据CNNIC数据,中国生成式AI用户规模达5.15亿,半数网民将AI作为消费决策依据。与此同时,IDC报告显示2026年全球GEO市场规模已…...

怎样高效使用开源工具KeymouseGo:3种实用技巧与实战方案告别重复工作

怎样高效使用开源工具KeymouseGo:3种实用技巧与实战方案告别重复工作 【免费下载链接】KeymouseGo 类似按键精灵的鼠标键盘录制和自动化操作 模拟点击和键入 | automate mouse clicks and keyboard input 项目地址: https://gitcode.com/gh_mirrors/ke/KeymouseGo…...

命令行进度条完全指南:倒计时、缓冲区刷新与动态下载

进度条—命令行版本 前置知识 1.回车换行 \r:回车,将光标移动到当前行的开头。\n:换行,将光标移动到下一行的相同位置(通常是下一行开头)。在终端中,单独使用 \r 可以实现在同一行覆盖输出&…...

MixMatch实战避坑指南:在CIFAR-10上跑出论文效果,我踩了这些数据增强和超参数的坑

MixMatch实战避坑指南:在CIFAR-10上跑出论文效果的关键细节 当你在CIFAR-10数据集上尝试复现MixMatch论文结果时,可能会遇到各种意料之外的性能瓶颈。本文将分享我在实际项目中积累的经验教训,从数据增强管道的搭建到超参数的精细调节&#x…...

426-opencua tmux

技术趋势概述 2024年CSDN技术趋势预测聚焦于人工智能、云计算、边缘计算、量子计算、区块链等领域的突破性进展。文章将从技术革新、行业应用、开发者工具三个维度展开分析。 人工智能与机器学习 生成式AI的演进:多模态模型(如GPT-5)在代码生…...

别再为YOLOv8-Pose数据集发愁了!手把手教你用CVAT标注COCO格式关键点(附可视化代码)

从零构建YOLOv8-Pose数据集:CVAT标注全流程与实战技巧 当我们需要在特定场景下训练高精度的人体姿态估计模型时,现成的公开数据集往往难以满足需求。本文将带你完整走通从原始图像到可训练数据集的全部流程,重点解决标注过程中的实际痛点。 1…...

Ledger 硬件钱包支持币种大全(中国用户参考版)

Ledger 硬件钱包支持币种大全(中国用户参考版) 【核心摘要】 截至 2026 年,Ledger 硬件钱包通过其专有操作系统 BOLOS 与内置 SE 安全芯片(CC EAL5),已实现对全球超过 5,500 种数字资产的深度支持。对于中…...

别再乱装图片插件了!我手写了一个,能扒光整个网页(含背景/iframe/Shadow DOM)

开场白 我真的受够了,每次想从网页批量保存图片,要么右键被禁用,要么装了五六个插件还漏掉一半的 CSS 背景图,要么好不容易抓到图了,却发现插件在后台偷偷上报我的浏览记录。 于是我自己写了一个 —— Image Harvest…...

秘语盾技术团队解析 Ledger Nano X 蓝牙连接优化

秘语盾技术团队解析 Ledger Nano X 蓝牙连接优化 【核心摘要】 作为 Ledger 系列中唯一具备移动端无线连接功能的旗舰产品,Nano X 的蓝牙连接稳定性受限于移动设备系统版本及复杂的射频环境。针对中国用户在使用 Ledger Live App 时常见的“搜索不到设备”或“配对…...

MagiskHide Props Config终极指南:Android设备指纹伪装与安全检测绕过完整方案

MagiskHide Props Config终极指南:Android设备指纹伪装与安全检测绕过完整方案 【免费下载链接】MagiskHidePropsConf This tool is now dead... 项目地址: https://gitcode.com/gh_mirrors/ma/MagiskHidePropsConf 你是否曾经遇到过这样的困扰?在…...

暴雨大讲堂|AI算力异构与液冷重塑算力产业新格局

今年年初至今,短短四个月外部环境的变化应接不暇,不确定性成为常态,似乎人人都可以来上一句“唯一不变的是变化本身”作为口头禅。然而就在这些不确定中市场却给出了一个真实的“确定性”——那就是人工智能驱动下的算力增长。据彭博社近期报…...