c - 如何防止 clang/llvm 将局部变量编译为全局变量?
问题描述
我有一个 C 代码:
int64_t sample_max(int64_t *beg, int64_t len) {
if (len == 0) {
return 0;
}
int64_t max = 0x8000000000000000;
int64_t *end = beg + len;
while (beg < end) {
if (*beg > max) {
max = *beg;
}
beg++;
}
return max;
}
并通过铿锵声来遵守它:
clang -S -target x86_64-unknown-none -masm=intel -mno-red-zone -mstackrealign -mllvm -inline-threshold=1000 -fno-asynchronous-unwind-tables -fno-exceptions -fno-rtti -O3 -fno-builtin -ffast-math -mavx2 lib/sample.c -o lib/sample_avx2.s
我发现 clang/llvm 将局部变量“max = 0x8000000000000000”编译为全局:
vpbroadcastq ymm0, qword ptr [rip + .LCPI1_0]
vmovdqa ymm3, ymm0
vmovdqa ymm2, ymm0
vmovdqa ymm1, ymm0
....
.LCPI1_0:
.quad -9223372036854775808 # 0x8000000000000000
.section .rodata,"a",@progbits
.align 32
如何防止 clang/llvm 将局部变量编译为全局变量?我们可以将 0x8000000000000000 编译为立即值吗?
谢谢。
解决方案
推荐阅读
- java - 我如何在这里修复非法的表达式开头
- twitter-bootstrap - Bootstrap Navbar 周围有空白区域
- python - 如何在 python 中访问 wss:// 链接?
- python - Web 应用程序不显示任何内容不断返回 ERR_EMPTY_RESPONSE
- flutter - 如何取消用户的订阅购买?
- python - 隐藏的堆叠 LSTM 层是如何互连的?Python
- python - 如何优化嵌套循环,包括用于计算 IVOL 的大量回归?
- python - ValueError:x 和 y 必须具有相同的第一维,但具有形状 (1, 2) 和 (2,)
- php - 按字母顺序排列数组
- html - 在图像上使用 CSS object-fit:contain 会在其周围留下空白