Hi all,
I’m a llvm beginner and using it to run my own toy-c-compiler. And I use my compiler to C-like code into following llvm IR:
extern void printi(int n);
int main(){
int a = 1;
int b = 2;
for(int i = 0; i < 10; i=i+1){
a = a + b;
b = a + b;
}
printi(a);
return 0;
}
llvm IR:
declare i32 @printf(ptr, ...)
declare i32 @scanf(ptr, ...)
declare void @printi(i32)
define i32 @main() {
entry:
%a = alloca i32, align 4, addrspace(4)
store i32 1, ptr addrspace(4) %a, align 4
%b = alloca i32, align 4, addrspace(4)
store i32 2, ptr addrspace(4) %b, align 4
br label %cond
%lttmp = icmp slt i32 %i1, 10
%addtmp = add i32 %a3, %b4
%addtmp7 = add i32 %a5, %b6
%addtmp10 = add i32 %i9, 1
cond: ; preds = %step8, %entry
%i = alloca i32, align 4, addrspace(4)
store i32 0, ptr addrspace(4) %i, align 4
%i1 = load i32, ptr addrspace(4) %i, align 4
br i1 %lttmp, label %body2, label %merge11
body2: ; preds = %cond
%a3 = load i32, ptr addrspace(4) %a, align 4
store i32 %a3, ptr addrspace(4) %a, align 4
%b4 = load i32, ptr addrspace(4) %b, align 4
%a5 = load i32, ptr addrspace(4) %a, align 4
store i32 %a5, ptr addrspace(4) %b, align 4
%b6 = load i32, ptr addrspace(4) %b, align 4
br label %step8
step8: ; preds = %body2
%i9 = load i32, ptr addrspace(4) %i, align 4
store i32 %i9, ptr addrspace(4) %i, align 4
br label %cond
merge11: ; preds = %cond
%a12 = load i32, ptr addrspace(4) %a, align 4
%calltmp = call void @printi(i32 %a12)
ret i32 0
}
but the program is ended with the ERROR below:
make: *** [Makefile:36: run] Segmentation fault (core dumped)
I don’t know where the problem is and I want to find a solution to debug my function. Thank you in advance!