mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
Fix debug parameter definition. Array foreach GEP.
This commit is contained in:
@@ -169,7 +169,7 @@ void llvm_emit_debug_parameter(GenContext *c, Decl *parameter, unsigned index)
|
||||
c->debug.function,
|
||||
name,
|
||||
strlen(name),
|
||||
index,
|
||||
index + 1,
|
||||
c->debug.file,
|
||||
loc->line,
|
||||
llvm_get_debug_type(c, parameter->type),
|
||||
|
||||
@@ -540,7 +540,17 @@ static void llvm_emit_foreach_stmt(GenContext *c, Ast *ast)
|
||||
|
||||
assert(llvm_value_is_addr(&enum_value));
|
||||
|
||||
LLVMValueRef ref_to_element = llvm_emit_pointer_inbounds_gep_raw(c, actual_type_llvm, enum_value.value, index_value.value);
|
||||
LLVMValueRef ref_to_element;
|
||||
AlignSize align;
|
||||
if (enum_value.type->type_kind == TYPE_ARRAY || enum_value.type->type_kind == TYPE_VECTOR)
|
||||
{
|
||||
ref_to_element = llvm_emit_array_gep_raw_index(c, enum_value.value,
|
||||
llvm_get_type(c, enum_value.type), index_value.value, index_value.alignment, &align);
|
||||
}
|
||||
else
|
||||
{
|
||||
ref_to_element = llvm_emit_pointer_inbounds_gep_raw(c, actual_type_llvm, enum_value.value, index_value.value);
|
||||
}
|
||||
BEValue result;
|
||||
if (ast->foreach_stmt.value_by_ref)
|
||||
{
|
||||
|
||||
@@ -52,17 +52,17 @@ foreach.cond: ; preds = %foreach.inc, %entry
|
||||
br i1 %lt, label %foreach.body, label %foreach.exit
|
||||
|
||||
foreach.body: ; preds = %foreach.cond
|
||||
%ptroffset = getelementptr inbounds i32, [10 x i32]* %y, i64 %10
|
||||
%11 = load i32, i32* %ptroffset, align 4
|
||||
store i32 %11, i32* %v, align 4
|
||||
%12 = load i32, i32* %v, align 4
|
||||
call void (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i32 %12)
|
||||
%11 = getelementptr inbounds [10 x i32], [10 x i32]* %y, i64 0, i64 %10
|
||||
%12 = load i32, i32* %11, align 4
|
||||
store i32 %12, i32* %v, align 4
|
||||
%13 = load i32, i32* %v, align 4
|
||||
call void (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i32 %13)
|
||||
br label %foreach.inc
|
||||
|
||||
foreach.inc: ; preds = %foreach.body
|
||||
%13 = load i64, i64* %idx, align 8
|
||||
%14 = add i64 %13, 1
|
||||
store i64 %14, i64* %idx, align 8
|
||||
%14 = load i64, i64* %idx, align 8
|
||||
%15 = add i64 %14, 1
|
||||
store i64 %15, i64* %idx, align 8
|
||||
br label %foreach.cond
|
||||
|
||||
foreach.exit: ; preds = %foreach.cond
|
||||
|
||||
@@ -52,27 +52,27 @@ foreach.cond: ; preds = %foreach.inc, %entry
|
||||
%lt = icmp ult i64 %8, 8
|
||||
br i1 %lt, label %foreach.body, label %foreach.exit
|
||||
foreach.body: ; preds = %foreach.cond
|
||||
%ptroffset = getelementptr inbounds i32, [8 x i32]* %x, i64 %8
|
||||
%9 = load i32, i32* %ptroffset, align 4
|
||||
store i32 %9, i32* %i, align 4
|
||||
%10 = load i32, i32* %i, align 4
|
||||
call void (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i32 %10)
|
||||
%9 = getelementptr inbounds [8 x i32], [8 x i32]* %x, i64 0, i64 %8
|
||||
%10 = load i32, i32* %9, align 4
|
||||
store i32 %10, i32* %i, align 4
|
||||
%11 = load i32, i32* %i, align 4
|
||||
call void (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i32 %11)
|
||||
br label %foreach.inc
|
||||
foreach.inc: ; preds = %foreach.body
|
||||
%11 = load i64, i64* %idx, align 8
|
||||
%12 = add i64 %11, 1
|
||||
store i64 %12, i64* %idx, align 8
|
||||
%12 = load i64, i64* %idx, align 8
|
||||
%13 = add i64 %12, 1
|
||||
store i64 %13, i64* %idx, align 8
|
||||
br label %foreach.cond
|
||||
foreach.exit: ; preds = %foreach.cond
|
||||
br label %cond
|
||||
cond: ; preds = %assign, %foreach.exit
|
||||
%13 = phi i64 [ 0, %foreach.exit ], [ %add, %assign ]
|
||||
%le = icmp sle i64 %13, 7
|
||||
%14 = phi i64 [ 0, %foreach.exit ], [ %add, %assign ]
|
||||
%le = icmp sle i64 %14, 7
|
||||
br i1 %le, label %assign, label %exit
|
||||
assign: ; preds = %cond
|
||||
%14 = getelementptr inbounds [8 x i32], [8 x i32]* %x, i64 0, i64 %13
|
||||
store i32 123, i32* %14, align 4
|
||||
%add = add i64 %13, 1
|
||||
%15 = getelementptr inbounds [8 x i32], [8 x i32]* %x, i64 0, i64 %14
|
||||
store i32 123, i32* %15, align 4
|
||||
%add = add i64 %14, 1
|
||||
br label %cond
|
||||
exit: ; preds = %cond
|
||||
ret void
|
||||
|
||||
@@ -13,7 +13,7 @@ fn void test()
|
||||
}
|
||||
}
|
||||
|
||||
// #expect: test.ll
|
||||
/* #expect: test.ll
|
||||
|
||||
define void @test.test() #0 {
|
||||
entry:
|
||||
@@ -37,35 +37,35 @@ foreach.cond: ; preds = %foreach.inc, %entry
|
||||
br i1 %lt, label %foreach.body, label %foreach.exit
|
||||
|
||||
foreach.body: ; preds = %foreach.cond
|
||||
%ptroffset = getelementptr inbounds i32, [3 x i32]* %x, i64 %3
|
||||
%4 = load i32, i32* %ptroffset, align 4
|
||||
store i32 %4, i32* %z, align 4
|
||||
%5 = load i32, i32* %z, align 4
|
||||
%gt = icmp sgt i32 %5, 0
|
||||
%4 = getelementptr inbounds [3 x i32], [3 x i32]* %x, i64 0, i64 %3
|
||||
%5 = load i32, i32* %4, align 4
|
||||
store i32 %5, i32* %z, align 4
|
||||
%6 = load i32, i32* %z, align 4
|
||||
%gt = icmp sgt i32 %6, 0
|
||||
br i1 %gt, label %if.then, label %if.exit
|
||||
|
||||
if.then: ; preds = %foreach.body
|
||||
br label %foreach.exit
|
||||
|
||||
if.exit: ; preds = %foreach.body
|
||||
%6 = load i32, i32* %z, align 4
|
||||
%eq = icmp eq i32 %6, 1
|
||||
%7 = load i32, i32* %z, align 4
|
||||
%eq = icmp eq i32 %7, 1
|
||||
br i1 %eq, label %if.then1, label %if.exit2
|
||||
|
||||
if.then1: ; preds = %if.exit
|
||||
br label %foreach.inc
|
||||
|
||||
if.exit2: ; preds = %if.exit
|
||||
%7 = load i32, i32* %g, align 4
|
||||
%8 = load i32, i32* %z, align 4
|
||||
%add = add i32 %7, %8
|
||||
%8 = load i32, i32* %g, align 4
|
||||
%9 = load i32, i32* %z, align 4
|
||||
%add = add i32 %8, %9
|
||||
store i32 %add, i32* %g, align 4
|
||||
br label %foreach.inc
|
||||
|
||||
foreach.inc: ; preds = %if.exit2, %if.then1
|
||||
%9 = load i64, i64* %idx, align 8
|
||||
%10 = add i64 %9, 1
|
||||
store i64 %10, i64* %idx, align 8
|
||||
%10 = load i64, i64* %idx, align 8
|
||||
%11 = add i64 %10, 1
|
||||
store i64 %11, i64* %idx, align 8
|
||||
br label %foreach.cond
|
||||
|
||||
foreach.exit: ; preds = %if.then, %foreach.cond
|
||||
|
||||
@@ -32,7 +32,7 @@ fn void main()
|
||||
}
|
||||
}
|
||||
|
||||
// #expect: test.ll
|
||||
/* #expect: test.ll
|
||||
|
||||
entry:
|
||||
%foo = alloca [3 x float], align 4
|
||||
@@ -40,15 +40,15 @@ entry:
|
||||
%a = alloca float, align 4
|
||||
%idx1 = alloca i64, align 8
|
||||
%a2 = alloca float*, align 8
|
||||
%idx10 = alloca i64, align 8
|
||||
%a11 = alloca i8*, align 8
|
||||
%idx9 = alloca i64, align 8
|
||||
%a10 = alloca i8*, align 8
|
||||
%i = alloca i64, align 8
|
||||
%a20 = alloca float, align 4
|
||||
%i28 = alloca i8, align 1
|
||||
%idx29 = alloca i64, align 8
|
||||
%a30 = alloca double, align 8
|
||||
%idx38 = alloca i64, align 8
|
||||
%a39 = alloca double, align 8
|
||||
%a18 = alloca float, align 4
|
||||
%i25 = alloca i8, align 1
|
||||
%idx26 = alloca i64, align 8
|
||||
%a27 = alloca double, align 8
|
||||
%idx34 = alloca i64, align 8
|
||||
%a35 = alloca double, align 8
|
||||
%0 = bitcast [3 x float]* %foo to i8*
|
||||
call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %0, i8* align 4 bitcast ([3 x float]* @.__const to i8*), i32 12, i1 false)
|
||||
store i64 0, i64* %idx, align 8
|
||||
@@ -60,152 +60,152 @@ foreach.cond: ; preds = %foreach.inc, %entry
|
||||
br i1 %lt, label %foreach.body, label %foreach.exit
|
||||
|
||||
foreach.body: ; preds = %foreach.cond
|
||||
%ptroffset = getelementptr inbounds float, [3 x float]* %foo, i64 %1
|
||||
%2 = load float, float* %ptroffset, align 4
|
||||
store float %2, float* %a, align 4
|
||||
%3 = load float, float* %a, align 4
|
||||
%fpfpext = fpext float %3 to double
|
||||
%2 = getelementptr inbounds [3 x float], [3 x float]* %foo, i64 0, i64 %1
|
||||
%3 = load float, float* %2, align 4
|
||||
store float %3, float* %a, align 4
|
||||
%4 = load float, float* %a, align 4
|
||||
%fpfpext = fpext float %4 to double
|
||||
call void (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i32 0, i32 0), double %fpfpext)
|
||||
br label %foreach.inc
|
||||
|
||||
foreach.inc: ; preds = %foreach.body
|
||||
%4 = load i64, i64* %idx, align 8
|
||||
%5 = add i64 %4, 1
|
||||
store i64 %5, i64* %idx, align 8
|
||||
%5 = load i64, i64* %idx, align 8
|
||||
%6 = add i64 %5, 1
|
||||
store i64 %6, i64* %idx, align 8
|
||||
br label %foreach.cond
|
||||
|
||||
foreach.exit: ; preds = %foreach.cond
|
||||
store i64 0, i64* %idx1, align 8
|
||||
br label %foreach.cond3
|
||||
|
||||
foreach.cond3: ; preds = %foreach.inc8, %foreach.exit
|
||||
%6 = load i64, i64* %idx1, align 8
|
||||
%lt4 = icmp ult i64 %6, 3
|
||||
br i1 %lt4, label %foreach.body5, label %foreach.exit9
|
||||
foreach.cond3: ; preds = %foreach.inc7, %foreach.exit
|
||||
%7 = load i64, i64* %idx1, align 8
|
||||
%lt4 = icmp ult i64 %7, 3
|
||||
br i1 %lt4, label %foreach.body5, label %foreach.exit8
|
||||
|
||||
foreach.body5: ; preds = %foreach.cond3
|
||||
%ptroffset6 = getelementptr inbounds float, [3 x float]* %foo, i64 %6
|
||||
store float* %ptroffset6, float** %a2, align 8
|
||||
%7 = load float*, float** %a2, align 8
|
||||
%8 = load float, float* %7, align 8
|
||||
%fmul = fmul float %8, 2.000000e+00
|
||||
store float %fmul, float* %7, align 8
|
||||
%8 = getelementptr inbounds [3 x float], [3 x float]* %foo, i64 0, i64 %7
|
||||
store float* %8, float** %a2, align 8
|
||||
%9 = load float*, float** %a2, align 8
|
||||
%10 = load float, float* %9, align 8
|
||||
%fpfpext7 = fpext float %10 to double
|
||||
call void (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.1, i32 0, i32 0), double %fpfpext7)
|
||||
br label %foreach.inc8
|
||||
%fmul = fmul float %10, 2.000000e+00
|
||||
store float %fmul, float* %9, align 8
|
||||
%11 = load float*, float** %a2, align 8
|
||||
%12 = load float, float* %11, align 8
|
||||
%fpfpext6 = fpext float %12 to double
|
||||
call void (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.1, i32 0, i32 0), double %fpfpext6)
|
||||
br label %foreach.inc7
|
||||
|
||||
foreach.inc8: ; preds = %foreach.body5
|
||||
%11 = load i64, i64* %idx1, align 8
|
||||
%12 = add i64 %11, 1
|
||||
store i64 %12, i64* %idx1, align 8
|
||||
foreach.inc7: ; preds = %foreach.body5
|
||||
%13 = load i64, i64* %idx1, align 8
|
||||
%14 = add i64 %13, 1
|
||||
store i64 %14, i64* %idx1, align 8
|
||||
br label %foreach.cond3
|
||||
|
||||
foreach.exit9: ; preds = %foreach.cond3
|
||||
store i64 0, i64* %idx10, align 8
|
||||
br label %foreach.cond12
|
||||
foreach.exit8: ; preds = %foreach.cond3
|
||||
store i64 0, i64* %idx9, align 8
|
||||
br label %foreach.cond11
|
||||
|
||||
foreach.cond12: ; preds = %foreach.inc18, %foreach.exit9
|
||||
%13 = load i64, i64* %idx10, align 8
|
||||
%lt13 = icmp ult i64 %13, 3
|
||||
br i1 %lt13, label %foreach.body14, label %foreach.exit19
|
||||
foreach.cond11: ; preds = %foreach.inc16, %foreach.exit8
|
||||
%15 = load i64, i64* %idx9, align 8
|
||||
%lt12 = icmp ult i64 %15, 3
|
||||
br i1 %lt12, label %foreach.body13, label %foreach.exit17
|
||||
|
||||
foreach.body14: ; preds = %foreach.cond12
|
||||
%ptroffset15 = getelementptr inbounds float, [3 x float]* %foo, i64 %13
|
||||
%ptrptr = bitcast float* %ptroffset15 to i8*
|
||||
store i8* %ptrptr, i8** %a11, align 8
|
||||
%14 = load i8*, i8** %a11, align 8
|
||||
%ptrptr16 = bitcast i8* %14 to float*
|
||||
%15 = load float, float* %ptrptr16, align 8
|
||||
%fpfpext17 = fpext float %15 to double
|
||||
call void (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i32 0, i32 0), double %fpfpext17)
|
||||
br label %foreach.inc18
|
||||
foreach.body13: ; preds = %foreach.cond11
|
||||
%16 = getelementptr inbounds [3 x float], [3 x float]* %foo, i64 0, i64 %15
|
||||
%ptrptr = bitcast float* %16 to i8*
|
||||
store i8* %ptrptr, i8** %a10, align 8
|
||||
%17 = load i8*, i8** %a10, align 8
|
||||
%ptrptr14 = bitcast i8* %17 to float*
|
||||
%18 = load float, float* %ptrptr14, align 8
|
||||
%fpfpext15 = fpext float %18 to double
|
||||
call void (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i32 0, i32 0), double %fpfpext15)
|
||||
br label %foreach.inc16
|
||||
|
||||
foreach.inc18: ; preds = %foreach.body14
|
||||
%16 = load i64, i64* %idx10, align 8
|
||||
%17 = add i64 %16, 1
|
||||
store i64 %17, i64* %idx10, align 8
|
||||
br label %foreach.cond12
|
||||
foreach.inc16: ; preds = %foreach.body13
|
||||
%19 = load i64, i64* %idx9, align 8
|
||||
%20 = add i64 %19, 1
|
||||
store i64 %20, i64* %idx9, align 8
|
||||
br label %foreach.cond11
|
||||
|
||||
foreach.exit19: ; preds = %foreach.cond12
|
||||
foreach.exit17: ; preds = %foreach.cond11
|
||||
store i64 0, i64* %i, align 8
|
||||
br label %foreach.cond21
|
||||
br label %foreach.cond19
|
||||
|
||||
foreach.cond21: ; preds = %foreach.inc26, %foreach.exit19
|
||||
%18 = load i64, i64* %i, align 8
|
||||
%lt22 = icmp ult i64 %18, 3
|
||||
br i1 %lt22, label %foreach.body23, label %foreach.exit27
|
||||
foreach.cond19: ; preds = %foreach.inc23, %foreach.exit17
|
||||
%21 = load i64, i64* %i, align 8
|
||||
%lt20 = icmp ult i64 %21, 3
|
||||
br i1 %lt20, label %foreach.body21, label %foreach.exit24
|
||||
|
||||
foreach.body23: ; preds = %foreach.cond21
|
||||
%ptroffset24 = getelementptr inbounds float, [3 x float]* %foo, i64 %18
|
||||
%19 = load float, float* %ptroffset24, align 4
|
||||
store float %19, float* %a20, align 4
|
||||
%20 = load i64, i64* %i, align 8
|
||||
%21 = load float, float* %a20, align 4
|
||||
%fpfpext25 = fpext float %21 to double
|
||||
call void (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.3, i32 0, i32 0), i64 %20, double %fpfpext25)
|
||||
br label %foreach.inc26
|
||||
foreach.body21: ; preds = %foreach.cond19
|
||||
%22 = getelementptr inbounds [3 x float], [3 x float]* %foo, i64 0, i64 %21
|
||||
%23 = load float, float* %22, align 4
|
||||
store float %23, float* %a18, align 4
|
||||
%24 = load i64, i64* %i, align 8
|
||||
%25 = load float, float* %a18, align 4
|
||||
%fpfpext22 = fpext float %25 to double
|
||||
call void (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.3, i32 0, i32 0), i64 %24, double %fpfpext22)
|
||||
br label %foreach.inc23
|
||||
|
||||
foreach.inc26: ; preds = %foreach.body23
|
||||
%22 = load i64, i64* %i, align 8
|
||||
%23 = add i64 %22, 1
|
||||
store i64 %23, i64* %i, align 8
|
||||
br label %foreach.cond21
|
||||
foreach.inc23: ; preds = %foreach.body21
|
||||
%26 = load i64, i64* %i, align 8
|
||||
%27 = add i64 %26, 1
|
||||
store i64 %27, i64* %i, align 8
|
||||
br label %foreach.cond19
|
||||
|
||||
foreach.exit27: ; preds = %foreach.cond21
|
||||
store i8 0, i8* %i28, align 1
|
||||
store i64 0, i64* %idx29, align 8
|
||||
br label %foreach.cond31
|
||||
foreach.exit24: ; preds = %foreach.cond19
|
||||
store i8 0, i8* %i25, align 1
|
||||
store i64 0, i64* %idx26, align 8
|
||||
br label %foreach.cond28
|
||||
|
||||
foreach.cond31: ; preds = %foreach.inc36, %foreach.exit27
|
||||
%24 = load i64, i64* %idx29, align 8
|
||||
%lt32 = icmp ult i64 %24, 3
|
||||
br i1 %lt32, label %foreach.body33, label %foreach.exit37
|
||||
foreach.cond28: ; preds = %foreach.inc32, %foreach.exit24
|
||||
%28 = load i64, i64* %idx26, align 8
|
||||
%lt29 = icmp ult i64 %28, 3
|
||||
br i1 %lt29, label %foreach.body30, label %foreach.exit33
|
||||
|
||||
foreach.body33: ; preds = %foreach.cond31
|
||||
%25 = trunc i64 %24 to i8
|
||||
store i8 %25, i8* %i28, align 1
|
||||
%ptroffset34 = getelementptr inbounds float, [3 x float]* %foo, i64 %24
|
||||
%26 = load float, float* %ptroffset34, align 4
|
||||
%fpfpext35 = fpext float %26 to double
|
||||
store double %fpfpext35, double* %a30, align 8
|
||||
%27 = load i8, i8* %i28, align 1
|
||||
%uisiext = zext i8 %27 to i32
|
||||
%28 = load double, double* %a30, align 8
|
||||
call void (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.4, i32 0, i32 0), i32 %uisiext, double %28)
|
||||
br label %foreach.inc36
|
||||
foreach.body30: ; preds = %foreach.cond28
|
||||
%29 = trunc i64 %28 to i8
|
||||
store i8 %29, i8* %i25, align 1
|
||||
%30 = getelementptr inbounds [3 x float], [3 x float]* %foo, i64 0, i64 %28
|
||||
%31 = load float, float* %30, align 4
|
||||
%fpfpext31 = fpext float %31 to double
|
||||
store double %fpfpext31, double* %a27, align 8
|
||||
%32 = load i8, i8* %i25, align 1
|
||||
%uisiext = zext i8 %32 to i32
|
||||
%33 = load double, double* %a27, align 8
|
||||
call void (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.4, i32 0, i32 0), i32 %uisiext, double %33)
|
||||
br label %foreach.inc32
|
||||
|
||||
foreach.inc36: ; preds = %foreach.body33
|
||||
%29 = load i64, i64* %idx29, align 8
|
||||
%30 = add i64 %29, 1
|
||||
store i64 %30, i64* %idx29, align 8
|
||||
br label %foreach.cond31
|
||||
|
||||
foreach.exit37: ; preds = %foreach.cond31
|
||||
store i64 0, i64* %idx38, align 8
|
||||
br label %foreach.cond40
|
||||
|
||||
foreach.cond40: ; preds = %foreach.inc45, %foreach.exit37
|
||||
%31 = load i64, i64* %idx38, align 8
|
||||
%lt41 = icmp ult i64 %31, 3
|
||||
br i1 %lt41, label %foreach.body42, label %foreach.exit46
|
||||
|
||||
foreach.body42: ; preds = %foreach.cond40
|
||||
%ptroffset43 = getelementptr inbounds float, [3 x float]* %foo, i64 %31
|
||||
%32 = load float, float* %ptroffset43, align 4
|
||||
%fpfpext44 = fpext float %32 to double
|
||||
store double %fpfpext44, double* %a39, align 8
|
||||
%33 = load double, double* %a39, align 8
|
||||
call void (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.5, i32 0, i32 0), double %33)
|
||||
br label %foreach.inc45
|
||||
|
||||
foreach.inc45: ; preds = %foreach.body42
|
||||
%34 = load i64, i64* %idx38, align 8
|
||||
foreach.inc32: ; preds = %foreach.body30
|
||||
%34 = load i64, i64* %idx26, align 8
|
||||
%35 = add i64 %34, 1
|
||||
store i64 %35, i64* %idx38, align 8
|
||||
br label %foreach.cond40
|
||||
store i64 %35, i64* %idx26, align 8
|
||||
br label %foreach.cond28
|
||||
|
||||
foreach.exit46: ; preds = %foreach.cond40
|
||||
foreach.exit33: ; preds = %foreach.cond28
|
||||
store i64 0, i64* %idx34, align 8
|
||||
br label %foreach.cond36
|
||||
|
||||
foreach.cond36: ; preds = %foreach.inc40, %foreach.exit33
|
||||
%36 = load i64, i64* %idx34, align 8
|
||||
%lt37 = icmp ult i64 %36, 3
|
||||
br i1 %lt37, label %foreach.body38, label %foreach.exit41
|
||||
|
||||
foreach.body38: ; preds = %foreach.cond36
|
||||
%37 = getelementptr inbounds [3 x float], [3 x float]* %foo, i64 0, i64 %36
|
||||
%38 = load float, float* %37, align 4
|
||||
%fpfpext39 = fpext float %38 to double
|
||||
store double %fpfpext39, double* %a35, align 8
|
||||
%39 = load double, double* %a35, align 8
|
||||
call void (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.5, i32 0, i32 0), double %39)
|
||||
br label %foreach.inc40
|
||||
|
||||
foreach.inc40: ; preds = %foreach.body38
|
||||
%40 = load i64, i64* %idx34, align 8
|
||||
%41 = add i64 %40, 1
|
||||
store i64 %41, i64* %idx34, align 8
|
||||
br label %foreach.cond36
|
||||
|
||||
foreach.exit41: ; preds = %foreach.cond36
|
||||
ret void
|
||||
}
|
||||
Reference in New Issue
Block a user