; ModuleID = 'LFortran'
source_filename = "LFortran"

@0 = private unnamed_addr constant [11 x i8] c"ERROR STOP\00", align 1
@1 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@2 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@3 = private unnamed_addr constant [11 x i8] c"ERROR STOP\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 [11 x i8] c"ERROR STOP\00", align 1
@7 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@8 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@9 = private unnamed_addr constant [11 x i8] c"ERROR STOP\00", align 1
@10 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@11 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@12 = private unnamed_addr constant [11 x i8] c"ERROR STOP\00", align 1
@13 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@14 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@15 = private unnamed_addr constant [11 x i8] c"ERROR STOP\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 [11 x i8] c"ERROR STOP\00", align 1
@19 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@20 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@21 = private unnamed_addr constant [11 x i8] c"ERROR STOP\00", align 1
@22 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@23 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@24 = private unnamed_addr constant [11 x i8] c"ERROR STOP\00", align 1
@25 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@26 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@27 = private unnamed_addr constant [11 x i8] c"ERROR STOP\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 [11 x i8] c"ERROR STOP\00", align 1
@31 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@32 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@33 = private unnamed_addr constant [11 x i8] c"ERROR STOP\00", align 1
@34 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@35 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1

define i32 @main(i32 %0, i8** %1) {
.entry:
  %i = alloca i32, align 4
  call void @_lpython_call_initial_functions(i32 %0, i8** %1)
  %a = alloca [3 x i32], align 4
  %b = alloca [4 x i32], align 4
  %i1 = alloca i32, align 4
  store i32 0, i32* %i1, align 4
  br label %loop.head

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

loop.body:                                        ; preds = %loop.head
  %5 = load i32, i32* %i1, align 4
  %6 = add i32 %5, 1
  store i32 %6, i32* %i1, align 4
  %7 = load i32, i32* %i1, align 4
  %8 = sub i32 %7, 1
  %9 = mul i32 1, %8
  %10 = add i32 0, %9
  %11 = getelementptr [3 x i32], [3 x i32]* %a, i32 0, i32 %10
  %12 = load i32, i32* %i1, align 4
  %13 = add i32 %12, 10
  store i32 %13, i32* %11, align 4
  br label %loop.head

loop.end:                                         ; preds = %loop.head
  %14 = getelementptr [3 x i32], [3 x i32]* %a, i32 0, i32 0
  %15 = load i32, i32* %14, align 4
  %16 = icmp ne i32 %15, 11
  br i1 %16, label %then, label %else

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

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

ifcont:                                           ; preds = %else, %then
  %17 = getelementptr [3 x i32], [3 x i32]* %a, i32 0, i32 1
  %18 = load i32, i32* %17, align 4
  %19 = icmp ne i32 %18, 12
  br i1 %19, label %then2, label %else3

then2:                                            ; preds = %ifcont
  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]* @3, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @4, i32 0, i32 0))
  call void @exit(i32 1)
  br label %ifcont4

else3:                                            ; preds = %ifcont
  br label %ifcont4

ifcont4:                                          ; preds = %else3, %then2
  %20 = getelementptr [3 x i32], [3 x i32]* %a, i32 0, i32 2
  %21 = load i32, i32* %20, align 4
  %22 = icmp ne i32 %21, 13
  br i1 %22, label %then5, label %else6

then5:                                            ; preds = %ifcont4
  call void (i8*, ...) @_lcompilers_print_error(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @8, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @6, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @7, i32 0, i32 0))
  call void @exit(i32 1)
  br label %ifcont7

else6:                                            ; preds = %ifcont4
  br label %ifcont7

ifcont7:                                          ; preds = %else6, %then5
  store i32 10, i32* %i1, align 4
  br label %loop.head8

loop.head8:                                       ; preds = %loop.body9, %ifcont7
  %23 = load i32, i32* %i1, align 4
  %24 = add i32 %23, 1
  %25 = icmp sle i32 %24, 14
  br i1 %25, label %loop.body9, label %loop.end10

loop.body9:                                       ; preds = %loop.head8
  %26 = load i32, i32* %i1, align 4
  %27 = add i32 %26, 1
  store i32 %27, i32* %i1, align 4
  %28 = load i32, i32* %i1, align 4
  %29 = sub i32 %28, 10
  %30 = sub i32 %29, 1
  %31 = mul i32 1, %30
  %32 = add i32 0, %31
  %33 = getelementptr [4 x i32], [4 x i32]* %b, i32 0, i32 %32
  %34 = load i32, i32* %i1, align 4
  store i32 %34, i32* %33, align 4
  br label %loop.head8

loop.end10:                                       ; preds = %loop.head8
  %35 = getelementptr [4 x i32], [4 x i32]* %b, i32 0, i32 0
  %36 = load i32, i32* %35, align 4
  %37 = icmp ne i32 %36, 11
  br i1 %37, label %then11, label %else12

then11:                                           ; preds = %loop.end10
  call void (i8*, ...) @_lcompilers_print_error(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @11, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @9, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @10, i32 0, i32 0))
  call void @exit(i32 1)
  br label %ifcont13

else12:                                           ; preds = %loop.end10
  br label %ifcont13

ifcont13:                                         ; preds = %else12, %then11
  %38 = getelementptr [4 x i32], [4 x i32]* %b, i32 0, i32 1
  %39 = load i32, i32* %38, align 4
  %40 = icmp ne i32 %39, 12
  br i1 %40, label %then14, label %else15

then14:                                           ; preds = %ifcont13
  call void (i8*, ...) @_lcompilers_print_error(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @14, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @12, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @13, i32 0, i32 0))
  call void @exit(i32 1)
  br label %ifcont16

else15:                                           ; preds = %ifcont13
  br label %ifcont16

ifcont16:                                         ; preds = %else15, %then14
  %41 = getelementptr [4 x i32], [4 x i32]* %b, i32 0, i32 2
  %42 = load i32, i32* %41, align 4
  %43 = icmp ne i32 %42, 13
  br i1 %43, label %then17, label %else18

then17:                                           ; preds = %ifcont16
  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]* @15, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @16, i32 0, i32 0))
  call void @exit(i32 1)
  br label %ifcont19

else18:                                           ; preds = %ifcont16
  br label %ifcont19

ifcont19:                                         ; preds = %else18, %then17
  %44 = getelementptr [4 x i32], [4 x i32]* %b, i32 0, i32 3
  %45 = load i32, i32* %44, align 4
  %46 = icmp ne i32 %45, 14
  br i1 %46, label %then20, label %else21

then20:                                           ; preds = %ifcont19
  call void (i8*, ...) @_lcompilers_print_error(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @20, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @18, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @19, i32 0, i32 0))
  call void @exit(i32 1)
  br label %ifcont22

else21:                                           ; preds = %ifcont19
  br label %ifcont22

ifcont22:                                         ; preds = %else21, %then20
  store i32 0, i32* %i1, align 4
  br label %loop.head23

loop.head23:                                      ; preds = %loop.body24, %ifcont22
  %47 = load i32, i32* %i1, align 4
  %48 = add i32 %47, 1
  %49 = icmp sle i32 %48, 3
  br i1 %49, label %loop.body24, label %loop.end25

loop.body24:                                      ; preds = %loop.head23
  %50 = load i32, i32* %i1, align 4
  %51 = add i32 %50, 1
  store i32 %51, i32* %i1, align 4
  %52 = load i32, i32* %i1, align 4
  %53 = sub i32 %52, 1
  %54 = mul i32 1, %53
  %55 = add i32 0, %54
  %56 = getelementptr [4 x i32], [4 x i32]* %b, i32 0, i32 %55
  %57 = load i32, i32* %i1, align 4
  %58 = sub i32 %57, 1
  %59 = mul i32 1, %58
  %60 = add i32 0, %59
  %61 = getelementptr [3 x i32], [3 x i32]* %a, i32 0, i32 %60
  %62 = load i32, i32* %61, align 4
  %63 = sub i32 %62, 10
  store i32 %63, i32* %56, align 4
  br label %loop.head23

loop.end25:                                       ; preds = %loop.head23
  %64 = getelementptr [4 x i32], [4 x i32]* %b, i32 0, i32 0
  %65 = load i32, i32* %64, align 4
  %66 = icmp ne i32 %65, 1
  br i1 %66, label %then26, label %else27

then26:                                           ; preds = %loop.end25
  call void (i8*, ...) @_lcompilers_print_error(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @23, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @21, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @22, i32 0, i32 0))
  call void @exit(i32 1)
  br label %ifcont28

else27:                                           ; preds = %loop.end25
  br label %ifcont28

ifcont28:                                         ; preds = %else27, %then26
  %67 = getelementptr [4 x i32], [4 x i32]* %b, i32 0, i32 1
  %68 = load i32, i32* %67, align 4
  %69 = icmp ne i32 %68, 2
  br i1 %69, label %then29, label %else30

then29:                                           ; preds = %ifcont28
  call void (i8*, ...) @_lcompilers_print_error(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @26, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @24, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @25, i32 0, i32 0))
  call void @exit(i32 1)
  br label %ifcont31

else30:                                           ; preds = %ifcont28
  br label %ifcont31

ifcont31:                                         ; preds = %else30, %then29
  %70 = getelementptr [4 x i32], [4 x i32]* %b, i32 0, i32 2
  %71 = load i32, i32* %70, align 4
  %72 = icmp ne i32 %71, 3
  br i1 %72, label %then32, label %else33

then32:                                           ; preds = %ifcont31
  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]* @27, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @28, i32 0, i32 0))
  call void @exit(i32 1)
  br label %ifcont34

else33:                                           ; preds = %ifcont31
  br label %ifcont34

ifcont34:                                         ; preds = %else33, %then32
  %73 = getelementptr [4 x i32], [4 x i32]* %b, i32 0, i32 3
  %74 = getelementptr [4 x i32], [4 x i32]* %b, i32 0, i32 0
  %75 = load i32, i32* %74, align 4
  %76 = getelementptr [4 x i32], [4 x i32]* %b, i32 0, i32 1
  %77 = load i32, i32* %76, align 4
  %78 = add i32 %75, %77
  %79 = getelementptr [4 x i32], [4 x i32]* %b, i32 0, i32 2
  %80 = load i32, i32* %79, align 4
  %81 = add i32 %78, %80
  %82 = getelementptr [3 x i32], [3 x i32]* %a, i32 0, i32 0
  %83 = load i32, i32* %82, align 4
  %84 = add i32 %81, %83
  store i32 %84, i32* %73, align 4
  %85 = getelementptr [4 x i32], [4 x i32]* %b, i32 0, i32 3
  %86 = load i32, i32* %85, align 4
  %87 = icmp ne i32 %86, 17
  br i1 %87, label %then35, label %else36

then35:                                           ; preds = %ifcont34
  call void (i8*, ...) @_lcompilers_print_error(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @32, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @30, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @31, i32 0, i32 0))
  call void @exit(i32 1)
  br label %ifcont37

else36:                                           ; preds = %ifcont34
  br label %ifcont37

ifcont37:                                         ; preds = %else36, %then35
  %88 = getelementptr [4 x i32], [4 x i32]* %b, i32 0, i32 3
  %89 = getelementptr [3 x i32], [3 x i32]* %a, i32 0, i32 0
  %90 = load i32, i32* %89, align 4
  store i32 %90, i32* %88, align 4
  %91 = getelementptr [4 x i32], [4 x i32]* %b, i32 0, i32 3
  %92 = load i32, i32* %91, align 4
  %93 = icmp ne i32 %92, 11
  br i1 %93, label %then38, label %else39

then38:                                           ; preds = %ifcont37
  call void (i8*, ...) @_lcompilers_print_error(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @35, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @33, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @34, i32 0, i32 0))
  call void @exit(i32 1)
  br label %ifcont40

else39:                                           ; preds = %ifcont37
  br label %ifcont40

ifcont40:                                         ; preds = %else39, %then38
  call void @_lpython_free_argv()
  br label %return

return:                                           ; preds = %ifcont40
  ret i32 0
}

declare void @_lpython_call_initial_functions(i32, i8**)

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

declare void @exit(i32)

declare void @_lpython_free_argv()
