; LLVM IR from paintdream/DontStarveLuaJIT :: src/luajit/src/host (buildvm_peobj)

; 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.PEheader = type { i16, i16, i32, i32, i32, i16, i16 }
%struct.PEsection = type { [8 x i8], i32, i32, i32, i32, i32, i32, i16, i16, i32 }
%union.anon = type { i32 }
%struct.PEreloc = type { i32, i32, i16 }
%struct.BuildCtx = type { ptr, i32, ptr, ptr, ptr, ptr, i64, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, [200 x %struct.BuildReloc] }
%struct.BuildReloc = type { i32, i32, i32 }
%struct.BuildSym = type { ptr, i32 }

@.str = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [9 x i8], align 1
@stderr = external global ptr, align 8
@.str.4 = external hidden unnamed_addr constant [49 x i8], align 1
@strtab = external hidden global ptr, align 8
@strtabofs = external hidden global i64, align 8
@.str.5 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [20 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @emit_peobj(ptr noundef %0) #0 {
  %2 = alloca ptr, align 8
  %3 = alloca %struct.PEheader, align 4
  %4 = alloca [4 x %struct.PEsection], align 16
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca %union.anon, align 4
  %9 = alloca %struct.PEreloc, align 4
  %10 = alloca i32, align 4
  %11 = alloca [3 x i32], align 4
  %12 = alloca %struct.PEreloc, align 4
  %13 = alloca [16 x i16], align 16
  %14 = alloca %struct.PEreloc, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 20, ptr %3) #9
  call void @llvm.lifetime.start.p0(i64 160, ptr %4) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #9
  store i32 180, ptr %5, align 4, !tbaa !9
  call void @llvm.memset.p0.i64(ptr align 16 %4, i8 0, i64 160, i1 false)
  %15 = getelementptr inbounds [4 x %struct.PEsection], ptr %4, i64 0, i64 0
  %16 = getelementptr inbounds %struct.PEsection, ptr %15, i32 0, i32 0
  %17 = getelementptr inbounds [8 x i8], ptr %16, i64 0, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %17, ptr align 1 @.str, i64 5, i1 false)
  %18 = load i32, ptr %5, align 4, !tbaa !9
  %19 = getelementptr inbounds [4 x %struct.PEsection], ptr %4, i64 0, i64 0
  %20 = getelementptr inbounds %struct.PEsection, ptr %19, i32 0, i32 4
  store i32 %18, ptr %20, align 4, !tbaa !11
  %21 = load ptr, ptr %2, align 8, !tbaa !5
  %22 = getelementptr inbounds %struct.BuildCtx, ptr %21, i32 0, i32 6
  %23 = load i64, ptr %22, align 8, !tbaa !14
  %24 = trunc i64 %23 to i32
  %25 = getelementptr inbounds [4 x %struct.PEsection], ptr %4, i64 0, i64 0
  %26 = getelementptr inbounds %struct.PEsection, ptr %25, i32 0, i32 3
  store i32 %24, ptr %26, align 16, !tbaa !17
  %27 = load i32, ptr %5, align 4, !tbaa !9
  %28 = add i32 %27, %24
  store i32 %28, ptr %5, align 4, !tbaa !9
  %29 = load i32, ptr %5, align 4, !tbaa !9
  %30 = getelementptr inbounds [4 x %struct.PEsection], ptr %4, i64 0, i64 0
  %31 = getelementptr inbounds %struct.PEsection, ptr %30, i32 0, i32 5
  store i32 %29, ptr %31, align 8, !tbaa !18
  %32 = load ptr, ptr %2, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.BuildCtx, ptr %32, i32 0, i32 10
  %34 = load i32, ptr %33, align 4, !tbaa !19
  %35 = trunc i32 %34 to i16
  %36 = getelementptr inbounds [4 x %struct.PEsection], ptr %4, i64 0, i64 0
  %37 = getelementptr inbounds %struct.PEsection, ptr %36, i32 0, i32 7
  store i16 %35, ptr %37, align 16, !tbaa !20
  %38 = zext i16 %35 to i32
  %39 = mul nsw i32 %38, 10
  %40 = load i32, ptr %5, align 4, !tbaa !9
  %41 = add i32 %40, %39
  store i32 %41, ptr %5, align 4, !tbaa !9
  %42 = getelementptr inbounds [4 x %struct.PEsection], ptr %4, i64 0, i64 0
  %43 = getelementptr inbounds %struct.PEsection, ptr %42, i32 0, i32 9
  store i32 1615855648, ptr %43, align 4, !tbaa !21
  %44 = getelementptr inbounds [4 x %struct.PEsection], ptr %4, i64 0, i64 1
  %45 = getelementptr inbounds %struct.PEsection, ptr %44, i32 0, i32 0
  %46 = getelementptr inbounds [8 x i8], ptr %45, i64 0, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %46, ptr align 1 @.str.1, i64 6, i1 false)
  %47 = load i32, ptr %5, align 4, !tbaa !9
  %48 = getelementptr inbounds [4 x %struct.PEsection], ptr %4, i64 0, i64 1
  %49 = getelementptr inbounds %struct.PEsection, ptr %48, i32 0, i32 4
  store i32 %47, ptr %49, align 4, !tbaa !11
  %50 = getelementptr inbounds [4 x %struct.PEsection], ptr %4, i64 0, i64 1
  %51 = getelementptr inbounds %struct.PEsection, ptr %50, i32 0, i32 3
  store i32 24, ptr %51, align 8, !tbaa !17
  %52 = load i32, ptr %5, align 4, !tbaa !9
  %53 = add i32 %52, 24
  store i32 %53, ptr %5, align 4, !tbaa !9
  %54 = load i32, ptr %5, align 4, !tbaa !9
  %55 = getelementptr inbounds [4 x %struct.PEsection], ptr %4, i64 0, i64 1
  %56 = getelementptr inbounds %struct.PEsection, ptr %55, i32 0, i32 5
  store i32 %54, ptr %56, align 8, !tbaa !18
  %57 = getelementptr inbounds [4 x %struct.PEsection], ptr %4, i64 0, i64 1
  %58 = getelementptr inbounds %struct.PEsection, ptr %57, i32 0, i32 7
  store i16 6, ptr %58, align 8, !tbaa !20
  %59 = load i32, ptr %5, align 4, !tbaa !9
  %60 = add i32 %59, 60
  store i32 %60, ptr %5, align 4, !tbaa !9
  %61 = getelementptr inbounds [4 x %struct.PEsection], ptr %4, i64 0, i64 1
  %62 = getelementptr inbounds %struct.PEsection, ptr %61, i32 0, i32 9
  store i32 1076887616, ptr %62, align 4, !tbaa !21
  %63 = getelementptr inbounds [4 x %struct.PEsection], ptr %4, i64 0, i64 2
  %64 = getelementptr inbounds %struct.PEsection, ptr %63, i32 0, i32 0
  %65 = getelementptr inbounds [8 x i8], ptr %64, i64 0, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %65, ptr align 1 @.str.2, i64 6, i1 false)
  %66 = load i32, ptr %5, align 4, !tbaa !9
  %67 = getelementptr inbounds [4 x %struct.PEsection], ptr %4, i64 0, i64 2
  %68 = getelementptr inbounds %struct.PEsection, ptr %67, i32 0, i32 4
  store i32 %66, ptr %68, align 4, !tbaa !11
  %69 = getelementptr inbounds [4 x %struct.PEsection], ptr %4, i64 0, i64 2
  %70 = getelementptr inbounds %struct.PEsection, ptr %69, i32 0, i32 3
  store i32 32, ptr %70, align 16, !tbaa !17
  %71 = load i32, ptr %5, align 4, !tbaa !9
  %72 = add i32 %71, 32
  store i32 %72, ptr %5, align 4, !tbaa !9
  %73 = load i32, ptr %5, align 4, !tbaa !9
  %74 = getelementptr inbounds [4 x %struct.PEsection], ptr %4, i64 0, i64 2
  %75 = getelementptr inbounds %struct.PEsection, ptr %74, i32 0, i32 5
  store i32 %73, ptr %75, align 8, !tbaa !18
  %76 = getelementptr inbounds [4 x %struct.PEsection], ptr %4, i64 0, i64 2
  %77 = getelementptr inbounds %struct.PEsection, ptr %76, i32 0, i32 7
  store i16 1, ptr %77, align 16, !tbaa !20
  %78 = load i32, ptr %5, align 4, !tbaa !9
  %79 = add i32 %78, 10
  store i32 %79, ptr %5, align 4, !tbaa !9
  %80 = getelementptr inbounds [4 x %struct.PEsection], ptr %4, i64 0, i64 2
  %81 = getelementptr inbounds %struct.PEsection, ptr %80, i32 0, i32 9
  store i32 1076887616, ptr %81, align 4, !tbaa !21
  %82 = getelementptr inbounds [4 x %struct.PEsection], ptr %4, i64 0, i64 3
  %83 = getelementptr inbounds %struct.PEsection, ptr %82, i32 0, i32 0
  %84 = getelementptr inbounds [8 x i8], ptr %83, i64 0, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %84, ptr align 1 @.str.3, i64 8, i1 false)
  %85 = load i32, ptr %5, align 4, !tbaa !9
  %86 = getelementptr inbounds [4 x %struct.PEsection], ptr %4, i64 0, i64 3
  %87 = getelementptr inbounds %struct.PEsection, ptr %86, i32 0, i32 4
  store i32 %85, ptr %87, align 4, !tbaa !11
  %88 = load ptr, ptr %2, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.BuildCtx, ptr %88, i32 0, i32 19
  %90 = load ptr, ptr %89, align 8, !tbaa !22
  %91 = call i64 @strlen(ptr noundef %90) #10
  %92 = trunc i64 %91 to i32
  %93 = add i32 %92, 1
  %94 = getelementptr inbounds [4 x %struct.PEsection], ptr %4, i64 0, i64 3
  %95 = getelementptr inbounds %struct.PEsection, ptr %94, i32 0, i32 3
  store i32 %93, ptr %95, align 8, !tbaa !17
  %96 = load i32, ptr %5, align 4, !tbaa !9
  %97 = add i32 %96, %93
  store i32 %97, ptr %5, align 4, !tbaa !9
  %98 = getelementptr inbounds [4 x %struct.PEsection], ptr %4, i64 0, i64 3
  %99 = getelementptr inbounds %struct.PEsection, ptr %98, i32 0, i32 9
  store i32 1076887616, ptr %99, align 4, !tbaa !21
  %100 = getelementptr inbounds %struct.PEheader, ptr %3, i32 0, i32 0
  store i16 -31132, ptr %100, align 4, !tbaa !23
  %101 = getelementptr inbounds %struct.PEheader, ptr %3, i32 0, i32 1
  store i16 4, ptr %101, align 2, !tbaa !25
  %102 = getelementptr inbounds %struct.PEheader, ptr %3, i32 0, i32 2
  store i32 0, ptr %102, align 4, !tbaa !26
  %103 = load i32, ptr %5, align 4, !tbaa !9
  %104 = getelementptr inbounds %struct.PEheader, ptr %3, i32 0, i32 3
  store i32 %103, ptr %104, align 4, !tbaa !27
  %105 = getelementptr inbounds %struct.PEheader, ptr %3, i32 0, i32 5
  store i16 0, ptr %105, align 4, !tbaa !28
  %106 = getelementptr inbounds %struct.PEheader, ptr %3, i32 0, i32 6
  store i16 0, ptr %106, align 2, !tbaa !29
  %107 = load ptr, ptr %2, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.BuildCtx, ptr %107, i32 0, i32 11
  %109 = load i32, ptr %108, align 8, !tbaa !30
  store i32 %109, ptr %7, align 4, !tbaa !9
  %110 = load ptr, ptr %2, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct.BuildCtx, ptr %110, i32 0, i32 9
  %112 = load i32, ptr %111, align 8, !tbaa !31
  %113 = add nsw i32 10, %112
  %114 = load i32, ptr %7, align 4, !tbaa !9
  %115 = add nsw i32 %113, %114
  %116 = getelementptr inbounds %struct.PEheader, ptr %3, i32 0, i32 4
  store i32 %115, ptr %116, align 4, !tbaa !32
  %117 = getelementptr inbounds %struct.PEheader, ptr %3, i32 0, i32 4
  %118 = load i32, ptr %117, align 4, !tbaa !32
  %119 = add i32 %118, 1
  store i32 %119, ptr %117, align 4, !tbaa !32
  %120 = load ptr, ptr %2, align 8, !tbaa !5
  call void @owrite(ptr noundef %120, ptr noundef %3, i64 noundef 20)
  %121 = load ptr, ptr %2, align 8, !tbaa !5
  call void @owrite(ptr noundef %121, ptr noundef %4, i64 noundef 160)
  store i32 1, ptr %8, align 4, !tbaa !33
  %122 = load i8, ptr %8, align 4, !tbaa !33
  %123 = zext i8 %122 to i32
  %124 = icmp ne i32 %123, 1
  br i1 %124, label %125, label %128

125:                                              ; preds = %1
  %126 = load ptr, ptr @stderr, align 8, !tbaa !5
  %127 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %126, ptr noundef @.str.4) #9
  call void @exit(i32 noundef 1) #11
  unreachable

128:                                              ; preds = %1
  %129 = load ptr, ptr %2, align 8, !tbaa !5
  %130 = load ptr, ptr %2, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.BuildCtx, ptr %130, i32 0, i32 5
  %132 = load ptr, ptr %131, align 8, !tbaa !34
  %133 = load ptr, ptr %2, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.BuildCtx, ptr %133, i32 0, i32 6
  %135 = load i64, ptr %134, align 8, !tbaa !14
  call void @owrite(ptr noundef %129, ptr noundef %132, i64 noundef %135)
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %136

136:                                              ; preds = %174, %128
  %137 = load i32, ptr %6, align 4, !tbaa !9
  %138 = load ptr, ptr %2, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.BuildCtx, ptr %138, i32 0, i32 10
  %140 = load i32, ptr %139, align 4, !tbaa !19
  %141 = icmp slt i32 %137, %140
  br i1 %141, label %142, label %177

142:                                              ; preds = %136
  call void @llvm.lifetime.start.p0(i64 12, ptr %9) #9
  %143 = load ptr, ptr %2, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.BuildCtx, ptr %143, i32 0, i32 21
  %145 = load i32, ptr %6, align 4, !tbaa !9
  %146 = sext i32 %145 to i64
  %147 = getelementptr inbounds [200 x %struct.BuildReloc], ptr %144, i64 0, i64 %146
  %148 = getelementptr inbounds %struct.BuildReloc, ptr %147, i32 0, i32 0
  %149 = load i32, ptr %148, align 4, !tbaa !35
  %150 = add i32 %149, 0
  %151 = getelementptr inbounds %struct.PEreloc, ptr %9, i32 0, i32 0
  store i32 %150, ptr %151, align 4, !tbaa !37
  %152 = load ptr, ptr %2, align 8, !tbaa !5
  %153 = getelementptr inbounds %struct.BuildCtx, ptr %152, i32 0, i32 21
  %154 = load i32, ptr %6, align 4, !tbaa !9
  %155 = sext i32 %154 to i64
  %156 = getelementptr inbounds [200 x %struct.BuildReloc], ptr %153, i64 0, i64 %155
  %157 = getelementptr inbounds %struct.BuildReloc, ptr %156, i32 0, i32 1
  %158 = load i32, ptr %157, align 4, !tbaa !39
  %159 = add nsw i32 3, %158
  %160 = getelementptr inbounds %struct.PEreloc, ptr %9, i32 0, i32 1
  store i32 %159, ptr %160, align 4, !tbaa !40
  %161 = load ptr, ptr %2, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.BuildCtx, ptr %161, i32 0, i32 21
  %163 = load i32, ptr %6, align 4, !tbaa !9
  %164 = sext i32 %163 to i64
  %165 = getelementptr inbounds [200 x %struct.BuildReloc], ptr %162, i64 0, i64 %164
  %166 = getelementptr inbounds %struct.BuildReloc, ptr %165, i32 0, i32 2
  %167 = load i32, ptr %166, align 4, !tbaa !41
  %168 = icmp ne i32 %167, 0
  %169 = zext i1 %168 to i64
  %170 = select i1 %168, i32 4, i32 2
  %171 = trunc i32 %170 to i16
  %172 = getelementptr inbounds %struct.PEreloc, ptr %9, i32 0, i32 2
  store i16 %171, ptr %172, align 4, !tbaa !42
  %173 = load ptr, ptr %2, align 8, !tbaa !5
  call void @owrite(ptr noundef %173, ptr noundef %9, i64 noundef 10)
  call void @llvm.lifetime.end.p0(i64 12, ptr %9) #9
  br label %174

174:                                              ; preds = %142
  %175 = load i32, ptr %6, align 4, !tbaa !9
  %176 = add nsw i32 %175, 1
  store i32 %176, ptr %6, align 4, !tbaa !9
  br label %136, !llvm.loop !43

177:                                              ; preds = %136
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #9
  %178 = load ptr, ptr %2, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct.BuildCtx, ptr %178, i32 0, i32 13
  %180 = load ptr, ptr %179, align 8, !tbaa !45
  %181 = load ptr, ptr %2, align 8, !tbaa !5
  %182 = getelementptr inbounds %struct.BuildCtx, ptr %181, i32 0, i32 9
  %183 = load i32, ptr %182, align 8, !tbaa !31
  %184 = sub nsw i32 %183, 1
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds %struct.BuildSym, ptr %180, i64 %185
  %187 = getelementptr inbounds %struct.BuildSym, ptr %186, i32 0, i32 1
  %188 = load i32, ptr %187, align 8, !tbaa !46
  store i32 %188, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 12, ptr %11) #9
  call void @llvm.lifetime.start.p0(i64 12, ptr %12) #9
  %189 = getelementptr inbounds [3 x i32], ptr %11, i64 0, i64 0
  store i32 0, ptr %189, align 4, !tbaa !9
  %190 = load i32, ptr %10, align 4, !tbaa !9
  %191 = getelementptr inbounds [3 x i32], ptr %11, i64 0, i64 1
  store i32 %190, ptr %191, align 4, !tbaa !9
  %192 = getelementptr inbounds [3 x i32], ptr %11, i64 0, i64 2
  store i32 0, ptr %192, align 4, !tbaa !9
  %193 = load ptr, ptr %2, align 8, !tbaa !5
  call void @owrite(ptr noundef %193, ptr noundef %11, i64 noundef 12)
  %194 = load i32, ptr %10, align 4, !tbaa !9
  %195 = getelementptr inbounds [3 x i32], ptr %11, i64 0, i64 0
  store i32 %194, ptr %195, align 4, !tbaa !9
  %196 = load ptr, ptr %2, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.BuildCtx, ptr %196, i32 0, i32 6
  %198 = load i64, ptr %197, align 8, !tbaa !14
  %199 = trunc i64 %198 to i32
  %200 = getelementptr inbounds [3 x i32], ptr %11, i64 0, i64 1
  store i32 %199, ptr %200, align 4, !tbaa !9
  %201 = getelementptr inbounds [3 x i32], ptr %11, i64 0, i64 2
  store i32 20, ptr %201, align 4, !tbaa !9
  %202 = load ptr, ptr %2, align 8, !tbaa !5
  call void @owrite(ptr noundef %202, ptr noundef %11, i64 noundef 12)
  %203 = getelementptr inbounds %struct.PEreloc, ptr %12, i32 0, i32 0
  store i32 0, ptr %203, align 4, !tbaa !37
  %204 = load i32, ptr %7, align 4, !tbaa !9
  %205 = add nsw i32 3, %204
  %206 = add nsw i32 %205, 2
  %207 = add nsw i32 %206, 2
  %208 = add nsw i32 %207, 1
  %209 = getelementptr inbounds %struct.PEreloc, ptr %12, i32 0, i32 1
  store i32 %208, ptr %209, align 4, !tbaa !40
  %210 = getelementptr inbounds %struct.PEreloc, ptr %12, i32 0, i32 2
  store i16 3, ptr %210, align 4, !tbaa !42
  %211 = load ptr, ptr %2, align 8, !tbaa !5
  call void @owrite(ptr noundef %211, ptr noundef %12, i64 noundef 10)
  %212 = getelementptr inbounds %struct.PEreloc, ptr %12, i32 0, i32 0
  store i32 4, ptr %212, align 4, !tbaa !37
  %213 = load i32, ptr %7, align 4, !tbaa !9
  %214 = add nsw i32 3, %213
  %215 = add nsw i32 %214, 2
  %216 = add nsw i32 %215, 2
  %217 = add nsw i32 %216, 1
  %218 = getelementptr inbounds %struct.PEreloc, ptr %12, i32 0, i32 1
  store i32 %217, ptr %218, align 4, !tbaa !40
  %219 = getelementptr inbounds %struct.PEreloc, ptr %12, i32 0, i32 2
  store i16 3, ptr %219, align 4, !tbaa !42
  %220 = load ptr, ptr %2, align 8, !tbaa !5
  call void @owrite(ptr noundef %220, ptr noundef %12, i64 noundef 10)
  %221 = getelementptr inbounds %struct.PEreloc, ptr %12, i32 0, i32 0
  store i32 8, ptr %221, align 4, !tbaa !37
  %222 = load i32, ptr %7, align 4, !tbaa !9
  %223 = add nsw i32 3, %222
  %224 = add nsw i32 %223, 2
  %225 = getelementptr inbounds %struct.PEreloc, ptr %12, i32 0, i32 1
  store i32 %224, ptr %225, align 4, !tbaa !40
  %226 = getelementptr inbounds %struct.PEreloc, ptr %12, i32 0, i32 2
  store i16 3, ptr %226, align 4, !tbaa !42
  %227 = load ptr, ptr %2, align 8, !tbaa !5
  call void @owrite(ptr noundef %227, ptr noundef %12, i64 noundef 10)
  %228 = getelementptr inbounds %struct.PEreloc, ptr %12, i32 0, i32 0
  store i32 12, ptr %228, align 4, !tbaa !37
  %229 = load i32, ptr %7, align 4, !tbaa !9
  %230 = add nsw i32 3, %229
  %231 = add nsw i32 %230, 2
  %232 = add nsw i32 %231, 2
  %233 = add nsw i32 %232, 1
  %234 = getelementptr inbounds %struct.PEreloc, ptr %12, i32 0, i32 1
  store i32 %233, ptr %234, align 4, !tbaa !40
  %235 = getelementptr inbounds %struct.PEreloc, ptr %12, i32 0, i32 2
  store i16 3, ptr %235, align 4, !tbaa !42
  %236 = load ptr, ptr %2, align 8, !tbaa !5
  call void @owrite(ptr noundef %236, ptr noundef %12, i64 noundef 10)
  %237 = getelementptr inbounds %struct.PEreloc, ptr %12, i32 0, i32 0
  store i32 16, ptr %237, align 4, !tbaa !37
  %238 = load i32, ptr %7, align 4, !tbaa !9
  %239 = add nsw i32 3, %238
  %240 = add nsw i32 %239, 2
  %241 = add nsw i32 %240, 2
  %242 = add nsw i32 %241, 1
  %243 = getelementptr inbounds %struct.PEreloc, ptr %12, i32 0, i32 1
  store i32 %242, ptr %243, align 4, !tbaa !40
  %244 = getelementptr inbounds %struct.PEreloc, ptr %12, i32 0, i32 2
  store i16 3, ptr %244, align 4, !tbaa !42
  %245 = load ptr, ptr %2, align 8, !tbaa !5
  call void @owrite(ptr noundef %245, ptr noundef %12, i64 noundef 10)
  %246 = getelementptr inbounds %struct.PEreloc, ptr %12, i32 0, i32 0
  store i32 20, ptr %246, align 4, !tbaa !37
  %247 = load i32, ptr %7, align 4, !tbaa !9
  %248 = add nsw i32 3, %247
  %249 = add nsw i32 %248, 2
  %250 = getelementptr inbounds %struct.PEreloc, ptr %12, i32 0, i32 1
  store i32 %249, ptr %250, align 4, !tbaa !40
  %251 = getelementptr inbounds %struct.PEreloc, ptr %12, i32 0, i32 2
  store i16 3, ptr %251, align 4, !tbaa !42
  %252 = load ptr, ptr %2, align 8, !tbaa !5
  call void @owrite(ptr noundef %252, ptr noundef %12, i64 noundef 10)
  call void @llvm.lifetime.end.p0(i64 12, ptr %12) #9
  call void @llvm.lifetime.end.p0(i64 12, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %13) #9
  call void @llvm.lifetime.start.p0(i64 12, ptr %14) #9
  %253 = getelementptr inbounds [16 x i16], ptr %13, i64 0, i64 0
  store i16 25, ptr %253, align 16, !tbaa !48
  %254 = getelementptr inbounds [16 x i16], ptr %13, i64 0, i64 1
  store i16 5, ptr %254, align 2, !tbaa !48
  %255 = getelementptr inbounds [16 x i16], ptr %13, i64 0, i64 2
  store i16 16896, ptr %255, align 4, !tbaa !48
  %256 = getelementptr inbounds [16 x i16], ptr %13, i64 0, i64 3
  store i16 12288, ptr %256, align 2, !tbaa !48
  %257 = getelementptr inbounds [16 x i16], ptr %13, i64 0, i64 4
  store i16 24576, ptr %257, align 8, !tbaa !48
  %258 = getelementptr inbounds [16 x i16], ptr %13, i64 0, i64 5
  store i16 28672, ptr %258, align 2, !tbaa !48
  %259 = getelementptr inbounds [16 x i16], ptr %13, i64 0, i64 6
  store i16 20480, ptr %259, align 4, !tbaa !48
  %260 = getelementptr inbounds [16 x i16], ptr %13, i64 0, i64 7
  store i16 0, ptr %260, align 2, !tbaa !48
  %261 = getelementptr inbounds [16 x i16], ptr %13, i64 0, i64 9
  store i16 0, ptr %261, align 2, !tbaa !48
  %262 = getelementptr inbounds [16 x i16], ptr %13, i64 0, i64 8
  store i16 0, ptr %262, align 16, !tbaa !48
  %263 = getelementptr inbounds [16 x i16], ptr %13, i64 0, i64 10
  store i16 1, ptr %263, align 4, !tbaa !48
  %264 = getelementptr inbounds [16 x i16], ptr %13, i64 0, i64 11
  store i16 5380, ptr %264, align 2, !tbaa !48
  %265 = getelementptr inbounds [16 x i16], ptr %13, i64 0, i64 12
  store i16 768, ptr %265, align 8, !tbaa !48
  %266 = getelementptr inbounds [16 x i16], ptr %13, i64 0, i64 13
  store i16 512, ptr %266, align 2, !tbaa !48
  %267 = getelementptr inbounds [16 x i16], ptr %13, i64 0, i64 14
  store i16 12288, ptr %267, align 4, !tbaa !48
  %268 = getelementptr inbounds [16 x i16], ptr %13, i64 0, i64 15
  store i16 20480, ptr %268, align 2, !tbaa !48
  %269 = load ptr, ptr %2, align 8, !tbaa !5
  call void @owrite(ptr noundef %269, ptr noundef %13, i64 noundef 32)
  %270 = getelementptr inbounds %struct.PEreloc, ptr %14, i32 0, i32 0
  store i32 16, ptr %270, align 4, !tbaa !37
  %271 = load i32, ptr %7, align 4, !tbaa !9
  %272 = add nsw i32 3, %271
  %273 = add nsw i32 %272, 2
  %274 = add nsw i32 %273, 2
  %275 = getelementptr inbounds %struct.PEreloc, ptr %14, i32 0, i32 1
  store i32 %274, ptr %275, align 4, !tbaa !40
  %276 = getelementptr inbounds %struct.PEreloc, ptr %14, i32 0, i32 2
  store i16 3, ptr %276, align 4, !tbaa !42
  %277 = load ptr, ptr %2, align 8, !tbaa !5
  call void @owrite(ptr noundef %277, ptr noundef %14, i64 noundef 10)
  call void @llvm.lifetime.end.p0(i64 12, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %13) #9
  %278 = load ptr, ptr %2, align 8, !tbaa !5
  %279 = load ptr, ptr %2, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.BuildCtx, ptr %279, i32 0, i32 19
  %281 = load ptr, ptr %280, align 8, !tbaa !22
  %282 = load ptr, ptr %2, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct.BuildCtx, ptr %282, i32 0, i32 19
  %284 = load ptr, ptr %283, align 8, !tbaa !22
  %285 = call i64 @strlen(ptr noundef %284) #10
  %286 = add i64 %285, 1
  call void @owrite(ptr noundef %278, ptr noundef %281, i64 noundef %286)
  store ptr null, ptr @strtab, align 8, !tbaa !5
  br label %287

287:                                              ; preds = %350, %177
  store i64 4, ptr @strtabofs, align 8, !tbaa !49
  %288 = load ptr, ptr %2, align 8, !tbaa !5
  call void @emit_peobj_sym(ptr noundef %288, ptr noundef @.str.5, i32 noundef 1, i32 noundef -2, i32 noundef 0, i32 noundef 3)
  %289 = load ptr, ptr %2, align 8, !tbaa !5
  %290 = getelementptr inbounds [4 x %struct.PEsection], ptr %4, i64 0, i64 0
  call void @emit_peobj_sym_sect(ptr noundef %289, ptr noundef %290, i32 noundef 0)
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %291

291:                                              ; preds = %304, %287
  %292 = load i32, ptr %6, align 4, !tbaa !9
  %293 = load i32, ptr %7, align 4, !tbaa !9
  %294 = icmp slt i32 %292, %293
  br i1 %294, label %295, label %307

295:                                              ; preds = %291
  %296 = load ptr, ptr %2, align 8, !tbaa !5
  %297 = load ptr, ptr %2, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.BuildCtx, ptr %297, i32 0, i32 14
  %299 = load ptr, ptr %298, align 8, !tbaa !50
  %300 = load i32, ptr %6, align 4, !tbaa !9
  %301 = sext i32 %300 to i64
  %302 = getelementptr inbounds ptr, ptr %299, i64 %301
  %303 = load ptr, ptr %302, align 8, !tbaa !5
  call void @emit_peobj_sym(ptr noundef %296, ptr noundef %303, i32 noundef 0, i32 noundef -1, i32 noundef 32, i32 noundef 2)
  br label %304

304:                                              ; preds = %295
  %305 = load i32, ptr %6, align 4, !tbaa !9
  %306 = add nsw i32 %305, 1
  store i32 %306, ptr %6, align 4, !tbaa !9
  br label %291, !llvm.loop !51

307:                                              ; preds = %291
  %308 = load ptr, ptr %2, align 8, !tbaa !5
  %309 = getelementptr inbounds [4 x %struct.PEsection], ptr %4, i64 0, i64 0
  call void @emit_peobj_sym_sect(ptr noundef %308, ptr noundef %309, i32 noundef 1)
  %310 = load ptr, ptr %2, align 8, !tbaa !5
  %311 = getelementptr inbounds [4 x %struct.PEsection], ptr %4, i64 0, i64 0
  call void @emit_peobj_sym_sect(ptr noundef %310, ptr noundef %311, i32 noundef 2)
  %312 = load ptr, ptr %2, align 8, !tbaa !5
  call void @emit_peobj_sym(ptr noundef %312, ptr noundef @.str.6, i32 noundef 0, i32 noundef -1, i32 noundef 32, i32 noundef 2)
  %313 = load ptr, ptr %2, align 8, !tbaa !5
  %314 = load ptr, ptr %2, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.BuildCtx, ptr %314, i32 0, i32 16
  %316 = load ptr, ptr %315, align 8, !tbaa !52
  call void @emit_peobj_sym(ptr noundef %313, ptr noundef %316, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 2)
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %317

317:                                              ; preds = %341, %307
  %318 = load i32, ptr %6, align 4, !tbaa !9
  %319 = load ptr, ptr %2, align 8, !tbaa !5
  %320 = getelementptr inbounds %struct.BuildCtx, ptr %319, i32 0, i32 9
  %321 = load i32, ptr %320, align 8, !tbaa !31
  %322 = icmp slt i32 %318, %321
  br i1 %322, label %323, label %344

323:                                              ; preds = %317
  %324 = load ptr, ptr %2, align 8, !tbaa !5
  %325 = load ptr, ptr %2, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.BuildCtx, ptr %325, i32 0, i32 13
  %327 = load ptr, ptr %326, align 8, !tbaa !45
  %328 = load i32, ptr %6, align 4, !tbaa !9
  %329 = sext i32 %328 to i64
  %330 = getelementptr inbounds %struct.BuildSym, ptr %327, i64 %329
  %331 = getelementptr inbounds %struct.BuildSym, ptr %330, i32 0, i32 0
  %332 = load ptr, ptr %331, align 8, !tbaa !53
  %333 = load ptr, ptr %2, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.BuildCtx, ptr %333, i32 0, i32 13
  %335 = load ptr, ptr %334, align 8, !tbaa !45
  %336 = load i32, ptr %6, align 4, !tbaa !9
  %337 = sext i32 %336 to i64
  %338 = getelementptr inbounds %struct.BuildSym, ptr %335, i64 %337
  %339 = getelementptr inbounds %struct.BuildSym, ptr %338, i32 0, i32 1
  %340 = load i32, ptr %339, align 8, !tbaa !46
  call void @emit_peobj_sym(ptr noundef %324, ptr noundef %332, i32 noundef %340, i32 noundef 0, i32 noundef 32, i32 noundef 2)
  br label %341

341:                                              ; preds = %323
  %342 = load i32, ptr %6, align 4, !tbaa !9
  %343 = add nsw i32 %342, 1
  store i32 %343, ptr %6, align 4, !tbaa !9
  br label %317, !llvm.loop !54

344:                                              ; preds = %317
  %345 = load ptr, ptr %2, align 8, !tbaa !5
  %346 = getelementptr inbounds [4 x %struct.PEsection], ptr %4, i64 0, i64 0
  call void @emit_peobj_sym_sect(ptr noundef %345, ptr noundef %346, i32 noundef 3)
  %347 = load ptr, ptr @strtab, align 8, !tbaa !5
  %348 = icmp ne ptr %347, null
  br i1 %348, label %349, label %350

349:                                              ; preds = %344
  br label %356

350:                                              ; preds = %344
  %351 = load i64, ptr @strtabofs, align 8, !tbaa !49
  %352 = call noalias ptr @malloc(i64 noundef %351) #12
  store ptr %352, ptr @strtab, align 8, !tbaa !5
  %353 = load i64, ptr @strtabofs, align 8, !tbaa !49
  %354 = trunc i64 %353 to i32
  %355 = load ptr, ptr @strtab, align 8, !tbaa !5
  store i32 %354, ptr %355, align 4, !tbaa !9
  br label %287

356:                                              ; preds = %349
  %357 = load ptr, ptr %2, align 8, !tbaa !5
  %358 = load ptr, ptr @strtab, align 8, !tbaa !5
  %359 = load i64, ptr @strtabofs, align 8, !tbaa !49
  call void @owrite(ptr noundef %357, ptr noundef %358, i64 noundef %359)
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #9
  call void @llvm.lifetime.end.p0(i64 160, ptr %4) #9
  call void @llvm.lifetime.end.p0(i64 20, ptr %3) #9
  ret void
}

; 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 nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #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) #3

; Function Attrs: nounwind willreturn memory(read)
declare i64 @strlen(ptr noundef) #4

declare void @owrite(ptr noundef, ptr noundef, i64 noundef) #5

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

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) #7

; 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
declare hidden void @emit_peobj_sym(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #0

; Function Attrs: nounwind uwtable
declare hidden void @emit_peobj_sym_sect(ptr noundef, ptr noundef, i32 noundef) #0

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

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 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { nounwind willreturn memory(read) "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 = { "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 #6 = { 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 #7 = { noreturn 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 #8 = { 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 #9 = { nounwind }
attributes #10 = { nounwind willreturn memory(read) }
attributes #11 = { noreturn nounwind }
attributes #12 = { 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, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 20}
!12 = !{!"PEsection", !7, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !13, i64 32, !13, i64 34, !10, i64 36}
!13 = !{!"short", !7, i64 0}
!14 = !{!15, !16, i64 48}
!15 = !{!"BuildCtx", !6, i64 0, !10, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !16, i64 48, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !7, i64 152}
!16 = !{!"long", !7, i64 0}
!17 = !{!12, !10, i64 16}
!18 = !{!12, !10, i64 24}
!19 = !{!15, !10, i64 68}
!20 = !{!12, !13, i64 32}
!21 = !{!12, !10, i64 36}
!22 = !{!15, !6, i64 136}
!23 = !{!24, !13, i64 0}
!24 = !{!"PEheader", !13, i64 0, !13, i64 2, !10, i64 4, !10, i64 8, !10, i64 12, !13, i64 16, !13, i64 18}
!25 = !{!24, !13, i64 2}
!26 = !{!24, !10, i64 4}
!27 = !{!24, !10, i64 8}
!28 = !{!24, !13, i64 16}
!29 = !{!24, !13, i64 18}
!30 = !{!15, !10, i64 72}
!31 = !{!15, !10, i64 64}
!32 = !{!24, !10, i64 12}
!33 = !{!7, !7, i64 0}
!34 = !{!15, !6, i64 40}
!35 = !{!36, !10, i64 0}
!36 = !{!"BuildReloc", !10, i64 0, !10, i64 4, !10, i64 8}
!37 = !{!38, !10, i64 0}
!38 = !{!"PEreloc", !10, i64 0, !10, i64 4, !13, i64 8}
!39 = !{!36, !10, i64 4}
!40 = !{!38, !10, i64 4}
!41 = !{!36, !10, i64 8}
!42 = !{!38, !13, i64 8}
!43 = distinct !{!43, !44}
!44 = !{!"llvm.loop.mustprogress"}
!45 = !{!15, !6, i64 88}
!46 = !{!47, !10, i64 8}
!47 = !{!"BuildSym", !6, i64 0, !10, i64 8}
!48 = !{!13, !13, i64 0}
!49 = !{!16, !16, i64 0}
!50 = !{!15, !6, i64 96}
!51 = distinct !{!51, !44}
!52 = !{!15, !6, i64 112}
!53 = !{!47, !6, i64 0}
!54 = distinct !{!54, !44}


; 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.PEheader = type { i16, i16, i32, i32, i32, i16, i16 }
%struct.PEsection = type { [8 x i8], i32, i32, i32, i32, i32, i32, i16, i16, i32 }
%struct.PEreloc = type { i32, i32, i16 }
%struct.BuildReloc = type { i32, i32, i32 }
%struct.BuildSym = type { ptr, i32 }

@.str = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [9 x i8], align 1
@strtab = external hidden local_unnamed_addr global ptr, align 8
@strtabofs = external hidden local_unnamed_addr global i64, align 8
@.str.5 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [20 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @emit_peobj(ptr noundef %0) local_unnamed_addr #0 {
  %2 = alloca %struct.PEheader, align 4
  %3 = alloca [4 x %struct.PEsection], align 16
  %4 = alloca %struct.PEreloc, align 4
  %5 = alloca [3 x i32], align 4
  %6 = alloca %struct.PEreloc, align 4
  %7 = alloca [16 x i16], align 16
  %8 = alloca %struct.PEreloc, align 4
  call void @llvm.lifetime.start.p0(i64 20, ptr nonnull %2) #7
  call void @llvm.lifetime.start.p0(i64 160, ptr nonnull %3) #7
  %9 = getelementptr inbounds i8, ptr %3, i64 5
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(151) %9, i8 0, i64 151, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(5) %3, ptr noundef nonnull align 1 dereferenceable(5) @.str, i64 5, i1 false)
  %10 = getelementptr inbounds i8, ptr %3, i64 20
  store i32 180, ptr %10, align 4, !tbaa !5
  %11 = getelementptr inbounds i8, ptr %0, i64 48
  %12 = load i64, ptr %11, align 8, !tbaa !11
  %13 = trunc i64 %12 to i32
  %14 = getelementptr inbounds i8, ptr %3, i64 16
  store i32 %13, ptr %14, align 16, !tbaa !15
  %15 = add i32 %13, 180
  %16 = getelementptr inbounds i8, ptr %3, i64 24
  store i32 %15, ptr %16, align 8, !tbaa !16
  %17 = getelementptr inbounds i8, ptr %0, i64 68
  %18 = load i32, ptr %17, align 4, !tbaa !17
  %19 = trunc i32 %18 to i16
  %20 = getelementptr inbounds i8, ptr %3, i64 32
  store i16 %19, ptr %20, align 16, !tbaa !18
  %21 = and i32 %18, 65535
  %22 = mul nuw nsw i32 %21, 10
  %23 = add i32 %22, %15
  %24 = getelementptr inbounds i8, ptr %3, i64 36
  store i32 1615855648, ptr %24, align 4, !tbaa !19
  %25 = getelementptr inbounds i8, ptr %3, i64 40
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(6) %25, ptr noundef nonnull align 1 dereferenceable(6) @.str.1, i64 6, i1 false)
  %26 = getelementptr inbounds i8, ptr %3, i64 60
  store i32 %23, ptr %26, align 4, !tbaa !5
  %27 = getelementptr inbounds i8, ptr %3, i64 56
  store i32 24, ptr %27, align 8, !tbaa !15
  %28 = add i32 %23, 24
  %29 = getelementptr inbounds i8, ptr %3, i64 64
  store i32 %28, ptr %29, align 16, !tbaa !16
  %30 = getelementptr inbounds i8, ptr %3, i64 72
  store i16 6, ptr %30, align 8, !tbaa !18
  %31 = add i32 %23, 84
  %32 = getelementptr inbounds i8, ptr %3, i64 76
  store i32 1076887616, ptr %32, align 4, !tbaa !19
  %33 = getelementptr inbounds i8, ptr %3, i64 80
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(6) %33, ptr noundef nonnull align 1 dereferenceable(6) @.str.2, i64 6, i1 false)
  %34 = getelementptr inbounds i8, ptr %3, i64 100
  store i32 %31, ptr %34, align 4, !tbaa !5
  %35 = getelementptr inbounds i8, ptr %3, i64 96
  store i32 32, ptr %35, align 16, !tbaa !15
  %36 = add i32 %23, 116
  %37 = getelementptr inbounds i8, ptr %3, i64 104
  store i32 %36, ptr %37, align 8, !tbaa !16
  %38 = getelementptr inbounds i8, ptr %3, i64 112
  store i16 1, ptr %38, align 16, !tbaa !18
  %39 = add i32 %23, 126
  %40 = getelementptr inbounds i8, ptr %3, i64 116
  store i32 1076887616, ptr %40, align 4, !tbaa !19
  %41 = getelementptr inbounds i8, ptr %3, i64 120
  %42 = load i64, ptr @.str.3, align 1
  store i64 %42, ptr %41, align 8
  %43 = getelementptr inbounds i8, ptr %3, i64 140
  store i32 %39, ptr %43, align 4, !tbaa !5
  %44 = getelementptr inbounds i8, ptr %0, i64 136
  %45 = load ptr, ptr %44, align 8, !tbaa !20
  %46 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %45) #8
  %47 = trunc i64 %46 to i32
  %48 = add i32 %47, 1
  %49 = getelementptr inbounds i8, ptr %3, i64 136
  store i32 %48, ptr %49, align 8, !tbaa !15
  %50 = add i32 %48, %39
  %51 = getelementptr inbounds i8, ptr %3, i64 156
  store i32 1076887616, ptr %51, align 4, !tbaa !19
  store i16 -31132, ptr %2, align 4, !tbaa !21
  %52 = getelementptr inbounds i8, ptr %2, i64 2
  store i16 4, ptr %52, align 2, !tbaa !23
  %53 = getelementptr inbounds i8, ptr %2, i64 4
  store i32 0, ptr %53, align 4, !tbaa !24
  %54 = getelementptr inbounds i8, ptr %2, i64 8
  store i32 %50, ptr %54, align 4, !tbaa !25
  %55 = getelementptr inbounds i8, ptr %2, i64 16
  store i16 0, ptr %55, align 4, !tbaa !26
  %56 = getelementptr inbounds i8, ptr %2, i64 18
  store i16 0, ptr %56, align 2, !tbaa !27
  %57 = getelementptr inbounds i8, ptr %0, i64 72
  %58 = load i32, ptr %57, align 8, !tbaa !28
  %59 = getelementptr inbounds i8, ptr %0, i64 64
  %60 = load i32, ptr %59, align 8, !tbaa !29
  %61 = getelementptr inbounds i8, ptr %2, i64 12
  %62 = add i32 %58, 11
  %63 = add i32 %62, %60
  store i32 %63, ptr %61, align 4, !tbaa !30
  call void @owrite(ptr noundef %0, ptr noundef nonnull %2, i64 noundef 20) #7
  call void @owrite(ptr noundef %0, ptr noundef nonnull %3, i64 noundef 160) #7
  %64 = getelementptr inbounds i8, ptr %0, i64 40
  %65 = load ptr, ptr %64, align 8, !tbaa !31
  %66 = load i64, ptr %11, align 8, !tbaa !11
  call void @owrite(ptr noundef %0, ptr noundef %65, i64 noundef %66) #7
  %67 = load i32, ptr %17, align 4, !tbaa !17
  %68 = icmp sgt i32 %67, 0
  br i1 %68, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %1
  %69 = getelementptr inbounds i8, ptr %0, i64 152
  %70 = getelementptr inbounds i8, ptr %4, i64 4
  %71 = getelementptr inbounds i8, ptr %4, i64 8
  br label %72

72:                                               ; preds = %.lr.ph, %72
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %72 ]
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %4) #7
  %73 = getelementptr inbounds [200 x %struct.BuildReloc], ptr %69, i64 0, i64 %indvars.iv
  %74 = load i32, ptr %73, align 4, !tbaa !32
  store i32 %74, ptr %4, align 4, !tbaa !34
  %75 = getelementptr inbounds i8, ptr %73, i64 4
  %76 = load i32, ptr %75, align 4, !tbaa !36
  %77 = add nsw i32 %76, 3
  store i32 %77, ptr %70, align 4, !tbaa !37
  %78 = getelementptr inbounds i8, ptr %73, i64 8
  %79 = load i32, ptr %78, align 4, !tbaa !38
  %.not84 = icmp eq i32 %79, 0
  %80 = select i1 %.not84, i16 2, i16 4
  store i16 %80, ptr %71, align 4, !tbaa !39
  call void @owrite(ptr noundef nonnull %0, ptr noundef nonnull %4, i64 noundef 10) #7
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %4) #7
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %81 = load i32, ptr %17, align 4, !tbaa !17
  %82 = sext i32 %81 to i64
  %83 = icmp slt i64 %indvars.iv.next, %82
  br i1 %83, label %72, label %._crit_edge, !llvm.loop !40

._crit_edge:                                      ; preds = %72, %1
  %84 = getelementptr inbounds i8, ptr %0, i64 88
  %85 = load ptr, ptr %84, align 8, !tbaa !42
  %86 = load i32, ptr %59, align 8, !tbaa !29
  %87 = sext i32 %86 to i64
  %88 = getelementptr %struct.BuildSym, ptr %85, i64 %87
  %89 = getelementptr i8, ptr %88, i64 -8
  %90 = load i32, ptr %89, align 8, !tbaa !43
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %5) #7
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %6) #7
  store i32 0, ptr %5, align 4, !tbaa !45
  %91 = getelementptr inbounds i8, ptr %5, i64 4
  store i32 %90, ptr %91, align 4, !tbaa !45
  %92 = getelementptr inbounds i8, ptr %5, i64 8
  store i32 0, ptr %92, align 4, !tbaa !45
  call void @owrite(ptr noundef nonnull %0, ptr noundef nonnull %5, i64 noundef 12) #7
  store i32 %90, ptr %5, align 4, !tbaa !45
  %93 = load i64, ptr %11, align 8, !tbaa !11
  %94 = trunc i64 %93 to i32
  store i32 %94, ptr %91, align 4, !tbaa !45
  store i32 20, ptr %92, align 4, !tbaa !45
  call void @owrite(ptr noundef nonnull %0, ptr noundef nonnull %5, i64 noundef 12) #7
  store i32 0, ptr %6, align 4, !tbaa !34
  %95 = add nsw i32 %58, 5
  %96 = add nsw i32 %58, 7
  %97 = add nsw i32 %58, 8
  %98 = getelementptr inbounds i8, ptr %6, i64 4
  store i32 %97, ptr %98, align 4, !tbaa !37
  %99 = getelementptr inbounds i8, ptr %6, i64 8
  store i16 3, ptr %99, align 4, !tbaa !39
  call void @owrite(ptr noundef nonnull %0, ptr noundef nonnull %6, i64 noundef 10) #7
  store i32 4, ptr %6, align 4, !tbaa !34
  store i32 %97, ptr %98, align 4, !tbaa !37
  store i16 3, ptr %99, align 4, !tbaa !39
  call void @owrite(ptr noundef nonnull %0, ptr noundef nonnull %6, i64 noundef 10) #7
  store i32 8, ptr %6, align 4, !tbaa !34
  store i32 %95, ptr %98, align 4, !tbaa !37
  store i16 3, ptr %99, align 4, !tbaa !39
  call void @owrite(ptr noundef nonnull %0, ptr noundef nonnull %6, i64 noundef 10) #7
  store i32 12, ptr %6, align 4, !tbaa !34
  store i32 %97, ptr %98, align 4, !tbaa !37
  store i16 3, ptr %99, align 4, !tbaa !39
  call void @owrite(ptr noundef nonnull %0, ptr noundef nonnull %6, i64 noundef 10) #7
  store i32 16, ptr %6, align 4, !tbaa !34
  store i32 %97, ptr %98, align 4, !tbaa !37
  store i16 3, ptr %99, align 4, !tbaa !39
  call void @owrite(ptr noundef nonnull %0, ptr noundef nonnull %6, i64 noundef 10) #7
  store i32 20, ptr %6, align 4, !tbaa !34
  store i32 %95, ptr %98, align 4, !tbaa !37
  store i16 3, ptr %99, align 4, !tbaa !39
  call void @owrite(ptr noundef nonnull %0, ptr noundef nonnull %6, i64 noundef 10) #7
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %6) #7
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %5) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #7
  call void @llvm.lifetime.start.p0(i64 12, ptr nonnull %8) #7
  store <8 x i16> <i16 25, i16 5, i16 16896, i16 12288, i16 24576, i16 28672, i16 20480, i16 0>, ptr %7, align 16, !tbaa !46
  %100 = getelementptr inbounds i8, ptr %7, i64 16
  store <8 x i16> <i16 0, i16 0, i16 1, i16 5380, i16 768, i16 512, i16 12288, i16 20480>, ptr %100, align 16, !tbaa !46
  call void @owrite(ptr noundef nonnull %0, ptr noundef nonnull %7, i64 noundef 32) #7
  store i32 16, ptr %8, align 4, !tbaa !34
  %101 = getelementptr inbounds i8, ptr %8, i64 4
  store i32 %96, ptr %101, align 4, !tbaa !37
  %102 = getelementptr inbounds i8, ptr %8, i64 8
  store i16 3, ptr %102, align 4, !tbaa !39
  call void @owrite(ptr noundef nonnull %0, ptr noundef nonnull %8, i64 noundef 10) #7
  call void @llvm.lifetime.end.p0(i64 12, ptr nonnull %8) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #7
  %103 = load ptr, ptr %44, align 8, !tbaa !20
  %104 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %103) #8
  %105 = add i64 %104, 1
  call void @owrite(ptr noundef nonnull %0, ptr noundef %103, i64 noundef %105) #7
  store ptr null, ptr @strtab, align 8, !tbaa !47
  %106 = icmp sgt i32 %58, 0
  %107 = getelementptr inbounds i8, ptr %0, i64 96
  %108 = getelementptr inbounds i8, ptr %0, i64 112
  %wide.trip.count = zext nneg i32 %58 to i64
  br label %109

109:                                              ; preds = %126, %._crit_edge
  store i64 4, ptr @strtabofs, align 8, !tbaa !48
  call void @emit_peobj_sym(ptr noundef nonnull %0, ptr noundef nonnull @.str.5, i32 noundef 1, i32 noundef -2, i32 noundef 0, i32 noundef 3)
  call void @emit_peobj_sym_sect(ptr noundef nonnull %0, ptr noundef nonnull %3, i32 noundef 0)
  br i1 %106, label %.lr.ph88, label %._crit_edge89

.lr.ph88:                                         ; preds = %109, %.lr.ph88
  %indvars.iv95 = phi i64 [ %indvars.iv.next96, %.lr.ph88 ], [ 0, %109 ]
  %110 = load ptr, ptr %107, align 8, !tbaa !49
  %111 = getelementptr inbounds ptr, ptr %110, i64 %indvars.iv95
  %112 = load ptr, ptr %111, align 8, !tbaa !47
  call void @emit_peobj_sym(ptr noundef nonnull %0, ptr noundef %112, i32 noundef 0, i32 noundef -1, i32 noundef 32, i32 noundef 2)
  %indvars.iv.next96 = add nuw nsw i64 %indvars.iv95, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next96, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge89, label %.lr.ph88, !llvm.loop !50

._crit_edge89:                                    ; preds = %.lr.ph88, %109
  call void @emit_peobj_sym_sect(ptr noundef nonnull %0, ptr noundef nonnull %3, i32 noundef 1)
  call void @emit_peobj_sym_sect(ptr noundef nonnull %0, ptr noundef nonnull %3, i32 noundef 2)
  call void @emit_peobj_sym(ptr noundef nonnull %0, ptr noundef nonnull @.str.6, i32 noundef 0, i32 noundef -1, i32 noundef 32, i32 noundef 2)
  %113 = load ptr, ptr %108, align 8, !tbaa !51
  call void @emit_peobj_sym(ptr noundef nonnull %0, ptr noundef %113, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 2)
  %114 = load i32, ptr %59, align 8, !tbaa !29
  %115 = icmp sgt i32 %114, 0
  br i1 %115, label %.lr.ph92, label %._crit_edge93

.lr.ph92:                                         ; preds = %._crit_edge89, %.lr.ph92
  %indvars.iv98 = phi i64 [ %indvars.iv.next99, %.lr.ph92 ], [ 0, %._crit_edge89 ]
  %116 = load ptr, ptr %84, align 8, !tbaa !42
  %117 = getelementptr inbounds %struct.BuildSym, ptr %116, i64 %indvars.iv98
  %118 = load ptr, ptr %117, align 8, !tbaa !52
  %119 = getelementptr inbounds i8, ptr %117, i64 8
  %120 = load i32, ptr %119, align 8, !tbaa !43
  call void @emit_peobj_sym(ptr noundef nonnull %0, ptr noundef %118, i32 noundef %120, i32 noundef 0, i32 noundef 32, i32 noundef 2)
  %indvars.iv.next99 = add nuw nsw i64 %indvars.iv98, 1
  %121 = load i32, ptr %59, align 8, !tbaa !29
  %122 = sext i32 %121 to i64
  %123 = icmp slt i64 %indvars.iv.next99, %122
  br i1 %123, label %.lr.ph92, label %._crit_edge93, !llvm.loop !53

._crit_edge93:                                    ; preds = %.lr.ph92, %._crit_edge89
  call void @emit_peobj_sym_sect(ptr noundef nonnull %0, ptr noundef nonnull %3, i32 noundef 3)
  %124 = load ptr, ptr @strtab, align 8, !tbaa !47
  %.not = icmp eq ptr %124, null
  %125 = load i64, ptr @strtabofs, align 8, !tbaa !48
  br i1 %.not, label %126, label %129

126:                                              ; preds = %._crit_edge93
  %127 = call noalias ptr @malloc(i64 noundef %125) #9
  store ptr %127, ptr @strtab, align 8, !tbaa !47
  %128 = trunc i64 %125 to i32
  store i32 %128, ptr %127, align 4, !tbaa !45
  br label %109

129:                                              ; preds = %._crit_edge93
  call void @owrite(ptr noundef nonnull %0, ptr noundef nonnull %124, i64 noundef %125) #7
  call void @llvm.lifetime.end.p0(i64 160, ptr nonnull %3) #7
  call void @llvm.lifetime.end.p0(i64 20, ptr nonnull %2) #7
  ret void
}

; 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 nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #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) #3

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i64 @strlen(ptr nocapture noundef) local_unnamed_addr #4

declare void @owrite(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #5

; 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
declare hidden void @emit_peobj_sym(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare hidden void @emit_peobj_sym_sect(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #0

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

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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #3 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { mustprogress nofree nounwind willreturn memory(argmem: read) "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 = { "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 #6 = { 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 #7 = { nounwind }
attributes #8 = { nounwind willreturn memory(read) }
attributes #9 = { 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, !9, i64 20}
!6 = !{!"PEsection", !7, i64 0, !9, i64 8, !9, i64 12, !9, i64 16, !9, i64 20, !9, i64 24, !9, i64 28, !10, i64 32, !10, i64 34, !9, i64 36}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!"int", !7, i64 0}
!10 = !{!"short", !7, i64 0}
!11 = !{!12, !14, i64 48}
!12 = !{!"BuildCtx", !13, i64 0, !9, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !14, i64 48, !9, i64 56, !9, i64 60, !9, i64 64, !9, i64 68, !9, i64 72, !13, i64 80, !13, i64 88, !13, i64 96, !13, i64 104, !13, i64 112, !13, i64 120, !13, i64 128, !13, i64 136, !13, i64 144, !7, i64 152}
!13 = !{!"any pointer", !7, i64 0}
!14 = !{!"long", !7, i64 0}
!15 = !{!6, !9, i64 16}
!16 = !{!6, !9, i64 24}
!17 = !{!12, !9, i64 68}
!18 = !{!6, !10, i64 32}
!19 = !{!6, !9, i64 36}
!20 = !{!12, !13, i64 136}
!21 = !{!22, !10, i64 0}
!22 = !{!"PEheader", !10, i64 0, !10, i64 2, !9, i64 4, !9, i64 8, !9, i64 12, !10, i64 16, !10, i64 18}
!23 = !{!22, !10, i64 2}
!24 = !{!22, !9, i64 4}
!25 = !{!22, !9, i64 8}
!26 = !{!22, !10, i64 16}
!27 = !{!22, !10, i64 18}
!28 = !{!12, !9, i64 72}
!29 = !{!12, !9, i64 64}
!30 = !{!22, !9, i64 12}
!31 = !{!12, !13, i64 40}
!32 = !{!33, !9, i64 0}
!33 = !{!"BuildReloc", !9, i64 0, !9, i64 4, !9, i64 8}
!34 = !{!35, !9, i64 0}
!35 = !{!"PEreloc", !9, i64 0, !9, i64 4, !10, i64 8}
!36 = !{!33, !9, i64 4}
!37 = !{!35, !9, i64 4}
!38 = !{!33, !9, i64 8}
!39 = !{!35, !10, i64 8}
!40 = distinct !{!40, !41}
!41 = !{!"llvm.loop.mustprogress"}
!42 = !{!12, !13, i64 88}
!43 = !{!44, !9, i64 8}
!44 = !{!"BuildSym", !13, i64 0, !9, i64 8}
!45 = !{!9, !9, i64 0}
!46 = !{!10, !10, i64 0}
!47 = !{!13, !13, i64 0}
!48 = !{!14, !14, i64 0}
!49 = !{!12, !13, i64 96}
!50 = distinct !{!50, !41}
!51 = !{!12, !13, i64 112}
!52 = !{!44, !13, i64 0}
!53 = distinct !{!53, !41}


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