; LLVM IR from sysprog21/shecc :: src (ssa)

; 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.ph1_ir_t = type { i32, [32 x i8], i32, i32, ptr, ptr, ptr }
%struct.var = type { [32 x i8], [32 x i8], i32, i8, i8, i32, i32, i32, i32, i32, ptr, i32, [64 x ptr], i32, %struct.rename_t, %struct.ref_block_list, ptr, ptr, ptr, i32, i8, i8, i8 }
%struct.rename_t = type { i32, [64 x i32], i32 }
%struct.ref_block_list = type { ptr, ptr }
%struct.func = type { %struct.var, [8 x %struct.var], i32, i32, i32, ptr, ptr, %struct.symbol_list_t, i32, i32, ptr }
%struct.symbol_list_t = type { ptr, ptr }

@ph1_ir_idx = external dso_local global i32, align 4
@PH1_IR = external dso_local global ptr, align 8
@.str.14 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [5 x i8], align 1

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

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

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

; Function Attrs: nounwind
declare ptr @strcpy(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local ptr @find_func(ptr noundef) #3

; Function Attrs: nounwind uwtable
declare dso_local void @print_indent(i32 noundef) #3

; Function Attrs: nounwind uwtable
define dso_local void @dump_ph1_ir() #3 {
  %1 = alloca i32, align 4
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca [32 x i8], align 16
  %5 = alloca [32 x i8], align 16
  %6 = alloca [32 x i8], align 16
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %1) #4
  store i32 0, ptr %1, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %2) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #4
  call void @llvm.lifetime.start.p0(i64 32, ptr %4) #4
  call void @llvm.lifetime.start.p0(i64 32, ptr %5) #4
  call void @llvm.lifetime.start.p0(i64 32, ptr %6) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  store i32 0, ptr %7, align 4, !tbaa !5
  br label %13

13:                                               ; preds = %421, %0
  %14 = load i32, ptr %7, align 4, !tbaa !5
  %15 = load i32, ptr @ph1_ir_idx, align 4, !tbaa !5
  %16 = icmp slt i32 %14, %15
  br i1 %16, label %18, label %17

17:                                               ; preds = %13
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  br label %424

18:                                               ; preds = %13
  %19 = load ptr, ptr @PH1_IR, align 8, !tbaa !9
  %20 = load i32, ptr %7, align 4, !tbaa !5
  %21 = sext i32 %20 to i64
  %22 = getelementptr inbounds %struct.ph1_ir_t, ptr %19, i64 %21
  store ptr %22, ptr %2, align 8, !tbaa !9
  %23 = load ptr, ptr %2, align 8, !tbaa !9
  %24 = getelementptr inbounds %struct.ph1_ir_t, ptr %23, i32 0, i32 4
  %25 = load ptr, ptr %24, align 8, !tbaa !11
  %26 = icmp ne ptr %25, null
  br i1 %26, label %27, label %35

27:                                               ; preds = %18
  %28 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %29 = load ptr, ptr %2, align 8, !tbaa !9
  %30 = getelementptr inbounds %struct.ph1_ir_t, ptr %29, i32 0, i32 4
  %31 = load ptr, ptr %30, align 8, !tbaa !11
  %32 = getelementptr inbounds %struct.var, ptr %31, i32 0, i32 1
  %33 = getelementptr inbounds [32 x i8], ptr %32, i64 0, i64 0
  %34 = call ptr @strcpy(ptr noundef %28, ptr noundef %33) #4
  br label %35

35:                                               ; preds = %27, %18
  %36 = load ptr, ptr %2, align 8, !tbaa !9
  %37 = getelementptr inbounds %struct.ph1_ir_t, ptr %36, i32 0, i32 5
  %38 = load ptr, ptr %37, align 8, !tbaa !13
  %39 = icmp ne ptr %38, null
  br i1 %39, label %40, label %48

40:                                               ; preds = %35
  %41 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %42 = load ptr, ptr %2, align 8, !tbaa !9
  %43 = getelementptr inbounds %struct.ph1_ir_t, ptr %42, i32 0, i32 5
  %44 = load ptr, ptr %43, align 8, !tbaa !13
  %45 = getelementptr inbounds %struct.var, ptr %44, i32 0, i32 1
  %46 = getelementptr inbounds [32 x i8], ptr %45, i64 0, i64 0
  %47 = call ptr @strcpy(ptr noundef %41, ptr noundef %46) #4
  br label %48

48:                                               ; preds = %40, %35
  %49 = load ptr, ptr %2, align 8, !tbaa !9
  %50 = getelementptr inbounds %struct.ph1_ir_t, ptr %49, i32 0, i32 6
  %51 = load ptr, ptr %50, align 8, !tbaa !14
  %52 = icmp ne ptr %51, null
  br i1 %52, label %53, label %61

53:                                               ; preds = %48
  %54 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  %55 = load ptr, ptr %2, align 8, !tbaa !9
  %56 = getelementptr inbounds %struct.ph1_ir_t, ptr %55, i32 0, i32 6
  %57 = load ptr, ptr %56, align 8, !tbaa !14
  %58 = getelementptr inbounds %struct.var, ptr %57, i32 0, i32 1
  %59 = getelementptr inbounds [32 x i8], ptr %58, i64 0, i64 0
  %60 = call ptr @strcpy(ptr noundef %54, ptr noundef %59) #4
  br label %61

61:                                               ; preds = %53, %48
  %62 = load ptr, ptr %2, align 8, !tbaa !9
  %63 = getelementptr inbounds %struct.ph1_ir_t, ptr %62, i32 0, i32 0
  %64 = load i32, ptr %63, align 8, !tbaa !15
  switch i32 %64, label %418 [
    i32 3, label %65
    i32 16, label %144
    i32 17, label %149
    i32 8, label %154
    i32 10, label %193
    i32 11, label %202
    i32 21, label %211
    i32 9, label %216
    i32 12, label %221
    i32 13, label %224
    i32 14, label %230
    i32 4, label %234
    i32 5, label %238
    i32 15, label %247
    i32 7, label %251
    i32 27, label %263
    i32 28, label %271
    i32 6, label %291
    i32 50, label %295
    i32 29, label %300
    i32 30, label %306
    i32 31, label %312
    i32 32, label %318
    i32 33, label %324
    i32 40, label %330
    i32 41, label %336
    i32 44, label %342
    i32 42, label %348
    i32 45, label %354
    i32 43, label %360
    i32 47, label %366
    i32 46, label %372
    i32 49, label %378
    i32 48, label %383
    i32 37, label %389
    i32 38, label %395
    i32 39, label %401
    i32 36, label %406
    i32 35, label %412
  ]

65:                                               ; preds = %61
  %66 = load ptr, ptr %2, align 8, !tbaa !9
  %67 = getelementptr inbounds %struct.ph1_ir_t, ptr %66, i32 0, i32 1
  %68 = getelementptr inbounds [32 x i8], ptr %67, i64 0, i64 0
  %69 = call ptr @find_func(ptr noundef %68)
  store ptr %69, ptr %3, align 8, !tbaa !9
  %70 = load ptr, ptr %3, align 8, !tbaa !9
  %71 = getelementptr inbounds %struct.func, ptr %70, i32 0, i32 0
  %72 = getelementptr inbounds %struct.var, ptr %71, i32 0, i32 0
  %73 = getelementptr inbounds [32 x i8], ptr %72, i64 0, i64 0
  %74 = call i32 (ptr, ...) @printf(ptr noundef @.str.14, ptr noundef %73)
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  store i32 0, ptr %9, align 4, !tbaa !5
  br label %75

75:                                               ; preds = %85, %65
  %76 = load i32, ptr %9, align 4, !tbaa !5
  %77 = load ptr, ptr %3, align 8, !tbaa !9
  %78 = getelementptr inbounds %struct.func, ptr %77, i32 0, i32 0
  %79 = getelementptr inbounds %struct.var, ptr %78, i32 0, i32 2
  %80 = load i32, ptr %79, align 8, !tbaa !16
  %81 = icmp slt i32 %76, %80
  br i1 %81, label %83, label %82

82:                                               ; preds = %75
  store i32 6, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  br label %88

83:                                               ; preds = %75
  %84 = call i32 (ptr, ...) @printf(ptr noundef @.str.15)
  br label %85

85:                                               ; preds = %83
  %86 = load i32, ptr %9, align 4, !tbaa !5
  %87 = add nsw i32 %86, 1
  store i32 %87, ptr %9, align 4, !tbaa !5
  br label %75, !llvm.loop !23

88:                                               ; preds = %82
  %89 = load ptr, ptr %2, align 8, !tbaa !9
  %90 = getelementptr inbounds %struct.ph1_ir_t, ptr %89, i32 0, i32 1
  %91 = getelementptr inbounds [32 x i8], ptr %90, i64 0, i64 0
  %92 = call i32 (ptr, ...) @printf(ptr noundef @.str.16, ptr noundef %91)
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  store i32 0, ptr %10, align 4, !tbaa !5
  br label %93

93:                                               ; preds = %139, %88
  %94 = load i32, ptr %10, align 4, !tbaa !5
  %95 = load ptr, ptr %3, align 8, !tbaa !9
  %96 = getelementptr inbounds %struct.func, ptr %95, i32 0, i32 2
  %97 = load i32, ptr %96, align 8, !tbaa !25
  %98 = icmp slt i32 %94, %97
  br i1 %98, label %100, label %99

99:                                               ; preds = %93
  store i32 9, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  br label %142

100:                                              ; preds = %93
  %101 = load i32, ptr %10, align 4, !tbaa !5
  %102 = icmp ne i32 %101, 0
  br i1 %102, label %103, label %105

103:                                              ; preds = %100
  %104 = call i32 (ptr, ...) @printf(ptr noundef @.str.17)
  br label %105

105:                                              ; preds = %103, %100
  %106 = load ptr, ptr %3, align 8, !tbaa !9
  %107 = getelementptr inbounds %struct.func, ptr %106, i32 0, i32 1
  %108 = load i32, ptr %10, align 4, !tbaa !5
  %109 = sext i32 %108 to i64
  %110 = getelementptr inbounds [8 x %struct.var], ptr %107, i64 0, i64 %109
  %111 = getelementptr inbounds %struct.var, ptr %110, i32 0, i32 0
  %112 = getelementptr inbounds [32 x i8], ptr %111, i64 0, i64 0
  %113 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, ptr noundef %112)
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  store i32 0, ptr %11, align 4, !tbaa !5
  br label %114

114:                                              ; preds = %127, %105
  %115 = load i32, ptr %11, align 4, !tbaa !5
  %116 = load ptr, ptr %3, align 8, !tbaa !9
  %117 = getelementptr inbounds %struct.func, ptr %116, i32 0, i32 1
  %118 = load i32, ptr %10, align 4, !tbaa !5
  %119 = sext i32 %118 to i64
  %120 = getelementptr inbounds [8 x %struct.var], ptr %117, i64 0, i64 %119
  %121 = getelementptr inbounds %struct.var, ptr %120, i32 0, i32 2
  %122 = load i32, ptr %121, align 8, !tbaa !26
  %123 = icmp slt i32 %115, %122
  br i1 %123, label %125, label %124

124:                                              ; preds = %114
  store i32 12, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  br label %130

125:                                              ; preds = %114
  %126 = call i32 (ptr, ...) @printf(ptr noundef @.str.15)
  br label %127

127:                                              ; preds = %125
  %128 = load i32, ptr %11, align 4, !tbaa !5
  %129 = add nsw i32 %128, 1
  store i32 %129, ptr %11, align 4, !tbaa !5
  br label %114, !llvm.loop !27

130:                                              ; preds = %124
  %131 = load ptr, ptr %3, align 8, !tbaa !9
  %132 = getelementptr inbounds %struct.func, ptr %131, i32 0, i32 1
  %133 = load i32, ptr %10, align 4, !tbaa !5
  %134 = sext i32 %133 to i64
  %135 = getelementptr inbounds [8 x %struct.var], ptr %132, i64 0, i64 %134
  %136 = getelementptr inbounds %struct.var, ptr %135, i32 0, i32 1
  %137 = getelementptr inbounds [32 x i8], ptr %136, i64 0, i64 0
  %138 = call i32 (ptr, ...) @printf(ptr noundef @.str.19, ptr noundef %137)
  br label %139

139:                                              ; preds = %130
  %140 = load i32, ptr %10, align 4, !tbaa !5
  %141 = add nsw i32 %140, 1
  store i32 %141, ptr %10, align 4, !tbaa !5
  br label %93, !llvm.loop !28

142:                                              ; preds = %99
  %143 = call i32 (ptr, ...) @printf(ptr noundef @.str.20)
  br label %419

144:                                              ; preds = %61
  %145 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %145)
  %146 = call i32 (ptr, ...) @printf(ptr noundef @.str.21)
  %147 = load i32, ptr %1, align 4, !tbaa !5
  %148 = add nsw i32 %147, 1
  store i32 %148, ptr %1, align 4, !tbaa !5
  br label %419

149:                                              ; preds = %61
  %150 = load i32, ptr %1, align 4, !tbaa !5
  %151 = add nsw i32 %150, -1
  store i32 %151, ptr %1, align 4, !tbaa !5
  %152 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %152)
  %153 = call i32 (ptr, ...) @printf(ptr noundef @.str.22)
  br label %419

154:                                              ; preds = %61
  %155 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %155)
  %156 = load ptr, ptr %2, align 8, !tbaa !9
  %157 = getelementptr inbounds %struct.ph1_ir_t, ptr %156, i32 0, i32 5
  %158 = load ptr, ptr %157, align 8, !tbaa !13
  %159 = getelementptr inbounds %struct.var, ptr %158, i32 0, i32 0
  %160 = getelementptr inbounds [32 x i8], ptr %159, i64 0, i64 0
  %161 = call i32 (ptr, ...) @printf(ptr noundef @.str.23, ptr noundef %160)
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  store i32 0, ptr %12, align 4, !tbaa !5
  br label %162

162:                                              ; preds = %173, %154
  %163 = load i32, ptr %12, align 4, !tbaa !5
  %164 = load ptr, ptr %2, align 8, !tbaa !9
  %165 = getelementptr inbounds %struct.ph1_ir_t, ptr %164, i32 0, i32 5
  %166 = load ptr, ptr %165, align 8, !tbaa !13
  %167 = getelementptr inbounds %struct.var, ptr %166, i32 0, i32 2
  %168 = load i32, ptr %167, align 8, !tbaa !26
  %169 = icmp slt i32 %163, %168
  br i1 %169, label %171, label %170

170:                                              ; preds = %162
  store i32 15, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  br label %176

171:                                              ; preds = %162
  %172 = call i32 (ptr, ...) @printf(ptr noundef @.str.15)
  br label %173

173:                                              ; preds = %171
  %174 = load i32, ptr %12, align 4, !tbaa !5
  %175 = add nsw i32 %174, 1
  store i32 %175, ptr %12, align 4, !tbaa !5
  br label %162, !llvm.loop !29

176:                                              ; preds = %170
  %177 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %178 = call i32 (ptr, ...) @printf(ptr noundef @.str.19, ptr noundef %177)
  %179 = load ptr, ptr %2, align 8, !tbaa !9
  %180 = getelementptr inbounds %struct.ph1_ir_t, ptr %179, i32 0, i32 5
  %181 = load ptr, ptr %180, align 8, !tbaa !13
  %182 = getelementptr inbounds %struct.var, ptr %181, i32 0, i32 5
  %183 = load i32, ptr %182, align 8, !tbaa !30
  %184 = icmp sgt i32 %183, 0
  br i1 %184, label %185, label %192

185:                                              ; preds = %176
  %186 = load ptr, ptr %2, align 8, !tbaa !9
  %187 = getelementptr inbounds %struct.ph1_ir_t, ptr %186, i32 0, i32 5
  %188 = load ptr, ptr %187, align 8, !tbaa !13
  %189 = getelementptr inbounds %struct.var, ptr %188, i32 0, i32 5
  %190 = load i32, ptr %189, align 8, !tbaa !30
  %191 = call i32 (ptr, ...) @printf(ptr noundef @.str.24, i32 noundef %190)
  br label %192

192:                                              ; preds = %185, %176
  br label %419

193:                                              ; preds = %61
  %194 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %194)
  %195 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %196 = load ptr, ptr %2, align 8, !tbaa !9
  %197 = getelementptr inbounds %struct.ph1_ir_t, ptr %196, i32 0, i32 4
  %198 = load ptr, ptr %197, align 8, !tbaa !11
  %199 = getelementptr inbounds %struct.var, ptr %198, i32 0, i32 7
  %200 = load i32, ptr %199, align 8, !tbaa !31
  %201 = call i32 (ptr, ...) @printf(ptr noundef @.str.25, ptr noundef %195, i32 noundef %200)
  br label %419

202:                                              ; preds = %61
  %203 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %203)
  %204 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %205 = load ptr, ptr %2, align 8, !tbaa !9
  %206 = getelementptr inbounds %struct.ph1_ir_t, ptr %205, i32 0, i32 4
  %207 = load ptr, ptr %206, align 8, !tbaa !11
  %208 = getelementptr inbounds %struct.var, ptr %207, i32 0, i32 7
  %209 = load i32, ptr %208, align 8, !tbaa !31
  %210 = call i32 (ptr, ...) @printf(ptr noundef @.str.26, ptr noundef %204, i32 noundef %209)
  br label %419

211:                                              ; preds = %61
  %212 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %212)
  %213 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %214 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %215 = call i32 (ptr, ...) @printf(ptr noundef @.str.27, ptr noundef %213, ptr noundef %214)
  br label %419

216:                                              ; preds = %61
  %217 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %217)
  %218 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %219 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %220 = call i32 (ptr, ...) @printf(ptr noundef @.str.28, ptr noundef %218, ptr noundef %219)
  br label %419

221:                                              ; preds = %61
  call void @print_indent(i32 noundef 0)
  %222 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %223 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, ptr noundef %222)
  br label %419

224:                                              ; preds = %61
  %225 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %225)
  %226 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %227 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %228 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  %229 = call i32 (ptr, ...) @printf(ptr noundef @.str.29, ptr noundef %226, ptr noundef %227, ptr noundef %228)
  br label %419

230:                                              ; preds = %61
  %231 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %231)
  %232 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %233 = call i32 (ptr, ...) @printf(ptr noundef @.str.30, ptr noundef %232)
  br label %419

234:                                              ; preds = %61
  %235 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %235)
  %236 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %237 = call i32 (ptr, ...) @printf(ptr noundef @.str.31, ptr noundef %236)
  br label %419

238:                                              ; preds = %61
  %239 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %239)
  %240 = load ptr, ptr %2, align 8, !tbaa !9
  %241 = getelementptr inbounds %struct.ph1_ir_t, ptr %240, i32 0, i32 1
  %242 = getelementptr inbounds [32 x i8], ptr %241, i64 0, i64 0
  %243 = load ptr, ptr %2, align 8, !tbaa !9
  %244 = getelementptr inbounds %struct.ph1_ir_t, ptr %243, i32 0, i32 2
  %245 = load i32, ptr %244, align 4, !tbaa !32
  %246 = call i32 (ptr, ...) @printf(ptr noundef @.str.32, ptr noundef %242, i32 noundef %245)
  br label %419

247:                                              ; preds = %61
  %248 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %248)
  %249 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %250 = call i32 (ptr, ...) @printf(ptr noundef @.str.33, ptr noundef %249)
  br label %419

251:                                              ; preds = %61
  %252 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %252)
  %253 = load ptr, ptr %2, align 8, !tbaa !9
  %254 = getelementptr inbounds %struct.ph1_ir_t, ptr %253, i32 0, i32 5
  %255 = load ptr, ptr %254, align 8, !tbaa !13
  %256 = icmp ne ptr %255, null
  br i1 %256, label %257, label %260

257:                                              ; preds = %251
  %258 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %259 = call i32 (ptr, ...) @printf(ptr noundef @.str.34, ptr noundef %258)
  br label %262

260:                                              ; preds = %251
  %261 = call i32 (ptr, ...) @printf(ptr noundef @.str.35)
  br label %262

262:                                              ; preds = %260, %257
  br label %419

263:                                              ; preds = %61
  %264 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %264)
  %265 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %266 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %267 = load ptr, ptr %2, align 8, !tbaa !9
  %268 = getelementptr inbounds %struct.ph1_ir_t, ptr %267, i32 0, i32 3
  %269 = load i32, ptr %268, align 8, !tbaa !33
  %270 = call i32 (ptr, ...) @printf(ptr noundef @.str.36, ptr noundef %265, ptr noundef %266, i32 noundef %269)
  br label %419

271:                                              ; preds = %61
  %272 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %272)
  %273 = load ptr, ptr %2, align 8, !tbaa !9
  %274 = getelementptr inbounds %struct.ph1_ir_t, ptr %273, i32 0, i32 5
  %275 = load ptr, ptr %274, align 8, !tbaa !13
  %276 = getelementptr inbounds %struct.var, ptr %275, i32 0, i32 3
  %277 = load i8, ptr %276, align 4, !tbaa !34, !range !35, !noundef !36
  %278 = trunc i8 %277 to i1
  br i1 %278, label %279, label %283

279:                                              ; preds = %271
  %280 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %281 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %282 = call i32 (ptr, ...) @printf(ptr noundef @.str.37, ptr noundef %280, ptr noundef %281)
  br label %290

283:                                              ; preds = %271
  %284 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %285 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %286 = load ptr, ptr %2, align 8, !tbaa !9
  %287 = getelementptr inbounds %struct.ph1_ir_t, ptr %286, i32 0, i32 3
  %288 = load i32, ptr %287, align 8, !tbaa !33
  %289 = call i32 (ptr, ...) @printf(ptr noundef @.str.38, ptr noundef %284, ptr noundef %285, i32 noundef %288)
  br label %290

290:                                              ; preds = %283, %279
  br label %419

291:                                              ; preds = %61
  %292 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %292)
  %293 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %294 = call i32 (ptr, ...) @printf(ptr noundef @.str.39, ptr noundef %293)
  br label %419

295:                                              ; preds = %61
  %296 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %296)
  %297 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %298 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %299 = call i32 (ptr, ...) @printf(ptr noundef @.str.40, ptr noundef %297, ptr noundef %298)
  br label %419

300:                                              ; preds = %61
  %301 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %301)
  %302 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %303 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %304 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  %305 = call i32 (ptr, ...) @printf(ptr noundef @.str.41, ptr noundef %302, ptr noundef %303, ptr noundef %304)
  br label %419

306:                                              ; preds = %61
  %307 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %307)
  %308 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %309 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %310 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  %311 = call i32 (ptr, ...) @printf(ptr noundef @.str.42, ptr noundef %308, ptr noundef %309, ptr noundef %310)
  br label %419

312:                                              ; preds = %61
  %313 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %313)
  %314 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %315 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %316 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  %317 = call i32 (ptr, ...) @printf(ptr noundef @.str.43, ptr noundef %314, ptr noundef %315, ptr noundef %316)
  br label %419

318:                                              ; preds = %61
  %319 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %319)
  %320 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %321 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %322 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  %323 = call i32 (ptr, ...) @printf(ptr noundef @.str.44, ptr noundef %320, ptr noundef %321, ptr noundef %322)
  br label %419

324:                                              ; preds = %61
  %325 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %325)
  %326 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %327 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %328 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  %329 = call i32 (ptr, ...) @printf(ptr noundef @.str.45, ptr noundef %326, ptr noundef %327, ptr noundef %328)
  br label %419

330:                                              ; preds = %61
  %331 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %331)
  %332 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %333 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %334 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  %335 = call i32 (ptr, ...) @printf(ptr noundef @.str.46, ptr noundef %332, ptr noundef %333, ptr noundef %334)
  br label %419

336:                                              ; preds = %61
  %337 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %337)
  %338 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %339 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %340 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  %341 = call i32 (ptr, ...) @printf(ptr noundef @.str.47, ptr noundef %338, ptr noundef %339, ptr noundef %340)
  br label %419

342:                                              ; preds = %61
  %343 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %343)
  %344 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %345 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %346 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  %347 = call i32 (ptr, ...) @printf(ptr noundef @.str.48, ptr noundef %344, ptr noundef %345, ptr noundef %346)
  br label %419

348:                                              ; preds = %61
  %349 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %349)
  %350 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %351 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %352 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  %353 = call i32 (ptr, ...) @printf(ptr noundef @.str.49, ptr noundef %350, ptr noundef %351, ptr noundef %352)
  br label %419

354:                                              ; preds = %61
  %355 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %355)
  %356 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %357 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %358 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  %359 = call i32 (ptr, ...) @printf(ptr noundef @.str.50, ptr noundef %356, ptr noundef %357, ptr noundef %358)
  br label %419

360:                                              ; preds = %61
  %361 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %361)
  %362 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %363 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %364 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  %365 = call i32 (ptr, ...) @printf(ptr noundef @.str.51, ptr noundef %362, ptr noundef %363, ptr noundef %364)
  br label %419

366:                                              ; preds = %61
  %367 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %367)
  %368 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %369 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %370 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  %371 = call i32 (ptr, ...) @printf(ptr noundef @.str.52, ptr noundef %368, ptr noundef %369, ptr noundef %370)
  br label %419

372:                                              ; preds = %61
  %373 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %373)
  %374 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %375 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %376 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  %377 = call i32 (ptr, ...) @printf(ptr noundef @.str.53, ptr noundef %374, ptr noundef %375, ptr noundef %376)
  br label %419

378:                                              ; preds = %61
  %379 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %379)
  %380 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %381 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %382 = call i32 (ptr, ...) @printf(ptr noundef @.str.54, ptr noundef %380, ptr noundef %381)
  br label %419

383:                                              ; preds = %61
  %384 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %384)
  %385 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %386 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %387 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  %388 = call i32 (ptr, ...) @printf(ptr noundef @.str.55, ptr noundef %385, ptr noundef %386, ptr noundef %387)
  br label %419

389:                                              ; preds = %61
  %390 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %390)
  %391 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %392 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %393 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  %394 = call i32 (ptr, ...) @printf(ptr noundef @.str.52, ptr noundef %391, ptr noundef %392, ptr noundef %393)
  br label %419

395:                                              ; preds = %61
  %396 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %396)
  %397 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %398 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %399 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  %400 = call i32 (ptr, ...) @printf(ptr noundef @.str.53, ptr noundef %397, ptr noundef %398, ptr noundef %399)
  br label %419

401:                                              ; preds = %61
  %402 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %402)
  %403 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %404 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %405 = call i32 (ptr, ...) @printf(ptr noundef @.str.54, ptr noundef %403, ptr noundef %404)
  br label %419

406:                                              ; preds = %61
  %407 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %407)
  %408 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %409 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %410 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  %411 = call i32 (ptr, ...) @printf(ptr noundef @.str.56, ptr noundef %408, ptr noundef %409, ptr noundef %410)
  br label %419

412:                                              ; preds = %61
  %413 = load i32, ptr %1, align 4, !tbaa !5
  call void @print_indent(i32 noundef %413)
  %414 = getelementptr inbounds [32 x i8], ptr %4, i64 0, i64 0
  %415 = getelementptr inbounds [32 x i8], ptr %5, i64 0, i64 0
  %416 = getelementptr inbounds [32 x i8], ptr %6, i64 0, i64 0
  %417 = call i32 (ptr, ...) @printf(ptr noundef @.str.57, ptr noundef %414, ptr noundef %415, ptr noundef %416)
  br label %419

418:                                              ; preds = %61
  br label %419

419:                                              ; preds = %418, %412, %406, %401, %395, %389, %383, %378, %372, %366, %360, %354, %348, %342, %336, %330, %324, %318, %312, %306, %300, %295, %291, %290, %263, %262, %247, %238, %234, %230, %224, %221, %216, %211, %202, %193, %192, %149, %144, %142
  %420 = call i32 (ptr, ...) @printf(ptr noundef @.str.58)
  br label %421

421:                                              ; preds = %419
  %422 = load i32, ptr %7, align 4, !tbaa !5
  %423 = add nsw i32 %422, 1
  store i32 %423, ptr %7, align 4, !tbaa !5
  br label %13, !llvm.loop !37

424:                                              ; preds = %17
  %425 = call i32 (ptr, ...) @printf(ptr noundef @.str.59)
  call void @llvm.lifetime.end.p0(i64 32, ptr %6) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr %5) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr %4) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %2) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %1) #4
  ret void
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "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 #2 = { 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 = { 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 #4 = { nounwind }

!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, !10, i64 48}
!12 = !{!"", !6, i64 0, !7, i64 4, !6, i64 36, !6, i64 40, !10, i64 48, !10, i64 56, !10, i64 64}
!13 = !{!12, !10, i64 56}
!14 = !{!12, !10, i64 64}
!15 = !{!12, !6, i64 0}
!16 = !{!17, !6, i64 64}
!17 = !{!"func", !18, i64 0, !7, i64 944, !6, i64 8496, !6, i64 8500, !6, i64 8504, !10, i64 8512, !10, i64 8520, !22, i64 8528, !6, i64 8544, !6, i64 8548, !10, i64 8552}
!18 = !{!"var", !7, i64 0, !7, i64 32, !6, i64 64, !19, i64 68, !19, i64 69, !6, i64 72, !6, i64 76, !6, i64 80, !6, i64 84, !6, i64 88, !10, i64 96, !6, i64 104, !7, i64 112, !6, i64 624, !20, i64 628, !21, i64 896, !10, i64 912, !10, i64 920, !10, i64 928, !6, i64 936, !19, i64 940, !19, i64 941, !19, i64 942}
!19 = !{!"_Bool", !7, i64 0}
!20 = !{!"", !6, i64 0, !7, i64 4, !6, i64 260}
!21 = !{!"ref_block_list", !10, i64 0, !10, i64 8}
!22 = !{!"", !10, i64 0, !10, i64 8}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{!17, !6, i64 8496}
!26 = !{!18, !6, i64 64}
!27 = distinct !{!27, !24}
!28 = distinct !{!28, !24}
!29 = distinct !{!29, !24}
!30 = !{!18, !6, i64 72}
!31 = !{!18, !6, i64 80}
!32 = !{!12, !6, i64 36}
!33 = !{!12, !6, i64 40}
!34 = !{!18, !19, i64 68}
!35 = !{i8 0, i8 2}
!36 = !{}
!37 = distinct !{!37, !24}


; 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.ph1_ir_t = type { i32, [32 x i8], i32, i32, ptr, ptr, ptr }
%struct.var = type { [32 x i8], [32 x i8], i32, i8, i8, i32, i32, i32, i32, i32, ptr, i32, [64 x ptr], i32, %struct.rename_t, %struct.ref_block_list, ptr, ptr, ptr, i32, i8, i8, i8 }
%struct.rename_t = type { i32, [64 x i32], i32 }
%struct.ref_block_list = type { ptr, ptr }

@ph1_ir_idx = external dso_local local_unnamed_addr global i32, align 4
@PH1_IR = external dso_local local_unnamed_addr global ptr, align 8
@.str.14 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [5 x i8], align 1

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

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

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: readwrite)
declare ptr @strcpy(ptr noalias noundef returned writeonly, ptr noalias nocapture noundef readonly) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local ptr @find_func(ptr noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare dso_local void @print_indent(i32 noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
define dso_local void @dump_ph1_ir() local_unnamed_addr #3 {
  %1 = alloca [32 x i8], align 16
  %2 = alloca [32 x i8], align 16
  %3 = alloca [32 x i8], align 16
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %1) #4
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %2) #4
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %3) #4
  %4 = load i32, ptr @ph1_ir_idx, align 4, !tbaa !5
  %5 = icmp sgt i32 %4, 0
  br i1 %5, label %.lr.ph109, label %._crit_edge110

._crit_edge110:                                   ; preds = %183, %0
  %6 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.59)
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %2) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %1) #4
  ret void

.lr.ph109:                                        ; preds = %0, %183
  %indvars.iv112 = phi i64 [ %indvars.iv.next113, %183 ], [ 0, %0 ]
  %.084106 = phi i32 [ %.1, %183 ], [ 0, %0 ]
  %7 = load ptr, ptr @PH1_IR, align 8, !tbaa !9
  %8 = getelementptr inbounds %struct.ph1_ir_t, ptr %7, i64 %indvars.iv112
  %9 = getelementptr inbounds i8, ptr %8, i64 48
  %10 = load ptr, ptr %9, align 8, !tbaa !11
  %.not = icmp eq ptr %10, null
  br i1 %.not, label %14, label %11

11:                                               ; preds = %.lr.ph109
  %12 = getelementptr inbounds i8, ptr %10, i64 32
  %13 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %1, ptr noundef nonnull dereferenceable(1) %12) #4
  br label %14

14:                                               ; preds = %11, %.lr.ph109
  %15 = getelementptr inbounds i8, ptr %8, i64 56
  %16 = load ptr, ptr %15, align 8, !tbaa !13
  %.not89 = icmp eq ptr %16, null
  br i1 %.not89, label %20, label %17

17:                                               ; preds = %14
  %18 = getelementptr inbounds i8, ptr %16, i64 32
  %19 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %2, ptr noundef nonnull dereferenceable(1) %18) #4
  br label %20

20:                                               ; preds = %17, %14
  %21 = getelementptr inbounds i8, ptr %8, i64 64
  %22 = load ptr, ptr %21, align 8, !tbaa !14
  %.not90 = icmp eq ptr %22, null
  br i1 %.not90, label %26, label %23

23:                                               ; preds = %20
  %24 = getelementptr inbounds i8, ptr %22, i64 32
  %25 = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) %3, ptr noundef nonnull dereferenceable(1) %24) #4
  br label %26

26:                                               ; preds = %23, %20
  %27 = load i32, ptr %8, align 8, !tbaa !15
  switch i32 %27, label %183 [
    i32 3, label %28
    i32 16, label %63
    i32 17, label %66
    i32 8, label %69
    i32 10, label %89
    i32 11, label %94
    i32 21, label %99
    i32 9, label %101
    i32 12, label %103
    i32 13, label %105
    i32 14, label %107
    i32 4, label %109
    i32 5, label %111
    i32 15, label %116
    i32 7, label %118
    i32 27, label %124
    i32 28, label %128
    i32 6, label %139
    i32 50, label %141
    i32 29, label %143
    i32 30, label %145
    i32 31, label %147
    i32 32, label %149
    i32 33, label %151
    i32 40, label %153
    i32 41, label %155
    i32 44, label %157
    i32 42, label %159
    i32 45, label %161
    i32 43, label %163
    i32 47, label %165
    i32 46, label %167
    i32 49, label %169
    i32 48, label %171
    i32 37, label %173
    i32 38, label %175
    i32 39, label %177
    i32 36, label %179
    i32 35, label %181
  ]

28:                                               ; preds = %26
  %29 = getelementptr inbounds i8, ptr %8, i64 4
  %30 = call ptr @find_func(ptr noundef nonnull %29)
  %31 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14, ptr noundef %30)
  %32 = getelementptr inbounds i8, ptr %30, i64 64
  %33 = load i32, ptr %32, align 8, !tbaa !16
  %34 = icmp sgt i32 %33, 0
  br i1 %34, label %.lr.ph96, label %._crit_edge97

._crit_edge97:                                    ; preds = %.lr.ph96, %28
  %35 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.16, ptr noundef nonnull %29)
  %36 = getelementptr inbounds i8, ptr %30, i64 8496
  %37 = load i32, ptr %36, align 8, !tbaa !23
  %38 = icmp sgt i32 %37, 0
  br i1 %38, label %.lr.ph104, label %._crit_edge105

.lr.ph104:                                        ; preds = %._crit_edge97
  %39 = getelementptr inbounds i8, ptr %30, i64 944
  br label %45

.lr.ph96:                                         ; preds = %28, %.lr.ph96
  %.08294 = phi i32 [ %41, %.lr.ph96 ], [ 0, %28 ]
  %40 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15)
  %41 = add nuw nsw i32 %.08294, 1
  %42 = load i32, ptr %32, align 8, !tbaa !16
  %43 = icmp slt i32 %41, %42
  br i1 %43, label %.lr.ph96, label %._crit_edge97, !llvm.loop !24

._crit_edge105:                                   ; preds = %._crit_edge101, %._crit_edge97
  %44 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20)
  br label %183

45:                                               ; preds = %.lr.ph104, %._crit_edge101
  %indvars.iv = phi i64 [ 0, %.lr.ph104 ], [ %indvars.iv.next, %._crit_edge101 ]
  %.not92 = icmp eq i64 %indvars.iv, 0
  br i1 %.not92, label %48, label %46

46:                                               ; preds = %45
  %47 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.17)
  br label %48

48:                                               ; preds = %46, %45
  %49 = getelementptr inbounds [8 x %struct.var], ptr %39, i64 0, i64 %indvars.iv
  %50 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, ptr noundef nonnull %49)
  %51 = getelementptr inbounds i8, ptr %49, i64 64
  %52 = load i32, ptr %51, align 8, !tbaa !26
  %53 = icmp sgt i32 %52, 0
  br i1 %53, label %.lr.ph100, label %._crit_edge101

._crit_edge101:                                   ; preds = %.lr.ph100, %48
  %54 = getelementptr inbounds i8, ptr %49, i64 32
  %55 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.19, ptr noundef nonnull %54)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %56 = load i32, ptr %36, align 8, !tbaa !23
  %57 = sext i32 %56 to i64
  %58 = icmp slt i64 %indvars.iv.next, %57
  br i1 %58, label %45, label %._crit_edge105, !llvm.loop !27

.lr.ph100:                                        ; preds = %48, %.lr.ph100
  %.08098 = phi i32 [ %60, %.lr.ph100 ], [ 0, %48 ]
  %59 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15)
  %60 = add nuw nsw i32 %.08098, 1
  %61 = load i32, ptr %51, align 8, !tbaa !26
  %62 = icmp slt i32 %60, %61
  br i1 %62, label %.lr.ph100, label %._crit_edge101, !llvm.loop !28

63:                                               ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %64 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.21)
  %65 = add nsw i32 %.084106, 1
  br label %183

66:                                               ; preds = %26
  %67 = add nsw i32 %.084106, -1
  call void @print_indent(i32 noundef %67)
  %68 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.22)
  br label %183

69:                                               ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %70 = load ptr, ptr %15, align 8, !tbaa !13
  %71 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.23, ptr noundef %70)
  %72 = load ptr, ptr %15, align 8, !tbaa !13
  %73 = getelementptr inbounds i8, ptr %72, i64 64
  %74 = load i32, ptr %73, align 8, !tbaa !26
  %75 = icmp sgt i32 %74, 0
  br i1 %75, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph, %69
  %76 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.19, ptr noundef nonnull %2)
  %77 = load ptr, ptr %15, align 8, !tbaa !13
  %78 = getelementptr inbounds i8, ptr %77, i64 72
  %79 = load i32, ptr %78, align 8, !tbaa !29
  %80 = icmp sgt i32 %79, 0
  br i1 %80, label %87, label %183

.lr.ph:                                           ; preds = %69, %.lr.ph
  %.093 = phi i32 [ %82, %.lr.ph ], [ 0, %69 ]
  %81 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15)
  %82 = add nuw nsw i32 %.093, 1
  %83 = load ptr, ptr %15, align 8, !tbaa !13
  %84 = getelementptr inbounds i8, ptr %83, i64 64
  %85 = load i32, ptr %84, align 8, !tbaa !26
  %86 = icmp slt i32 %82, %85
  br i1 %86, label %.lr.ph, label %._crit_edge, !llvm.loop !30

87:                                               ; preds = %._crit_edge
  %88 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.24, i32 noundef %79)
  br label %183

89:                                               ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %90 = load ptr, ptr %9, align 8, !tbaa !11
  %91 = getelementptr inbounds i8, ptr %90, i64 80
  %92 = load i32, ptr %91, align 8, !tbaa !31
  %93 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.25, ptr noundef nonnull %1, i32 noundef %92)
  br label %183

94:                                               ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %95 = load ptr, ptr %9, align 8, !tbaa !11
  %96 = getelementptr inbounds i8, ptr %95, i64 80
  %97 = load i32, ptr %96, align 8, !tbaa !31
  %98 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.26, ptr noundef nonnull %1, i32 noundef %97)
  br label %183

99:                                               ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %100 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.27, ptr noundef nonnull %1, ptr noundef nonnull %2)
  br label %183

101:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %102 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.28, ptr noundef nonnull %1, ptr noundef nonnull %2)
  br label %183

103:                                              ; preds = %26
  call void @print_indent(i32 noundef 0)
  %104 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, ptr noundef nonnull %2)
  br label %183

105:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %106 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.29, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull %3)
  br label %183

107:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %108 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.30, ptr noundef nonnull %1)
  br label %183

109:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %110 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.31, ptr noundef nonnull %2)
  br label %183

111:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %112 = getelementptr inbounds i8, ptr %8, i64 4
  %113 = getelementptr inbounds i8, ptr %8, i64 36
  %114 = load i32, ptr %113, align 4, !tbaa !32
  %115 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.32, ptr noundef nonnull %112, i32 noundef %114)
  br label %183

116:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %117 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.33, ptr noundef nonnull %1)
  br label %183

118:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %119 = load ptr, ptr %15, align 8, !tbaa !13
  %.not91 = icmp eq ptr %119, null
  br i1 %.not91, label %122, label %120

120:                                              ; preds = %118
  %121 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.34, ptr noundef nonnull %2)
  br label %183

122:                                              ; preds = %118
  %123 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.35)
  br label %183

124:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %125 = getelementptr inbounds i8, ptr %8, i64 40
  %126 = load i32, ptr %125, align 8, !tbaa !33
  %127 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.36, ptr noundef nonnull %1, ptr noundef nonnull %2, i32 noundef %126)
  br label %183

128:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %129 = load ptr, ptr %15, align 8, !tbaa !13
  %130 = getelementptr inbounds i8, ptr %129, i64 68
  %131 = load i8, ptr %130, align 4, !tbaa !34, !range !35, !noundef !36
  %132 = trunc nuw i8 %131 to i1
  br i1 %132, label %133, label %135

133:                                              ; preds = %128
  %134 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.37, ptr noundef nonnull %1, ptr noundef nonnull %2)
  br label %183

135:                                              ; preds = %128
  %136 = getelementptr inbounds i8, ptr %8, i64 40
  %137 = load i32, ptr %136, align 8, !tbaa !33
  %138 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.38, ptr noundef nonnull %1, ptr noundef nonnull %2, i32 noundef %137)
  br label %183

139:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %140 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.39, ptr noundef nonnull %2)
  br label %183

141:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %142 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.40, ptr noundef nonnull %1, ptr noundef nonnull %2)
  br label %183

143:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %144 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.41, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull %3)
  br label %183

145:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %146 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.42, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull %3)
  br label %183

147:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %148 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.43, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull %3)
  br label %183

149:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %150 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.44, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull %3)
  br label %183

151:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %152 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.45, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull %3)
  br label %183

153:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %154 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.46, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull %3)
  br label %183

155:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %156 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.47, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull %3)
  br label %183

157:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %158 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.48, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull %3)
  br label %183

159:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %160 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.49, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull %3)
  br label %183

161:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %162 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.50, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull %3)
  br label %183

163:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %164 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.51, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull %3)
  br label %183

165:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %166 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.52, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull %3)
  br label %183

167:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %168 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.53, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull %3)
  br label %183

169:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %170 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.54, ptr noundef nonnull %1, ptr noundef nonnull %2)
  br label %183

171:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %172 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.55, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull %3)
  br label %183

173:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %174 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.52, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull %3)
  br label %183

175:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %176 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.53, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull %3)
  br label %183

177:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %178 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.54, ptr noundef nonnull %1, ptr noundef nonnull %2)
  br label %183

179:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %180 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.56, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull %3)
  br label %183

181:                                              ; preds = %26
  call void @print_indent(i32 noundef %.084106)
  %182 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.57, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull %3)
  br label %183

183:                                              ; preds = %26, %133, %135, %120, %122, %._crit_edge, %87, %181, %179, %177, %175, %173, %171, %169, %167, %165, %163, %161, %159, %157, %155, %153, %151, %149, %147, %145, %143, %141, %139, %124, %116, %111, %109, %107, %105, %103, %101, %99, %94, %89, %66, %63, %._crit_edge105
  %.1 = phi i32 [ %.084106, %26 ], [ %.084106, %181 ], [ %.084106, %179 ], [ %.084106, %177 ], [ %.084106, %175 ], [ %.084106, %173 ], [ %.084106, %171 ], [ %.084106, %169 ], [ %.084106, %167 ], [ %.084106, %165 ], [ %.084106, %163 ], [ %.084106, %161 ], [ %.084106, %159 ], [ %.084106, %157 ], [ %.084106, %155 ], [ %.084106, %153 ], [ %.084106, %151 ], [ %.084106, %149 ], [ %.084106, %147 ], [ %.084106, %145 ], [ %.084106, %143 ], [ %.084106, %141 ], [ %.084106, %139 ], [ %.084106, %133 ], [ %.084106, %135 ], [ %.084106, %124 ], [ %.084106, %120 ], [ %.084106, %122 ], [ %.084106, %116 ], [ %.084106, %111 ], [ %.084106, %109 ], [ %.084106, %107 ], [ %.084106, %105 ], [ %.084106, %103 ], [ %.084106, %101 ], [ %.084106, %99 ], [ %.084106, %94 ], [ %.084106, %89 ], [ %.084106, %87 ], [ %.084106, %._crit_edge ], [ %67, %66 ], [ %65, %63 ], [ %.084106, %._crit_edge105 ]
  %184 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.58)
  %indvars.iv.next113 = add nuw nsw i64 %indvars.iv112, 1
  %185 = load i32, ptr @ph1_ir_idx, align 4, !tbaa !5
  %186 = sext i32 %185 to i64
  %187 = icmp slt i64 %indvars.iv.next113, %186
  br i1 %187, label %.lr.ph109, label %._crit_edge110, !llvm.loop !37
}

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { mustprogress nofree nounwind willreturn memory(argmem: readwrite) "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 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 #4 = { nounwind }

!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, !10, i64 48}
!12 = !{!"", !6, i64 0, !7, i64 4, !6, i64 36, !6, i64 40, !10, i64 48, !10, i64 56, !10, i64 64}
!13 = !{!12, !10, i64 56}
!14 = !{!12, !10, i64 64}
!15 = !{!12, !6, i64 0}
!16 = !{!17, !6, i64 64}
!17 = !{!"func", !18, i64 0, !7, i64 944, !6, i64 8496, !6, i64 8500, !6, i64 8504, !10, i64 8512, !10, i64 8520, !22, i64 8528, !6, i64 8544, !6, i64 8548, !10, i64 8552}
!18 = !{!"var", !7, i64 0, !7, i64 32, !6, i64 64, !19, i64 68, !19, i64 69, !6, i64 72, !6, i64 76, !6, i64 80, !6, i64 84, !6, i64 88, !10, i64 96, !6, i64 104, !7, i64 112, !6, i64 624, !20, i64 628, !21, i64 896, !10, i64 912, !10, i64 920, !10, i64 928, !6, i64 936, !19, i64 940, !19, i64 941, !19, i64 942}
!19 = !{!"_Bool", !7, i64 0}
!20 = !{!"", !6, i64 0, !7, i64 4, !6, i64 260}
!21 = !{!"ref_block_list", !10, i64 0, !10, i64 8}
!22 = !{!"", !10, i64 0, !10, i64 8}
!23 = !{!17, !6, i64 8496}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = !{!18, !6, i64 64}
!27 = distinct !{!27, !25}
!28 = distinct !{!28, !25}
!29 = !{!18, !6, i64 72}
!30 = distinct !{!30, !25}
!31 = !{!18, !6, i64 80}
!32 = !{!12, !6, i64 36}
!33 = !{!12, !6, i64 40}
!34 = !{!18, !19, i64 68}
!35 = !{i8 0, i8 2}
!36 = !{}
!37 = distinct !{!37, !25}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SROAPass,SimplifyCFGPass