cost 108 ms
核心对象的 LLVM C-API 生命周期 - LLVM C-API Lifecycles of core objects

我已经开始玩 LLVM,制作一种宠物语言。 我正在使用 C-API。 我有一个解析器和基本的 AST,但我在 LLVM 方面遇到了一些障碍。 以下是我的代码的缩小版本,用于说明我当前的问题: 我可以使用以下命令编译它: 或者,我也尝试过: 无论哪种方式,我都会得到这个结果: 我也试过使用 clang ...

LLVM-C 创建 object 文件会导致:“TargetMachine 无法发出这种类型的文件” - LLVM-C creating object file results in: “TargetMachine can't emit a file of this type”

尝试使用 LLVM-C 生成一个非常简单的 object 文件。 不幸的是,我仍然坚持“TargetMachine 无法发出这种类型的文件”尝试重新排序代码和 CPU 的各种东西(x64-64、通用和 LLVMGetHostCPUName())。 显然这里缺少一些东西(希望是显而易见的)。 下面的 ...

静态调度OOO处理器 - Statically scheduling OOO processors

LLVM MISched 指令调度程序使用处理器功能单元、管道和延迟的声明性 TableGen 描述。 想象一下,试图从这些声明中确定与英特尔优化参考手册中的编码指南等效的情况。 从广义上讲,静态调度 OOO 处理器的目标/技术是什么? 对于OOO处理器,它什么时候会在B之前调度指令A,什么时候在 ...

释放模式下安全 Rust 中的有符号整数溢出是否被视为未定义行为? - Is signed integer overflow in safe Rust in release mode considered as undefined behavior?

Rust 在调试和发布模式下以不同的方式处理有符号整数溢出。 当它发生时,Rust 在调试模式下会发生恐慌,而在发布模式下默默地执行二进制补码包装。 据我所知,C/C++ 将有符号整数溢出视为未定义行为,部分原因是: 在 C 标准化的那个时候,表示有符号整数的不同底层体系结构,例如补码,可 ...

为什么在这个 Rust 代码中没有分支预测失败惩罚? - Why isn't there a branch prediction failure penalty in this Rust code?

我写了这个非常简单的 Rust 函数: 我编写了一个基本的基准测试,它使用一个有序数组和一个无序数组调用该方法: 我很惊讶这两个基准测试的运行时间几乎完全相同,而 Java 中的类似基准测试显示了两者之间的明显差异,这大概是由于在 shuffled 情况下分支预测失败。 我已经看到提到条件 ...

为什么在使用240个或更多元素循环数组时会产生很大的性能影响? - Why is there a large performance impact when looping over an array with 240 or more elements?

当在Rust中的数组上运行求和循环时,我注意到当CAPACITY > = 240时性能下降很大CAPACITY = 239大约快80倍。 是否有特殊的编译优化Rust正在为“短”数组做什么? 用rustc -C opt-level=3编译。 use std::time::In ...

Rust 的 128 位整数 `i128` 如何在 64 位系统上工作? - How does Rust's 128-bit integer `i128` work on a 64-bit system?

Rust 有 128 位整数,它们用数据类型i128 (和u128表示无符号整数)表示: Rust 如何让这些i128值在 64 位系统上工作; 例如,它如何对这些进行算术运算? 因为,据我所知,该值无法放入 x86-64 CPU 的一个寄存器中,编译器是否以某种方式将 2 个寄存器用于一 ...

为什么 Rust 编译器不优化代码,假设两个可变引用不能别名? - Why does the Rust compiler not optimize code assuming that two mutable references cannot alias?

据我所知,引用/指针别名会阻碍编译器生成优化代码的能力,因为它们必须确保生成的二进制文件在两个引用/指针确实别名的情况下正确运行。 例如,在下面的 C 代码中, void adds(int *a, int *b) { *a += *b; *a += *b; } 当使用-O3标志 ...

"<i>Can compilers (specifically rustc) really simplify triangle-summation to avoid a loop?<\/i>编译器(特别是 rustc)真的可以简化三角求和以避免循环吗?<\/b> <i>How?<\/i>如何?<\/b>" - Can compilers (specifically rustc) really simplify triangle-summation to avoid a loop? How?

在 Blandy 和 Orendorff 的Programming Rust第 322 页上是这样的声明: ...Rust...认识到有一种更简单的方法可以将数字从 1 加到n :总和始终等于n * (n+1) / 2 。 这当然是一个众所周知的等价,但是编译器是如何识别它的呢? 我猜它 ...

C++ 标准是否允许未初始化的 bool 使程序崩溃? - Does the C++ standard allow for an uninitialized bool to crash a program?

我知道 C++ 中的“未定义行为”几乎可以让编译器做任何它想做的事情。 然而,我遇到了一次让我感到惊讶的崩溃,因为我认为代码足够安全。 在这种情况下,真正的问题只发生在使用特定编译器的特定平台上,并且只有在启用优化的情况下才会发生。 我尝试了几种方法来重现问题并将其简化到最大程度。 这是一个名为 ...

为什么 clang 使用 -O0 产生低效的 asm(对于这个简单的浮点和)? - Why does clang produce inefficient asm with -O0 (for this simple floating point sum)?

我正在 llvm clang Apple LLVM 版本 8.0.0 (clang-800.0.42.1) 上反汇编此代码: 我编译时没有使用 -O 规范,但我也尝试使用 -O0(给出相同的值)和 -O2(实际上计算值并存储它预先计算的值) 由此产生的拆卸如下(我删除了不相关的部分) 显然 ...

如何将一个函数下的多个相同类型的循环映射到LLVM IR中生成的基本块? - How to map multiple same type loops under a function to the generated basic block in LLVM IR?

如果循环的类型不同,那么我可以轻松地用名称来标识它们,但是如果有多个相同类型的循环(例如5个while循环),那么如何识别LLVM IR中的哪个基本块对应于源代码中的哪个循环码? 手动识别很容易,因为我们可以顺序访问代码和LLVM IR,但是我正在寻找如何以编程方式识别相同的对象。 ...


 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM