gpt4 book ai didi

LLVM:无法选择:内在 %llvm.spu.si.sf

转载 作者:行者123 更新时间:2023-12-04 05:09:45 24 4
gpt4 key购买 nike

我收到这个错误

> clang -std=c99 -c derivative.c -o derivative.a
fatal error: error in backend: Cannot select: intrinsic %llvm.spu.si.sf

当我尝试用 Clang 编译这个简单的 C 程序时

#include <stdio.h>
#include <math.h>

int N = 100;
double H = 0.001;
double PI = 3.14159265;

void derive(double* input, long elements, double* output) {
for (int i = 1; i < elements - 1; i++) {
output[i - 1] = (input[i + 1] - input[i - 1])/ (2 * H);
}
}

int main() {
double f[N];
double f_prime[N - 2];

for (int i = 0; i < N; i++) {
f[i] = sin(i * 2 * PI / (double)N);
}

derive(f, N, f_prime);

for (int i = 0; i < N - 2; i++) {
printf("%f %f\n", i * 2 * PI / (double)N, f_prime[i]);
}
}

我已经在 Internet 上进行了搜索,但(还)未能找到解决方案。

当我编译为 Bitcode 时,它​​编译但执行转储核心。

> clang -emit-llvm -c derivative.c -o derivative.bc
> lli derivative.bc
lli: BitcodeReader.cpp:283: llvm::Value* llvm::BitcodeReaderValueList::getValueFwdRef(unsigned int, llvm::Type*): Assertion `(Ty == 0 || Ty == V->getType()) && "Type mismatch in value table!"' failed.
0 lli 0x0000000000c6fb02
1 lli 0x0000000000c6ff93
2 libpthread.so.0 0x00007f304d7dbbd0
3 libc.so.6 0x00007f304ca19037 gsignal + 55
4 libc.so.6 0x00007f304ca1c698 abort + 328
5 libc.so.6 0x00007f304ca11e03
6 libc.so.6 0x00007f304ca11eb2
7 lli 0x000000000052eeb0 llvm::BitcodeReaderValueList::getConstantFwdRef(unsigned int, llvm::Type*) + 0
8 lli 0x0000000000538943 llvm::BitcodeReader::ParseFunctionBody(llvm::Function*) + 10275
9 lli 0x000000000053acb1 llvm::BitcodeReader::Materialize(llvm::GlobalValue*, std::string*) + 241
10 lli 0x0000000000535195 llvm::BitcodeReader::MaterializeModule(llvm::Module*, std::string*) + 85
11 lli 0x0000000000c0a82f llvm::Module::MaterializeAllPermanently(std::string*) + 31
12 lli 0x00000000005360fc llvm::ParseBitcodeFile(llvm::MemoryBuffer*, llvm::LLVMContext&, std::string*) + 44
13 lli 0x00000000004f70b7
14 lli 0x00000000004e74f3 main + 339
15 libc.so.6 0x00007f304ca03ea5 __libc_start_main + 245
16 lli 0x00000000004f0f41
Stack dump:
0. Program arguments: lli derivative.bc
Aborted (core dumped)

尝试 llvm-dis在 bc 文件上产生几乎相同的核心转储。

编辑:我试图找到最小的失败示例,看来问题是通过常量定义数组大小。

这失败了:

int main() {
int N = 100;
double f[N];
}

这个有效:

int main() {
double f[100];
}

EDIT2:

改变 int N = 100const int N = 100使用 Clang 编译程序。变量应该是 const 是有道理的,但另一方面,gcc -std=c99 -Wall derivative.c -lm不是const不提示.

最佳答案

这是 ubuntu 错误:https://bugs.launchpad.net/ubuntu/+source/llvm-3.2/+bug/1131614 .看起来他们盲目地修补了 llvm+clang,而不了解他们在做什么。

关于LLVM:无法选择:内在 %llvm.spu.si.sf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15023592/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com