; ModuleID = 'LFortran'
source_filename = "LFortran"

%fpm_run_settings_polymorphic = type { i64, %fpm_run_settings* }
%fpm_run_settings = type { %fpm_build_settings, [2 x i8*], i8*, i8*, i1 }
%fpm_build_settings = type { i1 }
%__vtab_fpm_run_settings = type { i64 }

@0 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1

define i1 @Any_4_1_0_logical____0(i1* %mask, i32* %__1mask, i32* %__2mask) {
.entry:
  %Any_4_1_0 = alloca i1, align 1
  %__1_i = alloca i32, align 4
  store i1 false, i1* %Any_4_1_0, align 1
  %0 = load i32, i32* %__1mask, align 4
  %1 = sub i32 %0, 1
  store i32 %1, i32* %__1_i, align 4
  br label %loop.head

loop.head:                                        ; preds = %loop.body, %.entry
  %2 = load i32, i32* %__1_i, align 4
  %3 = add i32 %2, 1
  %4 = load i32, i32* %__2mask, align 4
  %5 = load i32, i32* %__1mask, align 4
  %6 = add i32 %4, %5
  %7 = sub i32 %6, 1
  %8 = icmp sle i32 %3, %7
  br i1 %8, label %loop.body, label %loop.end

loop.body:                                        ; preds = %loop.head
  %9 = load i32, i32* %__1_i, align 4
  %10 = add i32 %9, 1
  store i32 %10, i32* %__1_i, align 4
  %11 = load i1, i1* %Any_4_1_0, align 1
  %12 = load i32, i32* %__1_i, align 4
  %13 = load i32, i32* %__1mask, align 4
  %14 = load i32, i32* %__2mask, align 4
  %15 = sub i32 %12, %13
  %16 = mul i32 1, %15
  %17 = add i32 0, %16
  %18 = mul i32 1, %14
  %19 = getelementptr inbounds i1, i1* %mask, i32 %17
  %20 = load i1, i1* %19, align 1
  %21 = icmp eq i1 %11, false
  %22 = select i1 %21, i1 %20, i1 %11
  store i1 %22, i1* %Any_4_1_0, align 1
  br label %loop.head

loop.end:                                         ; preds = %loop.head
  br label %return

return:                                           ; preds = %loop.end
  %23 = load i1, i1* %Any_4_1_0, align 1
  ret i1 %23
}

define void @__module_modules_36_fpm_main_01_cmd_run(%fpm_run_settings_polymorphic* %settings, i1* %test) {
.entry:
  %call_arg_value9 = alloca i32, align 4
  %call_arg_value = alloca i32, align 4
  %array_bound5 = alloca i32, align 4
  %array_bound1 = alloca i32, align 4
  %array_bound = alloca i32, align 4
  %0 = alloca %__vtab_fpm_run_settings, align 8
  %1 = getelementptr %__vtab_fpm_run_settings, %__vtab_fpm_run_settings* %0, i32 0, i32 0
  store i64 0, i64* %1, align 4
  %__libasr_created__intrinsic_array_function_Any = alloca [2 x i1], align 1
  %__libasr_created__intrinsic_array_function_Any1 = alloca i1, align 1
  %__libasr_index_0_ = alloca i32, align 4
  %__libasr_index_0_1 = alloca i32, align 4
  %found = alloca [2 x i1], align 1
  %toomany = alloca i1, align 1
  br i1 true, label %then, label %else

then:                                             ; preds = %.entry
  store i32 1, i32* %array_bound, align 4
  br label %ifcont

else:                                             ; preds = %.entry
  br label %ifcont

ifcont:                                           ; preds = %else, %then
  %2 = load i32, i32* %array_bound, align 4
  store i32 %2, i32* %__libasr_index_0_1, align 4
  br i1 true, label %then2, label %else3

then2:                                            ; preds = %ifcont
  store i32 1, i32* %array_bound1, align 4
  br label %ifcont4

else3:                                            ; preds = %ifcont
  br label %ifcont4

ifcont4:                                          ; preds = %else3, %then2
  %3 = load i32, i32* %array_bound1, align 4
  %4 = sub i32 %3, 1
  store i32 %4, i32* %__libasr_index_0_, align 4
  br label %loop.head

loop.head:                                        ; preds = %loop.body, %ifcont4
  %5 = load i32, i32* %__libasr_index_0_, align 4
  %6 = add i32 %5, 1
  br i1 true, label %then6, label %else7

then6:                                            ; preds = %loop.head
  store i32 2, i32* %array_bound5, align 4
  br label %ifcont8

else7:                                            ; preds = %loop.head
  br label %ifcont8

ifcont8:                                          ; preds = %else7, %then6
  %7 = load i32, i32* %array_bound5, align 4
  %8 = icmp sle i32 %6, %7
  br i1 %8, label %loop.body, label %loop.end

loop.body:                                        ; preds = %ifcont8
  %9 = load i32, i32* %__libasr_index_0_, align 4
  %10 = add i32 %9, 1
  store i32 %10, i32* %__libasr_index_0_, align 4
  %11 = load i32, i32* %__libasr_index_0_, align 4
  %12 = sub i32 %11, 1
  %13 = mul i32 1, %12
  %14 = add i32 0, %13
  %15 = getelementptr [2 x i1], [2 x i1]* %__libasr_created__intrinsic_array_function_Any, i32 0, i32 %14
  %16 = load i32, i32* %__libasr_index_0_1, align 4
  %17 = sub i32 %16, 1
  %18 = mul i32 1, %17
  %19 = add i32 0, %18
  %20 = getelementptr [2 x i1], [2 x i1]* %found, i32 0, i32 %19
  %21 = load i1, i1* %20, align 1
  %22 = xor i1 %21, true
  store i1 %22, i1* %15, align 1
  %23 = load i32, i32* %__libasr_index_0_1, align 4
  %24 = add i32 %23, 1
  store i32 %24, i32* %__libasr_index_0_1, align 4
  br label %loop.head

loop.end:                                         ; preds = %ifcont8
  %25 = getelementptr [2 x i1], [2 x i1]* %__libasr_created__intrinsic_array_function_Any, i32 0, i32 0
  store i32 1, i32* %call_arg_value, align 4
  store i32 2, i32* %call_arg_value9, align 4
  %26 = call i1 @Any_4_1_0_logical____0(i1* %25, i32* %call_arg_value, i32* %call_arg_value9)
  store i1 %26, i1* %__libasr_created__intrinsic_array_function_Any1, align 1
  %27 = load i1, i1* %__libasr_created__intrinsic_array_function_Any1, align 1
  %28 = load i1, i1* %toomany, align 1
  %29 = load i1, i1* %test, align 1
  %30 = xor i1 %29, true
  %31 = icmp eq i1 %28, false
  %32 = select i1 %31, i1 %28, i1 %30
  %33 = load i1, i1* %toomany, align 1
  %34 = getelementptr %fpm_run_settings_polymorphic, %fpm_run_settings_polymorphic* %settings, i32 0, i32 1
  %35 = load %fpm_run_settings*, %fpm_run_settings** %34, align 8
  %36 = getelementptr %fpm_run_settings, %fpm_run_settings* %35, i32 0, i32 3
  %37 = load i8*, i8** %36, align 8
  %38 = alloca i8*, align 8
  store i8* %37, i8** %38, align 8
  %39 = alloca i8*, align 8
  store i8* getelementptr inbounds ([1 x i8], [1 x i8]* @0, i32 0, i32 0), i8** %39, align 8
  %40 = call i1 @_lpython_str_compare_noteq(i8** %38, i8** %39)
  %41 = icmp eq i1 %33, false
  %42 = select i1 %41, i1 %33, i1 %40
  %43 = icmp eq i1 %32, false
  %44 = select i1 %43, i1 %42, i1 %32
  %45 = getelementptr %fpm_run_settings_polymorphic, %fpm_run_settings_polymorphic* %settings, i32 0, i32 1
  %46 = load %fpm_run_settings*, %fpm_run_settings** %45, align 8
  %47 = getelementptr %fpm_run_settings, %fpm_run_settings* %46, i32 0, i32 0
  %48 = getelementptr %fpm_build_settings, %fpm_build_settings* %47, i32 0, i32 0
  %49 = load i1, i1* %48, align 1
  %50 = xor i1 %49, true
  %51 = icmp eq i1 %44, false
  %52 = select i1 %51, i1 %44, i1 %50
  %53 = icmp eq i1 %27, false
  %54 = select i1 %53, i1 %52, i1 %27
  br i1 %54, label %then10, label %else11

then10:                                           ; preds = %loop.end
  br label %ifcont12

else11:                                           ; preds = %loop.end
  br label %ifcont12

ifcont12:                                         ; preds = %else11, %then10
  br label %return

return:                                           ; preds = %ifcont12
  ret void
}

declare i1 @_lpython_str_compare_noteq(i8**, i8**)

define i32 @main(i32 %0, i8** %1) {
.entry:
  %call_arg_value = alloca i1, align 1
  call void @_lpython_call_initial_functions(i32 %0, i8** %1)
  %settings = alloca %fpm_run_settings, align 8
  %2 = getelementptr %fpm_run_settings, %fpm_run_settings* %settings, i32 0, i32 2
  %3 = getelementptr %fpm_run_settings, %fpm_run_settings* %settings, i32 0, i32 4
  %4 = getelementptr %fpm_run_settings, %fpm_run_settings* %settings, i32 0, i32 1
  %5 = getelementptr %fpm_run_settings, %fpm_run_settings* %settings, i32 0, i32 3
  %6 = alloca %fpm_run_settings_polymorphic, align 8
  %7 = getelementptr %fpm_run_settings_polymorphic, %fpm_run_settings_polymorphic* %6, i32 0, i32 0
  store i64 0, i64* %7, align 4
  %8 = getelementptr %fpm_run_settings_polymorphic, %fpm_run_settings_polymorphic* %6, i32 0, i32 1
  store %fpm_run_settings* %settings, %fpm_run_settings** %8, align 8
  store i1 true, i1* %call_arg_value, align 1
  call void @__module_modules_36_fpm_main_01_cmd_run(%fpm_run_settings_polymorphic* %6, i1* %call_arg_value)
  call void @_lpython_free_argv()
  br label %return

return:                                           ; preds = %.entry
  ret i32 0
}

declare void @_lpython_call_initial_functions(i32, i8**)

declare void @_lpython_free_argv()
