2013-02-22 2 views
2

내가이 오류LLVM은 : 선택할 수 없습니다 : 고유 %의 llvm.spu.si.sf

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

을 얻고 난 이미 검색

#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]); 
    } 
} 

연타

와 간단한 C 프로그램을 컴파일 할 때 인터넷을 구축했지만 솔루션을 찾을 수는 없었습니다.

내가 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) 

은 BC-파일에 llvm-dis을 시도하는 것은 거의 동일한 코어 덤프를 얻을 수 있습니다.

EDIT : 제가 최소 실패 예를 찾기 위해 시도하고, 문제가 일정한 통해 배열 크기를 정의되어 보인다.

이 실패

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

이 작동합니다

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

EDIT2 : const int N = 100-int N = 100 프로그램이 연타로 컴파일하게 변경

. 변수가 const이어야하지만 gcc -std=c99 -Wall derivative.c -lmconst이 아닌 경우 불평하지 않는 것이 좋습니다.

+0

어느 아키텍처에 어떤 버전이 포함되어 있습니까? XCode 4.6 clang (LLVM3.1 기반)을 반복 할 수 없음 –

+0

'clang -v': 우분투 clang 버전 3.2-1 ~ exp5ubuntu2 (태그/RELEASE_32/final) (LLVM 3.2 기준) 대상 : x86_64-pc -linux-gnu 쓰레드 모델 : posix –

+0

내 첫 번째 추측은 명시 적으로 수학 라이브러리를 링크해야합니다. 예 : 'gcc '의 경우'-lm'을 사용합니다. 그러나'math.h '문제와 Clang을 검색 할 때 어떤 힌트도 찾을 수 없었습니다. –

답변

0

치명적인 오류 메시지는 컴파일러에서 버그를 발견했음을 나타내는 것입니다. llvm.org/bugs에서 버그를보고 해보십시오.

+0

컴파일러가 아직 너무 단순해서이 간단한 프로그램을 컴파일 할 수 없다고 생각합니까? 나는 어떻게 든 버그 보고서를 제출하기 전에 오류가 내 편이 아닌지 확인하고 싶습니다. –

+0

@ cpt.jazz 연결에 문제가 있어도 잘못된 오류 메시지가 표시된다는 버그가 _ 있습니다. 필자는 컴파일러의 릴리스 버전을 기반으로하는 경우 보고서가 순서대로 있다고 생각합니다. –

+1

나는 버그 보고서를 제출했다 : http://llvm.org/bugs/show_bug.cgi?id=15333 –

관련 문제