mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
Optimize temp variables in LLVM.
This commit is contained in:
committed by
Christoffer Lerno
parent
ea2dce0ab4
commit
f801372074
@@ -683,7 +683,6 @@ switch.default: ; preds = %next_if6
|
||||
define void @test.main() #0 {
|
||||
entry:
|
||||
%.anon = alloca i64, align 8
|
||||
%.anon1 = alloca i64, align 8
|
||||
%url = alloca %"char[]", align 8
|
||||
%summary = alloca %Summary, align 8
|
||||
%result = alloca %Summary, align 8
|
||||
@@ -694,110 +693,108 @@ entry:
|
||||
%blockret = alloca i64, align 8
|
||||
%f = alloca i64, align 8
|
||||
%0 = load i64, ptr getelementptr inbounds (i8, ptr @main.URLS, i64 8), align 8
|
||||
store i64 %0, ptr %.anon, align 8
|
||||
store i64 0, ptr %.anon1, align 8
|
||||
store i64 0, ptr %.anon, align 8
|
||||
br label %loop.cond
|
||||
|
||||
loop.cond:
|
||||
%1 = load i64, ptr %.anon1, align 8
|
||||
%2 = load i64, ptr %.anon, align 8
|
||||
%lt = icmp ult i64 %1, %2
|
||||
loop.cond: ; preds = %phi_block19, %entry
|
||||
%1 = load i64, ptr %.anon, align 8
|
||||
%lt = icmp ult i64 %1, %0
|
||||
br i1 %lt, label %loop.body, label %loop.exit
|
||||
|
||||
loop.body: ; preds = %loop.cond
|
||||
%3 = load ptr, ptr @main.URLS, align 8
|
||||
%4 = load i64, ptr %.anon1, align 8
|
||||
%ptroffset = getelementptr inbounds [16 x i8], ptr %3, i64 %4
|
||||
%2 = load ptr, ptr @main.URLS, align 8
|
||||
%3 = load i64, ptr %.anon, align 8
|
||||
%ptroffset = getelementptr inbounds [16 x i8], ptr %2, i64 %3
|
||||
call void @llvm.memcpy.p0.p0.i32(ptr align 8 %url, ptr align 8 %ptroffset, i32 16, i1 false)
|
||||
%ptradd = getelementptr inbounds i8, ptr %url, i64 8
|
||||
%5 = load i64, ptr %ptradd, align 8
|
||||
%trunc = trunc i64 %5 to i32
|
||||
%6 = load ptr, ptr %url, align 8
|
||||
%7 = call i32 (ptr, ...) @printf(ptr @.str.21, i32 %trunc, ptr %6)
|
||||
%4 = load i64, ptr %ptradd, align 8
|
||||
%trunc = trunc i64 %4 to i32
|
||||
%5 = load ptr, ptr %url, align 8
|
||||
%6 = call i32 (ptr, ...) @printf(ptr @.str.21, i32 %trunc, ptr %5)
|
||||
%lo = load ptr, ptr %url, align 8
|
||||
%ptradd2 = getelementptr inbounds i8, ptr %url, i64 8
|
||||
%hi = load i64, ptr %ptradd2, align 8
|
||||
%8 = call { ptr, i8 } @test.readAndBuildSummary(ptr %lo, i64 %hi)
|
||||
store { ptr, i8 } %8, ptr %result, align 8
|
||||
%ptradd1 = getelementptr inbounds i8, ptr %url, i64 8
|
||||
%hi = load i64, ptr %ptradd1, align 8
|
||||
%7 = call { ptr, i8 } @test.readAndBuildSummary(ptr %lo, i64 %hi)
|
||||
store { ptr, i8 } %7, ptr %result, align 8
|
||||
call void @llvm.memcpy.p0.p0.i32(ptr align 8 %summary, ptr align 8 %result, i32 16, i1 false)
|
||||
%9 = call i32 (ptr, ...) @printf(ptr @.str.22)
|
||||
%10 = load ptr, ptr @__stdoutp, align 8
|
||||
call void @test.Summary.print(ptr %summary, ptr %10)
|
||||
%11 = call i32 (ptr, ...) @printf(ptr @.str.23)
|
||||
%12 = load ptr, ptr %summary, align 8
|
||||
%i2b = icmp ne ptr %12, null
|
||||
%8 = call i32 (ptr, ...) @printf(ptr @.str.22)
|
||||
%9 = load ptr, ptr @__stdoutp, align 8
|
||||
call void @test.Summary.print(ptr %summary, ptr %9)
|
||||
%10 = call i32 (ptr, ...) @printf(ptr @.str.23)
|
||||
%11 = load ptr, ptr %summary, align 8
|
||||
%i2b = icmp ne ptr %11, null
|
||||
br i1 %i2b, label %cond.lhs, label %cond.rhs
|
||||
|
||||
cond.lhs: ; preds = %loop.body
|
||||
%13 = load ptr, ptr %summary, align 8
|
||||
%14 = load %"char[]", ptr %13, align 8
|
||||
%12 = load ptr, ptr %summary, align 8
|
||||
%13 = load %"char[]", ptr %12, align 8
|
||||
br label %cond.phi
|
||||
|
||||
cond.rhs: ; preds = %loop.body
|
||||
br label %cond.phi
|
||||
|
||||
cond.phi: ; preds = %cond.rhs, %cond.lhs
|
||||
%val = phi %"char[]" [ %14, %cond.lhs ], [ zeroinitializer, %cond.rhs ]
|
||||
%val = phi %"char[]" [ %13, %cond.lhs ], [ zeroinitializer, %cond.rhs ]
|
||||
store %"char[]" %val, ptr %title_sure, align 8
|
||||
%ptradd3 = getelementptr inbounds i8, ptr %title_sure, i64 8
|
||||
%15 = load i64, ptr %ptradd3, align 8
|
||||
%trunc4 = trunc i64 %15 to i32
|
||||
%16 = load ptr, ptr %title_sure, align 8
|
||||
%17 = call i32 (ptr, ...) @printf(ptr @.str.24, i32 %trunc4, ptr %16)
|
||||
%lo5 = load ptr, ptr %url, align 8
|
||||
%ptradd6 = getelementptr inbounds i8, ptr %url, i64 8
|
||||
%hi7 = load i64, ptr %ptradd6, align 8
|
||||
%18 = call i64 @test.readWhetherTitleNonEmpty(ptr %retparam, ptr %lo5, i64 %hi7)
|
||||
%not_err = icmp eq i64 %18, 0
|
||||
%19 = call i1 @llvm.expect.i1(i1 %not_err, i1 true)
|
||||
br i1 %19, label %after_check, label %assign_optional
|
||||
%ptradd2 = getelementptr inbounds i8, ptr %title_sure, i64 8
|
||||
%14 = load i64, ptr %ptradd2, align 8
|
||||
%trunc3 = trunc i64 %14 to i32
|
||||
%15 = load ptr, ptr %title_sure, align 8
|
||||
%16 = call i32 (ptr, ...) @printf(ptr @.str.24, i32 %trunc3, ptr %15)
|
||||
%lo4 = load ptr, ptr %url, align 8
|
||||
%ptradd5 = getelementptr inbounds i8, ptr %url, i64 8
|
||||
%hi6 = load i64, ptr %ptradd5, align 8
|
||||
%17 = call i64 @test.readWhetherTitleNonEmpty(ptr %retparam, ptr %lo4, i64 %hi6)
|
||||
%not_err = icmp eq i64 %17, 0
|
||||
%18 = call i1 @llvm.expect.i1(i1 %not_err, i1 true)
|
||||
br i1 %18, label %after_check, label %assign_optional
|
||||
|
||||
assign_optional: ; preds = %cond.phi
|
||||
store i64 %18, ptr %has_title.f, align 8
|
||||
store i64 %17, ptr %has_title.f, align 8
|
||||
br label %after_assign
|
||||
|
||||
after_check: ; preds = %cond.phi
|
||||
%20 = load i8, ptr %retparam, align 1
|
||||
store i8 %20, ptr %has_title, align 1
|
||||
%19 = load i8, ptr %retparam, align 1
|
||||
store i8 %19, ptr %has_title, align 1
|
||||
store i64 0, ptr %has_title.f, align 8
|
||||
br label %after_assign
|
||||
|
||||
after_assign: ; preds = %after_check, %assign_optional
|
||||
%optval = load i64, ptr %has_title.f, align 8
|
||||
%not_err8 = icmp eq i64 %optval, 0
|
||||
%21 = call i1 @llvm.expect.i1(i1 %not_err8, i1 true)
|
||||
br i1 %21, label %after_check9, label %else_block
|
||||
%not_err7 = icmp eq i64 %optval, 0
|
||||
%20 = call i1 @llvm.expect.i1(i1 %not_err7, i1 true)
|
||||
br i1 %20, label %after_check8, label %else_block
|
||||
|
||||
after_check9: ; preds = %after_assign
|
||||
%22 = load i8, ptr %has_title, align 1
|
||||
%23 = call ptr @test.bool_to_string(i8 zeroext %22)
|
||||
after_check8: ; preds = %after_assign
|
||||
%21 = load i8, ptr %has_title, align 1
|
||||
%22 = call ptr @test.bool_to_string(i8 zeroext %21)
|
||||
br label %phi_block
|
||||
|
||||
else_block: ; preds = %after_assign
|
||||
br label %testblock
|
||||
|
||||
testblock: ; preds = %else_block
|
||||
%optval10 = load i64, ptr %has_title.f, align 8
|
||||
%not_err11 = icmp eq i64 %optval10, 0
|
||||
%24 = call i1 @llvm.expect.i1(i1 %not_err11, i1 true)
|
||||
br i1 %24, label %after_check13, label %assign_optional12
|
||||
%optval9 = load i64, ptr %has_title.f, align 8
|
||||
%not_err10 = icmp eq i64 %optval9, 0
|
||||
%23 = call i1 @llvm.expect.i1(i1 %not_err10, i1 true)
|
||||
br i1 %23, label %after_check12, label %assign_optional11
|
||||
|
||||
assign_optional12: ; preds = %testblock
|
||||
store i64 %optval10, ptr %f, align 8
|
||||
assign_optional11: ; preds = %testblock
|
||||
store i64 %optval9, ptr %f, align 8
|
||||
br label %end_block
|
||||
|
||||
after_check13: ; preds = %testblock
|
||||
after_check12: ; preds = %testblock
|
||||
store i64 0, ptr %f, align 8
|
||||
br label %end_block
|
||||
|
||||
end_block: ; preds = %after_check13, %assign_optional12
|
||||
%25 = load i64, ptr %f, align 8
|
||||
%i2b14 = icmp ne i64 %25, 0
|
||||
br i1 %i2b14, label %if.then, label %if.exit
|
||||
end_block: ; preds = %after_check12, %assign_optional11
|
||||
%24 = load i64, ptr %f, align 8
|
||||
%i2b13 = icmp ne i64 %24, 0
|
||||
br i1 %i2b13, label %if.then, label %if.exit
|
||||
|
||||
if.then: ; preds = %end_block
|
||||
%26 = load i64, ptr %f, align 8
|
||||
store i64 %26, ptr %blockret, align 8
|
||||
%25 = load i64, ptr %f, align 8
|
||||
store i64 %25, ptr %blockret, align 8
|
||||
br label %expr_block.exit
|
||||
|
||||
if.exit: ; preds = %end_block
|
||||
@@ -805,32 +802,32 @@ if.exit: ; preds = %end_block
|
||||
br label %expr_block.exit
|
||||
|
||||
expr_block.exit: ; preds = %if.exit, %if.then
|
||||
%27 = load i64, ptr %blockret, align 8
|
||||
%28 = call ptr @test.nameFromError(i64 %27)
|
||||
%26 = load i64, ptr %blockret, align 8
|
||||
%27 = call ptr @test.nameFromError(i64 %26)
|
||||
br label %phi_block
|
||||
|
||||
phi_block: ; preds = %expr_block.exit, %after_check9
|
||||
%val15 = phi ptr [ %23, %after_check9 ], [ %28, %expr_block.exit ]
|
||||
%optval16 = load i64, ptr %has_title.f, align 8
|
||||
%not_err17 = icmp eq i64 %optval16, 0
|
||||
%29 = call i1 @llvm.expect.i1(i1 %not_err17, i1 true)
|
||||
br i1 %29, label %after_check18, label %else_block19
|
||||
phi_block: ; preds = %expr_block.exit, %after_check8
|
||||
%val14 = phi ptr [ %22, %after_check8 ], [ %27, %expr_block.exit ]
|
||||
%optval15 = load i64, ptr %has_title.f, align 8
|
||||
%not_err16 = icmp eq i64 %optval15, 0
|
||||
%28 = call i1 @llvm.expect.i1(i1 %not_err16, i1 true)
|
||||
br i1 %28, label %after_check17, label %else_block18
|
||||
|
||||
after_check18: ; preds = %phi_block
|
||||
%30 = load i8, ptr %has_title, align 1
|
||||
%31 = trunc i8 %30 to i1
|
||||
br label %phi_block20
|
||||
after_check17: ; preds = %phi_block
|
||||
%29 = load i8, ptr %has_title, align 1
|
||||
%30 = trunc i8 %29 to i1
|
||||
br label %phi_block19
|
||||
|
||||
else_block19: ; preds = %phi_block
|
||||
br label %phi_block20
|
||||
else_block18: ; preds = %phi_block
|
||||
br label %phi_block19
|
||||
|
||||
phi_block20: ; preds = %else_block19, %after_check18
|
||||
%val21 = phi i1 [ %31, %after_check18 ], [ false, %else_block19 ]
|
||||
%ternary = select i1 %val21, ptr @.str.26, ptr @.str.27
|
||||
%32 = call i32 (ptr, ...) @printf(ptr @.str.25, ptr %val15, ptr %ternary)
|
||||
%33 = load i64, ptr %.anon1, align 8
|
||||
%addnuw = add nuw i64 %33, 1
|
||||
store i64 %addnuw, ptr %.anon1, align 8
|
||||
phi_block19: ; preds = %else_block18, %after_check17
|
||||
%val20 = phi i1 [ %30, %after_check17 ], [ false, %else_block18 ]
|
||||
%ternary = select i1 %val20, ptr @.str.26, ptr @.str.27
|
||||
%31 = call i32 (ptr, ...) @printf(ptr @.str.25, ptr %val14, ptr %ternary)
|
||||
%32 = load i64, ptr %.anon, align 8
|
||||
%addnuw = add nuw i64 %32, 1
|
||||
store i64 %addnuw, ptr %.anon, align 8
|
||||
br label %loop.cond
|
||||
|
||||
loop.exit: ; preds = %loop.cond
|
||||
|
||||
Reference in New Issue
Block a user