declare void @print(ptr %0) declare ptr @readln() declare ptr @filer(ptr %0) declare void @curshide() declare void @cursshow() declare i32 @wait(i32 %0) declare i32 @slen(ptr %0) declare i32 @parse_int(ptr %0) declare void @termpos(i32 %0, i32 %1) declare i32 @as_int(float %0) declare float @as_float(i32 %0) declare ptr @istr(i32 %0) declare i32 @system(ptr %0) declare i1 @sequals(ptr %0, ptr %1) declare void @termclear() declare i32 @randGen(i32 %0, i32 %1) declare i32 @serversock(i32 %0, ptr %1, i32 %2) declare i32 @clientsock(i32 %0, ptr %1) declare void @closesock(i32 %0, i1 %1) declare void @sendsock(ptr %0, i32 %1) declare ptr @recvsock(i32 %0) define i32 @abs(i32 %0) { entrypoint: %x = alloca i32, align 4 store i32 %0, ptr %x, align 4 %1 = load i32, ptr %x, align 4 %lt = icmp slt i32 %1, 0 br i1 %lt, label %then, label %else then: ; preds = %entrypoint %2 = load i32, ptr %x, align 4 %neg = sub i32 0, %2 ret i32 %neg br label %continue else: ; preds = %entrypoint br label %continue continue: ; preds = %else, %then %3 = load i32, ptr %x, align 4 ret i32 %3 } define float @fabs(float %0) { entrypoint: %x = alloca float, align 4 store float %0, ptr %x, align 4 %1 = load float, ptr %x, align 4 %lt = fcmp olt float %1, 0.000000e+00 br i1 %lt, label %then, label %else then: ; preds = %entrypoint %2 = load float, ptr %x, align 4 %neg = fneg float %2 ret float %neg br label %continue else: ; preds = %entrypoint br label %continue continue: ; preds = %else, %then %3 = load float, ptr %x, align 4 ret float %3 } define i32 @max(i32 %0, i32 %1) { entrypoint: %y = alloca i32, align 4 %x = alloca i32, align 4 store i32 %0, ptr %x, align 4 store i32 %1, ptr %y, align 4 %2 = load i32, ptr %x, align 4 %3 = load i32, ptr %y, align 4 %gt = icmp sgt i32 %2, %3 br i1 %gt, label %then, label %else then: ; preds = %entrypoint %4 = load i32, ptr %x, align 4 ret i32 %4 br label %continue else: ; preds = %entrypoint br label %continue continue: ; preds = %else, %then %5 = load i32, ptr %y, align 4 ret i32 %5 } define i32 @min(i32 %0, i32 %1) { entrypoint: %y = alloca i32, align 4 %x = alloca i32, align 4 store i32 %0, ptr %x, align 4 store i32 %1, ptr %y, align 4 %2 = load i32, ptr %x, align 4 %3 = load i32, ptr %y, align 4 %lt = icmp slt i32 %2, %3 br i1 %lt, label %then, label %else then: ; preds = %entrypoint %4 = load i32, ptr %x, align 4 ret i32 %4 br label %continue else: ; preds = %entrypoint br label %continue continue: ; preds = %else, %then %5 = load i32, ptr %y, align 4 ret i32 %5 } define float @fmax(float %0, float %1) { entrypoint: %y = alloca float, align 4 %x = alloca float, align 4 store float %0, ptr %x, align 4 store float %1, ptr %y, align 4 %2 = load float, ptr %x, align 4 %3 = load float, ptr %y, align 4 %gt = fcmp ogt float %2, %3 br i1 %gt, label %then, label %else then: ; preds = %entrypoint %4 = load float, ptr %x, align 4 ret float %4 br label %continue else: ; preds = %entrypoint br label %continue continue: ; preds = %else, %then %5 = load float, ptr %y, align 4 ret float %5 } define float @fmin(float %0, float %1) { entrypoint: %y = alloca float, align 4 %x = alloca float, align 4 store float %0, ptr %x, align 4 store float %1, ptr %y, align 4 %2 = load float, ptr %x, align 4 %3 = load float, ptr %y, align 4 %lt = fcmp olt float %2, %3 br i1 %lt, label %then, label %else then: ; preds = %entrypoint %4 = load float, ptr %x, align 4 ret float %4 br label %continue else: ; preds = %entrypoint br label %continue continue: ; preds = %else, %then %5 = load float, ptr %y, align 4 ret float %5 } define float @pow(float %0, float %1) { entrypoint: %power = alloca float, align 4 %y = alloca float, align 4 %x = alloca float, align 4 store float %0, ptr %x, align 4 store float %1, ptr %y, align 4 %2 = load float, ptr %x, align 4 store float %2, ptr %power, align 4 br label %loop loop: ; preds = %"loop body", %entrypoint %3 = load float, ptr %y, align 4 %gt = fcmp ogt float %3, 1.000000e+00 br i1 %gt, label %"loop body", label %"after loop" "loop body": ; preds = %loop %4 = load float, ptr %power, align 4 %5 = load float, ptr %x, align 4 %mul = fmul float %4, %5 store float %mul, ptr %x, align 4 %6 = load float, ptr %y, align 4 %sub = fsub float %6, 1.000000e+00 store float %sub, ptr %y, align 4 br label %loop "after loop": ; preds = %loop %7 = load float, ptr %x, align 4 ret float %7 } define i32 @floor(float %0) { entrypoint: %x = alloca float, align 4 store float %0, ptr %x, align 4 %1 = load float, ptr %x, align 4 %2 = load float, ptr %x, align 4 %mod = frem float %2, 1.000000e+00 %3 = call float @fabs(float %mod) %sub = fsub float %1, %3 %4 = call i32 @as_int(float %sub) ret i32 %4 } define i32 @ceil(float %0) { entrypoint: %x = alloca float, align 4 store float %0, ptr %x, align 4 %1 = load float, ptr %x, align 4 %lt = fcmp olt float %1, 0.000000e+00 br i1 %lt, label %then, label %else then: ; preds = %entrypoint %2 = load float, ptr %x, align 4 %3 = call i32 @floor(float %2) %sub = sub i32 %3, 1 ret i32 %sub br label %continue else: ; preds = %entrypoint br label %continue continue: ; preds = %else, %then %4 = load float, ptr %x, align 4 %5 = call i32 @floor(float %4) %add = add i32 %5, 1 ret i32 %add } define i32 @round(float %0) { entrypoint: %ret = alloca i32, align 4 %x = alloca float, align 4 store float %0, ptr %x, align 4 %1 = load float, ptr %x, align 4 %2 = call i32 @floor(float %1) store i32 %2, ptr %ret, align 4 %3 = load float, ptr %x, align 4 %mod = frem float %3, 1.000000e+00 %4 = call float @fabs(float %mod) %gt = fcmp oge float %4, 5.000000e-01 br i1 %gt, label %then, label %else then: ; preds = %entrypoint %5 = load float, ptr %x, align 4 %6 = call i32 @ceil(float %5) store i32 %6, ptr %ret, align 4 br label %continue else: ; preds = %entrypoint br label %continue continue: ; preds = %else, %then %7 = load i32, ptr %ret, align 4 ret i32 %7 } define void @println(ptr %0) { entrypoint: %str = alloca ptr, align 8 store ptr %0, ptr %str, align 8 %1 = load ptr, ptr %str, align 8 call void @print(ptr %1) %str1 = tail call ptr @malloc(i32 mul (i32 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i32), i32 7)) store [2 x i8] c"\0A\00", ptr %str1, align 1 call void @print(ptr %str1) ret void } define void @printMan(float %0, float %1, float %2, float %3, i32 %4, i32 %5) { entrypoint: %temp = alloca float, align 4 %count = alloca float, align 4 %zImg = alloca float, align 4 %zReal = alloca float, align 4 %cImg = alloca float, align 4 %cReal = alloca float, align 4 %y = alloca i32, align 4 %x = alloca i32, align 4 %plane = alloca float, align 4 %maxIter = alloca float, align 4 %maxVal = alloca float, align 4 %size = alloca float, align 4 store float %0, ptr %size, align 4 store float %1, ptr %maxVal, align 4 store float %2, ptr %maxIter, align 4 store float %3, ptr %plane, align 4 store i32 %4, ptr %x, align 4 store i32 %5, ptr %y, align 4 %6 = load i32, ptr %x, align 4 %7 = call float @as_float(i32 %6) %8 = load float, ptr %plane, align 4 %mul = fmul float %7, %8 %9 = load float, ptr %size, align 4 %div = fdiv float %mul, %9 %sub = fsub float %div, 2.000000e+00 store float %sub, ptr %cReal, align 4 %10 = load i32, ptr %y, align 4 %11 = call float @as_float(i32 %10) %12 = load float, ptr %plane, align 4 %mul1 = fmul float %11, %12 %13 = load float, ptr %size, align 4 %div2 = fdiv float %mul1, %13 %sub3 = fsub float %div2, 2.000000e+00 store float %sub3, ptr %cImg, align 4 store float 0.000000e+00, ptr %zReal, align 4 store float 0.000000e+00, ptr %zImg, align 4 store float 0.000000e+00, ptr %count, align 4 br label %loop loop: ; preds = %continue, %entrypoint %14 = load float, ptr %zReal, align 4 %15 = load float, ptr %zReal, align 4 %mul4 = fmul float %14, %15 %16 = load float, ptr %zImg, align 4 %17 = load float, ptr %zImg, align 4 %mul5 = fmul float %16, %17 %add = fadd float %mul4, %mul5 %18 = load float, ptr %maxVal, align 4 %le = fcmp ole float %add, %18 %19 = load float, ptr %count, align 4 %20 = load float, ptr %maxIter, align 4 %lt = fcmp olt float %19, %20 %logand = and i1 %le, %lt br i1 %logand, label %"loop body", label %"after loop" "loop body": ; preds = %loop %21 = load float, ptr %zReal, align 4 %22 = load float, ptr %zReal, align 4 %mul6 = fmul float %21, %22 %23 = load float, ptr %zImg, align 4 %24 = load float, ptr %zImg, align 4 %mul7 = fmul float %23, %24 %sub8 = fsub float %mul6, %mul7 %25 = load float, ptr %cReal, align 4 %add9 = fadd float %sub8, %25 store float %add9, ptr %temp, align 4 %26 = load float, ptr %zReal, align 4 %mul10 = fmul float 2.000000e+00, %26 %27 = load float, ptr %zImg, align 4 %mul11 = fmul float %mul10, %27 %28 = load float, ptr %cImg, align 4 %add12 = fadd float %mul11, %28 store float %add12, ptr %zImg, align 4 %29 = load float, ptr %temp, align 4 store float %29, ptr %zReal, align 4 %30 = load float, ptr %count, align 4 %add13 = fadd float %30, 1.000000e+00 store float %add13, ptr %count, align 4 %31 = load float, ptr %count, align 4 %32 = call i32 @as_int(float %31) %33 = load float, ptr %maxIter, align 4 %34 = call i32 @as_int(float %33) %35 = icmp eq i32 %32, %34 br i1 %35, label %then, label %else "after loop": ; preds = %loop ret void then: ; preds = %"loop body" %36 = load i32, ptr %x, align 4 %37 = load i32, ptr %y, align 4 call void @termpos(i32 %36, i32 %37) %str = tail call ptr @malloc(i32 mul (i32 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i32), i32 9)) store [4 x i8] c"\E2\96\88\00", ptr %str, align 1 call void @print(ptr %str) br label %continue else: ; preds = %"loop body" br label %continue continue: ; preds = %else, %then br label %loop } define i32 @main() { entrypoint: %range4 = alloca { i32, i32 }, align 8 %range = alloca { i32, i32 }, align 8 %plane = alloca float, align 4 %maxIter = alloca float, align 4 %maxVal = alloca float, align 4 %size = alloca float, align 4 store float 1.000000e+03, ptr %size, align 4 store float 4.000000e+00, ptr %maxVal, align 4 store float 5.000000e+01, ptr %maxIter, align 4 store float 4.000000e+00, ptr %plane, align 4 %0 = load float, ptr %size, align 4 %1 = call i32 @as_int(float %0) store { i32, i32 } { i32 0, i32 %1 }, ptr %range, align 4 %current = getelementptr inbounds { i32, i32 }, ptr %range, i32 0, i32 0 %end = getelementptr inbounds { i32, i32 }, ptr %range, i32 0, i32 1 br label %loop loop: ; preds = %"after loop3", %entrypoint %2 = load i32, ptr %current, align 4 %3 = load i32, ptr %end, align 4 %4 = icmp slt i32 %2, %3 br i1 %4, label %"loop body", label %"after loop" "loop body": ; preds = %loop %5 = load float, ptr %size, align 4 %6 = call i32 @as_int(float %5) store { i32, i32 } { i32 0, i32 %6 }, ptr %range4, align 4 %current5 = getelementptr inbounds { i32, i32 }, ptr %range4, i32 0, i32 0 %end6 = getelementptr inbounds { i32, i32 }, ptr %range4, i32 0, i32 1 br label %loop1 "after loop": ; preds = %loop ret i32 0 loop1: ; preds = %"loop body2", %"loop body" %7 = load i32, ptr %current5, align 4 %8 = load i32, ptr %end6, align 4 %9 = icmp slt i32 %7, %8 br i1 %9, label %"loop body2", label %"after loop3" "loop body2": ; preds = %loop1 %10 = load float, ptr %size, align 4 %11 = load float, ptr %maxVal, align 4 %12 = load float, ptr %maxIter, align 4 %13 = load float, ptr %plane, align 4 %14 = load i32, ptr %current, align 4 %15 = load i32, ptr %current5, align 4 call void @printMan(float %10, float %11, float %12, float %13, i32 %14, i32 %15) %16 = load i32, ptr %current5, align 4 %17 = add i32 %16, 1 store i32 %17, ptr %current5, align 4 br label %loop1 "after loop3": ; preds = %loop1 %18 = load i32, ptr %current, align 4 %19 = add i32 %18, 1 store i32 %19, ptr %current, align 4 br label %loop }