; ModuleID = 'LFortran'
source_filename = "LFortran"

@0 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@1 = private unnamed_addr constant [27 x i8] c"Line 1 - Condition is true\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 [2 x i8] c"\0A\00", align 1
@7 = private unnamed_addr constant [28 x i8] c"Line 1 - Condition is false\00", align 1
@8 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@9 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@10 = private unnamed_addr constant [27 x i8] c"Line 2 - Condition is true\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 [28 x i8] c"Line 2 - Condition is false\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 [2 x i8] c"\0A\00", align 1
@19 = private unnamed_addr constant [29 x i8] c"Line xor - Condition is true\00", align 1
@20 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@21 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@22 = private unnamed_addr constant [30 x i8] c"Line xor - Condition is false\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 [2 x i8] c"\0A\00", align 1
@28 = private unnamed_addr constant [27 x i8] c"Line 3 - Condition is true\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
@31 = private unnamed_addr constant [28 x i8] c"Line 3 - Condition is false\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
@36 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@37 = private unnamed_addr constant [27 x i8] c"Line 4 - Condition is true\00", align 1
@38 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@39 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@40 = private unnamed_addr constant [28 x i8] c"Line 4 - Condition is false\00", align 1
@41 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@42 = private unnamed_addr constant [11 x i8] c"ERROR STOP\00", align 1
@43 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@44 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@45 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@46 = private unnamed_addr constant [27 x i8] c"Line 5 - Condition is true\00", align 1
@47 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@48 = private unnamed_addr constant [11 x i8] c"ERROR STOP\00", align 1
@49 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@50 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@51 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@52 = private unnamed_addr constant [28 x i8] c"Line 5 - Condition is false\00", align 1
@53 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@54 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@55 = private unnamed_addr constant [27 x i8] c"Line 6 - Condition is true\00", align 1
@56 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@57 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@58 = private unnamed_addr constant [28 x i8] c"Line 6 - Condition is false\00", align 1
@59 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@60 = private unnamed_addr constant [11 x i8] c"ERROR STOP\00", align 1
@61 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@62 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@63 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@64 = private unnamed_addr constant [27 x i8] c"Line 7 - Condition is true\00", align 1
@65 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@66 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@67 = private unnamed_addr constant [28 x i8] c"Line 7 - Condition is false\00", align 1
@68 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@69 = private unnamed_addr constant [11 x i8] c"ERROR STOP\00", align 1
@70 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@71 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@72 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@73 = private unnamed_addr constant [31 x i8] c"Line 8 xor - Condition is true\00", align 1
@74 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@75 = private unnamed_addr constant [11 x i8] c"ERROR STOP\00", align 1
@76 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@77 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1
@78 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1
@79 = private unnamed_addr constant [32 x i8] c"Line 8 xor - Condition is false\00", align 1
@80 = private unnamed_addr constant [5 x i8] c"%s%s\00", align 1

define i32 @main(i32 %0, i8** %1) {
.entry:
  call void @_lpython_call_initial_functions(i32 %0, i8** %1)
  %a = alloca i1, align 1
  %b = alloca i1, align 1
  store i1 true, i1* %a, align 1
  store i1 false, i1* %b, align 1
  %2 = load i1, i1* %a, align 1
  %3 = load i1, i1* %b, align 1
  %4 = icmp eq i1 %2, false
  %5 = select i1 %4, i1 %2, i1 %3
  br i1 %5, label %then, label %else

then:                                             ; preds = %.entry
  call void (i8*, ...) @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @2, i32 0, i32 0), i8* getelementptr inbounds ([27 x i8], [27 x i8]* @1, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @0, i32 0, i32 0))
  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 %ifcont

else:                                             ; preds = %.entry
  call void (i8*, ...) @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @8, i32 0, i32 0), i8* getelementptr inbounds ([28 x i8], [28 x i8]* @7, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @6, i32 0, i32 0))
  br label %ifcont

ifcont:                                           ; preds = %else, %then
  %6 = load i1, i1* %a, align 1
  %7 = load i1, i1* %b, align 1
  %8 = icmp eq i1 %6, false
  %9 = select i1 %8, i1 %7, i1 %6
  br i1 %9, label %then1, label %else2

then1:                                            ; preds = %ifcont
  call void (i8*, ...) @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @11, i32 0, i32 0), i8* getelementptr inbounds ([27 x i8], [27 x i8]* @10, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @9, i32 0, i32 0))
  br label %ifcont3

else2:                                            ; preds = %ifcont
  call void (i8*, ...) @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @14, i32 0, i32 0), i8* getelementptr inbounds ([28 x i8], [28 x i8]* @13, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @12, i32 0, i32 0))
  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 %ifcont3

ifcont3:                                          ; preds = %else2, %then1
  %10 = load i1, i1* %a, align 1
  %11 = load i1, i1* %b, align 1
  %12 = icmp eq i1 %10, false
  %13 = xor i1 %10, %11
  br i1 %13, label %then4, label %else5

then4:                                            ; preds = %ifcont3
  call void (i8*, ...) @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @20, i32 0, i32 0), i8* getelementptr inbounds ([29 x i8], [29 x i8]* @19, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @18, i32 0, i32 0))
  br label %ifcont6

else5:                                            ; preds = %ifcont3
  call void (i8*, ...) @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @23, i32 0, i32 0), i8* getelementptr inbounds ([30 x i8], [30 x i8]* @22, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @21, i32 0, i32 0))
  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 %ifcont6

ifcont6:                                          ; preds = %else5, %then4
  store i1 false, i1* %a, align 1
  store i1 true, i1* %b, align 1
  %14 = load i1, i1* %a, align 1
  %15 = load i1, i1* %b, align 1
  %16 = icmp eq i1 %14, false
  %17 = select i1 %16, i1 %14, i1 %15
  %18 = xor i1 %17, true
  br i1 %18, label %then7, label %else8

then7:                                            ; preds = %ifcont6
  call void (i8*, ...) @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @29, i32 0, i32 0), i8* getelementptr inbounds ([27 x i8], [27 x i8]* @28, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @27, i32 0, i32 0))
  br label %ifcont9

else8:                                            ; preds = %ifcont6
  call void (i8*, ...) @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @32, i32 0, i32 0), i8* getelementptr inbounds ([28 x i8], [28 x i8]* @31, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @30, i32 0, i32 0))
  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 %ifcont9

ifcont9:                                          ; preds = %else8, %then7
  %19 = load i1, i1* %b, align 1
  %20 = load i1, i1* %a, align 1
  %21 = icmp eq i1 %19, false
  %22 = xor i1 %19, %20
  br i1 %22, label %then10, label %else11

then10:                                           ; preds = %ifcont9
  call void (i8*, ...) @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @38, i32 0, i32 0), i8* getelementptr inbounds ([27 x i8], [27 x i8]* @37, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @36, i32 0, i32 0))
  br label %ifcont12

else11:                                           ; preds = %ifcont9
  call void (i8*, ...) @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @41, i32 0, i32 0), i8* getelementptr inbounds ([28 x i8], [28 x i8]* @40, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @39, i32 0, i32 0))
  call void (i8*, ...) @_lcompilers_print_error(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @44, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @42, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @43, i32 0, i32 0))
  call void @exit(i32 1)
  br label %ifcont12

ifcont12:                                         ; preds = %else11, %then10
  %23 = load i1, i1* %b, align 1
  %24 = load i1, i1* %a, align 1
  %25 = icmp eq i1 %23, false
  %26 = xor i1 %23, %24
  %27 = xor i1 %26, true
  br i1 %27, label %then13, label %else14

then13:                                           ; preds = %ifcont12
  call void (i8*, ...) @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @47, i32 0, i32 0), i8* getelementptr inbounds ([27 x i8], [27 x i8]* @46, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @45, i32 0, i32 0))
  call void (i8*, ...) @_lcompilers_print_error(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @50, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @48, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @49, i32 0, i32 0))
  call void @exit(i32 1)
  br label %ifcont15

else14:                                           ; preds = %ifcont12
  call void (i8*, ...) @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @53, i32 0, i32 0), i8* getelementptr inbounds ([28 x i8], [28 x i8]* @52, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @51, i32 0, i32 0))
  br label %ifcont15

ifcont15:                                         ; preds = %else14, %then13
  store i1 true, i1* %a, align 1
  store i1 true, i1* %b, align 1
  %28 = load i1, i1* %a, align 1
  %29 = load i1, i1* %b, align 1
  %30 = icmp eq i1 %28, false
  %31 = select i1 %30, i1 %28, i1 %29
  br i1 %31, label %then16, label %else17

then16:                                           ; preds = %ifcont15
  call void (i8*, ...) @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @56, i32 0, i32 0), i8* getelementptr inbounds ([27 x i8], [27 x i8]* @55, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @54, i32 0, i32 0))
  br label %ifcont18

else17:                                           ; preds = %ifcont15
  call void (i8*, ...) @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @59, i32 0, i32 0), i8* getelementptr inbounds ([28 x i8], [28 x i8]* @58, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @57, i32 0, i32 0))
  call void (i8*, ...) @_lcompilers_print_error(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @62, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @60, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @61, i32 0, i32 0))
  call void @exit(i32 1)
  br label %ifcont18

ifcont18:                                         ; preds = %else17, %then16
  %32 = load i1, i1* %a, align 1
  %33 = load i1, i1* %b, align 1
  %34 = icmp eq i1 %32, false
  %35 = select i1 %34, i1 %33, i1 %32
  br i1 %35, label %then19, label %else20

then19:                                           ; preds = %ifcont18
  call void (i8*, ...) @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @65, i32 0, i32 0), i8* getelementptr inbounds ([27 x i8], [27 x i8]* @64, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @63, i32 0, i32 0))
  br label %ifcont21

else20:                                           ; preds = %ifcont18
  call void (i8*, ...) @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @68, i32 0, i32 0), i8* getelementptr inbounds ([28 x i8], [28 x i8]* @67, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @66, i32 0, i32 0))
  call void (i8*, ...) @_lcompilers_print_error(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @71, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @69, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @70, i32 0, i32 0))
  call void @exit(i32 1)
  br label %ifcont21

ifcont21:                                         ; preds = %else20, %then19
  %36 = load i1, i1* %a, align 1
  %37 = load i1, i1* %b, align 1
  %38 = icmp eq i1 %36, false
  %39 = xor i1 %36, %37
  br i1 %39, label %then22, label %else23

then22:                                           ; preds = %ifcont21
  call void (i8*, ...) @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @74, i32 0, i32 0), i8* getelementptr inbounds ([31 x i8], [31 x i8]* @73, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @72, i32 0, i32 0))
  call void (i8*, ...) @_lcompilers_print_error(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @77, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @75, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @76, i32 0, i32 0))
  call void @exit(i32 1)
  br label %ifcont24

else23:                                           ; preds = %ifcont21
  call void (i8*, ...) @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @80, i32 0, i32 0), i8* getelementptr inbounds ([32 x i8], [32 x i8]* @79, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @78, i32 0, i32 0))
  br label %ifcont24

ifcont24:                                         ; preds = %else23, %then22
  call void @_lpython_free_argv()
  br label %return

return:                                           ; preds = %ifcont24
  ret i32 0
}

declare void @_lpython_call_initial_functions(i32, i8**)

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

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

declare void @exit(i32)

declare void @_lpython_free_argv()
