LLVM:指令并不主导所有用途

2023-12-21

我用最少的指令(通常 3-5)分割所有基本块:

llvm::SplitBlock(BasicBlock, &*BasicBlockiter, Pass);

并尝试从 IR 获取目标文件

llc -filetype=obj 2.ll

我收到以下错误:

Instruction does not dominate all uses!
  %1 = alloca i32
  %mul = load i32* %1
Instruction does not dominate all uses!
  %1 = alloca i32
  %99 = load i32* %1

and

While deleting: i32 %
Use still stuck around after Def is destroyed:  %var = alloca i32
Assertion failed: use_empty() && "Uses remain when a value is destroyed!"

and

error: expected instruction opcode
invoke.cont2:                                     ; preds = %main_block, %invoke
.cont

IR:

  invoke.cont2:                                     ; preds = %main_block, %invoke.cont
  %call4 = invoke i32 @_ZStorSt13_Ios_OpenmodeS_(i32 8, i32 16)
          to label %invoke.cont3 unwind label %lpad1
  store i32 %call4, i32* %var4

我认为拆分后,指令位于不同的基本块中。 如果我将块拆分为 10-15 条指令,则一切正常。 我如何预测/检查并避免这种错误?


在您的第一个版本中,您在终止符指令之后有指令,这是不正确的,因为该指令从未执行。

在您的第二个版本中(此处未提及,请使用 stackoverflow 而不是私人电子邮件...)在定义它之前使用 %call (在商店实例中)(%call = ...),所以显然您的定义并不先于每个使用... 但正如我所说,存储不应该在调用之后,因为调用是一个终止符。

解决方案是将您的商店放在下一个基本块中(您可以创建一个新的):

%invoke.cont
  %call = invoke i8* @_ZNKSs5c_strEv(%"class.std::basic_string"* @loadedFile)
          to label %invoke.cont2_before unwind label %lpad1

invoke.cont2_before:                                     ; preds = %invoke.cont
  store i8* %call, i8** %reduced_var
  br label %invoke.cont2

invoke.cont2:                                     ; preds = %main_block, %invoke.cont2_before
  %call4 = invoke i32 @_ZStorSt13_Ios_OpenmodeS_(i32 8, i32 16)
          to label %invoke.cont3_before unwind label %lpad1

etc...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LLVM:指令并不主导所有用途 的相关文章

  • 我可以使用 LLVM(低级虚拟机)为哪些平台编译二进制文件?

    我对使用 LLVM 的 Clang 编译器感兴趣 LLVM 声称是跨平台的 但尚不清楚可以针对哪些平台 我对此做了很多谷歌搜索 但似乎没有太多关于 LLVM 支持的平台的信息 我唯一发现的是 this http llvm org docs
  • 链接不支持异常处理的代码 (C++/LLVM)

    我正在尝试使用 llvm 作为我的软件的代码生成后端 并且刚刚意识到 llvm 的编译不支持 C 异常处理 为了提高效率 然而 在我的软件中 我广泛使用异常处理 如果我将所有回调函数包装在 try catch blocks 中 这样就不需要
  • 如何使用 LLVM IRBuilder 从外部 DLL 调用函数?

    如何从 LLVM 调用外部 DLL 的函数 如何从 LLVM 代码调用 DLL 文件中定义的函数 由于您的问题缺少重要信息 我猜您想实现以下目标 我猜你会使用 c c 接口并且该函数有一个签名void fun void 我还猜测您将使用 L
  • llvm OCaml 绑定

    我正在研究 llvm OCaml 绑定 我通过 opam 安装了 llvm 包 opam install llvm 当我在 utop 中使用 llvm 时 出现以下错误 require llvm Error The external fun
  • LLVM 执行哪些优化?

    我想具体了解一下LLVM的各个优化级别分别对应什么 也就是说 我想知道当我使用 llvm 或 clang 或 opt 的 0x 选项时 哪些优化过程是准确执行的 在前端之外 以及按什么顺序执行 相应工具的 man 没有提供关于此事的太多信息
  • 从源代码构建 Clang 时什么时候需要 libc++ 源代码?

    我多年来一直在 Linux 和 OS X 上构建 Clang LLVM 下载页面 http llvm org releases download html 我一直使用以下来源 LLVM LLVM 源 编译器前端 Clang 源 编译器 RT
  • 如果别名会降低运行时性能,为什么编译器要执行别名?

    我出于纯粹的兴趣而学习 C 和计算机科学主题 这让我对编译器产生了兴趣 我读过的所有内容都告诉我 别名会导致程序集输出速度变慢 需要在每次迭代时重新加载值 我已经能够使用 Intel C C 编译器使用该标志在一些基准测试中获得轻微的提高
  • 使用带有空格的 CMake 的 include_directories 命令

    我正在使用 CMake 来构建我的项目 并且有以下行 include directories LLVM INCLUDE DIRS 评估后LLVM INCLUDE DIRS 评估为 include directories C Program
  • 防止运行测试时优化掉未使用的静态函数

    我正在编写一个将利用 LLVM 的库 通过inkwell https github com TheDan64 inkwell 来 JIT 编译一些函数 这些函数需要能够回调我的代码中的一些 Rust 函数 我让它工作 但我的单元测试不起作用
  • 使用 LLVM 为整个源代码生成 CFG

    LLVM 社区的任何人都知道是否有一种方法可以使用以下方法为整个输入源代码生成 CFG opt dot cfg foo ll bc 由于此函数为每个函数生成 CFG 因此函数之间的连接将被忽略 看来旧的分析工具已经贬值了 我想知道你是否找到
  • 如何使用自定义 llc 编译 Rust 程序?

    我有一个自定义 LLVM 后端 并且想为该自定义 nostd 目标交叉编译 Rust 我想分两步编译 Rust 程序 Using rustc生成 LLVM IR 用我自己的opt and llc将 LLVM IR 转换为机器代码 我尝试使用
  • 找不到“Attributes.inc”文件

    我一直在使用中提供的标题include llvm and include llvm c尝试制作我自己的编译器 但是 每当我尝试编译时 都会收到此错误 没有llvm IR Attributes inc在我的文件或我见过的任何 LLVM 项目中
  • 通过 cmake 链接 libc++ 时 libc++abi 的链接问题

    我正在尝试构建一个简单的 hello world C 使用 LLVM Clang 3 7 0 的程序 根据工具链的源代码构建libc 使用命令行 clang std c 14 stdlib libc fno exceptions hello
  • 如何让 clangd 转向 c++20

    当没有其他信息时 如何让 clangd 回退到 c 20 例如 在第一次构建之前 cmake 可以生成一个 这是在带有最新 LLVM 的 Arch Linux 上 这是通过 Emacs LSP 运行的 但这应该没有什么区别 你可以加 Com
  • LLVM cpp 后端,它会取代 c 后端吗?

    我的问题是关于 CPP 后端 它与 C 后端的用途相同吗 C 后端是我最喜欢的 LLVM 功能之一 我对它被删除感到非常沮丧 真正的区别是什么 我非常感谢任何帮助 参考 LLVM 3 1 发行说明 http llvm org release
  • Xcode 3.1.4 中内置分析器

    我想知道 Xcode 3 1 4 中内置的分析器是否使得单独使用 LLVM Clang 静态分析器变得多余 请参考这里的原文 使用 LLVM Clang 静态分析器查找内存泄漏 http www fruitstandsoftware com
  • 一个单元在哪一级测试无锁代码?

    Can LLVM https packages debian org stretch llvm QEMU https packages debian org stretch qemu kvm GDB https packages debia
  • 未生成隐式移动函数

    我有以下课程 class Blub public Blub int value Not a copy constructor Blub Blub default This line is necessary because move con
  • 如何将 IR 保存到文件并将其构建为可执行文件?

    现在我使用 clang 将 c 文件构建为 s 文件 我已经使用llvm API修改了IR 但是 现在我无法将修改后的 IR 保存到文件中 我想使用 LLVMWriteBitcodeToFile 但找不到 LLVMOpaqueModule
  • 如何将本机 popcount 与 numba 一起使用

    我正在使用 numba 0 57 1 我想在我的代码中利用本机 CPU popcount 我现有的代码太慢 因为我需要运行它数亿次 这是一个 MWE import numba as nb nb njit nb uint64 nb uint6

随机推荐

  • 如何从代码分析中排除目录?

    对此有一些疑问 但没有一个能解决我的问题 我使用 SonarQube 对我的一个项目进行代码分析 其中包含一个 Migrations 目录 我想exclude来自代码分析的该目录中的所有源文件 在项目配置 gt 设置 gt 排除 gt 文件
  • 如何使用 css nth-child 选择列表中的最后 2 项?

    是否可以 如果没有 有没有办法用 jQuery 来做到这一点 CSS3 可以做到这一点 考虑标记 ul li a href First item a li li Second item li li a href Test a li li a
  • javascript/jquery中获取正在运行的线程id的方法

    我是 javascript jquery 新手 我有一个简单的问题 其中一个 java 脚本函数正在运行 并且想查看该线程的线程 ID 在java中我们确实喜欢 Thread getID in java 这将打印正在运行的线程的线程ID 类
  • 将 JSON 数据从 Android POST 到 PHP 的正确方法

    我看过很多教程和问题 使用以下方法将 JSON 对象从 Android 发送到 PHP 例如这个 WordPress 博客 http fahmirahman wordpress com 2011 04 26 the simplest way
  • 我的 Android 服务在启动时无法启动

    我在启动时启动服务时遇到问题 我有一个广播接收器 每当设备启动 它没有启动 时就应该调用它 并且它启动我的服务 不幸的是 该服务尚未启动 我看过this https stackoverflow com questions 2784441 t
  • 如何禁用系统设备? [复制]

    这个问题在这里已经有答案了 有没有办法从 C NET 禁用系统设备 基本上是模拟您进入设备管理器并以这种方式禁用设备时的情况 我假设有一个可以调用的 WinAPI 函数 但我不知道它是哪一个 我需要这样做的原因是我需要禁用设备并在启用设备后
  • 异常(第一次机会)...内存中的 cudaError_enum

    因此 在一些研究表明问题出在 cublas 库之后 我正在开发一个项目 该项目让我发现了这个错误 所以现在我有以下 最小 问题 我打开 NVIDIA CUDA SDK 4 2 中的 simpleCUBLAS 示例来测试是否可以重现该问题 程
  • 如何避免从团队桌面客户端启动固定应用程序时出现访问此应用程序错误的问题

    从大约 2 周前 大约 2021 年 9 月 14 日 开始 我们的许多客户开始报告从其桌面团队客户端启动任何 PINNED 应用程序时出现的问题 网络聊天团队客户端可以正常启动固定的应用程序 应用程序作为团队管理门户中设置策略的一部分固定
  • 广播接收器的生命周期

    我想要一个BroadcastReceiver必须永远处于活动状态 100 现在 如果我在 Android 清单中注册了这个 情况会是这样 还是当应用程序本身被 Android 框架销毁时它会被杀死 现在 我还有一个服务一直在前台运行 这能确
  • 带有动态表名的 SQL 语句还是重新设计?

    我有一个 MS SQL 2008 数据库 它存储用于创建加权无向图的数据 数据存储在具有以下结构的表中 id1 int NOT NULL id2 int NOT NULL weight float NOT NULL 其中 id1 和 id2
  • 从 macports (macOS) 安装 gcc 8 的 gdb libstdc++ 漂亮打印机中的错误

    我按照中所述设置了 gdb libstdc 漂亮打印机GDB Wiki https sourceware org gdb wiki STLSupport 但漂亮的打印不起作用 gdb 不断打印原始数据 我变了打印机 py要解决这个问题 py
  • 定制计数

    我如何从中派生一个类cout例如 写入它 new cout lt lt message 将相当于 cout lt lt FUNCTION lt lt message lt lt end of message lt lt endl class
  • 自动检测连接到网络的新计算机

    有没有一种优雅的方法可以让程序检测连接到网络的新计算机 我希望我的程序能够 自动感知 网络上连接的新计算机 它们位于同一网络上 就像 USB 设备连接到计算机一样 我现在所做的就是不时保存网络中所有计算机的列表 另一种方法是 PING 子网
  • 对多个提供商使用 requestLocationUpdates

    这是关于LocationManagerAndroid 中的类 有没有办法使用requestLocationUpdates 但以某种方式让它每次都能为我提供最佳活跃提供商的结果 我可以通过它的结果getBestProvider 但它总是会从该
  • Picasso 加载位图后,如何获取它的调色板?

    2014 年 10 月 杰克 沃顿 Jake Wharton 写道强迫毕加索玩调色板 http jakewharton com coercing picasso to play with palette 其中 有两种方法正在考虑 使用转换生
  • osmdroid ItemizedOverlay 错误:该类型未定义方法boundCenterBottom(Drawable)

    我现在正在为这个问题苦苦挣扎几个小时 我试图让我的 itemizedoverlay 正常工作 但我不断收到此错误 The method boundCenterBottom Drawable is undefined for the type
  • SolrCore中“缺少内容流”异常的意义是什么?

    我见过其他 https stackoverflow com questions 5727088 org apache solr common solrexception missing content stream关于这个主题的问题 然而
  • 如何在gitlab-ci中指定子模块分支?

    如何在 gitlab ci yml 中为 gitlab ci 中的子模块 不同的存储库 指定分支 你不知道 您在中指定它 gitmodules https git scm com docs gitmodules您正在构建的项目的文件 sub
  • 在 MVC 中,一个 Edit HttpPost 正在工作,另一个则不工作。我缺少什么?

    谷歌搜索一般和 SO 还没有帮助我 所以 我正在从头开始构建我的第一个 MVC 应用程序 按照MVC 音乐商店示例 http mvcmusicstore codeplex com 而是构建一个小应用程序 可以在其中创建竞技场战士并让它们互相
  • LLVM:指令并不主导所有用途

    我用最少的指令 通常 3 5 分割所有基本块 llvm SplitBlock BasicBlock BasicBlockiter Pass 并尝试从 IR 获取目标文件 llc filetype obj 2 ll 我收到以下错误 Instr