27得票1回答
LLVM的整数类型

LLVM语言将整数类型指定为iN,其中N是整数的位宽,范围从1到2^23-1(参见:http://llvm.org/docs/LangRef.html#integer-type) 我有两个问题: 将C程序编译为LLVM IR级别时,可能降低哪些类型为 i1、i2、i3等?看起来像是 i8...

571得票6回答
C++标准允许未初始化的布尔值导致程序崩溃吗?

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

11得票3回答
LLVM为什么会分配冗余变量?

这是一个带有枚举定义和main函数的简单C文件:enum days {MON, TUE, WED, THU}; int main() { enum days d; d = WED; return 0; } 它被转译为以下LLVM IR:define dso_local...

13得票2回答
LLVM 中的 C ABI

我有一个使用LLVM编写的编译器,我想提高ABI兼容性。例如,在Windows x86或Linux上,我发现很难找到C ABI规范文档。而我找到的那些是用RAX/EAX等术语解释的,而不是我可以使用的IR术语。 到目前为止,我认为我已经弄清楚了LLVM如何隐式处理聚合-也就是说,它将聚合的成...

12得票1回答
为什么使用-O0选项(针对这个简单的浮点数求和)时,clang生成效率低下的汇编代码?

我正在使用 llvm clang Apple LLVM 版本 8.0.0 (clang-800.0.42.1) 对这段代码进行反汇编: Translated text: Using llvm clang Apple LLVM version 8.0.0 (clang-800.0.42.1),...

10得票1回答
为什么Rust编译器不能优化掉Box::downcast的Err分支?

我有一个 Box<dyn Any>,并且我知道其中的基础类型,因此我想优化掉Box::downcast()中的测试(源代码)。 首先我尝试使用 std::hint::unreachable_unchecked():pub unsafe fn downcast() -> B...

132得票1回答
何时应该在Rust中使用inline?

Rust有一个"inline"属性,可以使用以下三种方式之一: #[inline] #[inline(always)] #[inline(never)] 何时应该使用它们? 在Rust参考文献中,我们看到一个内联属性部分的说明: 编译器根据内部启发式方法自动内联函数。错误地内联函...

185得票4回答
Rust的128位整数`i128`在64位系统上是如何工作的?

Rust支持128位整数,这些使用数据类型i128(无符号整数使用u128)表示:let a: i128 = 170141183460469231731687303715884105727; Rust如何在64位系统上操作i128值,例如如何进行算术运算?据我所知,该值无法适应x86-64 C...

16得票4回答
为什么这段代码生成的汇编比等价的C++/Clang代码多得多?

我编写了一个简单的 C++ 函数,以便检查编译器是否进行了优化:bool f1(bool a, bool b) { return !a || (a && b); } 之后,我在 Rust 中检查了等效物:fn f1(a: bool, b: bool) -> boo...

7得票1回答
为什么在这段 Rust 代码中没有分支预测失败惩罚?

我编写了这个非常简单的 Rust 函数: fn iterate(nums: &Box<[i32]>) -> i32 { let mut total = 0; let len = nums.len(); for i in 0..len { ...