; LLVM IR from eclipse-threadx/threadx :: common_modules/module_manager/utilities (module_to_c_array)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.ELF_HEADER_STRUCT = type { [16 x i8], i16, i16, i64, i64, i64, i64, i64, i16, i16, i16, i16, i16, i16 }
%struct.CODE_SECTION_ENTRY_STRUCT = type { i64, i64, i64 }
%struct.ELF_SECTION_HEADER_STRUCT = type { i64, i64, i64, i64, i64, i64, i64, i64, i64, i64 }

@source_file = external dso_local global ptr, align 8
@.str = external hidden unnamed_addr constant [66 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@array_file = external dso_local global ptr, align 8
@.str.8 = external hidden unnamed_addr constant [47 x i8], align 1
@header = external dso_local global %struct.ELF_HEADER_STRUCT, align 8
@.str.9 = external hidden unnamed_addr constant [100 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [100 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [100 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [101 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [5 x i8], align 1
@program_header = external dso_local global ptr, align 8
@section_header = external dso_local global ptr, align 8
@section_string_table = external dso_local global ptr, align 8
@code_section_array = external dso_local global ptr, align 8
@.str.17 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [107 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [5 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local i32 @elf_object_read(i64 noundef, ptr noundef, i32 noundef) #0

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: nounwind uwtable
define dso_local i32 @main(i32 noundef %0, ptr noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i64, align 8
  %7 = alloca i64, align 8
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i64, align 8
  %15 = alloca %struct.CODE_SECTION_ENTRY_STRUCT, align 8
  %16 = alloca i32, align 4
  store i32 0, ptr %3, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr %15) #6
  %17 = load i32, ptr %4, align 4, !tbaa !5
  %18 = icmp ne i32 %17, 3
  br i1 %18, label %19, label %24

19:                                               ; preds = %2
  %20 = call i32 (ptr, ...) @printf(ptr noundef @.str)
  %21 = call i32 (ptr, ...) @printf(ptr noundef @.str.1)
  %22 = call i32 (ptr, ...) @printf(ptr noundef @.str.2)
  %23 = call i32 (ptr, ...) @printf(ptr noundef @.str.3)
  store i32 1, ptr %3, align 4
  store i32 1, ptr %16, align 4
  br label %452

24:                                               ; preds = %2
  %25 = load ptr, ptr %5, align 8, !tbaa !9
  %26 = getelementptr inbounds ptr, ptr %25, i64 1
  %27 = load ptr, ptr %26, align 8, !tbaa !9
  %28 = call noalias ptr @fopen(ptr noundef %27, ptr noundef @.str.4)
  store ptr %28, ptr @source_file, align 8, !tbaa !9
  %29 = load ptr, ptr @source_file, align 8, !tbaa !9
  %30 = icmp eq ptr %29, null
  br i1 %30, label %31, label %37

31:                                               ; preds = %24
  %32 = call i32 (ptr, ...) @printf(ptr noundef @.str.5)
  %33 = load ptr, ptr %5, align 8, !tbaa !9
  %34 = getelementptr inbounds ptr, ptr %33, i64 1
  %35 = load ptr, ptr %34, align 8, !tbaa !9
  %36 = call i32 (ptr, ...) @printf(ptr noundef @.str.6, ptr noundef %35)
  store i32 2, ptr %3, align 4
  store i32 1, ptr %16, align 4
  br label %452

37:                                               ; preds = %24
  %38 = load ptr, ptr %5, align 8, !tbaa !9
  %39 = getelementptr inbounds ptr, ptr %38, i64 2
  %40 = load ptr, ptr %39, align 8, !tbaa !9
  %41 = call noalias ptr @fopen(ptr noundef %40, ptr noundef @.str.7)
  store ptr %41, ptr @array_file, align 8, !tbaa !9
  %42 = load ptr, ptr @array_file, align 8, !tbaa !9
  %43 = icmp eq ptr %42, null
  br i1 %43, label %44, label %50

44:                                               ; preds = %37
  %45 = call i32 (ptr, ...) @printf(ptr noundef @.str.8)
  %46 = load ptr, ptr %5, align 8, !tbaa !9
  %47 = getelementptr inbounds ptr, ptr %46, i64 2
  %48 = load ptr, ptr %47, align 8, !tbaa !9
  %49 = call i32 (ptr, ...) @printf(ptr noundef @.str.6, ptr noundef %48)
  store i32 3, ptr %3, align 4
  store i32 1, ptr %16, align 4
  br label %452

50:                                               ; preds = %37
  %51 = call i32 @elf_object_read(i64 noundef 0, ptr noundef @header, i32 noundef 80)
  %52 = load ptr, ptr @array_file, align 8, !tbaa !9
  %53 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %52, ptr noundef @.str.9) #6
  %54 = load ptr, ptr @array_file, align 8, !tbaa !9
  %55 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %54, ptr noundef @.str.10) #6
  %56 = load ptr, ptr @array_file, align 8, !tbaa !9
  %57 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %56, ptr noundef @.str.11) #6
  %58 = load ptr, ptr @array_file, align 8, !tbaa !9
  %59 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %58, ptr noundef @.str.10) #6
  %60 = load ptr, ptr @array_file, align 8, !tbaa !9
  %61 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %60, ptr noundef @.str.12) #6
  %62 = load ptr, ptr @array_file, align 8, !tbaa !9
  %63 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %62, ptr noundef @.str.13) #6
  %64 = load ptr, ptr @array_file, align 8, !tbaa !9
  %65 = load ptr, ptr %5, align 8, !tbaa !9
  %66 = getelementptr inbounds ptr, ptr %65, i64 1
  %67 = load ptr, ptr %66, align 8, !tbaa !9
  %68 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %64, ptr noundef @.str.14, ptr noundef %67) #6
  %69 = load ptr, ptr @array_file, align 8, !tbaa !9
  %70 = load ptr, ptr %5, align 8, !tbaa !9
  %71 = getelementptr inbounds ptr, ptr %70, i64 2
  %72 = load ptr, ptr %71, align 8, !tbaa !9
  %73 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %69, ptr noundef @.str.15, ptr noundef %72) #6
  %74 = load ptr, ptr @array_file, align 8, !tbaa !9
  %75 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %74, ptr noundef @.str.16) #6
  %76 = load i16, ptr getelementptr inbounds (%struct.ELF_HEADER_STRUCT, ptr @header, i32 0, i32 10), align 4, !tbaa !11
  %77 = zext i16 %76 to i64
  %78 = mul i64 64, %77
  %79 = call noalias ptr @malloc(i64 noundef %78) #7
  store ptr %79, ptr @program_header, align 8, !tbaa !9
  %80 = load i64, ptr getelementptr inbounds (%struct.ELF_HEADER_STRUCT, ptr @header, i32 0, i32 5), align 8, !tbaa !15
  %81 = load ptr, ptr @program_header, align 8, !tbaa !9
  %82 = load i16, ptr getelementptr inbounds (%struct.ELF_HEADER_STRUCT, ptr @header, i32 0, i32 10), align 4, !tbaa !11
  %83 = zext i16 %82 to i64
  %84 = mul i64 64, %83
  %85 = trunc i64 %84 to i32
  %86 = call i32 @elf_object_read(i64 noundef %80, ptr noundef %81, i32 noundef %85)
  %87 = load i16, ptr getelementptr inbounds (%struct.ELF_HEADER_STRUCT, ptr @header, i32 0, i32 12), align 8, !tbaa !16
  %88 = zext i16 %87 to i64
  %89 = mul i64 80, %88
  %90 = call noalias ptr @malloc(i64 noundef %89) #7
  store ptr %90, ptr @section_header, align 8, !tbaa !9
  %91 = load i64, ptr getelementptr inbounds (%struct.ELF_HEADER_STRUCT, ptr @header, i32 0, i32 6), align 8, !tbaa !17
  %92 = load ptr, ptr @section_header, align 8, !tbaa !9
  %93 = load i16, ptr getelementptr inbounds (%struct.ELF_HEADER_STRUCT, ptr @header, i32 0, i32 12), align 8, !tbaa !16
  %94 = zext i16 %93 to i64
  %95 = mul i64 80, %94
  %96 = trunc i64 %95 to i32
  %97 = call i32 @elf_object_read(i64 noundef %91, ptr noundef %92, i32 noundef %96)
  %98 = load ptr, ptr @section_header, align 8, !tbaa !9
  %99 = load i16, ptr getelementptr inbounds (%struct.ELF_HEADER_STRUCT, ptr @header, i32 0, i32 13), align 2, !tbaa !18
  %100 = zext i16 %99 to i64
  %101 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %98, i64 %100
  %102 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %101, i32 0, i32 5
  %103 = load i64, ptr %102, align 8, !tbaa !19
  %104 = call noalias ptr @malloc(i64 noundef %103) #7
  store ptr %104, ptr @section_string_table, align 8, !tbaa !9
  %105 = load ptr, ptr @section_header, align 8, !tbaa !9
  %106 = load i16, ptr getelementptr inbounds (%struct.ELF_HEADER_STRUCT, ptr @header, i32 0, i32 13), align 2, !tbaa !18
  %107 = zext i16 %106 to i64
  %108 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %105, i64 %107
  %109 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %108, i32 0, i32 4
  %110 = load i64, ptr %109, align 8, !tbaa !21
  %111 = load ptr, ptr @section_string_table, align 8, !tbaa !9
  %112 = load ptr, ptr @section_header, align 8, !tbaa !9
  %113 = load i16, ptr getelementptr inbounds (%struct.ELF_HEADER_STRUCT, ptr @header, i32 0, i32 13), align 2, !tbaa !18
  %114 = zext i16 %113 to i64
  %115 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %112, i64 %114
  %116 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %115, i32 0, i32 5
  %117 = load i64, ptr %116, align 8, !tbaa !19
  %118 = trunc i64 %117 to i32
  %119 = call i32 @elf_object_read(i64 noundef %110, ptr noundef %111, i32 noundef %118)
  %120 = load i16, ptr getelementptr inbounds (%struct.ELF_HEADER_STRUCT, ptr @header, i32 0, i32 12), align 8, !tbaa !16
  %121 = zext i16 %120 to i64
  %122 = mul i64 24, %121
  %123 = call noalias ptr @malloc(i64 noundef %122) #7
  store ptr %123, ptr @code_section_array, align 8, !tbaa !9
  store i64 0, ptr %14, align 8, !tbaa !22
  store i64 0, ptr %6, align 8, !tbaa !22
  br label %124

124:                                              ; preds = %244, %50
  %125 = load i64, ptr %6, align 8, !tbaa !22
  %126 = load i16, ptr getelementptr inbounds (%struct.ELF_HEADER_STRUCT, ptr @header, i32 0, i32 12), align 8, !tbaa !16
  %127 = zext i16 %126 to i64
  %128 = icmp ult i64 %125, %127
  br i1 %128, label %129, label %247

129:                                              ; preds = %124
  %130 = load ptr, ptr @section_header, align 8, !tbaa !9
  %131 = load i64, ptr %6, align 8, !tbaa !22
  %132 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %130, i64 %131
  %133 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %132, i32 0, i32 1
  %134 = load i64, ptr %133, align 8, !tbaa !23
  %135 = icmp eq i64 %134, 1
  br i1 %135, label %136, label %243

136:                                              ; preds = %129
  %137 = load ptr, ptr @section_header, align 8, !tbaa !9
  %138 = load i64, ptr %6, align 8, !tbaa !22
  %139 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %137, i64 %138
  %140 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %139, i32 0, i32 5
  %141 = load i64, ptr %140, align 8, !tbaa !19
  %142 = icmp ne i64 %141, 0
  br i1 %142, label %143, label %243

143:                                              ; preds = %136
  %144 = load ptr, ptr @section_header, align 8, !tbaa !9
  %145 = load i64, ptr %6, align 8, !tbaa !22
  %146 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %144, i64 %145
  %147 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %146, i32 0, i32 2
  %148 = load i64, ptr %147, align 8, !tbaa !24
  %149 = and i64 %148, 4
  %150 = icmp ne i64 %149, 0
  br i1 %150, label %159, label %151

151:                                              ; preds = %143
  %152 = load ptr, ptr @section_header, align 8, !tbaa !9
  %153 = load i64, ptr %6, align 8, !tbaa !22
  %154 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %152, i64 %153
  %155 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %154, i32 0, i32 2
  %156 = load i64, ptr %155, align 8, !tbaa !24
  %157 = and i64 %156, 2
  %158 = icmp ne i64 %157, 0
  br i1 %158, label %159, label %242

159:                                              ; preds = %151, %143
  store i64 0, ptr %7, align 8, !tbaa !22
  br label %160

160:                                              ; preds = %208, %159
  %161 = load i64, ptr %7, align 8, !tbaa !22
  %162 = load i64, ptr %14, align 8, !tbaa !22
  %163 = icmp ult i64 %161, %162
  br i1 %163, label %164, label %211

164:                                              ; preds = %160
  %165 = load ptr, ptr @section_header, align 8, !tbaa !9
  %166 = load i64, ptr %6, align 8, !tbaa !22
  %167 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %165, i64 %166
  %168 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %167, i32 0, i32 3
  %169 = load i64, ptr %168, align 8, !tbaa !25
  %170 = load ptr, ptr @code_section_array, align 8, !tbaa !9
  %171 = load i64, ptr %7, align 8, !tbaa !22
  %172 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %170, i64 %171
  %173 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %172, i32 0, i32 1
  %174 = load i64, ptr %173, align 8, !tbaa !26
  %175 = icmp uge i64 %169, %174
  br i1 %175, label %176, label %207

176:                                              ; preds = %164
  %177 = load ptr, ptr @section_header, align 8, !tbaa !9
  %178 = load i64, ptr %6, align 8, !tbaa !22
  %179 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %177, i64 %178
  %180 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %179, i32 0, i32 3
  %181 = load i64, ptr %180, align 8, !tbaa !25
  %182 = load ptr, ptr @section_header, align 8, !tbaa !9
  %183 = load i64, ptr %6, align 8, !tbaa !22
  %184 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %182, i64 %183
  %185 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %184, i32 0, i32 5
  %186 = load i64, ptr %185, align 8, !tbaa !19
  %187 = add i64 %181, %186
  %188 = load ptr, ptr @section_header, align 8, !tbaa !9
  %189 = load i64, ptr %6, align 8, !tbaa !22
  %190 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %188, i64 %189
  %191 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %190, i32 0, i32 4
  %192 = load i64, ptr %191, align 8, !tbaa !21
  %193 = add i64 %187, %192
  %194 = load ptr, ptr @code_section_array, align 8, !tbaa !9
  %195 = load i64, ptr %7, align 8, !tbaa !22
  %196 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %194, i64 %195
  %197 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %196, i32 0, i32 1
  %198 = load i64, ptr %197, align 8, !tbaa !26
  %199 = load ptr, ptr @code_section_array, align 8, !tbaa !9
  %200 = load i64, ptr %7, align 8, !tbaa !22
  %201 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %199, i64 %200
  %202 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %201, i32 0, i32 2
  %203 = load i64, ptr %202, align 8, !tbaa !28
  %204 = add i64 %198, %203
  %205 = icmp ult i64 %193, %204
  br i1 %205, label %206, label %207

206:                                              ; preds = %176
  br label %211

207:                                              ; preds = %176, %164
  br label %208

208:                                              ; preds = %207
  %209 = load i64, ptr %7, align 8, !tbaa !22
  %210 = add i64 %209, 1
  store i64 %210, ptr %7, align 8, !tbaa !22
  br label %160, !llvm.loop !29

211:                                              ; preds = %206, %160
  %212 = load i64, ptr %7, align 8, !tbaa !22
  %213 = load i64, ptr %14, align 8, !tbaa !22
  %214 = icmp eq i64 %212, %213
  br i1 %214, label %215, label %241

215:                                              ; preds = %211
  %216 = load i64, ptr %6, align 8, !tbaa !22
  %217 = load ptr, ptr @code_section_array, align 8, !tbaa !9
  %218 = load i64, ptr %14, align 8, !tbaa !22
  %219 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %217, i64 %218
  %220 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %219, i32 0, i32 0
  store i64 %216, ptr %220, align 8, !tbaa !31
  %221 = load ptr, ptr @section_header, align 8, !tbaa !9
  %222 = load i64, ptr %6, align 8, !tbaa !22
  %223 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %221, i64 %222
  %224 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %223, i32 0, i32 3
  %225 = load i64, ptr %224, align 8, !tbaa !25
  %226 = load ptr, ptr @code_section_array, align 8, !tbaa !9
  %227 = load i64, ptr %14, align 8, !tbaa !22
  %228 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %226, i64 %227
  %229 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %228, i32 0, i32 1
  store i64 %225, ptr %229, align 8, !tbaa !26
  %230 = load ptr, ptr @section_header, align 8, !tbaa !9
  %231 = load i64, ptr %6, align 8, !tbaa !22
  %232 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %230, i64 %231
  %233 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %232, i32 0, i32 5
  %234 = load i64, ptr %233, align 8, !tbaa !19
  %235 = load ptr, ptr @code_section_array, align 8, !tbaa !9
  %236 = load i64, ptr %14, align 8, !tbaa !22
  %237 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %235, i64 %236
  %238 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %237, i32 0, i32 2
  store i64 %234, ptr %238, align 8, !tbaa !28
  %239 = load i64, ptr %14, align 8, !tbaa !22
  %240 = add i64 %239, 1
  store i64 %240, ptr %14, align 8, !tbaa !22
  br label %241

241:                                              ; preds = %215, %211
  br label %242

242:                                              ; preds = %241, %151
  br label %243

243:                                              ; preds = %242, %136, %129
  br label %244

244:                                              ; preds = %243
  %245 = load i64, ptr %6, align 8, !tbaa !22
  %246 = add i64 %245, 1
  store i64 %246, ptr %6, align 8, !tbaa !22
  br label %124, !llvm.loop !32

247:                                              ; preds = %124
  %248 = load i64, ptr %14, align 8, !tbaa !22
  %249 = icmp eq i64 %248, 0
  br i1 %249, label %250, label %258

250:                                              ; preds = %247
  %251 = call i32 (ptr, ...) @printf(ptr noundef @.str.17)
  %252 = load ptr, ptr @array_file, align 8, !tbaa !9
  %253 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %252, ptr noundef @.str.18) #6
  %254 = load ptr, ptr @source_file, align 8, !tbaa !9
  %255 = call i32 @fclose(ptr noundef %254)
  %256 = load ptr, ptr @array_file, align 8, !tbaa !9
  %257 = call i32 @fclose(ptr noundef %256)
  store i32 4, ptr %3, align 4
  store i32 1, ptr %16, align 4
  br label %452

258:                                              ; preds = %247
  store i64 0, ptr %6, align 8, !tbaa !22
  br label %259

259:                                              ; preds = %299, %258
  %260 = load i64, ptr %6, align 8, !tbaa !22
  %261 = add i64 %260, 1
  %262 = load i64, ptr %14, align 8, !tbaa !22
  %263 = icmp ult i64 %261, %262
  br i1 %263, label %264, label %302

264:                                              ; preds = %259
  %265 = load i64, ptr %6, align 8, !tbaa !22
  %266 = add i64 %265, 1
  store i64 %266, ptr %7, align 8, !tbaa !22
  br label %267

267:                                              ; preds = %295, %264
  %268 = load ptr, ptr @code_section_array, align 8, !tbaa !9
  %269 = load i64, ptr %7, align 8, !tbaa !22
  %270 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %268, i64 %269
  %271 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %270, i32 0, i32 1
  %272 = load i64, ptr %271, align 8, !tbaa !26
  %273 = load ptr, ptr @code_section_array, align 8, !tbaa !9
  %274 = load i64, ptr %6, align 8, !tbaa !22
  %275 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %273, i64 %274
  %276 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %275, i32 0, i32 1
  %277 = load i64, ptr %276, align 8, !tbaa !26
  %278 = icmp ult i64 %272, %277
  br i1 %278, label %279, label %292

279:                                              ; preds = %267
  %280 = load ptr, ptr @code_section_array, align 8, !tbaa !9
  %281 = load i64, ptr %6, align 8, !tbaa !22
  %282 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %280, i64 %281
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %15, ptr align 8 %282, i64 24, i1 false), !tbaa.struct !33
  %283 = load ptr, ptr @code_section_array, align 8, !tbaa !9
  %284 = load i64, ptr %6, align 8, !tbaa !22
  %285 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %283, i64 %284
  %286 = load ptr, ptr @code_section_array, align 8, !tbaa !9
  %287 = load i64, ptr %7, align 8, !tbaa !22
  %288 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %286, i64 %287
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %285, ptr align 8 %288, i64 24, i1 false), !tbaa.struct !33
  %289 = load ptr, ptr @code_section_array, align 8, !tbaa !9
  %290 = load i64, ptr %7, align 8, !tbaa !22
  %291 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %289, i64 %290
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %291, ptr align 8 %15, i64 24, i1 false), !tbaa.struct !33
  br label %292

292:                                              ; preds = %279, %267
  %293 = load i64, ptr %7, align 8, !tbaa !22
  %294 = add i64 %293, 1
  store i64 %294, ptr %7, align 8, !tbaa !22
  br label %295

295:                                              ; preds = %292
  %296 = load i64, ptr %7, align 8, !tbaa !22
  %297 = load i64, ptr %14, align 8, !tbaa !22
  %298 = icmp ult i64 %296, %297
  br i1 %298, label %267, label %299, !llvm.loop !34

299:                                              ; preds = %295
  %300 = load i64, ptr %6, align 8, !tbaa !22
  %301 = add i64 %300, 1
  store i64 %301, ptr %6, align 8, !tbaa !22
  br label %259, !llvm.loop !35

302:                                              ; preds = %259
  %303 = load ptr, ptr @array_file, align 8, !tbaa !9
  %304 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %303, ptr noundef @.str.19) #6
  %305 = load ptr, ptr @array_file, align 8, !tbaa !9
  %306 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %305, ptr noundef @.str.20) #6
  %307 = load ptr, ptr @code_section_array, align 8, !tbaa !9
  %308 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %307, i64 0
  %309 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %308, i32 0, i32 1
  %310 = load i64, ptr %309, align 8, !tbaa !26
  store i64 %310, ptr %10, align 8, !tbaa !22
  store i64 0, ptr %12, align 8, !tbaa !22
  store i64 0, ptr %6, align 8, !tbaa !22
  br label %311

311:                                              ; preds = %442, %302
  %312 = load i64, ptr %6, align 8, !tbaa !22
  %313 = load i64, ptr %14, align 8, !tbaa !22
  %314 = icmp ult i64 %312, %313
  br i1 %314, label %315, label %445

315:                                              ; preds = %311
  br label %316

316:                                              ; preds = %342, %315
  %317 = load i64, ptr %10, align 8, !tbaa !22
  %318 = load ptr, ptr @code_section_array, align 8, !tbaa !9
  %319 = load i64, ptr %6, align 8, !tbaa !22
  %320 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %318, i64 %319
  %321 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %320, i32 0, i32 1
  %322 = load i64, ptr %321, align 8, !tbaa !26
  %323 = icmp ult i64 %317, %322
  br i1 %323, label %324, label %345

324:                                              ; preds = %316
  %325 = load i64, ptr %12, align 8, !tbaa !22
  %326 = icmp eq i64 %325, 0
  br i1 %326, label %327, label %331

327:                                              ; preds = %324
  %328 = load ptr, ptr @array_file, align 8, !tbaa !9
  %329 = load i64, ptr %10, align 8, !tbaa !22
  %330 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %328, ptr noundef @.str.21, i64 noundef %329) #6
  br label %334

331:                                              ; preds = %324
  %332 = load ptr, ptr @array_file, align 8, !tbaa !9
  %333 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %332, ptr noundef @.str.22) #6
  br label %334

334:                                              ; preds = %331, %327
  %335 = load i64, ptr %12, align 8, !tbaa !22
  %336 = add i64 %335, 1
  store i64 %336, ptr %12, align 8, !tbaa !22
  %337 = load i64, ptr %12, align 8, !tbaa !22
  %338 = icmp uge i64 %337, 16
  br i1 %338, label %339, label %342

339:                                              ; preds = %334
  %340 = load ptr, ptr @array_file, align 8, !tbaa !9
  %341 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %340, ptr noundef @.str.23) #6
  store i64 0, ptr %12, align 8, !tbaa !22
  br label %342

342:                                              ; preds = %339, %334
  %343 = load i64, ptr %10, align 8, !tbaa !22
  %344 = add i64 %343, 1
  store i64 %344, ptr %10, align 8, !tbaa !22
  br label %316, !llvm.loop !36

345:                                              ; preds = %316
  %346 = load ptr, ptr @code_section_array, align 8, !tbaa !9
  %347 = load i64, ptr %6, align 8, !tbaa !22
  %348 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %346, i64 %347
  %349 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %348, i32 0, i32 2
  %350 = load i64, ptr %349, align 8, !tbaa !28
  %351 = call noalias ptr @malloc(i64 noundef %350) #7
  store ptr %351, ptr %13, align 8, !tbaa !9
  %352 = load ptr, ptr @code_section_array, align 8, !tbaa !9
  %353 = load i64, ptr %6, align 8, !tbaa !22
  %354 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %352, i64 %353
  %355 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %354, i32 0, i32 0
  %356 = load i64, ptr %355, align 8, !tbaa !31
  store i64 %356, ptr %7, align 8, !tbaa !22
  %357 = load ptr, ptr @section_header, align 8, !tbaa !9
  %358 = load i64, ptr %7, align 8, !tbaa !22
  %359 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %357, i64 %358
  %360 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %359, i32 0, i32 4
  %361 = load i64, ptr %360, align 8, !tbaa !21
  %362 = load ptr, ptr %13, align 8, !tbaa !9
  %363 = load ptr, ptr @code_section_array, align 8, !tbaa !9
  %364 = load i64, ptr %6, align 8, !tbaa !22
  %365 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %363, i64 %364
  %366 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %365, i32 0, i32 2
  %367 = load i64, ptr %366, align 8, !tbaa !28
  %368 = trunc i64 %367 to i32
  %369 = call i32 @elf_object_read(i64 noundef %361, ptr noundef %362, i32 noundef %368)
  %370 = load ptr, ptr @code_section_array, align 8, !tbaa !9
  %371 = load i64, ptr %6, align 8, !tbaa !22
  %372 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %370, i64 %371
  %373 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %372, i32 0, i32 2
  %374 = load i64, ptr %373, align 8, !tbaa !28
  store i64 %374, ptr %11, align 8, !tbaa !22
  store i64 0, ptr %7, align 8, !tbaa !22
  store i64 0, ptr %8, align 8, !tbaa !22
  br label %375

375:                                              ; preds = %434, %345
  %376 = load i64, ptr %11, align 8, !tbaa !22
  %377 = icmp ne i64 %376, 0
  br i1 %377, label %378, label %441

378:                                              ; preds = %375
  %379 = load i64, ptr %12, align 8, !tbaa !22
  %380 = icmp eq i64 %379, 0
  br i1 %380, label %381, label %390

381:                                              ; preds = %378
  %382 = load ptr, ptr @array_file, align 8, !tbaa !9
  %383 = load i64, ptr %10, align 8, !tbaa !22
  %384 = load ptr, ptr %13, align 8, !tbaa !9
  %385 = load i64, ptr %7, align 8, !tbaa !22
  %386 = getelementptr inbounds i8, ptr %384, i64 %385
  %387 = load i8, ptr %386, align 1, !tbaa !37
  %388 = zext i8 %387 to i32
  %389 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %382, ptr noundef @.str.24, i64 noundef %383, i32 noundef %388) #6
  br label %398

390:                                              ; preds = %378
  %391 = load ptr, ptr @array_file, align 8, !tbaa !9
  %392 = load ptr, ptr %13, align 8, !tbaa !9
  %393 = load i64, ptr %7, align 8, !tbaa !22
  %394 = getelementptr inbounds i8, ptr %392, i64 %393
  %395 = load i8, ptr %394, align 1, !tbaa !37
  %396 = zext i8 %395 to i32
  %397 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %391, ptr noundef @.str.25, i32 noundef %396) #6
  br label %398

398:                                              ; preds = %390, %381
  %399 = load i64, ptr %12, align 8, !tbaa !22
  %400 = add i64 %399, 1
  store i64 %400, ptr %12, align 8, !tbaa !22
  %401 = load i64, ptr %12, align 8, !tbaa !22
  %402 = icmp uge i64 %401, 16
  br i1 %402, label %403, label %434

403:                                              ; preds = %398
  %404 = load i64, ptr %11, align 8, !tbaa !22
  %405 = icmp ne i64 %404, 1
  br i1 %405, label %411, label %406

406:                                              ; preds = %403
  %407 = load i64, ptr %6, align 8, !tbaa !22
  %408 = add i64 %407, 1
  %409 = load i64, ptr %14, align 8, !tbaa !22
  %410 = icmp ne i64 %408, %409
  br i1 %410, label %411, label %433

411:                                              ; preds = %406, %403
  %412 = load i64, ptr %8, align 8, !tbaa !22
  %413 = icmp eq i64 %412, 0
  br i1 %413, label %414, label %429

414:                                              ; preds = %411
  %415 = load ptr, ptr @code_section_array, align 8, !tbaa !9
  %416 = load i64, ptr %6, align 8, !tbaa !22
  %417 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %415, i64 %416
  %418 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %417, i32 0, i32 0
  %419 = load i64, ptr %418, align 8, !tbaa !31
  store i64 %419, ptr %8, align 8, !tbaa !22
  %420 = load ptr, ptr @array_file, align 8, !tbaa !9
  %421 = load ptr, ptr @section_string_table, align 8, !tbaa !9
  %422 = load ptr, ptr @section_header, align 8, !tbaa !9
  %423 = load i64, ptr %8, align 8, !tbaa !22
  %424 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %422, i64 %423
  %425 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %424, i32 0, i32 0
  %426 = load i64, ptr %425, align 8, !tbaa !38
  %427 = getelementptr inbounds i8, ptr %421, i64 %426
  %428 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %420, ptr noundef @.str.26, ptr noundef %427) #6
  br label %432

429:                                              ; preds = %411
  %430 = load ptr, ptr @array_file, align 8, !tbaa !9
  %431 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %430, ptr noundef @.str.23) #6
  br label %432

432:                                              ; preds = %429, %414
  br label %433

433:                                              ; preds = %432, %406
  store i64 0, ptr %12, align 8, !tbaa !22
  br label %434

434:                                              ; preds = %433, %398
  %435 = load i64, ptr %10, align 8, !tbaa !22
  %436 = add i64 %435, 1
  store i64 %436, ptr %10, align 8, !tbaa !22
  %437 = load i64, ptr %11, align 8, !tbaa !22
  %438 = add i64 %437, -1
  store i64 %438, ptr %11, align 8, !tbaa !22
  %439 = load i64, ptr %7, align 8, !tbaa !22
  %440 = add i64 %439, 1
  store i64 %440, ptr %7, align 8, !tbaa !22
  br label %375, !llvm.loop !39

441:                                              ; preds = %375
  br label %442

442:                                              ; preds = %441
  %443 = load i64, ptr %6, align 8, !tbaa !22
  %444 = add i64 %443, 1
  store i64 %444, ptr %6, align 8, !tbaa !22
  br label %311, !llvm.loop !40

445:                                              ; preds = %311
  %446 = load ptr, ptr @array_file, align 8, !tbaa !9
  %447 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %446, ptr noundef @.str.27) #6
  %448 = load ptr, ptr @source_file, align 8, !tbaa !9
  %449 = call i32 @fclose(ptr noundef %448)
  %450 = load ptr, ptr @array_file, align 8, !tbaa !9
  %451 = call i32 @fclose(ptr noundef %450)
  store i32 0, ptr %3, align 4
  store i32 1, ptr %16, align 4
  br label %452

452:                                              ; preds = %445, %250, %44, %31, %19
  call void @llvm.lifetime.end.p0(i64 24, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #6
  %453 = load i32, ptr %3, align 4
  ret i32 %453
}

declare i32 @printf(ptr noundef, ...) #2

declare noalias ptr @fopen(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #3

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #4

declare i32 @fclose(ptr noundef) #2

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #5

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { nounwind }
attributes #7 = { nounwind allocsize(0) }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !13, i64 68}
!12 = !{!"ELF_HEADER_STRUCT", !7, i64 0, !13, i64 16, !13, i64 18, !14, i64 24, !14, i64 32, !14, i64 40, !14, i64 48, !14, i64 56, !13, i64 64, !13, i64 66, !13, i64 68, !13, i64 70, !13, i64 72, !13, i64 74}
!13 = !{!"short", !7, i64 0}
!14 = !{!"long", !7, i64 0}
!15 = !{!12, !14, i64 40}
!16 = !{!12, !13, i64 72}
!17 = !{!12, !14, i64 48}
!18 = !{!12, !13, i64 74}
!19 = !{!20, !14, i64 40}
!20 = !{!"ELF_SECTION_HEADER_STRUCT", !14, i64 0, !14, i64 8, !14, i64 16, !14, i64 24, !14, i64 32, !14, i64 40, !14, i64 48, !14, i64 56, !14, i64 64, !14, i64 72}
!21 = !{!20, !14, i64 32}
!22 = !{!14, !14, i64 0}
!23 = !{!20, !14, i64 8}
!24 = !{!20, !14, i64 16}
!25 = !{!20, !14, i64 24}
!26 = !{!27, !14, i64 8}
!27 = !{!"CODE_SECTION_ENTRY_STRUCT", !14, i64 0, !14, i64 8, !14, i64 16}
!28 = !{!27, !14, i64 16}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = !{!27, !14, i64 0}
!32 = distinct !{!32, !30}
!33 = !{i64 0, i64 8, !22, i64 8, i64 8, !22, i64 16, i64 8, !22}
!34 = distinct !{!34, !30}
!35 = distinct !{!35, !30}
!36 = distinct !{!36, !30}
!37 = !{!7, !7, i64 0}
!38 = !{!20, !14, i64 0}
!39 = distinct !{!39, !30}
!40 = distinct !{!40, !30}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.ELF_HEADER_STRUCT = type { [16 x i8], i16, i16, i64, i64, i64, i64, i64, i16, i16, i16, i16, i16, i16 }
%struct.CODE_SECTION_ENTRY_STRUCT = type { i64, i64, i64 }
%struct.ELF_SECTION_HEADER_STRUCT = type { i64, i64, i64, i64, i64, i64, i64, i64, i64, i64 }

@source_file = external dso_local local_unnamed_addr global ptr, align 8
@.str = external hidden unnamed_addr constant [66 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [2 x i8], align 1
@array_file = external dso_local local_unnamed_addr global ptr, align 8
@.str.8 = external hidden unnamed_addr constant [47 x i8], align 1
@header = external dso_local global %struct.ELF_HEADER_STRUCT, align 8
@.str.9 = external hidden unnamed_addr constant [100 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [100 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [100 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [101 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [5 x i8], align 1
@program_header = external dso_local local_unnamed_addr global ptr, align 8
@section_header = external dso_local local_unnamed_addr global ptr, align 8
@section_string_table = external dso_local local_unnamed_addr global ptr, align 8
@code_section_array = external dso_local local_unnamed_addr global ptr, align 8
@.str.17 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [107 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [5 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local i32 @elf_object_read(i64 noundef, ptr noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 5) i32 @main(i32 noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #0 {
  %3 = alloca %struct.CODE_SECTION_ENTRY_STRUCT, align 8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %3)
  %.not = icmp eq i32 %0, 3
  br i1 %.not, label %9, label %4

4:                                                ; preds = %2
  %5 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str)
  %6 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1)
  %7 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2)
  %8 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3)
  br label %225

9:                                                ; preds = %2
  %10 = getelementptr inbounds i8, ptr %1, i64 8
  %11 = load ptr, ptr %10, align 8, !tbaa !5
  %12 = tail call noalias ptr @fopen(ptr noundef %11, ptr noundef nonnull @.str.4)
  store ptr %12, ptr @source_file, align 8, !tbaa !5
  %13 = icmp eq ptr %12, null
  br i1 %13, label %14, label %18

14:                                               ; preds = %9
  %15 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5)
  %16 = load ptr, ptr %10, align 8, !tbaa !5
  %17 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6, ptr noundef %16)
  br label %225

18:                                               ; preds = %9
  %19 = getelementptr inbounds i8, ptr %1, i64 16
  %20 = load ptr, ptr %19, align 8, !tbaa !5
  %21 = tail call noalias ptr @fopen(ptr noundef %20, ptr noundef nonnull @.str.7)
  store ptr %21, ptr @array_file, align 8, !tbaa !5
  %22 = icmp eq ptr %21, null
  br i1 %22, label %23, label %27

23:                                               ; preds = %18
  %24 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8)
  %25 = load ptr, ptr %19, align 8, !tbaa !5
  %26 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6, ptr noundef %25)
  br label %225

27:                                               ; preds = %18
  %28 = tail call i32 @elf_object_read(i64 noundef 0, ptr noundef nonnull @header, i32 noundef 80)
  %29 = load ptr, ptr @array_file, align 8, !tbaa !5
  %30 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %29, ptr noundef nonnull @.str.9) #5
  %31 = load ptr, ptr @array_file, align 8, !tbaa !5
  %32 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %31, ptr noundef nonnull @.str.10) #5
  %33 = load ptr, ptr @array_file, align 8, !tbaa !5
  %34 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %33, ptr noundef nonnull @.str.11) #5
  %35 = load ptr, ptr @array_file, align 8, !tbaa !5
  %36 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %35, ptr noundef nonnull @.str.10) #5
  %37 = load ptr, ptr @array_file, align 8, !tbaa !5
  %38 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %37, ptr noundef nonnull @.str.12) #5
  %39 = load ptr, ptr @array_file, align 8, !tbaa !5
  %40 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %39, ptr noundef nonnull @.str.13) #5
  %41 = load ptr, ptr @array_file, align 8, !tbaa !5
  %42 = load ptr, ptr %10, align 8, !tbaa !5
  %43 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %41, ptr noundef nonnull @.str.14, ptr noundef %42) #5
  %44 = load ptr, ptr @array_file, align 8, !tbaa !5
  %45 = load ptr, ptr %19, align 8, !tbaa !5
  %46 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %44, ptr noundef nonnull @.str.15, ptr noundef %45) #5
  %47 = load ptr, ptr @array_file, align 8, !tbaa !5
  %48 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %47, ptr noundef nonnull @.str.16) #5
  %49 = load i16, ptr getelementptr inbounds (i8, ptr @header, i64 68), align 4, !tbaa !9
  %50 = zext i16 %49 to i64
  %51 = shl nuw nsw i64 %50, 6
  %52 = tail call noalias ptr @malloc(i64 noundef %51) #6
  store ptr %52, ptr @program_header, align 8, !tbaa !5
  %53 = load i64, ptr getelementptr inbounds (i8, ptr @header, i64 40), align 8, !tbaa !13
  %54 = zext i16 %49 to i32
  %55 = shl nuw nsw i32 %54, 6
  %56 = tail call i32 @elf_object_read(i64 noundef %53, ptr noundef %52, i32 noundef %55)
  %57 = load i16, ptr getelementptr inbounds (i8, ptr @header, i64 72), align 8, !tbaa !14
  %58 = zext i16 %57 to i64
  %59 = mul nuw nsw i64 %58, 80
  %60 = tail call noalias ptr @malloc(i64 noundef %59) #6
  store ptr %60, ptr @section_header, align 8, !tbaa !5
  %61 = load i64, ptr getelementptr inbounds (i8, ptr @header, i64 48), align 8, !tbaa !15
  %62 = zext i16 %57 to i32
  %63 = mul nuw nsw i32 %62, 80
  %64 = tail call i32 @elf_object_read(i64 noundef %61, ptr noundef %60, i32 noundef %63)
  %65 = load ptr, ptr @section_header, align 8, !tbaa !5
  %66 = load i16, ptr getelementptr inbounds (i8, ptr @header, i64 74), align 2, !tbaa !16
  %67 = zext i16 %66 to i64
  %68 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %65, i64 %67, i32 5
  %69 = load i64, ptr %68, align 8, !tbaa !17
  %70 = tail call noalias ptr @malloc(i64 noundef %69) #6
  store ptr %70, ptr @section_string_table, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %65, i64 %67, i32 4
  %72 = load i64, ptr %71, align 8, !tbaa !19
  %73 = trunc i64 %69 to i32
  %74 = tail call i32 @elf_object_read(i64 noundef %72, ptr noundef %70, i32 noundef %73)
  %75 = load i16, ptr getelementptr inbounds (i8, ptr @header, i64 72), align 8, !tbaa !14
  %76 = zext i16 %75 to i64
  %77 = mul nuw nsw i64 %76, 24
  %78 = tail call noalias ptr @malloc(i64 noundef %77) #6
  store ptr %78, ptr @code_section_array, align 8, !tbaa !5
  %.not146 = icmp eq i16 %75, 0
  br i1 %.not146, label %._crit_edge121.thread, label %.lr.ph120

.lr.ph120:                                        ; preds = %27
  %79 = load ptr, ptr @section_header, align 8, !tbaa !5
  br label %80

80:                                               ; preds = %.lr.ph120, %116
  %.0118 = phi i64 [ 0, %.lr.ph120 ], [ %.1, %116 ]
  %.087117 = phi i64 [ 0, %.lr.ph120 ], [ %117, %116 ]
  %81 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %79, i64 %.087117
  %82 = getelementptr inbounds i8, ptr %81, i64 8
  %83 = load i64, ptr %82, align 8, !tbaa !20
  %84 = icmp eq i64 %83, 1
  br i1 %84, label %85, label %116

85:                                               ; preds = %80
  %86 = getelementptr inbounds i8, ptr %81, i64 40
  %87 = load i64, ptr %86, align 8, !tbaa !17
  %.not105 = icmp eq i64 %87, 0
  br i1 %.not105, label %116, label %88

88:                                               ; preds = %85
  %89 = getelementptr inbounds i8, ptr %81, i64 16
  %90 = load i64, ptr %89, align 8, !tbaa !21
  %91 = and i64 %90, 6
  %or.cond = icmp eq i64 %91, 0
  br i1 %or.cond, label %116, label %.preheader113

.preheader113:                                    ; preds = %88
  %.not147 = icmp eq i64 %.0118, 0
  br i1 %.not147, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader113
  %92 = getelementptr inbounds i8, ptr %81, i64 24
  %93 = load i64, ptr %92, align 8, !tbaa !22
  %94 = add i64 %93, %87
  %95 = getelementptr inbounds i8, ptr %81, i64 32
  br label %96

96:                                               ; preds = %.lr.ph, %107
  %.093114 = phi i64 [ 0, %.lr.ph ], [ %108, %107 ]
  %97 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %78, i64 %.093114
  %98 = getelementptr inbounds i8, ptr %97, i64 8
  %99 = load i64, ptr %98, align 8, !tbaa !23
  %.not108 = icmp ult i64 %93, %99
  br i1 %.not108, label %107, label %100

100:                                              ; preds = %96
  %101 = load i64, ptr %95, align 8, !tbaa !19
  %102 = add i64 %94, %101
  %103 = getelementptr inbounds i8, ptr %97, i64 16
  %104 = load i64, ptr %103, align 8, !tbaa !25
  %105 = add i64 %104, %99
  %106 = icmp ult i64 %102, %105
  br i1 %106, label %._crit_edge, label %107

107:                                              ; preds = %96, %100
  %108 = add nuw i64 %.093114, 1
  %exitcond.not = icmp eq i64 %108, %.0118
  br i1 %exitcond.not, label %._crit_edge.thread, label %96, !llvm.loop !26

._crit_edge:                                      ; preds = %100, %.preheader113
  %.093.lcssa = phi i64 [ 0, %.preheader113 ], [ %.093114, %100 ]
  %109 = icmp eq i64 %.093.lcssa, %.0118
  br i1 %109, label %._crit_edge.thread, label %116

._crit_edge.thread:                               ; preds = %107, %._crit_edge
  %110 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %78, i64 %.0118
  store i64 %.087117, ptr %110, align 8, !tbaa !28
  %111 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %79, i64 %.087117, i32 3
  %112 = load i64, ptr %111, align 8, !tbaa !22
  %113 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %78, i64 %.0118, i32 1
  store i64 %112, ptr %113, align 8, !tbaa !23
  %114 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %78, i64 %.0118, i32 2
  store i64 %87, ptr %114, align 8, !tbaa !25
  %115 = add i64 %.0118, 1
  br label %116

116:                                              ; preds = %88, %80, %85, %._crit_edge, %._crit_edge.thread
  %.1 = phi i64 [ %115, %._crit_edge.thread ], [ %.0118, %._crit_edge ], [ %.0118, %85 ], [ %.0118, %80 ], [ %.0118, %88 ]
  %117 = add nuw nsw i64 %.087117, 1
  %exitcond152.not = icmp eq i64 %117, %76
  br i1 %exitcond152.not, label %._crit_edge121, label %80, !llvm.loop !29

._crit_edge121:                                   ; preds = %116
  switch i64 %.1, label %.preheader111 [
    i64 0, label %._crit_edge121.thread
    i64 1, label %._crit_edge124
  ]

._crit_edge121.thread:                            ; preds = %._crit_edge121, %27
  %118 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.17)
  %119 = load ptr, ptr @array_file, align 8, !tbaa !5
  %120 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %119, ptr noundef nonnull @.str.18) #5
  %121 = load ptr, ptr @source_file, align 8, !tbaa !5
  %122 = tail call i32 @fclose(ptr noundef %121)
  %123 = load ptr, ptr @array_file, align 8, !tbaa !5
  %124 = tail call i32 @fclose(ptr noundef %123)
  br label %225

.preheader111:                                    ; preds = %._crit_edge121, %142
  %.pre155 = phi ptr [ %.pre155156, %142 ], [ %78, %._crit_edge121 ]
  %125 = phi i64 [ %143, %142 ], [ 1, %._crit_edge121 ]
  %.188123 = phi i64 [ %125, %142 ], [ 0, %._crit_edge121 ]
  br label %126

126:                                              ; preds = %.preheader111, %138
  %.pre155157 = phi ptr [ %.pre155156, %138 ], [ %.pre155, %.preheader111 ]
  %127 = phi ptr [ %139, %138 ], [ %.pre155, %.preheader111 ]
  %.194 = phi i64 [ %140, %138 ], [ %125, %.preheader111 ]
  %128 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %127, i64 %.194, i32 1
  %129 = load i64, ptr %128, align 8, !tbaa !23
  %130 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %127, i64 %.188123
  %131 = getelementptr inbounds i8, ptr %130, i64 8
  %132 = load i64, ptr %131, align 8, !tbaa !23
  %133 = icmp ult i64 %129, %132
  br i1 %133, label %134, label %138

134:                                              ; preds = %126
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(24) %130, i64 24, i1 false), !tbaa.struct !30
  %135 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %127, i64 %.194
  tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %130, ptr noundef nonnull align 8 dereferenceable(24) %135, i64 24, i1 false), !tbaa.struct !30
  %136 = load ptr, ptr @code_section_array, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %136, i64 %.194
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %137, ptr noundef nonnull align 8 dereferenceable(24) %3, i64 24, i1 false), !tbaa.struct !30
  %.pre = load ptr, ptr @code_section_array, align 8, !tbaa !5
  br label %138

138:                                              ; preds = %134, %126
  %.pre155156 = phi ptr [ %.pre, %134 ], [ %.pre155157, %126 ]
  %139 = phi ptr [ %.pre, %134 ], [ %127, %126 ]
  %140 = add nuw i64 %.194, 1
  %141 = icmp ult i64 %140, %.1
  br i1 %141, label %126, label %142, !llvm.loop !32

142:                                              ; preds = %138
  %143 = add nuw i64 %125, 1
  %exitcond153.not = icmp eq i64 %143, %.1
  br i1 %exitcond153.not, label %._crit_edge124, label %.preheader111, !llvm.loop !33

._crit_edge124:                                   ; preds = %142, %._crit_edge121
  %144 = load ptr, ptr @array_file, align 8, !tbaa !5
  %145 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %144, ptr noundef nonnull @.str.19) #5
  %146 = load ptr, ptr @array_file, align 8, !tbaa !5
  %147 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %146, ptr noundef nonnull @.str.20) #5
  %148 = load ptr, ptr @code_section_array, align 8, !tbaa !5
  %149 = getelementptr inbounds i8, ptr %148, i64 8
  %150 = load i64, ptr %149, align 8, !tbaa !23
  br label %.preheader

.preheader:                                       ; preds = %._crit_edge124, %._crit_edge140
  %.081145 = phi i64 [ 0, %._crit_edge124 ], [ %.3.lcssa, %._crit_edge140 ]
  %.084144 = phi i64 [ %150, %._crit_edge124 ], [ %.286.lcssa, %._crit_edge140 ]
  %.289143 = phi i64 [ 0, %._crit_edge124 ], [ %.pre159, %._crit_edge140 ]
  %151 = load ptr, ptr @code_section_array, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %151, i64 %.289143
  %153 = getelementptr inbounds i8, ptr %152, i64 8
  %154 = load i64, ptr %153, align 8, !tbaa !23
  %155 = icmp ult i64 %.084144, %154
  br i1 %155, label %.lr.ph127, label %._crit_edge128

.lr.ph127:                                        ; preds = %.preheader, %166
  %.182126 = phi i64 [ %.2, %166 ], [ %.081145, %.preheader ]
  %.185125 = phi i64 [ %167, %166 ], [ %.084144, %.preheader ]
  %156 = icmp eq i64 %.182126, 0
  %157 = load ptr, ptr @array_file, align 8, !tbaa !5
  br i1 %156, label %.thread, label %159

.thread:                                          ; preds = %.lr.ph127
  %158 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %157, ptr noundef nonnull @.str.21, i64 noundef %.185125) #5
  br label %166

159:                                              ; preds = %.lr.ph127
  %160 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %157, ptr noundef nonnull @.str.22) #5
  %161 = add i64 %.182126, 1
  %162 = icmp ugt i64 %161, 15
  br i1 %162, label %163, label %166

163:                                              ; preds = %159
  %164 = load ptr, ptr @array_file, align 8, !tbaa !5
  %165 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %164, ptr noundef nonnull @.str.23) #5
  br label %166

166:                                              ; preds = %.thread, %163, %159
  %.2 = phi i64 [ 0, %163 ], [ %161, %159 ], [ 1, %.thread ]
  %167 = add nuw i64 %.185125, 1
  %168 = load ptr, ptr @code_section_array, align 8, !tbaa !5
  %169 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %168, i64 %.289143
  %170 = getelementptr inbounds i8, ptr %169, i64 8
  %171 = load i64, ptr %170, align 8, !tbaa !23
  %172 = icmp ult i64 %167, %171
  br i1 %172, label %.lr.ph127, label %._crit_edge128, !llvm.loop !34

._crit_edge128:                                   ; preds = %166, %.preheader
  %.185.lcssa = phi i64 [ %.084144, %.preheader ], [ %167, %166 ]
  %.182.lcssa = phi i64 [ %.081145, %.preheader ], [ %.2, %166 ]
  %.lcssa = phi ptr [ %152, %.preheader ], [ %169, %166 ]
  %173 = getelementptr inbounds i8, ptr %.lcssa, i64 16
  %174 = load i64, ptr %173, align 8, !tbaa !25
  %175 = tail call noalias ptr @malloc(i64 noundef %174) #6
  %176 = load i64, ptr %.lcssa, align 8, !tbaa !28
  %177 = load ptr, ptr @section_header, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %177, i64 %176, i32 4
  %179 = load i64, ptr %178, align 8, !tbaa !19
  %180 = trunc i64 %174 to i32
  %181 = tail call i32 @elf_object_read(i64 noundef %179, ptr noundef %175, i32 noundef %180)
  %182 = load ptr, ptr @code_section_array, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %182, i64 %.289143, i32 2
  %184 = load i64, ptr %183, align 8, !tbaa !25
  %.not102132 = icmp eq i64 %184, 0
  %.pre159 = add nuw i64 %.289143, 1
  br i1 %.not102132, label %._crit_edge140, label %.lr.ph139

.lr.ph139:                                        ; preds = %._crit_edge128
  %.not104 = icmp eq i64 %.pre159, %.1
  br label %185

185:                                              ; preds = %.lr.ph139, %214
  %.3137 = phi i64 [ %.182.lcssa, %.lr.ph139 ], [ %.4, %214 ]
  %.083136 = phi i64 [ %184, %.lr.ph139 ], [ %216, %214 ]
  %.286135 = phi i64 [ %.185.lcssa, %.lr.ph139 ], [ %215, %214 ]
  %.090134 = phi i64 [ 0, %.lr.ph139 ], [ %.292, %214 ]
  %.295133 = phi i64 [ 0, %.lr.ph139 ], [ %217, %214 ]
  %186 = icmp eq i64 %.3137, 0
  %187 = load ptr, ptr @array_file, align 8, !tbaa !5
  %188 = getelementptr inbounds i8, ptr %175, i64 %.295133
  %189 = load i8, ptr %188, align 1, !tbaa !35
  %190 = zext i8 %189 to i32
  br i1 %186, label %.thread110, label %192

.thread110:                                       ; preds = %185
  %191 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %187, ptr noundef nonnull @.str.24, i64 noundef %.286135, i32 noundef %190) #5
  br label %214

192:                                              ; preds = %185
  %193 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %187, ptr noundef nonnull @.str.25, i32 noundef %190) #5
  %194 = add i64 %.3137, 1
  %195 = icmp ugt i64 %194, 15
  br i1 %195, label %196, label %214

196:                                              ; preds = %192
  %.not103 = icmp eq i64 %.083136, 1
  %or.cond109 = and i1 %.not103, %.not104
  br i1 %or.cond109, label %.thread162, label %198

.thread162:                                       ; preds = %196
  %197 = add i64 %.286135, 1
  br label %._crit_edge140

198:                                              ; preds = %196
  %199 = icmp eq i64 %.090134, 0
  br i1 %199, label %200, label %211

200:                                              ; preds = %198
  %201 = load ptr, ptr @code_section_array, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.CODE_SECTION_ENTRY_STRUCT, ptr %201, i64 %.289143
  %203 = load i64, ptr %202, align 8, !tbaa !28
  %204 = load ptr, ptr @array_file, align 8, !tbaa !5
  %205 = load ptr, ptr @section_string_table, align 8, !tbaa !5
  %206 = load ptr, ptr @section_header, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.ELF_SECTION_HEADER_STRUCT, ptr %206, i64 %203
  %208 = load i64, ptr %207, align 8, !tbaa !36
  %209 = getelementptr inbounds i8, ptr %205, i64 %208
  %210 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %204, ptr noundef nonnull @.str.26, ptr noundef %209) #5
  br label %214

211:                                              ; preds = %198
  %212 = load ptr, ptr @array_file, align 8, !tbaa !5
  %213 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %212, ptr noundef nonnull @.str.23) #5
  br label %214

214:                                              ; preds = %.thread110, %211, %200, %192
  %.292 = phi i64 [ %.090134, %192 ], [ %203, %200 ], [ %.090134, %211 ], [ %.090134, %.thread110 ]
  %.4 = phi i64 [ %194, %192 ], [ 0, %200 ], [ 0, %211 ], [ 1, %.thread110 ]
  %215 = add i64 %.286135, 1
  %216 = add i64 %.083136, -1
  %217 = add nuw i64 %.295133, 1
  %.not102 = icmp eq i64 %216, 0
  br i1 %.not102, label %._crit_edge140, label %185, !llvm.loop !37

._crit_edge140:                                   ; preds = %214, %._crit_edge128, %.thread162
  %.286.lcssa = phi i64 [ %197, %.thread162 ], [ %.185.lcssa, %._crit_edge128 ], [ %215, %214 ]
  %.3.lcssa = phi i64 [ 0, %.thread162 ], [ %.182.lcssa, %._crit_edge128 ], [ %.4, %214 ]
  %exitcond154.not = icmp eq i64 %.pre159, %.1
  br i1 %exitcond154.not, label %218, label %.preheader, !llvm.loop !38

218:                                              ; preds = %._crit_edge140
  %219 = load ptr, ptr @array_file, align 8, !tbaa !5
  %220 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %219, ptr noundef nonnull @.str.27) #5
  %221 = load ptr, ptr @source_file, align 8, !tbaa !5
  %222 = tail call i32 @fclose(ptr noundef %221)
  %223 = load ptr, ptr @array_file, align 8, !tbaa !5
  %224 = tail call i32 @fclose(ptr noundef %223)
  br label %225

225:                                              ; preds = %218, %._crit_edge121.thread, %23, %14, %4
  %.080 = phi i32 [ 1, %4 ], [ 2, %14 ], [ 3, %23 ], [ 4, %._crit_edge121.thread ], [ 0, %218 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3)
  ret i32 %.080
}

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #2

; Function Attrs: nofree nounwind
declare noalias noundef ptr @fopen(ptr nocapture noundef readonly, ptr nocapture noundef readonly) local_unnamed_addr #2

; Function Attrs: nofree nounwind
declare noundef i32 @fprintf(ptr nocapture noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #2

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #3

; Function Attrs: nofree nounwind
declare noundef i32 @fclose(ptr nocapture noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #4

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { nounwind }
attributes #6 = { nounwind allocsize(0) }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !11, i64 68}
!10 = !{!"ELF_HEADER_STRUCT", !7, i64 0, !11, i64 16, !11, i64 18, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !12, i64 56, !11, i64 64, !11, i64 66, !11, i64 68, !11, i64 70, !11, i64 72, !11, i64 74}
!11 = !{!"short", !7, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!10, !12, i64 40}
!14 = !{!10, !11, i64 72}
!15 = !{!10, !12, i64 48}
!16 = !{!10, !11, i64 74}
!17 = !{!18, !12, i64 40}
!18 = !{!"ELF_SECTION_HEADER_STRUCT", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !12, i64 56, !12, i64 64, !12, i64 72}
!19 = !{!18, !12, i64 32}
!20 = !{!18, !12, i64 8}
!21 = !{!18, !12, i64 16}
!22 = !{!18, !12, i64 24}
!23 = !{!24, !12, i64 8}
!24 = !{!"CODE_SECTION_ENTRY_STRUCT", !12, i64 0, !12, i64 8, !12, i64 16}
!25 = !{!24, !12, i64 16}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = !{!24, !12, i64 0}
!29 = distinct !{!29, !27}
!30 = !{i64 0, i64 8, !31, i64 8, i64 8, !31, i64 16, i64 8, !31}
!31 = !{!12, !12, i64 0}
!32 = distinct !{!32, !27}
!33 = distinct !{!33, !27}
!34 = distinct !{!34, !27}
!35 = !{!7, !7, i64 0}
!36 = !{!18, !12, i64 0}
!37 = distinct !{!37, !27}
!38 = distinct !{!38, !27}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass