; ModuleID = 'LFortran'
source_filename = "LFortran"
target datalayout = "..."

%string_descriptor = type <{ i8*, i64 }>

@"ERROR STOP" = private unnamed_addr constant [11 x i8] c"ERROR STOP\00", align 1
@0 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@1 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@2 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@serialization_info = private unnamed_addr constant [3 x i8] c"I4\00", align 1
@3 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@4 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@5 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@6 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@serialization_info.1 = private unnamed_addr constant [3 x i8] c"I4\00", align 1
@7 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@8 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@9 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@10 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@serialization_info.2 = private unnamed_addr constant [3 x i8] c"I4\00", align 1
@11 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@12 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@13 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@14 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@serialization_info.3 = private unnamed_addr constant [3 x i8] c"I4\00", align 1
@15 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@16 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@17 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@18 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@serialization_info.4 = private unnamed_addr constant [3 x i8] c"I4\00", align 1
@19 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@20 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@21 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@22 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@serialization_info.5 = private unnamed_addr constant [3 x i8] c"I4\00", align 1
@23 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@24 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@25 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@26 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@serialization_info.6 = private unnamed_addr constant [3 x i8] c"I4\00", align 1
@27 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@28 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@29 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@30 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@serialization_info.7 = private unnamed_addr constant [3 x i8] c"I4\00", align 1
@31 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@32 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@33 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@34 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@serialization_info.8 = private unnamed_addr constant [3 x i8] c"I4\00", align 1
@35 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@36 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@37 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@38 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@serialization_info.9 = private unnamed_addr constant [3 x i8] c"I4\00", align 1
@39 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@40 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@41 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@42 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@serialization_info.10 = private unnamed_addr constant [3 x i8] c"I4\00", align 1
@43 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1

define i32 @main(i32 %0, i8** %1) {
.entry:
  %2 = call i8* @_lfortran_get_default_allocator()
  call void @_lpython_call_initial_functions(i32 %0, i8** %1)
  %i = alloca i32, align 4
  %j = alloca i32, align 4
  store i32 0, i32* %j, align 4
  store i32 0, i32* %i, align 4
  br label %loop.head

loop.head:                                        ; preds = %loop.body, %.entry
  %3 = load i32, i32* %i, align 4
  %4 = add i32 %3, 1
  %5 = icmp sle i32 %4, 10
  br i1 %5, label %loop.body, label %loop.end

loop.body:                                        ; preds = %loop.head
  %6 = load i32, i32* %i, align 4
  %7 = add i32 %6, 1
  store i32 %7, i32* %i, align 4
  %8 = load i32, i32* %j, align 4
  %9 = load i32, i32* %i, align 4
  %10 = add i32 %8, %9
  store i32 %10, i32* %j, align 4
  br label %loop.head

loop.end:                                         ; preds = %loop.head
  %11 = load i32, i32* %j, align 4
  %12 = icmp ne i32 %11, 55
  br i1 %12, label %then, label %else

then:                                             ; preds = %loop.end
  call void (i8*, ...) @_lcompilers_print_error(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @1, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @"ERROR STOP", i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @0, i32 0, i32 0))
  call void @_lfortran_internal_alloc_finalize()
  call void @exit(i32 1)
  br label %ifcont

else:                                             ; preds = %loop.end
  br label %ifcont

ifcont:                                           ; preds = %else, %then
  %13 = alloca i64, align 8
  %14 = call i8* (i8*, i8*, i64, i8*, i64*, i32, i32, i32, i32, i32, ...) @_lcompilers_string_format_fortran(i8* %2, i8* null, i64 0, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @serialization_info, i32 0, i32 0), i64* %13, i32 0, i32 0, i32 0, i32 0, i32 0, i32* %j)
  %15 = load i64, i64* %13, align 8
  %stringFormat_desc = alloca %string_descriptor, align 8
  %16 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc, i32 0, i32 0
  store i8* %14, i8** %16, align 8
  %17 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc, i32 0, i32 1
  store i64 %15, i64* %17, align 8
  %18 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc, i32 0, i32 0
  %19 = load i8*, i8** %18, align 8
  %20 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc, i32 0, i32 1
  %21 = load i64, i64* %20, align 8
  %22 = trunc i64 %21 to i32
  call void @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @3, i32 0, i32 0), i8* %19, i32 %22, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @2, i32 0, i32 0), i32 1)
  %23 = icmp eq i8* %14, null
  br i1 %23, label %free_done, label %free_nonnull

free_nonnull:                                     ; preds = %ifcont
  call void @_lfortran_free_alloc(i8* %2, i8* %14)
  br label %free_done

free_done:                                        ; preds = %free_nonnull, %ifcont
  store i32 0, i32* %j, align 4
  store i32 11, i32* %i, align 4
  br label %loop.head1

loop.head1:                                       ; preds = %loop.body2, %free_done
  %24 = load i32, i32* %i, align 4
  %25 = add i32 %24, -1
  %26 = icmp sge i32 %25, 1
  br i1 %26, label %loop.body2, label %loop.end3

loop.body2:                                       ; preds = %loop.head1
  %27 = load i32, i32* %i, align 4
  %28 = add i32 %27, -1
  store i32 %28, i32* %i, align 4
  %29 = load i32, i32* %j, align 4
  %30 = load i32, i32* %i, align 4
  %31 = add i32 %29, %30
  store i32 %31, i32* %j, align 4
  br label %loop.head1

loop.end3:                                        ; preds = %loop.head1
  %32 = load i32, i32* %j, align 4
  %33 = icmp ne i32 %32, 55
  br i1 %33, label %then4, label %else5

then4:                                            ; preds = %loop.end3
  call void (i8*, ...) @_lcompilers_print_error(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @5, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @"ERROR STOP", i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @4, i32 0, i32 0))
  call void @_lfortran_internal_alloc_finalize()
  call void @exit(i32 1)
  br label %ifcont6

else5:                                            ; preds = %loop.end3
  br label %ifcont6

ifcont6:                                          ; preds = %else5, %then4
  %34 = alloca i64, align 8
  %35 = call i8* (i8*, i8*, i64, i8*, i64*, i32, i32, i32, i32, i32, ...) @_lcompilers_string_format_fortran(i8* %2, i8* null, i64 0, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @serialization_info.1, i32 0, i32 0), i64* %34, i32 0, i32 0, i32 0, i32 0, i32 0, i32* %j)
  %36 = load i64, i64* %34, align 8
  %stringFormat_desc7 = alloca %string_descriptor, align 8
  %37 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc7, i32 0, i32 0
  store i8* %35, i8** %37, align 8
  %38 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc7, i32 0, i32 1
  store i64 %36, i64* %38, align 8
  %39 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc7, i32 0, i32 0
  %40 = load i8*, i8** %39, align 8
  %41 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc7, i32 0, i32 1
  %42 = load i64, i64* %41, align 8
  %43 = trunc i64 %42 to i32
  call void @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @7, i32 0, i32 0), i8* %40, i32 %43, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @6, i32 0, i32 0), i32 1)
  %44 = icmp eq i8* %35, null
  br i1 %44, label %free_done9, label %free_nonnull8

free_nonnull8:                                    ; preds = %ifcont6
  call void @_lfortran_free_alloc(i8* %2, i8* %35)
  br label %free_done9

free_done9:                                       ; preds = %free_nonnull8, %ifcont6
  store i32 0, i32* %j, align 4
  store i32 -1, i32* %i, align 4
  br label %loop.head10

loop.head10:                                      ; preds = %loop.body11, %free_done9
  %45 = load i32, i32* %i, align 4
  %46 = add i32 %45, 2
  %47 = icmp sle i32 %46, 9
  br i1 %47, label %loop.body11, label %loop.end12

loop.body11:                                      ; preds = %loop.head10
  %48 = load i32, i32* %i, align 4
  %49 = add i32 %48, 2
  store i32 %49, i32* %i, align 4
  %50 = load i32, i32* %j, align 4
  %51 = load i32, i32* %i, align 4
  %52 = add i32 %50, %51
  store i32 %52, i32* %j, align 4
  br label %loop.head10

loop.end12:                                       ; preds = %loop.head10
  %53 = load i32, i32* %j, align 4
  %54 = icmp ne i32 %53, 25
  br i1 %54, label %then13, label %else14

then13:                                           ; preds = %loop.end12
  call void (i8*, ...) @_lcompilers_print_error(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @9, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @"ERROR STOP", i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @8, i32 0, i32 0))
  call void @_lfortran_internal_alloc_finalize()
  call void @exit(i32 1)
  br label %ifcont15

else14:                                           ; preds = %loop.end12
  br label %ifcont15

ifcont15:                                         ; preds = %else14, %then13
  %55 = alloca i64, align 8
  %56 = call i8* (i8*, i8*, i64, i8*, i64*, i32, i32, i32, i32, i32, ...) @_lcompilers_string_format_fortran(i8* %2, i8* null, i64 0, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @serialization_info.2, i32 0, i32 0), i64* %55, i32 0, i32 0, i32 0, i32 0, i32 0, i32* %j)
  %57 = load i64, i64* %55, align 8
  %stringFormat_desc16 = alloca %string_descriptor, align 8
  %58 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc16, i32 0, i32 0
  store i8* %56, i8** %58, align 8
  %59 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc16, i32 0, i32 1
  store i64 %57, i64* %59, align 8
  %60 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc16, i32 0, i32 0
  %61 = load i8*, i8** %60, align 8
  %62 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc16, i32 0, i32 1
  %63 = load i64, i64* %62, align 8
  %64 = trunc i64 %63 to i32
  call void @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @11, i32 0, i32 0), i8* %61, i32 %64, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @10, i32 0, i32 0), i32 1)
  %65 = icmp eq i8* %56, null
  br i1 %65, label %free_done18, label %free_nonnull17

free_nonnull17:                                   ; preds = %ifcont15
  call void @_lfortran_free_alloc(i8* %2, i8* %56)
  br label %free_done18

free_done18:                                      ; preds = %free_nonnull17, %ifcont15
  store i32 0, i32* %j, align 4
  store i32 11, i32* %i, align 4
  br label %loop.head19

loop.head19:                                      ; preds = %loop.body20, %free_done18
  %66 = load i32, i32* %i, align 4
  %67 = add i32 %66, -2
  %68 = icmp sge i32 %67, 1
  br i1 %68, label %loop.body20, label %loop.end21

loop.body20:                                      ; preds = %loop.head19
  %69 = load i32, i32* %i, align 4
  %70 = add i32 %69, -2
  store i32 %70, i32* %i, align 4
  %71 = load i32, i32* %j, align 4
  %72 = load i32, i32* %i, align 4
  %73 = add i32 %71, %72
  store i32 %73, i32* %j, align 4
  br label %loop.head19

loop.end21:                                       ; preds = %loop.head19
  %74 = load i32, i32* %j, align 4
  %75 = icmp ne i32 %74, 25
  br i1 %75, label %then22, label %else23

then22:                                           ; preds = %loop.end21
  call void (i8*, ...) @_lcompilers_print_error(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @13, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @"ERROR STOP", i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @12, i32 0, i32 0))
  call void @_lfortran_internal_alloc_finalize()
  call void @exit(i32 1)
  br label %ifcont24

else23:                                           ; preds = %loop.end21
  br label %ifcont24

ifcont24:                                         ; preds = %else23, %then22
  %76 = alloca i64, align 8
  %77 = call i8* (i8*, i8*, i64, i8*, i64*, i32, i32, i32, i32, i32, ...) @_lcompilers_string_format_fortran(i8* %2, i8* null, i64 0, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @serialization_info.3, i32 0, i32 0), i64* %76, i32 0, i32 0, i32 0, i32 0, i32 0, i32* %j)
  %78 = load i64, i64* %76, align 8
  %stringFormat_desc25 = alloca %string_descriptor, align 8
  %79 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc25, i32 0, i32 0
  store i8* %77, i8** %79, align 8
  %80 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc25, i32 0, i32 1
  store i64 %78, i64* %80, align 8
  %81 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc25, i32 0, i32 0
  %82 = load i8*, i8** %81, align 8
  %83 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc25, i32 0, i32 1
  %84 = load i64, i64* %83, align 8
  %85 = trunc i64 %84 to i32
  call void @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @15, i32 0, i32 0), i8* %82, i32 %85, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @14, i32 0, i32 0), i32 1)
  %86 = icmp eq i8* %77, null
  br i1 %86, label %free_done27, label %free_nonnull26

free_nonnull26:                                   ; preds = %ifcont24
  call void @_lfortran_free_alloc(i8* %2, i8* %77)
  br label %free_done27

free_done27:                                      ; preds = %free_nonnull26, %ifcont24
  store i32 0, i32* %j, align 4
  store i32 -1, i32* %i, align 4
  br label %loop.head28

loop.head28:                                      ; preds = %loop.body29, %free_done27
  %87 = load i32, i32* %i, align 4
  %88 = add i32 %87, 2
  %89 = icmp sle i32 %88, 10
  br i1 %89, label %loop.body29, label %loop.end30

loop.body29:                                      ; preds = %loop.head28
  %90 = load i32, i32* %i, align 4
  %91 = add i32 %90, 2
  store i32 %91, i32* %i, align 4
  %92 = load i32, i32* %j, align 4
  %93 = load i32, i32* %i, align 4
  %94 = add i32 %92, %93
  store i32 %94, i32* %j, align 4
  br label %loop.head28

loop.end30:                                       ; preds = %loop.head28
  %95 = load i32, i32* %j, align 4
  %96 = icmp ne i32 %95, 25
  br i1 %96, label %then31, label %else32

then31:                                           ; preds = %loop.end30
  call void (i8*, ...) @_lcompilers_print_error(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @17, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @"ERROR STOP", i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @16, i32 0, i32 0))
  call void @_lfortran_internal_alloc_finalize()
  call void @exit(i32 1)
  br label %ifcont33

else32:                                           ; preds = %loop.end30
  br label %ifcont33

ifcont33:                                         ; preds = %else32, %then31
  %97 = alloca i64, align 8
  %98 = call i8* (i8*, i8*, i64, i8*, i64*, i32, i32, i32, i32, i32, ...) @_lcompilers_string_format_fortran(i8* %2, i8* null, i64 0, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @serialization_info.4, i32 0, i32 0), i64* %97, i32 0, i32 0, i32 0, i32 0, i32 0, i32* %j)
  %99 = load i64, i64* %97, align 8
  %stringFormat_desc34 = alloca %string_descriptor, align 8
  %100 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc34, i32 0, i32 0
  store i8* %98, i8** %100, align 8
  %101 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc34, i32 0, i32 1
  store i64 %99, i64* %101, align 8
  %102 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc34, i32 0, i32 0
  %103 = load i8*, i8** %102, align 8
  %104 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc34, i32 0, i32 1
  %105 = load i64, i64* %104, align 8
  %106 = trunc i64 %105 to i32
  call void @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @19, i32 0, i32 0), i8* %103, i32 %106, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @18, i32 0, i32 0), i32 1)
  %107 = icmp eq i8* %98, null
  br i1 %107, label %free_done36, label %free_nonnull35

free_nonnull35:                                   ; preds = %ifcont33
  call void @_lfortran_free_alloc(i8* %2, i8* %98)
  br label %free_done36

free_done36:                                      ; preds = %free_nonnull35, %ifcont33
  store i32 0, i32* %j, align 4
  store i32 -2, i32* %i, align 4
  br label %loop.head37

loop.head37:                                      ; preds = %loop.body38, %free_done36
  %108 = load i32, i32* %i, align 4
  %109 = add i32 %108, 3
  %110 = icmp sle i32 %109, 10
  br i1 %110, label %loop.body38, label %loop.end39

loop.body38:                                      ; preds = %loop.head37
  %111 = load i32, i32* %i, align 4
  %112 = add i32 %111, 3
  store i32 %112, i32* %i, align 4
  %113 = load i32, i32* %j, align 4
  %114 = load i32, i32* %i, align 4
  %115 = add i32 %113, %114
  store i32 %115, i32* %j, align 4
  br label %loop.head37

loop.end39:                                       ; preds = %loop.head37
  %116 = load i32, i32* %j, align 4
  %117 = icmp ne i32 %116, 22
  br i1 %117, label %then40, label %else41

then40:                                           ; preds = %loop.end39
  call void (i8*, ...) @_lcompilers_print_error(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @21, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @"ERROR STOP", i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @20, i32 0, i32 0))
  call void @_lfortran_internal_alloc_finalize()
  call void @exit(i32 1)
  br label %ifcont42

else41:                                           ; preds = %loop.end39
  br label %ifcont42

ifcont42:                                         ; preds = %else41, %then40
  %118 = alloca i64, align 8
  %119 = call i8* (i8*, i8*, i64, i8*, i64*, i32, i32, i32, i32, i32, ...) @_lcompilers_string_format_fortran(i8* %2, i8* null, i64 0, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @serialization_info.5, i32 0, i32 0), i64* %118, i32 0, i32 0, i32 0, i32 0, i32 0, i32* %j)
  %120 = load i64, i64* %118, align 8
  %stringFormat_desc43 = alloca %string_descriptor, align 8
  %121 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc43, i32 0, i32 0
  store i8* %119, i8** %121, align 8
  %122 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc43, i32 0, i32 1
  store i64 %120, i64* %122, align 8
  %123 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc43, i32 0, i32 0
  %124 = load i8*, i8** %123, align 8
  %125 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc43, i32 0, i32 1
  %126 = load i64, i64* %125, align 8
  %127 = trunc i64 %126 to i32
  call void @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @23, i32 0, i32 0), i8* %124, i32 %127, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @22, i32 0, i32 0), i32 1)
  %128 = icmp eq i8* %119, null
  br i1 %128, label %free_done45, label %free_nonnull44

free_nonnull44:                                   ; preds = %ifcont42
  call void @_lfortran_free_alloc(i8* %2, i8* %119)
  br label %free_done45

free_done45:                                      ; preds = %free_nonnull44, %ifcont42
  store i32 0, i32* %j, align 4
  store i32 13, i32* %i, align 4
  br label %loop.head46

loop.head46:                                      ; preds = %loop.body47, %free_done45
  %129 = load i32, i32* %i, align 4
  %130 = add i32 %129, -3
  %131 = icmp sge i32 %130, 1
  br i1 %131, label %loop.body47, label %loop.end48

loop.body47:                                      ; preds = %loop.head46
  %132 = load i32, i32* %i, align 4
  %133 = add i32 %132, -3
  store i32 %133, i32* %i, align 4
  %134 = load i32, i32* %j, align 4
  %135 = load i32, i32* %i, align 4
  %136 = add i32 %134, %135
  store i32 %136, i32* %j, align 4
  br label %loop.head46

loop.end48:                                       ; preds = %loop.head46
  %137 = load i32, i32* %j, align 4
  %138 = icmp ne i32 %137, 22
  br i1 %138, label %then49, label %else50

then49:                                           ; preds = %loop.end48
  call void (i8*, ...) @_lcompilers_print_error(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @25, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @"ERROR STOP", i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @24, i32 0, i32 0))
  call void @_lfortran_internal_alloc_finalize()
  call void @exit(i32 1)
  br label %ifcont51

else50:                                           ; preds = %loop.end48
  br label %ifcont51

ifcont51:                                         ; preds = %else50, %then49
  %139 = alloca i64, align 8
  %140 = call i8* (i8*, i8*, i64, i8*, i64*, i32, i32, i32, i32, i32, ...) @_lcompilers_string_format_fortran(i8* %2, i8* null, i64 0, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @serialization_info.6, i32 0, i32 0), i64* %139, i32 0, i32 0, i32 0, i32 0, i32 0, i32* %j)
  %141 = load i64, i64* %139, align 8
  %stringFormat_desc52 = alloca %string_descriptor, align 8
  %142 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc52, i32 0, i32 0
  store i8* %140, i8** %142, align 8
  %143 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc52, i32 0, i32 1
  store i64 %141, i64* %143, align 8
  %144 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc52, i32 0, i32 0
  %145 = load i8*, i8** %144, align 8
  %146 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc52, i32 0, i32 1
  %147 = load i64, i64* %146, align 8
  %148 = trunc i64 %147 to i32
  call void @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @27, i32 0, i32 0), i8* %145, i32 %148, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @26, i32 0, i32 0), i32 1)
  %149 = icmp eq i8* %140, null
  br i1 %149, label %free_done54, label %free_nonnull53

free_nonnull53:                                   ; preds = %ifcont51
  call void @_lfortran_free_alloc(i8* %2, i8* %140)
  br label %free_done54

free_done54:                                      ; preds = %free_nonnull53, %ifcont51
  store i32 0, i32* %j, align 4
  store i32 0, i32* %i, align 4
  br label %loop.head55

loop.head55:                                      ; preds = %loop.body56, %free_done54
  %150 = load i32, i32* %i, align 4
  %151 = add i32 %150, 1
  %152 = icmp sle i32 %151, 1
  br i1 %152, label %loop.body56, label %loop.end57

loop.body56:                                      ; preds = %loop.head55
  %153 = load i32, i32* %i, align 4
  %154 = add i32 %153, 1
  store i32 %154, i32* %i, align 4
  %155 = load i32, i32* %j, align 4
  %156 = load i32, i32* %i, align 4
  %157 = add i32 %155, %156
  store i32 %157, i32* %j, align 4
  br label %loop.head55

loop.end57:                                       ; preds = %loop.head55
  %158 = load i32, i32* %j, align 4
  %159 = icmp ne i32 %158, 1
  br i1 %159, label %then58, label %else59

then58:                                           ; preds = %loop.end57
  call void (i8*, ...) @_lcompilers_print_error(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @29, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @"ERROR STOP", i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @28, i32 0, i32 0))
  call void @_lfortran_internal_alloc_finalize()
  call void @exit(i32 1)
  br label %ifcont60

else59:                                           ; preds = %loop.end57
  br label %ifcont60

ifcont60:                                         ; preds = %else59, %then58
  %160 = alloca i64, align 8
  %161 = call i8* (i8*, i8*, i64, i8*, i64*, i32, i32, i32, i32, i32, ...) @_lcompilers_string_format_fortran(i8* %2, i8* null, i64 0, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @serialization_info.7, i32 0, i32 0), i64* %160, i32 0, i32 0, i32 0, i32 0, i32 0, i32* %j)
  %162 = load i64, i64* %160, align 8
  %stringFormat_desc61 = alloca %string_descriptor, align 8
  %163 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc61, i32 0, i32 0
  store i8* %161, i8** %163, align 8
  %164 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc61, i32 0, i32 1
  store i64 %162, i64* %164, align 8
  %165 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc61, i32 0, i32 0
  %166 = load i8*, i8** %165, align 8
  %167 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc61, i32 0, i32 1
  %168 = load i64, i64* %167, align 8
  %169 = trunc i64 %168 to i32
  call void @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @31, i32 0, i32 0), i8* %166, i32 %169, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @30, i32 0, i32 0), i32 1)
  %170 = icmp eq i8* %161, null
  br i1 %170, label %free_done63, label %free_nonnull62

free_nonnull62:                                   ; preds = %ifcont60
  call void @_lfortran_free_alloc(i8* %2, i8* %161)
  br label %free_done63

free_done63:                                      ; preds = %free_nonnull62, %ifcont60
  store i32 0, i32* %j, align 4
  store i32 2, i32* %i, align 4
  br label %loop.head64

loop.head64:                                      ; preds = %loop.body65, %free_done63
  %171 = load i32, i32* %i, align 4
  %172 = add i32 %171, -1
  %173 = icmp sge i32 %172, 1
  br i1 %173, label %loop.body65, label %loop.end66

loop.body65:                                      ; preds = %loop.head64
  %174 = load i32, i32* %i, align 4
  %175 = add i32 %174, -1
  store i32 %175, i32* %i, align 4
  %176 = load i32, i32* %j, align 4
  %177 = load i32, i32* %i, align 4
  %178 = add i32 %176, %177
  store i32 %178, i32* %j, align 4
  br label %loop.head64

loop.end66:                                       ; preds = %loop.head64
  %179 = load i32, i32* %j, align 4
  %180 = icmp ne i32 %179, 1
  br i1 %180, label %then67, label %else68

then67:                                           ; preds = %loop.end66
  call void (i8*, ...) @_lcompilers_print_error(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @33, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @"ERROR STOP", i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @32, i32 0, i32 0))
  call void @_lfortran_internal_alloc_finalize()
  call void @exit(i32 1)
  br label %ifcont69

else68:                                           ; preds = %loop.end66
  br label %ifcont69

ifcont69:                                         ; preds = %else68, %then67
  %181 = alloca i64, align 8
  %182 = call i8* (i8*, i8*, i64, i8*, i64*, i32, i32, i32, i32, i32, ...) @_lcompilers_string_format_fortran(i8* %2, i8* null, i64 0, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @serialization_info.8, i32 0, i32 0), i64* %181, i32 0, i32 0, i32 0, i32 0, i32 0, i32* %j)
  %183 = load i64, i64* %181, align 8
  %stringFormat_desc70 = alloca %string_descriptor, align 8
  %184 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc70, i32 0, i32 0
  store i8* %182, i8** %184, align 8
  %185 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc70, i32 0, i32 1
  store i64 %183, i64* %185, align 8
  %186 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc70, i32 0, i32 0
  %187 = load i8*, i8** %186, align 8
  %188 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc70, i32 0, i32 1
  %189 = load i64, i64* %188, align 8
  %190 = trunc i64 %189 to i32
  call void @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @35, i32 0, i32 0), i8* %187, i32 %190, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @34, i32 0, i32 0), i32 1)
  %191 = icmp eq i8* %182, null
  br i1 %191, label %free_done72, label %free_nonnull71

free_nonnull71:                                   ; preds = %ifcont69
  call void @_lfortran_free_alloc(i8* %2, i8* %182)
  br label %free_done72

free_done72:                                      ; preds = %free_nonnull71, %ifcont69
  store i32 0, i32* %j, align 4
  store i32 0, i32* %i, align 4
  br label %loop.head73

loop.head73:                                      ; preds = %loop.body74, %free_done72
  %192 = load i32, i32* %i, align 4
  %193 = add i32 %192, 1
  %194 = icmp sle i32 %193, 0
  br i1 %194, label %loop.body74, label %loop.end75

loop.body74:                                      ; preds = %loop.head73
  %195 = load i32, i32* %i, align 4
  %196 = add i32 %195, 1
  store i32 %196, i32* %i, align 4
  %197 = load i32, i32* %j, align 4
  %198 = load i32, i32* %i, align 4
  %199 = add i32 %197, %198
  store i32 %199, i32* %j, align 4
  br label %loop.head73

loop.end75:                                       ; preds = %loop.head73
  %200 = load i32, i32* %j, align 4
  %201 = icmp ne i32 %200, 0
  br i1 %201, label %then76, label %else77

then76:                                           ; preds = %loop.end75
  call void (i8*, ...) @_lcompilers_print_error(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @37, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @"ERROR STOP", i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @36, i32 0, i32 0))
  call void @_lfortran_internal_alloc_finalize()
  call void @exit(i32 1)
  br label %ifcont78

else77:                                           ; preds = %loop.end75
  br label %ifcont78

ifcont78:                                         ; preds = %else77, %then76
  %202 = alloca i64, align 8
  %203 = call i8* (i8*, i8*, i64, i8*, i64*, i32, i32, i32, i32, i32, ...) @_lcompilers_string_format_fortran(i8* %2, i8* null, i64 0, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @serialization_info.9, i32 0, i32 0), i64* %202, i32 0, i32 0, i32 0, i32 0, i32 0, i32* %j)
  %204 = load i64, i64* %202, align 8
  %stringFormat_desc79 = alloca %string_descriptor, align 8
  %205 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc79, i32 0, i32 0
  store i8* %203, i8** %205, align 8
  %206 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc79, i32 0, i32 1
  store i64 %204, i64* %206, align 8
  %207 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc79, i32 0, i32 0
  %208 = load i8*, i8** %207, align 8
  %209 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc79, i32 0, i32 1
  %210 = load i64, i64* %209, align 8
  %211 = trunc i64 %210 to i32
  call void @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @39, i32 0, i32 0), i8* %208, i32 %211, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @38, i32 0, i32 0), i32 1)
  %212 = icmp eq i8* %203, null
  br i1 %212, label %free_done81, label %free_nonnull80

free_nonnull80:                                   ; preds = %ifcont78
  call void @_lfortran_free_alloc(i8* %2, i8* %203)
  br label %free_done81

free_done81:                                      ; preds = %free_nonnull80, %ifcont78
  store i32 0, i32* %j, align 4
  store i32 1, i32* %i, align 4
  br label %loop.head82

loop.head82:                                      ; preds = %loop.body83, %free_done81
  %213 = load i32, i32* %i, align 4
  %214 = add i32 %213, -1
  %215 = icmp sge i32 %214, 1
  br i1 %215, label %loop.body83, label %loop.end84

loop.body83:                                      ; preds = %loop.head82
  %216 = load i32, i32* %i, align 4
  %217 = add i32 %216, -1
  store i32 %217, i32* %i, align 4
  %218 = load i32, i32* %j, align 4
  %219 = load i32, i32* %i, align 4
  %220 = add i32 %218, %219
  store i32 %220, i32* %j, align 4
  br label %loop.head82

loop.end84:                                       ; preds = %loop.head82
  %221 = load i32, i32* %j, align 4
  %222 = icmp ne i32 %221, 0
  br i1 %222, label %then85, label %else86

then85:                                           ; preds = %loop.end84
  call void (i8*, ...) @_lcompilers_print_error(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @41, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @"ERROR STOP", i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @40, i32 0, i32 0))
  call void @_lfortran_internal_alloc_finalize()
  call void @exit(i32 1)
  br label %ifcont87

else86:                                           ; preds = %loop.end84
  br label %ifcont87

ifcont87:                                         ; preds = %else86, %then85
  %223 = alloca i64, align 8
  %224 = call i8* (i8*, i8*, i64, i8*, i64*, i32, i32, i32, i32, i32, ...) @_lcompilers_string_format_fortran(i8* %2, i8* null, i64 0, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @serialization_info.10, i32 0, i32 0), i64* %223, i32 0, i32 0, i32 0, i32 0, i32 0, i32* %j)
  %225 = load i64, i64* %223, align 8
  %stringFormat_desc88 = alloca %string_descriptor, align 8
  %226 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc88, i32 0, i32 0
  store i8* %224, i8** %226, align 8
  %227 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc88, i32 0, i32 1
  store i64 %225, i64* %227, align 8
  %228 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc88, i32 0, i32 0
  %229 = load i8*, i8** %228, align 8
  %230 = getelementptr %string_descriptor, %string_descriptor* %stringFormat_desc88, i32 0, i32 1
  %231 = load i64, i64* %230, align 8
  %232 = trunc i64 %231 to i32
  call void @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @43, i32 0, i32 0), i8* %229, i32 %232, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @42, i32 0, i32 0), i32 1)
  %233 = icmp eq i8* %224, null
  br i1 %233, label %free_done90, label %free_nonnull89

free_nonnull89:                                   ; preds = %ifcont87
  call void @_lfortran_free_alloc(i8* %2, i8* %224)
  br label %free_done90

free_done90:                                      ; preds = %free_nonnull89, %ifcont87
  br label %return

return:                                           ; preds = %free_done90
  br label %FINALIZE_SYMTABLE_doloop_01

FINALIZE_SYMTABLE_doloop_01:                      ; preds = %return
  call void @_lfortran_internal_alloc_finalize()
  ret i32 0
}

declare void @_lpython_call_initial_functions(i32, i8**)

declare void @_lcompilers_print_error(i8*, ...)

declare void @_lfortran_internal_alloc_finalize()

declare void @exit(i32)

declare i8* @_lcompilers_string_format_fortran(i8*, i8*, i64, i8*, i64*, i32, i32, i32, i32, i32, ...)

declare i8* @_lfortran_get_default_allocator()

declare void @_lfortran_printf(i8*, i8*, i32, i8*, i32)

declare void @_lfortran_free_alloc(i8*, i8*)
