; ModuleID = 'LFortran'
source_filename = "LFortran"

%complex_4 = type { float, float }

@associate_02.t1 = internal global i32 2
@associate_02.t2 = internal global double 2.000000e+00
@associate_02.t3 = internal global %complex_4 zeroinitializer
@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
@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
@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
@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
@15 = 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)
  %p1 = alloca i32*, align 8
  store i32* null, i32** %p1, align 8
  %p2 = alloca double*, align 8
  store double* null, double** %p2, align 8
  %p3 = alloca %complex_4*, align 8
  store %complex_4* null, %complex_4** %p3, align 8
  %2 = alloca %complex_4, align 8
  %3 = getelementptr %complex_4, %complex_4* %2, i32 0, i32 0
  %4 = getelementptr %complex_4, %complex_4* %2, i32 0, i32 1
  store float 2.000000e+00, float* %3, align 4
  store float 3.000000e+00, float* %4, align 4
  %5 = load %complex_4, %complex_4* %2, align 4
  store %complex_4 %5, %complex_4* @associate_02.t3, align 4
  store i32* @associate_02.t1, i32** %p1, align 8
  store double* @associate_02.t2, double** %p2, align 8
  store %complex_4* @associate_02.t3, %complex_4** %p3, align 8
  %6 = load i32*, i32** %p1, align 8
  store i32 1, i32* %6, align 4
  %7 = load double*, double** %p2, align 8
  store double 4.000000e+00, double* %7, align 8
  %8 = load i32*, i32** %p1, align 8
  %9 = ptrtoint i32* %8 to i64
  %10 = call i8* (i32, i8*, ...) @_lcompilers_string_format_fortran(i32 2, i8* null, i32 19, i64 %9)
  call void (i8*, ...) @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @1, i32 0, i32 0), i8* %10, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @0, i32 0, i32 0))
  %11 = load i32, i32* @associate_02.t1, align 4
  %12 = sext i32 %11 to i64
  %13 = call i8* (i32, i8*, ...) @_lcompilers_string_format_fortran(i32 2, i8* null, i32 2, i64 %12)
  call void (i8*, ...) @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @3, i32 0, i32 0), i8* %13, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @2, i32 0, i32 0))
  %14 = load double*, double** %p2, align 8
  %15 = load double, double* %14, align 8
  %16 = load i32*, i32** %p1, align 8
  %17 = load i32, i32* %16, align 4
  %18 = sitofp i32 %17 to double
  %19 = fadd double %15, %18
  %20 = fptosi double %19 to i32
  store i32 %20, i32* @associate_02.t1, align 4
  %21 = load i32*, i32** %p1, align 8
  %22 = ptrtoint i32* %21 to i64
  %23 = call i8* (i32, i8*, ...) @_lcompilers_string_format_fortran(i32 2, i8* null, i32 19, i64 %22)
  call void (i8*, ...) @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @5, i32 0, i32 0), i8* %23, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @4, i32 0, i32 0))
  %24 = load i32, i32* @associate_02.t1, align 4
  %25 = sext i32 %24 to i64
  %26 = call i8* (i32, i8*, ...) @_lcompilers_string_format_fortran(i32 2, i8* null, i32 2, i64 %25)
  call void (i8*, ...) @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @7, i32 0, i32 0), i8* %26, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @6, i32 0, i32 0))
  store i32 8, i32* @associate_02.t1, align 4
  %27 = load i32*, i32** %p1, align 8
  %28 = ptrtoint i32* %27 to i64
  %29 = call i8* (i32, i8*, ...) @_lcompilers_string_format_fortran(i32 2, i8* null, i32 19, i64 %28)
  call void (i8*, ...) @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @9, i32 0, i32 0), i8* %29, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @8, i32 0, i32 0))
  %30 = load i32, i32* @associate_02.t1, align 4
  %31 = sext i32 %30 to i64
  %32 = call i8* (i32, i8*, ...) @_lcompilers_string_format_fortran(i32 2, i8* null, i32 2, i64 %31)
  call void (i8*, ...) @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @11, i32 0, i32 0), i8* %32, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @10, i32 0, i32 0))
  %33 = load %complex_4*, %complex_4** %p3, align 8
  %34 = alloca %complex_4, align 8
  %35 = getelementptr %complex_4, %complex_4* %34, i32 0, i32 0
  %36 = getelementptr %complex_4, %complex_4* %34, i32 0, i32 1
  store float 2.000000e+00, float* %35, align 4
  store float 0.000000e+00, float* %36, align 4
  %37 = load %complex_4, %complex_4* %34, align 4
  %38 = load %complex_4*, %complex_4** %p3, align 8
  %39 = load %complex_4, %complex_4* %38, align 4
  %40 = alloca %complex_4, align 8
  store %complex_4 %37, %complex_4* %40, align 4
  %41 = alloca %complex_4, align 8
  store %complex_4 %39, %complex_4* %41, align 4
  %42 = alloca %complex_4, align 8
  call void @_lfortran_complex_mul_32(%complex_4* %40, %complex_4* %41, %complex_4* %42)
  %43 = load %complex_4, %complex_4* %42, align 4
  store %complex_4 %43, %complex_4* %33, align 4
  %44 = load %complex_4*, %complex_4** %p3, align 8
  %45 = ptrtoint %complex_4* %44 to i64
  %46 = call i8* (i32, i8*, ...) @_lcompilers_string_format_fortran(i32 2, i8* null, i32 19, i64 %45)
  call void (i8*, ...) @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @13, i32 0, i32 0), i8* %46, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @12, i32 0, i32 0))
  %47 = load %complex_4, %complex_4* @associate_02.t3, align 4
  %48 = alloca %complex_4, align 8
  store %complex_4 %47, %complex_4* %48, align 4
  %49 = getelementptr %complex_4, %complex_4* %48, i32 0, i32 0
  %50 = load float, float* %49, align 4
  %51 = fpext float %50 to double
  %52 = alloca %complex_4, align 8
  store %complex_4 %47, %complex_4* %52, align 4
  %53 = getelementptr %complex_4, %complex_4* %52, i32 0, i32 1
  %54 = load float, float* %53, align 4
  %55 = fpext float %54 to double
  %56 = call i8* (i32, i8*, ...) @_lcompilers_string_format_fortran(i32 4, i8* null, i32 6, double %51, i32 6, double %55)
  call void (i8*, ...) @_lfortran_printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @15, i32 0, i32 0), i8* %56, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @14, i32 0, i32 0))
  call void @_lpython_free_argv()
  br label %return

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

declare void @_lpython_call_initial_functions(i32, i8**)

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

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

declare void @_lfortran_complex_mul_32(%complex_4*, %complex_4*, %complex_4*)

declare void @_lpython_free_argv()
