; LLVM IR from ChampSim/ChampSim :: tracer/cvp_converter (cvp2champsim)

; 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.trace = type { i64, i64, i64, i8, i8, i8, i8, [256 x i8], [256 x i8], [256 x [2 x i64]], i32 }
%struct.input_instr = type { i64, i8, i8, [2 x i8], [4 x i8], [2 x i64], [4 x i64] }

@verbose = external dso_local global i8, align 1
@branch_names = external dso_local global [15 x ptr], align 16
@counts = external dso_local global [14 x i64], align 16
@tracefilename = external dso_local global [1000 x i8], align 16
@.str.16 = external hidden unnamed_addr constant [2 x i8], align 1
@stderr = external global ptr, align 8
@stdin = external global ptr, align 8
@.str.20 = external hidden unnamed_addr constant [88 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [9 x i8], align 1
@__PRETTY_FUNCTION__.main = external hidden unnamed_addr constant [23 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [2 x i8], align 1
@stdout = external global ptr, align 8
@_ZZ4mainE1n = external hidden global i64, align 8
@.str.39 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [14 x i8], align 1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_Z9is_branch9InstClass(i32 noundef) #0

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_Z15open_trace_filev() #1

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strcmp(ptr noundef, ptr noundef) #2

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

declare i32 @fflush(ptr noundef) #4

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #6

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z15preprocess_filev() #1

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN5trace4readEP8_IO_FILE(ptr noundef nonnull align 8 dereferenceable(4648), ptr noundef) #1 align 2

declare i32 @pclose(ptr noundef) #4

; Function Attrs: mustprogress uwtable
declare dso_local noundef i64 @_Z9transformy(i64 noundef) #1

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main(i32 noundef %0, ptr noundef %1) #7 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca %struct.trace, align 8
  %7 = alloca [256 x [2 x i64]], align 16
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i64, align 8
  %12 = alloca %struct.trace, align 8
  %13 = alloca i8, align 1
  %14 = alloca %struct.input_instr, align 8
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  store i32 0, ptr %3, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4648, ptr %6) #10
  call void @llvm.lifetime.start.p0(i64 4096, ptr %7) #10
  %26 = getelementptr inbounds [256 x [2 x i64]], ptr %7, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 16 %26, i8 0, i64 4096, i1 false)
  %27 = call ptr @strcpy(ptr noundef @tracefilename, ptr noundef @.str.16) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #10
  store i32 1, ptr %8, align 4, !tbaa !5
  br label %28

28:                                               ; preds = %50, %2
  %29 = load i32, ptr %8, align 4, !tbaa !5
  %30 = load i32, ptr %4, align 4, !tbaa !5
  %31 = icmp slt i32 %29, %30
  br i1 %31, label %33, label %32

32:                                               ; preds = %28
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #10
  br label %53

33:                                               ; preds = %28
  %34 = load ptr, ptr %5, align 8, !tbaa !9
  %35 = load i32, ptr %8, align 4, !tbaa !5
  %36 = sext i32 %35 to i64
  %37 = getelementptr inbounds ptr, ptr %34, i64 %36
  %38 = load ptr, ptr %37, align 8, !tbaa !9
  %39 = call i32 @strcmp(ptr noundef %38, ptr noundef @.str.34) #11
  %40 = icmp ne i32 %39, 0
  br i1 %40, label %42, label %41

41:                                               ; preds = %33
  store i8 1, ptr @verbose, align 1, !tbaa !11
  br label %49

42:                                               ; preds = %33
  %43 = load ptr, ptr %5, align 8, !tbaa !9
  %44 = load i32, ptr %8, align 4, !tbaa !5
  %45 = sext i32 %44 to i64
  %46 = getelementptr inbounds ptr, ptr %43, i64 %45
  %47 = load ptr, ptr %46, align 8, !tbaa !9
  %48 = call ptr @strcpy(ptr noundef @tracefilename, ptr noundef %47) #10
  br label %49

49:                                               ; preds = %42, %41
  br label %50

50:                                               ; preds = %49
  %51 = load i32, ptr %8, align 4, !tbaa !5
  %52 = add nsw i32 %51, 1
  store i32 %52, ptr %8, align 4, !tbaa !5
  br label %28, !llvm.loop !13

53:                                               ; preds = %32
  call void @_Z15preprocess_filev()
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #10
  %54 = call noundef ptr @_Z15open_trace_filev()
  store ptr %54, ptr %9, align 8, !tbaa !9
  %55 = load ptr, ptr %9, align 8, !tbaa !9
  %56 = icmp ne ptr %55, null
  br i1 %56, label %58, label %57

57:                                               ; preds = %53
  store i32 1, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %518

58:                                               ; preds = %53
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #10
  store i64 0, ptr %11, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4648, ptr %12) #10
  %59 = getelementptr inbounds %struct.trace, ptr %12, i32 0, i32 0
  store i64 0, ptr %59, align 8, !tbaa !17
  br label %60

60:                                               ; preds = %470, %58
  %61 = load i64, ptr %11, align 8, !tbaa !15
  %62 = add nsw i64 %61, 1
  store i64 %62, ptr %11, align 8, !tbaa !15
  %63 = load i64, ptr %11, align 8, !tbaa !15
  %64 = srem i64 %63, 1000000
  %65 = icmp eq i64 %64, 0
  br i1 %65, label %66, label %72

66:                                               ; preds = %60
  %67 = load ptr, ptr @stderr, align 8, !tbaa !9
  %68 = load i64, ptr %11, align 8, !tbaa !15
  %69 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %67, ptr noundef @.str.35, i64 noundef %68) #10
  %70 = load ptr, ptr @stderr, align 8, !tbaa !9
  %71 = call i32 @fflush(ptr noundef %70)
  br label %72

72:                                               ; preds = %66, %60
  call void @llvm.lifetime.start.p0(i64 1, ptr %13) #10
  %73 = load ptr, ptr %9, align 8, !tbaa !9
  %74 = call noundef zeroext i1 @_ZN5trace4readEP8_IO_FILE(ptr noundef nonnull align 8 dereferenceable(4648) %6, ptr noundef %73)
  %75 = zext i1 %74 to i8
  store i8 %75, ptr %13, align 1, !tbaa !11
  %76 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 0
  %77 = load i64, ptr %76, align 8, !tbaa !17
  %78 = getelementptr inbounds %struct.trace, ptr %12, i32 0, i32 0
  %79 = load i64, ptr %78, align 8, !tbaa !17
  %80 = icmp eq i64 %77, %79
  br i1 %80, label %81, label %84

81:                                               ; preds = %72
  %82 = load ptr, ptr @stderr, align 8, !tbaa !9
  %83 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %82, ptr noundef @.str.36) #10
  br label %84

84:                                               ; preds = %81, %72
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %12, ptr align 8 %6, i64 4648, i1 false), !tbaa.struct !20
  %85 = load i8, ptr %13, align 1, !tbaa !11, !range !23, !noundef !24
  %86 = trunc i8 %85 to i1
  br i1 %86, label %88, label %87

87:                                               ; preds = %84
  store i32 5, ptr %10, align 4
  br label %468

88:                                               ; preds = %84
  call void @llvm.lifetime.start.p0(i64 64, ptr %14) #10
  %89 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 0
  %90 = load i64, ptr %89, align 8, !tbaa !17
  %91 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 0
  store i64 %90, ptr %91, align 8, !tbaa !25
  %92 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 1
  store i8 0, ptr %92, align 8, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #10
  store i32 2, ptr %15, align 4, !tbaa !28
  %93 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 10
  %94 = load i32, ptr %93, align 8, !tbaa !30
  %95 = call noundef zeroext i1 @_Z9is_branch9InstClass(i32 noundef %94)
  br i1 %95, label %96, label %219

96:                                               ; preds = %88
  %97 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 1
  store i8 1, ptr %97, align 8, !tbaa !27
  %98 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 10
  %99 = load i32, ptr %98, align 8, !tbaa !30
  %100 = icmp eq i32 %99, 3
  br i1 %100, label %101, label %102

101:                                              ; preds = %96
  store i32 9, ptr %15, align 4, !tbaa !28
  br label %148

102:                                              ; preds = %96
  %103 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 2
  %104 = load i64, ptr %103, align 8, !tbaa !31
  %105 = icmp ne i64 %104, 0
  br i1 %105, label %106, label %107

106:                                              ; preds = %102
  br label %109

107:                                              ; preds = %102
  call void @__assert_fail(ptr noundef @.str.37, ptr noundef @.str.20, i32 noundef 433, ptr noundef @__PRETTY_FUNCTION__.main) #12
  unreachable

108:                                              ; No predecessors!
  br label %109

109:                                              ; preds = %108, %106
  %110 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 6
  %111 = load i8, ptr %110, align 1, !tbaa !32
  %112 = zext i8 %111 to i32
  %113 = icmp eq i32 %112, 1
  br i1 %113, label %114, label %127

114:                                              ; preds = %109
  %115 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 8
  %116 = getelementptr inbounds [256 x i8], ptr %115, i64 0, i64 0
  %117 = load i8, ptr %116, align 4, !tbaa !21
  %118 = zext i8 %117 to i32
  %119 = icmp eq i32 %118, 30
  br i1 %119, label %120, label %127

120:                                              ; preds = %114
  %121 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 10
  %122 = load i32, ptr %121, align 8, !tbaa !30
  %123 = icmp eq i32 %122, 5
  br i1 %123, label %124, label %125

124:                                              ; preds = %120
  store i32 7, ptr %15, align 4, !tbaa !28
  br label %126

125:                                              ; preds = %120
  store i32 6, ptr %15, align 4, !tbaa !28
  br label %126

126:                                              ; preds = %125, %124
  br label %134

127:                                              ; preds = %114, %109
  %128 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 10
  %129 = load i32, ptr %128, align 8, !tbaa !30
  %130 = icmp eq i32 %129, 5
  br i1 %130, label %131, label %132

131:                                              ; preds = %127
  store i32 5, ptr %15, align 4, !tbaa !28
  br label %133

132:                                              ; preds = %127
  store i32 4, ptr %15, align 4, !tbaa !28
  br label %133

133:                                              ; preds = %132, %131
  br label %134

134:                                              ; preds = %133, %126
  %135 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 5
  %136 = load i8, ptr %135, align 2, !tbaa !33
  %137 = zext i8 %136 to i32
  %138 = icmp eq i32 %137, 1
  br i1 %138, label %139, label %147

139:                                              ; preds = %134
  %140 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 7
  %141 = getelementptr inbounds [256 x i8], ptr %140, i64 0, i64 0
  %142 = load i8, ptr %141, align 4, !tbaa !21
  %143 = zext i8 %142 to i32
  %144 = icmp eq i32 %143, 30
  br i1 %144, label %145, label %146

145:                                              ; preds = %139
  store i32 3, ptr %15, align 4, !tbaa !28
  br label %146

146:                                              ; preds = %145, %139
  br label %147

147:                                              ; preds = %146, %134
  br label %148

148:                                              ; preds = %147, %101
  %149 = load i32, ptr %15, align 4, !tbaa !28
  %150 = zext i32 %149 to i64
  %151 = getelementptr inbounds [14 x i64], ptr @counts, i64 0, i64 %150
  %152 = load i64, ptr %151, align 8, !tbaa !15
  %153 = add nsw i64 %152, 1
  store i64 %153, ptr %151, align 8, !tbaa !15
  %154 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 3
  %155 = getelementptr inbounds [2 x i8], ptr %154, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 2 %155, i8 0, i64 2, i1 false)
  %156 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 4
  %157 = getelementptr inbounds [4 x i8], ptr %156, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 4 %157, i8 0, i64 4, i1 false)
  %158 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 5
  %159 = getelementptr inbounds [2 x i64], ptr %158, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 8 %159, i8 0, i64 16, i1 false)
  %160 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 6
  %161 = getelementptr inbounds [4 x i64], ptr %160, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 8 %161, i8 0, i64 32, i1 false)
  %162 = load i32, ptr %15, align 4, !tbaa !28
  switch i32 %162, label %215 [
    i32 4, label %163
    i32 9, label %169
    i32 7, label %179
    i32 6, label %191
    i32 5, label %201
    i32 3, label %207
  ]

163:                                              ; preds = %148
  %164 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 3
  %165 = getelementptr inbounds [2 x i8], ptr %164, i64 0, i64 0
  store i8 26, ptr %165, align 2, !tbaa !21
  %166 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 4
  %167 = load i8, ptr %166, align 1, !tbaa !34
  %168 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 2
  store i8 %167, ptr %168, align 1, !tbaa !35
  br label %216

169:                                              ; preds = %148
  %170 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 4
  %171 = load i8, ptr %170, align 1, !tbaa !34
  %172 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 2
  store i8 %171, ptr %172, align 1, !tbaa !35
  %173 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 3
  %174 = getelementptr inbounds [2 x i8], ptr %173, i64 0, i64 0
  store i8 26, ptr %174, align 2, !tbaa !21
  %175 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 4
  %176 = getelementptr inbounds [4 x i8], ptr %175, i64 0, i64 0
  store i8 26, ptr %176, align 4, !tbaa !21
  %177 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 4
  %178 = getelementptr inbounds [4 x i8], ptr %177, i64 0, i64 1
  store i8 25, ptr %178, align 1, !tbaa !21
  br label %216

179:                                              ; preds = %148
  %180 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 2
  store i8 1, ptr %180, align 1, !tbaa !35
  %181 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 3
  %182 = getelementptr inbounds [2 x i8], ptr %181, i64 0, i64 0
  store i8 26, ptr %182, align 2, !tbaa !21
  %183 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 3
  %184 = getelementptr inbounds [2 x i8], ptr %183, i64 0, i64 1
  store i8 6, ptr %184, align 1, !tbaa !21
  %185 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 4
  %186 = getelementptr inbounds [4 x i8], ptr %185, i64 0, i64 0
  store i8 26, ptr %186, align 4, !tbaa !21
  %187 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 4
  %188 = getelementptr inbounds [4 x i8], ptr %187, i64 0, i64 1
  store i8 6, ptr %188, align 1, !tbaa !21
  %189 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 4
  %190 = getelementptr inbounds [4 x i8], ptr %189, i64 0, i64 2
  store i8 56, ptr %190, align 2, !tbaa !21
  br label %216

191:                                              ; preds = %148
  %192 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 2
  store i8 1, ptr %192, align 1, !tbaa !35
  %193 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 3
  %194 = getelementptr inbounds [2 x i8], ptr %193, i64 0, i64 0
  store i8 26, ptr %194, align 2, !tbaa !21
  %195 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 3
  %196 = getelementptr inbounds [2 x i8], ptr %195, i64 0, i64 1
  store i8 6, ptr %196, align 1, !tbaa !21
  %197 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 4
  %198 = getelementptr inbounds [4 x i8], ptr %197, i64 0, i64 0
  store i8 26, ptr %198, align 4, !tbaa !21
  %199 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 4
  %200 = getelementptr inbounds [4 x i8], ptr %199, i64 0, i64 1
  store i8 6, ptr %200, align 1, !tbaa !21
  br label %216

201:                                              ; preds = %148
  %202 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 2
  store i8 1, ptr %202, align 1, !tbaa !35
  %203 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 3
  %204 = getelementptr inbounds [2 x i8], ptr %203, i64 0, i64 0
  store i8 26, ptr %204, align 2, !tbaa !21
  %205 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 4
  %206 = getelementptr inbounds [4 x i8], ptr %205, i64 0, i64 0
  store i8 56, ptr %206, align 4, !tbaa !21
  br label %216

207:                                              ; preds = %148
  %208 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 2
  store i8 1, ptr %208, align 1, !tbaa !35
  %209 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 4
  %210 = getelementptr inbounds [4 x i8], ptr %209, i64 0, i64 0
  store i8 6, ptr %210, align 4, !tbaa !21
  %211 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 3
  %212 = getelementptr inbounds [2 x i8], ptr %211, i64 0, i64 0
  store i8 26, ptr %212, align 2, !tbaa !21
  %213 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 3
  %214 = getelementptr inbounds [2 x i8], ptr %213, i64 0, i64 1
  store i8 6, ptr %214, align 1, !tbaa !21
  br label %216

215:                                              ; preds = %148
  call void @__assert_fail(ptr noundef @.str.38, ptr noundef @.str.20, i32 noundef 519, ptr noundef @__PRETTY_FUNCTION__.main) #12
  unreachable

216:                                              ; preds = %207, %201, %191, %179, %169, %163
  %217 = load ptr, ptr @stdout, align 8, !tbaa !9
  %218 = call i64 @fwrite(ptr noundef %14, i64 noundef 64, i64 noundef 1, ptr noundef %217)
  br label %342

219:                                              ; preds = %88
  %220 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 3
  %221 = getelementptr inbounds [2 x i8], ptr %220, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 2 %221, i8 0, i64 2, i1 false)
  %222 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 4
  %223 = getelementptr inbounds [4 x i8], ptr %222, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 4 %223, i8 0, i64 4, i1 false)
  %224 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 5
  %225 = getelementptr inbounds [2 x i64], ptr %224, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 8 %225, i8 0, i64 16, i1 false)
  %226 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 6
  %227 = getelementptr inbounds [4 x i64], ptr %226, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 8 %227, i8 0, i64 32, i1 false)
  %228 = load i64, ptr getelementptr inbounds ([14 x i64], ptr @counts, i64 0, i64 2), align 16, !tbaa !15
  %229 = add nsw i64 %228, 1
  store i64 %229, ptr getelementptr inbounds ([14 x i64], ptr @counts, i64 0, i64 2), align 16, !tbaa !15
  %230 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 5
  %231 = load i8, ptr %230, align 2, !tbaa !33
  %232 = zext i8 %231 to i64
  %233 = icmp ugt i64 %232, 4
  br i1 %233, label %234, label %236

234:                                              ; preds = %219
  %235 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 5
  store i8 4, ptr %235, align 2, !tbaa !33
  br label %236

236:                                              ; preds = %234, %219
  %237 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 6
  %238 = load i8, ptr %237, align 1, !tbaa !32
  %239 = zext i8 %238 to i32
  %240 = icmp eq i32 %239, 0
  br i1 %240, label %241, label %245

241:                                              ; preds = %236
  %242 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 6
  store i8 1, ptr %242, align 1, !tbaa !32
  %243 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 8
  %244 = getelementptr inbounds [256 x i8], ptr %243, i64 0, i64 0
  store i8 0, ptr %244, align 4, !tbaa !21
  br label %245

245:                                              ; preds = %241, %236
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #10
  store i32 0, ptr %16, align 4, !tbaa !5
  br label %246

246:                                              ; preds = %338, %245
  %247 = load i32, ptr %16, align 4, !tbaa !5
  %248 = icmp slt i32 %247, 1
  br i1 %248, label %250, label %249

249:                                              ; preds = %246
  store i32 8, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #10
  br label %341

250:                                              ; preds = %246
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #10
  %251 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 8
  %252 = load i32, ptr %16, align 4, !tbaa !5
  %253 = sext i32 %252 to i64
  %254 = getelementptr inbounds [256 x i8], ptr %251, i64 0, i64 %253
  %255 = load i8, ptr %254, align 1, !tbaa !21
  %256 = zext i8 %255 to i32
  store i32 %256, ptr %17, align 4, !tbaa !5
  %257 = load i32, ptr %17, align 4, !tbaa !5
  %258 = icmp eq i32 %257, 26
  br i1 %258, label %259, label %260

259:                                              ; preds = %250
  store i32 64, ptr %17, align 4, !tbaa !5
  br label %260

260:                                              ; preds = %259, %250
  %261 = load i32, ptr %17, align 4, !tbaa !5
  %262 = icmp eq i32 %261, 6
  br i1 %262, label %263, label %264

263:                                              ; preds = %260
  store i32 65, ptr %17, align 4, !tbaa !5
  br label %264

264:                                              ; preds = %263, %260
  %265 = load i32, ptr %17, align 4, !tbaa !5
  %266 = icmp eq i32 %265, 25
  br i1 %266, label %267, label %268

267:                                              ; preds = %264
  store i32 66, ptr %17, align 4, !tbaa !5
  br label %268

268:                                              ; preds = %267, %264
  %269 = load i32, ptr %17, align 4, !tbaa !5
  %270 = icmp eq i32 %269, 0
  br i1 %270, label %271, label %272

271:                                              ; preds = %268
  store i32 67, ptr %17, align 4, !tbaa !5
  br label %272

272:                                              ; preds = %271, %268
  %273 = load i32, ptr %17, align 4, !tbaa !5
  %274 = trunc i32 %273 to i8
  %275 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 3
  %276 = load i32, ptr %16, align 4, !tbaa !5
  %277 = sext i32 %276 to i64
  %278 = getelementptr inbounds [2 x i8], ptr %275, i64 0, i64 %277
  store i8 %274, ptr %278, align 1, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #10
  store i32 0, ptr %18, align 4, !tbaa !5
  br label %279

279:                                              ; preds = %315, %272
  %280 = load i32, ptr %18, align 4, !tbaa !5
  %281 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 5
  %282 = load i8, ptr %281, align 2, !tbaa !33
  %283 = zext i8 %282 to i32
  %284 = icmp slt i32 %280, %283
  br i1 %284, label %286, label %285

285:                                              ; preds = %279
  store i32 11, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #10
  br label %318

286:                                              ; preds = %279
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #10
  %287 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 7
  %288 = load i32, ptr %18, align 4, !tbaa !5
  %289 = sext i32 %288 to i64
  %290 = getelementptr inbounds [256 x i8], ptr %287, i64 0, i64 %289
  %291 = load i8, ptr %290, align 1, !tbaa !21
  %292 = zext i8 %291 to i32
  store i32 %292, ptr %19, align 4, !tbaa !5
  %293 = load i32, ptr %19, align 4, !tbaa !5
  %294 = icmp eq i32 %293, 26
  br i1 %294, label %295, label %296

295:                                              ; preds = %286
  store i32 64, ptr %19, align 4, !tbaa !5
  br label %296

296:                                              ; preds = %295, %286
  %297 = load i32, ptr %19, align 4, !tbaa !5
  %298 = icmp eq i32 %297, 6
  br i1 %298, label %299, label %300

299:                                              ; preds = %296
  store i32 65, ptr %19, align 4, !tbaa !5
  br label %300

300:                                              ; preds = %299, %296
  %301 = load i32, ptr %19, align 4, !tbaa !5
  %302 = icmp eq i32 %301, 25
  br i1 %302, label %303, label %304

303:                                              ; preds = %300
  store i32 66, ptr %19, align 4, !tbaa !5
  br label %304

304:                                              ; preds = %303, %300
  %305 = load i32, ptr %19, align 4, !tbaa !5
  %306 = icmp eq i32 %305, 0
  br i1 %306, label %307, label %308

307:                                              ; preds = %304
  store i32 67, ptr %19, align 4, !tbaa !5
  br label %308

308:                                              ; preds = %307, %304
  %309 = load i32, ptr %19, align 4, !tbaa !5
  %310 = trunc i32 %309 to i8
  %311 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 4
  %312 = load i32, ptr %18, align 4, !tbaa !5
  %313 = sext i32 %312 to i64
  %314 = getelementptr inbounds [4 x i8], ptr %311, i64 0, i64 %313
  store i8 %310, ptr %314, align 1, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #10
  br label %315

315:                                              ; preds = %308
  %316 = load i32, ptr %18, align 4, !tbaa !5
  %317 = add nsw i32 %316, 1
  store i32 %317, ptr %18, align 4, !tbaa !5
  br label %279, !llvm.loop !36

318:                                              ; preds = %285
  %319 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 10
  %320 = load i32, ptr %319, align 8, !tbaa !30
  switch i32 %320, label %335 [
    i32 1, label %321
    i32 2, label %327
    i32 0, label %333
    i32 6, label %333
    i32 7, label %333
    i32 4, label %334
    i32 3, label %334
    i32 5, label %334
    i32 8, label %334
  ]

321:                                              ; preds = %318
  %322 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 1
  %323 = load i64, ptr %322, align 8, !tbaa !37
  %324 = call noundef i64 @_Z9transformy(i64 noundef %323)
  %325 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 6
  %326 = getelementptr inbounds [4 x i64], ptr %325, i64 0, i64 0
  store i64 %324, ptr %326, align 8, !tbaa !15
  br label %335

327:                                              ; preds = %318
  %328 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 1
  %329 = load i64, ptr %328, align 8, !tbaa !37
  %330 = call noundef i64 @_Z9transformy(i64 noundef %329)
  %331 = getelementptr inbounds %struct.input_instr, ptr %14, i32 0, i32 5
  %332 = getelementptr inbounds [2 x i64], ptr %331, i64 0, i64 0
  store i64 %330, ptr %332, align 8, !tbaa !15
  br label %335

333:                                              ; preds = %318, %318, %318
  br label %335

334:                                              ; preds = %318, %318, %318, %318
  call void @__assert_fail(ptr noundef @.str.38, ptr noundef @.str.20, i32 noundef 573, ptr noundef @__PRETTY_FUNCTION__.main) #12
  unreachable

335:                                              ; preds = %333, %327, %321, %318
  %336 = load ptr, ptr @stdout, align 8, !tbaa !9
  %337 = call i64 @fwrite(ptr noundef %14, i64 noundef 64, i64 noundef 1, ptr noundef %336)
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #10
  br label %338

338:                                              ; preds = %335
  %339 = load i32, ptr %16, align 4, !tbaa !5
  %340 = add nsw i32 %339, 1
  store i32 %340, ptr %16, align 4, !tbaa !5
  br label %246, !llvm.loop !38

341:                                              ; preds = %249
  br label %342

342:                                              ; preds = %341, %216
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #10
  store i32 0, ptr %20, align 4, !tbaa !5
  br label %343

343:                                              ; preds = %377, %342
  %344 = load i32, ptr %20, align 4, !tbaa !5
  %345 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 6
  %346 = load i8, ptr %345, align 1, !tbaa !32
  %347 = zext i8 %346 to i32
  %348 = icmp slt i32 %344, %347
  br i1 %348, label %350, label %349

349:                                              ; preds = %343
  store i32 15, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #10
  br label %380

350:                                              ; preds = %343
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #10
  %351 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 8
  %352 = load i32, ptr %20, align 4, !tbaa !5
  %353 = sext i32 %352 to i64
  %354 = getelementptr inbounds [256 x i8], ptr %351, i64 0, i64 %353
  %355 = load i8, ptr %354, align 1, !tbaa !21
  %356 = zext i8 %355 to i32
  store i32 %356, ptr %21, align 4, !tbaa !5
  %357 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 9
  %358 = load i32, ptr %21, align 4, !tbaa !5
  %359 = sext i32 %358 to i64
  %360 = getelementptr inbounds [256 x [2 x i64]], ptr %357, i64 0, i64 %359
  %361 = getelementptr inbounds [2 x i64], ptr %360, i64 0, i64 0
  %362 = load i64, ptr %361, align 8, !tbaa !15
  %363 = load i32, ptr %21, align 4, !tbaa !5
  %364 = sext i32 %363 to i64
  %365 = getelementptr inbounds [256 x [2 x i64]], ptr %7, i64 0, i64 %364
  %366 = getelementptr inbounds [2 x i64], ptr %365, i64 0, i64 0
  store i64 %362, ptr %366, align 16, !tbaa !15
  %367 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 9
  %368 = load i32, ptr %21, align 4, !tbaa !5
  %369 = sext i32 %368 to i64
  %370 = getelementptr inbounds [256 x [2 x i64]], ptr %367, i64 0, i64 %369
  %371 = getelementptr inbounds [2 x i64], ptr %370, i64 0, i64 1
  %372 = load i64, ptr %371, align 8, !tbaa !15
  %373 = load i32, ptr %21, align 4, !tbaa !5
  %374 = sext i32 %373 to i64
  %375 = getelementptr inbounds [256 x [2 x i64]], ptr %7, i64 0, i64 %374
  %376 = getelementptr inbounds [2 x i64], ptr %375, i64 0, i64 1
  store i64 %372, ptr %376, align 8, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #10
  br label %377

377:                                              ; preds = %350
  %378 = load i32, ptr %20, align 4, !tbaa !5
  %379 = add nsw i32 %378, 1
  store i32 %379, ptr %20, align 4, !tbaa !5
  br label %343, !llvm.loop !39

380:                                              ; preds = %349
  %381 = load i8, ptr @verbose, align 1, !tbaa !11, !range !23, !noundef !24
  %382 = trunc i8 %381 to i1
  br i1 %382, label %383, label %467

383:                                              ; preds = %380
  %384 = load ptr, ptr @stderr, align 8, !tbaa !9
  %385 = load i64, ptr @_ZZ4mainE1n, align 8, !tbaa !15
  %386 = add nsw i64 %385, 1
  store i64 %386, ptr @_ZZ4mainE1n, align 8, !tbaa !15
  %387 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 0
  %388 = load i64, ptr %387, align 8, !tbaa !17
  %389 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %384, ptr noundef @.str.39, i64 noundef %386, i64 noundef %388) #10
  %390 = load i32, ptr %15, align 4, !tbaa !28
  %391 = icmp eq i32 %390, 2
  br i1 %391, label %392, label %455

392:                                              ; preds = %383
  %393 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 10
  %394 = load i32, ptr %393, align 8, !tbaa !30
  switch i32 %394, label %414 [
    i32 1, label %395
    i32 2, label %400
    i32 0, label %405
    i32 6, label %408
    i32 7, label %411
  ]

395:                                              ; preds = %392
  %396 = load ptr, ptr @stderr, align 8, !tbaa !9
  %397 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 1
  %398 = load i64, ptr %397, align 8, !tbaa !37
  %399 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %396, ptr noundef @.str.40, i64 noundef %398) #10
  br label %414

400:                                              ; preds = %392
  %401 = load ptr, ptr @stderr, align 8, !tbaa !9
  %402 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 1
  %403 = load i64, ptr %402, align 8, !tbaa !37
  %404 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %401, ptr noundef @.str.41, i64 noundef %403) #10
  br label %414

405:                                              ; preds = %392
  %406 = load ptr, ptr @stderr, align 8, !tbaa !9
  %407 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %406, ptr noundef @.str.42) #10
  br label %414

408:                                              ; preds = %392
  %409 = load ptr, ptr @stderr, align 8, !tbaa !9
  %410 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %409, ptr noundef @.str.43) #10
  br label %414

411:                                              ; preds = %392
  %412 = load ptr, ptr @stderr, align 8, !tbaa !9
  %413 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %412, ptr noundef @.str.44) #10
  br label %414

414:                                              ; preds = %411, %408, %405, %400, %395, %392
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #10
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %415

415:                                              ; preds = %431, %414
  %416 = load i32, ptr %22, align 4, !tbaa !5
  %417 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 5
  %418 = load i8, ptr %417, align 2, !tbaa !33
  %419 = zext i8 %418 to i32
  %420 = icmp slt i32 %416, %419
  br i1 %420, label %422, label %421

421:                                              ; preds = %415
  store i32 19, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #10
  br label %434

422:                                              ; preds = %415
  %423 = load ptr, ptr @stderr, align 8, !tbaa !9
  %424 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 7
  %425 = load i32, ptr %22, align 4, !tbaa !5
  %426 = sext i32 %425 to i64
  %427 = getelementptr inbounds [256 x i8], ptr %424, i64 0, i64 %426
  %428 = load i8, ptr %427, align 1, !tbaa !21
  %429 = zext i8 %428 to i32
  %430 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %423, ptr noundef @.str.45, i32 noundef %429) #10
  br label %431

431:                                              ; preds = %422
  %432 = load i32, ptr %22, align 4, !tbaa !5
  %433 = add nsw i32 %432, 1
  store i32 %433, ptr %22, align 4, !tbaa !5
  br label %415, !llvm.loop !40

434:                                              ; preds = %421
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #10
  store i32 0, ptr %23, align 4, !tbaa !5
  br label %435

435:                                              ; preds = %451, %434
  %436 = load i32, ptr %23, align 4, !tbaa !5
  %437 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 6
  %438 = load i8, ptr %437, align 1, !tbaa !32
  %439 = zext i8 %438 to i32
  %440 = icmp slt i32 %436, %439
  br i1 %440, label %442, label %441

441:                                              ; preds = %435
  store i32 22, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #10
  br label %454

442:                                              ; preds = %435
  %443 = load ptr, ptr @stderr, align 8, !tbaa !9
  %444 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 8
  %445 = load i32, ptr %23, align 4, !tbaa !5
  %446 = sext i32 %445 to i64
  %447 = getelementptr inbounds [256 x i8], ptr %444, i64 0, i64 %446
  %448 = load i8, ptr %447, align 1, !tbaa !21
  %449 = zext i8 %448 to i32
  %450 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %443, ptr noundef @.str.46, i32 noundef %449) #10
  br label %451

451:                                              ; preds = %442
  %452 = load i32, ptr %23, align 4, !tbaa !5
  %453 = add nsw i32 %452, 1
  store i32 %453, ptr %23, align 4, !tbaa !5
  br label %435, !llvm.loop !41

454:                                              ; preds = %441
  br label %464

455:                                              ; preds = %383
  %456 = load ptr, ptr @stderr, align 8, !tbaa !9
  %457 = load i32, ptr %15, align 4, !tbaa !28
  %458 = zext i32 %457 to i64
  %459 = getelementptr inbounds [15 x ptr], ptr @branch_names, i64 0, i64 %458
  %460 = load ptr, ptr %459, align 8, !tbaa !9
  %461 = getelementptr inbounds %struct.trace, ptr %6, i32 0, i32 2
  %462 = load i64, ptr %461, align 8, !tbaa !31
  %463 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %456, ptr noundef @.str.47, ptr noundef %460, i64 noundef %462) #10
  br label %464

464:                                              ; preds = %455, %454
  %465 = load ptr, ptr @stderr, align 8, !tbaa !9
  %466 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %465, ptr noundef @.str.31) #10
  br label %467

467:                                              ; preds = %464, %380
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr %14) #10
  store i32 0, ptr %10, align 4
  br label %468

468:                                              ; preds = %467, %87
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #10
  %469 = load i32, ptr %10, align 4
  switch i32 %469, label %520 [
    i32 0, label %470
    i32 5, label %471
  ]

470:                                              ; preds = %468
  br label %60, !llvm.loop !42

471:                                              ; preds = %468
  %472 = load ptr, ptr @stderr, align 8, !tbaa !9
  %473 = load i64, ptr %11, align 8, !tbaa !15
  %474 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %472, ptr noundef @.str.48, i64 noundef %473) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #10
  store i32 14, ptr %24, align 4, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #10
  store i32 2, ptr %25, align 4, !tbaa !5
  br label %475

475:                                              ; preds = %507, %471
  %476 = load i32, ptr %25, align 4, !tbaa !5
  %477 = load i32, ptr %24, align 4, !tbaa !28
  %478 = icmp slt i32 %476, %477
  br i1 %478, label %480, label %479

479:                                              ; preds = %475
  store i32 25, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #10
  br label %510

480:                                              ; preds = %475
  %481 = load i32, ptr %25, align 4, !tbaa !5
  %482 = sext i32 %481 to i64
  %483 = getelementptr inbounds [14 x i64], ptr @counts, i64 0, i64 %482
  %484 = load i64, ptr %483, align 8, !tbaa !15
  %485 = icmp ne i64 %484, 0
  br i1 %485, label %486, label %506

486:                                              ; preds = %480
  %487 = load ptr, ptr @stderr, align 8, !tbaa !9
  %488 = load i32, ptr %25, align 4, !tbaa !5
  %489 = sext i32 %488 to i64
  %490 = getelementptr inbounds [15 x ptr], ptr @branch_names, i64 0, i64 %489
  %491 = load ptr, ptr %490, align 8, !tbaa !9
  %492 = load i32, ptr %25, align 4, !tbaa !5
  %493 = sext i32 %492 to i64
  %494 = getelementptr inbounds [14 x i64], ptr @counts, i64 0, i64 %493
  %495 = load i64, ptr %494, align 8, !tbaa !15
  %496 = load i32, ptr %25, align 4, !tbaa !5
  %497 = sext i32 %496 to i64
  %498 = getelementptr inbounds [14 x i64], ptr @counts, i64 0, i64 %497
  %499 = load i64, ptr %498, align 8, !tbaa !15
  %500 = mul nsw i64 100, %499
  %501 = sitofp i64 %500 to double
  %502 = load i64, ptr %11, align 8, !tbaa !15
  %503 = sitofp i64 %502 to double
  %504 = fdiv double %501, %503
  %505 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %487, ptr noundef @.str.49, ptr noundef %491, i64 noundef %495, double noundef %504) #10
  br label %506

506:                                              ; preds = %486, %480
  br label %507

507:                                              ; preds = %506
  %508 = load i32, ptr %25, align 4, !tbaa !5
  %509 = add nsw i32 %508, 1
  store i32 %509, ptr %25, align 4, !tbaa !5
  br label %475, !llvm.loop !43

510:                                              ; preds = %479
  %511 = load ptr, ptr %9, align 8, !tbaa !9
  %512 = load ptr, ptr @stdin, align 8, !tbaa !9
  %513 = icmp ne ptr %511, %512
  br i1 %513, label %514, label %517

514:                                              ; preds = %510
  %515 = load ptr, ptr %9, align 8, !tbaa !9
  %516 = call i32 @pclose(ptr noundef %515)
  br label %517

517:                                              ; preds = %514, %510
  store i32 0, ptr %3, align 4
  store i32 1, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #10
  call void @llvm.lifetime.end.p0(i64 4648, ptr %12) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #10
  br label %518

518:                                              ; preds = %517, %57
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #10
  call void @llvm.lifetime.end.p0(i64 4096, ptr %7) #10
  call void @llvm.lifetime.end.p0(i64 4648, ptr %6) #10
  %519 = load i32, ptr %3, align 4
  ret i32 %519

520:                                              ; preds = %468
  unreachable
}

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #8

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

; 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) #9

declare i64 @fwrite(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #4

attributes #0 = { mustprogress 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 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 #2 = { 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 #3 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { 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 #7 = { mustprogress norecurse 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 #8 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #9 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #10 = { nounwind }
attributes #11 = { nounwind willreturn memory(read) }
attributes #12 = { noreturn 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++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = !{!16, !16, i64 0}
!16 = !{!"long long", !7, i64 0}
!17 = !{!18, !16, i64 0}
!18 = !{!"_ZTS5trace", !16, i64 0, !16, i64 8, !16, i64 16, !7, i64 24, !7, i64 25, !7, i64 26, !7, i64 27, !7, i64 28, !7, i64 284, !7, i64 544, !19, i64 4640}
!19 = !{!"_ZTS9InstClass", !7, i64 0}
!20 = !{i64 0, i64 8, !15, i64 8, i64 8, !15, i64 16, i64 8, !15, i64 24, i64 1, !21, i64 25, i64 1, !21, i64 26, i64 1, !21, i64 27, i64 1, !21, i64 28, i64 256, !21, i64 284, i64 256, !21, i64 544, i64 4096, !21, i64 4640, i64 4, !22}
!21 = !{!7, !7, i64 0}
!22 = !{!19, !19, i64 0}
!23 = !{i8 0, i8 2}
!24 = !{}
!25 = !{!26, !16, i64 0}
!26 = !{!"_ZTS11input_instr", !16, i64 0, !7, i64 8, !7, i64 9, !7, i64 10, !7, i64 12, !7, i64 16, !7, i64 32}
!27 = !{!26, !7, i64 8}
!28 = !{!29, !29, i64 0}
!29 = !{!"_ZTS6OpType", !7, i64 0}
!30 = !{!18, !19, i64 4640}
!31 = !{!18, !16, i64 16}
!32 = !{!18, !7, i64 27}
!33 = !{!18, !7, i64 26}
!34 = !{!18, !7, i64 25}
!35 = !{!26, !7, i64 9}
!36 = distinct !{!36, !14}
!37 = !{!18, !16, i64 8}
!38 = distinct !{!38, !14}
!39 = distinct !{!39, !14}
!40 = distinct !{!40, !14}
!41 = distinct !{!41, !14}
!42 = distinct !{!42, !14}
!43 = distinct !{!43, !14}


; 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.trace = type { i64, i64, i64, i8, i8, i8, i8, [256 x i8], [256 x i8], [256 x [2 x i64]], i32 }
%struct.input_instr = type { i64, i8, i8, [2 x i8], [4 x i8], [2 x i64], [4 x i64] }

@verbose = external dso_local local_unnamed_addr global i8, align 1
@branch_names = external dso_local local_unnamed_addr global [15 x ptr], align 16
@counts = external dso_local local_unnamed_addr global [14 x i64], align 16
@tracefilename = external dso_local global [1000 x i8], align 16
@.str.16 = external hidden unnamed_addr constant [2 x i8], align 1
@stderr = external local_unnamed_addr global ptr, align 8
@stdin = external local_unnamed_addr global ptr, align 8
@.str.20 = external hidden unnamed_addr constant [88 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [9 x i8], align 1
@__PRETTY_FUNCTION__.main = external hidden unnamed_addr constant [23 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [2 x i8], align 1
@stdout = external local_unnamed_addr global ptr, align 8
@_ZZ4mainE1n = external hidden local_unnamed_addr global i64, align 8
@.str.39 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [14 x i8], align 1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_Z9is_branch9InstClass(i32 noundef) local_unnamed_addr #0

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_Z15open_trace_filev() local_unnamed_addr #1

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i32 @strcmp(ptr nocapture noundef, ptr nocapture noundef) local_unnamed_addr #2

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

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

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr 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) #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z15preprocess_filev() local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN5trace4readEP8_IO_FILE(ptr noundef nonnull align 8 dereferenceable(4648), ptr noundef) local_unnamed_addr #1 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i64 @_Z9transformy(i64 noundef) local_unnamed_addr #1

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef range(i32 0, 2) i32 @main(i32 noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #6 {
  %3 = alloca %struct.trace, align 8
  %4 = alloca %struct.input_instr, align 8
  call void @llvm.lifetime.start.p0(i64 4648, ptr nonnull %3) #9
  %5 = tail call ptr @strcpy(ptr noundef nonnull dereferenceable(1) @tracefilename, ptr noundef nonnull dereferenceable(1) @.str.16) #9
  %6 = icmp sgt i32 %0, 1
  br i1 %6, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %2
  %wide.trip.count = zext nneg i32 %0 to i64
  br label %.lr.ph

._crit_edge:                                      ; preds = %36, %2
  tail call void @_Z15preprocess_filev()
  %7 = tail call noundef ptr @_Z15open_trace_filev()
  %.not = icmp eq ptr %7, null
  br i1 %.not, label %298, label %.preheader110

.preheader110:                                    ; preds = %._crit_edge
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %3, i64 8
  %8 = getelementptr inbounds i8, ptr %4, i64 8
  %9 = getelementptr inbounds i8, ptr %3, i64 4640
  %10 = getelementptr inbounds i8, ptr %4, i64 10
  %11 = getelementptr inbounds i8, ptr %4, i64 12
  %12 = getelementptr inbounds i8, ptr %4, i64 16
  %13 = getelementptr inbounds i8, ptr %4, i64 32
  %14 = getelementptr inbounds i8, ptr %3, i64 26
  %15 = getelementptr inbounds i8, ptr %3, i64 27
  %16 = getelementptr inbounds i8, ptr %3, i64 284
  %17 = getelementptr inbounds i8, ptr %3, i64 28
  %18 = getelementptr inbounds i8, ptr %3, i64 16
  %19 = getelementptr inbounds i8, ptr %4, i64 9
  %20 = getelementptr inbounds i8, ptr %4, i64 13
  %21 = getelementptr inbounds i8, ptr %4, i64 14
  %22 = getelementptr inbounds i8, ptr %3, i64 25
  %23 = getelementptr inbounds i8, ptr %4, i64 12
  %24 = getelementptr inbounds i8, ptr %3, i64 29
  %25 = getelementptr inbounds i8, ptr %4, i64 13
  %26 = getelementptr inbounds i8, ptr %3, i64 30
  %27 = getelementptr inbounds i8, ptr %4, i64 14
  %28 = getelementptr inbounds i8, ptr %3, i64 31
  %29 = getelementptr inbounds i8, ptr %4, i64 15
  br label %37

.lr.ph:                                           ; preds = %.lr.ph.preheader, %36
  %indvars.iv = phi i64 [ 1, %.lr.ph.preheader ], [ %indvars.iv.next, %36 ]
  %30 = getelementptr inbounds ptr, ptr %1, i64 %indvars.iv
  %31 = load ptr, ptr %30, align 8, !tbaa !5
  %32 = tail call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %31, ptr noundef nonnull dereferenceable(1) @.str.34) #10
  %.not99 = icmp eq i32 %32, 0
  br i1 %.not99, label %33, label %34

33:                                               ; preds = %.lr.ph
  store i8 1, ptr @verbose, align 1, !tbaa !9
  br label %36

34:                                               ; preds = %.lr.ph
  %35 = tail call ptr @strcpy(ptr noundef nonnull dereferenceable(1) @tracefilename, ptr noundef nonnull dereferenceable(1) %31) #9
  br label %36

36:                                               ; preds = %33, %34
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !11

37:                                               ; preds = %.preheader110, %182
  %.sroa.0.0 = phi i64 [ %.sroa.0.0.copyload, %182 ], [ 0, %.preheader110 ]
  %.083 = phi i64 [ %38, %182 ], [ 0, %.preheader110 ]
  %38 = add nuw nsw i64 %.083, 1
  %39 = urem i64 %38, 1000000
  %40 = icmp eq i64 %39, 0
  br i1 %40, label %41, label %46

41:                                               ; preds = %37
  %42 = load ptr, ptr @stderr, align 8, !tbaa !5
  %43 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %42, ptr noundef nonnull @.str.35, i64 noundef %38) #11
  %44 = load ptr, ptr @stderr, align 8, !tbaa !5
  %45 = call i32 @fflush(ptr noundef %44)
  br label %46

46:                                               ; preds = %41, %37
  %47 = call noundef zeroext i1 @_ZN5trace4readEP8_IO_FILE(ptr noundef nonnull align 8 dereferenceable(4648) %3, ptr noundef nonnull %7)
  %48 = load i64, ptr %3, align 8, !tbaa !13
  %49 = icmp eq i64 %48, %.sroa.0.0
  br i1 %49, label %50, label %53

50:                                               ; preds = %46
  %51 = load ptr, ptr @stderr, align 8, !tbaa !5
  %52 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %51, ptr noundef nonnull @.str.36) #11
  %.sroa.0.0.copyload.pre = load i64, ptr %3, align 8, !tbaa !13
  br label %53

53:                                               ; preds = %50, %46
  %.sroa.0.0.copyload = phi i64 [ %.sroa.0.0.copyload.pre, %50 ], [ %48, %46 ]
  br i1 %47, label %54, label %183

54:                                               ; preds = %53
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %4) #9
  store i64 %.sroa.0.0.copyload, ptr %4, align 8, !tbaa !15
  store i8 0, ptr %8, align 8, !tbaa !17
  %55 = load i32, ptr %9, align 8, !tbaa !18
  %56 = call noundef zeroext i1 @_Z9is_branch9InstClass(i32 noundef %55)
  br i1 %56, label %57, label %88

57:                                               ; preds = %54
  store i8 1, ptr %8, align 8, !tbaa !17
  %58 = load i32, ptr %9, align 8, !tbaa !18
  %59 = icmp eq i32 %58, 3
  br i1 %59, label %.thread, label %63

.thread:                                          ; preds = %57
  %60 = load i64, ptr getelementptr inbounds (i8, ptr @counts, i64 72), align 8, !tbaa !13
  %61 = add nsw i64 %60, 1
  store i64 %61, ptr getelementptr inbounds (i8, ptr @counts, i64 72), align 8, !tbaa !13
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 2 dereferenceable(54) %10, i8 0, i64 54, i1 false)
  %62 = load i8, ptr %22, align 1, !tbaa !21
  store i8 %62, ptr %19, align 1, !tbaa !22
  store i8 26, ptr %10, align 2, !tbaa !23
  store i8 26, ptr %11, align 4, !tbaa !23
  store i8 25, ptr %20, align 1, !tbaa !23
  br label %125

63:                                               ; preds = %57
  %64 = load i64, ptr %18, align 8, !tbaa !24
  %.not96 = icmp eq i64 %64, 0
  br i1 %.not96, label %65, label %66

65:                                               ; preds = %63
  call void @__assert_fail(ptr noundef nonnull @.str.37, ptr noundef nonnull @.str.20, i32 noundef 433, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #12
  unreachable

66:                                               ; preds = %63
  %67 = load i8, ptr %14, align 2, !tbaa !25
  %68 = icmp eq i8 %67, 1
  %69 = load i8, ptr %17, align 4
  %70 = icmp eq i8 %69, 30
  %or.cond12 = select i1 %68, i1 %70, i1 false
  br i1 %or.cond12, label %.thread104, label %73

.thread104:                                       ; preds = %66
  %71 = load i64, ptr getelementptr inbounds (i8, ptr @counts, i64 24), align 8, !tbaa !13
  %72 = add nsw i64 %71, 1
  store i64 %72, ptr getelementptr inbounds (i8, ptr @counts, i64 24), align 8, !tbaa !13
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(52) %23, i8 0, i64 52, i1 false)
  store <4 x i8> <i8 1, i8 26, i8 6, i8 6>, ptr %19, align 1, !tbaa !23
  br label %125

73:                                               ; preds = %66
  %74 = load i8, ptr %15, align 1, !tbaa !26
  %75 = icmp eq i8 %74, 1
  %76 = load i8, ptr %16, align 4
  %77 = icmp eq i8 %76, 30
  %or.cond = select i1 %75, i1 %77, i1 false
  %78 = icmp eq i32 %58, 5
  %. = select i1 %78, i32 7, i32 6
  %.100 = select i1 %78, i32 5, i32 4
  %.085 = select i1 %or.cond, i32 %., i32 %.100
  %79 = zext nneg i32 %.085 to i64
  %80 = getelementptr inbounds [14 x i64], ptr @counts, i64 0, i64 %79
  %81 = load i64, ptr %80, align 8, !tbaa !13
  %82 = add nsw i64 %81, 1
  store i64 %82, ptr %80, align 8, !tbaa !13
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 2 dereferenceable(54) %10, i8 0, i64 54, i1 false)
  switch i32 %.085, label %default.unreachable148 [
    i32 4, label %83
    i32 5, label %87
    i32 7, label %85
    i32 6, label %86
  ]

83:                                               ; preds = %73
  store i8 26, ptr %10, align 2, !tbaa !23
  %84 = load i8, ptr %22, align 1, !tbaa !21
  store i8 %84, ptr %19, align 1, !tbaa !22
  br label %125

85:                                               ; preds = %73
  store <4 x i8> <i8 1, i8 26, i8 6, i8 26>, ptr %19, align 1, !tbaa !23
  store i8 6, ptr %20, align 1, !tbaa !23
  store i8 56, ptr %21, align 2, !tbaa !23
  br label %125

86:                                               ; preds = %73
  store <4 x i8> <i8 1, i8 26, i8 6, i8 26>, ptr %19, align 1, !tbaa !23
  store i8 6, ptr %20, align 1, !tbaa !23
  br label %125

87:                                               ; preds = %73
  store i8 1, ptr %19, align 1, !tbaa !22
  store i8 26, ptr %10, align 2, !tbaa !23
  store i8 56, ptr %11, align 4, !tbaa !23
  br label %125

default.unreachable148:                           ; preds = %73
  unreachable

88:                                               ; preds = %54
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 2 dereferenceable(54) %10, i8 0, i64 54, i1 false)
  %89 = load i64, ptr getelementptr inbounds (i8, ptr @counts, i64 16), align 16, !tbaa !13
  %90 = add nsw i64 %89, 1
  store i64 %90, ptr getelementptr inbounds (i8, ptr @counts, i64 16), align 16, !tbaa !13
  %91 = load i8, ptr %14, align 2, !tbaa !25
  %92 = icmp ugt i8 %91, 4
  br i1 %92, label %93, label %94

93:                                               ; preds = %88
  store i8 4, ptr %14, align 2, !tbaa !25
  br label %94

94:                                               ; preds = %93, %88
  %95 = phi i8 [ 4, %93 ], [ %91, %88 ]
  %96 = load i8, ptr %15, align 1, !tbaa !26
  %97 = icmp eq i8 %96, 0
  br i1 %97, label %.thread156.thread162, label %.critedge

.thread156.thread162:                             ; preds = %94
  store i8 1, ptr %15, align 1, !tbaa !26
  store i8 0, ptr %16, align 4, !tbaa !23
  br label %98

.critedge:                                        ; preds = %94
  %.pre = load i8, ptr %16, align 4, !tbaa !23
  %.pre.fr = freeze i8 %.pre
  switch i8 %.pre.fr, label %.thread159.fold.split173 [
    i8 26, label %.thread159
    i8 6, label %.thread159.fold.split
    i8 25, label %.thread159.fold.split172
    i8 0, label %98
  ]

98:                                               ; preds = %.critedge, %.thread156.thread162
  br label %.thread159

.thread159.fold.split:                            ; preds = %.critedge
  br label %.thread159

.thread159.fold.split172:                         ; preds = %.critedge
  br label %.thread159

.thread159.fold.split173:                         ; preds = %.critedge
  br label %.thread159

.thread159:                                       ; preds = %.critedge, %.thread159.fold.split173, %.thread159.fold.split172, %.thread159.fold.split, %98
  %99 = phi i8 [ 67, %98 ], [ 64, %.critedge ], [ 65, %.thread159.fold.split ], [ 66, %.thread159.fold.split172 ], [ %.pre.fr, %.thread159.fold.split173 ]
  store i8 %99, ptr %10, align 2, !tbaa !23
  %.not125 = icmp eq i8 %95, 0
  br i1 %.not125, label %._crit_edge118, label %.lr.ph117

._crit_edge118:                                   ; preds = %.lr.ph117, %.lr.ph117.1, %.lr.ph117.2, %.lr.ph117.3, %.thread159
  %100 = load i32, ptr %9, align 8, !tbaa !18
  switch i32 %100, label %125 [
    i32 1, label %.sink.split
    i32 2, label %121
    i32 8, label %122
    i32 5, label %122
    i32 3, label %122
    i32 4, label %122
  ]

.lr.ph117:                                        ; preds = %.thread159
  %101 = load i8, ptr %17, align 4, !tbaa !23
  %102 = icmp eq i8 %101, 26
  %narrow92 = select i1 %102, i8 64, i8 %101
  %103 = icmp eq i8 %narrow92, 6
  %narrow93 = select i1 %103, i8 65, i8 %narrow92
  %104 = icmp eq i8 %narrow93, 25
  %narrow94 = select i1 %104, i8 66, i8 %narrow93
  %105 = icmp eq i8 %narrow94, 0
  %narrow95 = select i1 %105, i8 67, i8 %narrow94
  store i8 %narrow95, ptr %11, align 4, !tbaa !23
  %exitcond136.not = icmp eq i8 %95, 1
  br i1 %exitcond136.not, label %._crit_edge118, label %.lr.ph117.1, !llvm.loop !27

.lr.ph117.1:                                      ; preds = %.lr.ph117
  %106 = load i8, ptr %24, align 1, !tbaa !23
  %107 = icmp eq i8 %106, 26
  %narrow92.1 = select i1 %107, i8 64, i8 %106
  %108 = icmp eq i8 %narrow92.1, 6
  %narrow93.1 = select i1 %108, i8 65, i8 %narrow92.1
  %109 = icmp eq i8 %narrow93.1, 25
  %narrow94.1 = select i1 %109, i8 66, i8 %narrow93.1
  %110 = icmp eq i8 %narrow94.1, 0
  %narrow95.1 = select i1 %110, i8 67, i8 %narrow94.1
  store i8 %narrow95.1, ptr %25, align 1, !tbaa !23
  %exitcond136.not.1 = icmp eq i8 %95, 2
  br i1 %exitcond136.not.1, label %._crit_edge118, label %.lr.ph117.2, !llvm.loop !27

.lr.ph117.2:                                      ; preds = %.lr.ph117.1
  %111 = load i8, ptr %26, align 2, !tbaa !23
  %112 = icmp eq i8 %111, 26
  %narrow92.2 = select i1 %112, i8 64, i8 %111
  %113 = icmp eq i8 %narrow92.2, 6
  %narrow93.2 = select i1 %113, i8 65, i8 %narrow92.2
  %114 = icmp eq i8 %narrow93.2, 25
  %narrow94.2 = select i1 %114, i8 66, i8 %narrow93.2
  %115 = icmp eq i8 %narrow94.2, 0
  %narrow95.2 = select i1 %115, i8 67, i8 %narrow94.2
  store i8 %narrow95.2, ptr %27, align 2, !tbaa !23
  %exitcond136.not.2 = icmp eq i8 %95, 3
  br i1 %exitcond136.not.2, label %._crit_edge118, label %.lr.ph117.3, !llvm.loop !27

.lr.ph117.3:                                      ; preds = %.lr.ph117.2
  %116 = load i8, ptr %28, align 1, !tbaa !23
  %117 = icmp eq i8 %116, 26
  %narrow92.3 = select i1 %117, i8 64, i8 %116
  %118 = icmp eq i8 %narrow92.3, 6
  %narrow93.3 = select i1 %118, i8 65, i8 %narrow92.3
  %119 = icmp eq i8 %narrow93.3, 25
  %narrow94.3 = select i1 %119, i8 66, i8 %narrow93.3
  %120 = icmp eq i8 %narrow94.3, 0
  %narrow95.3 = select i1 %120, i8 67, i8 %narrow94.3
  store i8 %narrow95.3, ptr %29, align 1, !tbaa !23
  br label %._crit_edge118

121:                                              ; preds = %._crit_edge118
  br label %.sink.split

122:                                              ; preds = %._crit_edge118, %._crit_edge118, %._crit_edge118, %._crit_edge118
  call void @__assert_fail(ptr noundef nonnull @.str.38, ptr noundef nonnull @.str.20, i32 noundef 573, ptr noundef nonnull @__PRETTY_FUNCTION__.main) #12
  unreachable

.sink.split:                                      ; preds = %._crit_edge118, %121
  %.sink167 = phi ptr [ %12, %121 ], [ %13, %._crit_edge118 ]
  %123 = load i64, ptr %.sroa.5.0..sroa_idx, align 8, !tbaa !28
  %124 = call noundef i64 @_Z9transformy(i64 noundef %123)
  store i64 %124, ptr %.sink167, align 8, !tbaa !13
  br label %125

125:                                              ; preds = %._crit_edge118, %.sink.split, %83, %.thread, %85, %86, %87, %.thread104
  %.2 = phi i64 [ 3, %.thread104 ], [ 5, %87 ], [ 6, %86 ], [ 7, %85 ], [ 9, %.thread ], [ 4, %83 ], [ 2, %.sink.split ], [ 2, %._crit_edge118 ]
  %126 = load ptr, ptr @stdout, align 8, !tbaa !5
  %127 = call i64 @fwrite(ptr noundef nonnull %4, i64 noundef 64, i64 noundef 1, ptr noundef %126)
  %128 = load i8, ptr @verbose, align 1, !tbaa !9, !range !29, !noundef !30
  %129 = trunc nuw i8 %128 to i1
  br i1 %129, label %130, label %182

130:                                              ; preds = %125
  %131 = load ptr, ptr @stderr, align 8, !tbaa !5
  %132 = load i64, ptr @_ZZ4mainE1n, align 8, !tbaa !13
  %133 = add nsw i64 %132, 1
  store i64 %133, ptr @_ZZ4mainE1n, align 8, !tbaa !13
  %134 = load i64, ptr %3, align 8, !tbaa !31
  %135 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %131, ptr noundef nonnull @.str.39, i64 noundef %133, i64 noundef %134) #11
  br i1 %56, label %174, label %136

136:                                              ; preds = %130
  %137 = load i32, ptr %9, align 8, !tbaa !18
  switch i32 %137, label %155 [
    i32 1, label %138
    i32 2, label %142
    i32 0, label %146
    i32 6, label %149
    i32 7, label %152
  ]

138:                                              ; preds = %136
  %139 = load ptr, ptr @stderr, align 8, !tbaa !5
  %140 = load i64, ptr %.sroa.5.0..sroa_idx, align 8, !tbaa !28
  %141 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %139, ptr noundef nonnull @.str.40, i64 noundef %140) #11
  br label %155

142:                                              ; preds = %136
  %143 = load ptr, ptr @stderr, align 8, !tbaa !5
  %144 = load i64, ptr %.sroa.5.0..sroa_idx, align 8, !tbaa !28
  %145 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %143, ptr noundef nonnull @.str.41, i64 noundef %144) #11
  br label %155

146:                                              ; preds = %136
  %147 = load ptr, ptr @stderr, align 8, !tbaa !5
  %148 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %147, ptr noundef nonnull @.str.42) #11
  br label %155

149:                                              ; preds = %136
  %150 = load ptr, ptr @stderr, align 8, !tbaa !5
  %151 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %150, ptr noundef nonnull @.str.43) #11
  br label %155

152:                                              ; preds = %136
  %153 = load ptr, ptr @stderr, align 8, !tbaa !5
  %154 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %153, ptr noundef nonnull @.str.44) #11
  br label %155

155:                                              ; preds = %152, %149, %146, %142, %138, %136
  %156 = load i8, ptr %14, align 2, !tbaa !25
  %.not126 = icmp eq i8 %156, 0
  br i1 %.not126, label %.preheader, label %.lr.ph121

.preheader:                                       ; preds = %.lr.ph121, %155
  %157 = load i8, ptr %15, align 1, !tbaa !26
  %.not127 = icmp eq i8 %157, 0
  br i1 %.not127, label %.loopexit, label %.lr.ph123

.lr.ph121:                                        ; preds = %155, %.lr.ph121
  %indvars.iv137 = phi i64 [ %indvars.iv.next138, %.lr.ph121 ], [ 0, %155 ]
  %158 = load ptr, ptr @stderr, align 8, !tbaa !5
  %159 = getelementptr inbounds [256 x i8], ptr %17, i64 0, i64 %indvars.iv137
  %160 = load i8, ptr %159, align 1, !tbaa !23
  %161 = zext i8 %160 to i32
  %162 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %158, ptr noundef nonnull @.str.45, i32 noundef %161) #11
  %indvars.iv.next138 = add nuw nsw i64 %indvars.iv137, 1
  %163 = load i8, ptr %14, align 2, !tbaa !25
  %164 = zext i8 %163 to i64
  %165 = icmp ult i64 %indvars.iv.next138, %164
  br i1 %165, label %.lr.ph121, label %.preheader, !llvm.loop !32

.lr.ph123:                                        ; preds = %.preheader, %.lr.ph123
  %indvars.iv140 = phi i64 [ %indvars.iv.next141, %.lr.ph123 ], [ 0, %.preheader ]
  %166 = load ptr, ptr @stderr, align 8, !tbaa !5
  %167 = getelementptr inbounds [256 x i8], ptr %16, i64 0, i64 %indvars.iv140
  %168 = load i8, ptr %167, align 1, !tbaa !23
  %169 = zext i8 %168 to i32
  %170 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %166, ptr noundef nonnull @.str.46, i32 noundef %169) #11
  %indvars.iv.next141 = add nuw nsw i64 %indvars.iv140, 1
  %171 = load i8, ptr %15, align 1, !tbaa !26
  %172 = zext i8 %171 to i64
  %173 = icmp ult i64 %indvars.iv.next141, %172
  br i1 %173, label %.lr.ph123, label %.loopexit, !llvm.loop !33

174:                                              ; preds = %130
  %175 = load ptr, ptr @stderr, align 8, !tbaa !5
  %176 = getelementptr inbounds [15 x ptr], ptr @branch_names, i64 0, i64 %.2
  %177 = load ptr, ptr %176, align 8, !tbaa !5
  %178 = load i64, ptr %18, align 8, !tbaa !24
  %179 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %175, ptr noundef nonnull @.str.47, ptr noundef %177, i64 noundef %178) #11
  br label %.loopexit

.loopexit:                                        ; preds = %.lr.ph123, %.preheader, %174
  %180 = load ptr, ptr @stderr, align 8, !tbaa !5
  %181 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %180, ptr noundef nonnull @.str.31) #11
  br label %182

182:                                              ; preds = %125, %.loopexit
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %4) #9
  br label %37

183:                                              ; preds = %53
  %184 = load ptr, ptr @stderr, align 8, !tbaa !5
  %185 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %184, ptr noundef nonnull @.str.48, i64 noundef %38) #11
  %186 = uitofp nneg i64 %38 to double
  %187 = load i64, ptr getelementptr inbounds (i8, ptr @counts, i64 16), align 16, !tbaa !13
  %.not98 = icmp eq i64 %187, 0
  br i1 %.not98, label %195, label %188

188:                                              ; preds = %183
  %189 = load ptr, ptr @stderr, align 8, !tbaa !5
  %190 = load ptr, ptr getelementptr inbounds (i8, ptr @branch_names, i64 16), align 16, !tbaa !5
  %191 = mul nsw i64 %187, 100
  %192 = sitofp i64 %191 to double
  %193 = fdiv double %192, %186
  %194 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %189, ptr noundef nonnull @.str.49, ptr noundef %190, i64 noundef %187, double noundef %193) #11
  br label %195

195:                                              ; preds = %183, %188
  %196 = load i64, ptr getelementptr inbounds (i8, ptr @counts, i64 24), align 8, !tbaa !13
  %.not98.1 = icmp eq i64 %196, 0
  br i1 %.not98.1, label %204, label %197

197:                                              ; preds = %195
  %198 = load ptr, ptr @stderr, align 8, !tbaa !5
  %199 = load ptr, ptr getelementptr inbounds (i8, ptr @branch_names, i64 24), align 8, !tbaa !5
  %200 = mul nsw i64 %196, 100
  %201 = sitofp i64 %200 to double
  %202 = fdiv double %201, %186
  %203 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %198, ptr noundef nonnull @.str.49, ptr noundef %199, i64 noundef %196, double noundef %202) #11
  br label %204

204:                                              ; preds = %197, %195
  %205 = load i64, ptr getelementptr inbounds (i8, ptr @counts, i64 32), align 16, !tbaa !13
  %.not98.2 = icmp eq i64 %205, 0
  br i1 %.not98.2, label %213, label %206

206:                                              ; preds = %204
  %207 = load ptr, ptr @stderr, align 8, !tbaa !5
  %208 = load ptr, ptr getelementptr inbounds (i8, ptr @branch_names, i64 32), align 16, !tbaa !5
  %209 = mul nsw i64 %205, 100
  %210 = sitofp i64 %209 to double
  %211 = fdiv double %210, %186
  %212 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %207, ptr noundef nonnull @.str.49, ptr noundef %208, i64 noundef %205, double noundef %211) #11
  br label %213

213:                                              ; preds = %206, %204
  %214 = load i64, ptr getelementptr inbounds (i8, ptr @counts, i64 40), align 8, !tbaa !13
  %.not98.3 = icmp eq i64 %214, 0
  br i1 %.not98.3, label %222, label %215

215:                                              ; preds = %213
  %216 = load ptr, ptr @stderr, align 8, !tbaa !5
  %217 = load ptr, ptr getelementptr inbounds (i8, ptr @branch_names, i64 40), align 8, !tbaa !5
  %218 = mul nsw i64 %214, 100
  %219 = sitofp i64 %218 to double
  %220 = fdiv double %219, %186
  %221 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %216, ptr noundef nonnull @.str.49, ptr noundef %217, i64 noundef %214, double noundef %220) #11
  br label %222

222:                                              ; preds = %215, %213
  %223 = load i64, ptr getelementptr inbounds (i8, ptr @counts, i64 48), align 16, !tbaa !13
  %.not98.4 = icmp eq i64 %223, 0
  br i1 %.not98.4, label %231, label %224

224:                                              ; preds = %222
  %225 = load ptr, ptr @stderr, align 8, !tbaa !5
  %226 = load ptr, ptr getelementptr inbounds (i8, ptr @branch_names, i64 48), align 16, !tbaa !5
  %227 = mul nsw i64 %223, 100
  %228 = sitofp i64 %227 to double
  %229 = fdiv double %228, %186
  %230 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %225, ptr noundef nonnull @.str.49, ptr noundef %226, i64 noundef %223, double noundef %229) #11
  br label %231

231:                                              ; preds = %224, %222
  %232 = load i64, ptr getelementptr inbounds (i8, ptr @counts, i64 56), align 8, !tbaa !13
  %.not98.5 = icmp eq i64 %232, 0
  br i1 %.not98.5, label %240, label %233

233:                                              ; preds = %231
  %234 = load ptr, ptr @stderr, align 8, !tbaa !5
  %235 = load ptr, ptr getelementptr inbounds (i8, ptr @branch_names, i64 56), align 8, !tbaa !5
  %236 = mul nsw i64 %232, 100
  %237 = sitofp i64 %236 to double
  %238 = fdiv double %237, %186
  %239 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %234, ptr noundef nonnull @.str.49, ptr noundef %235, i64 noundef %232, double noundef %238) #11
  br label %240

240:                                              ; preds = %233, %231
  %241 = load i64, ptr getelementptr inbounds (i8, ptr @counts, i64 64), align 16, !tbaa !13
  %.not98.6 = icmp eq i64 %241, 0
  br i1 %.not98.6, label %249, label %242

242:                                              ; preds = %240
  %243 = load ptr, ptr @stderr, align 8, !tbaa !5
  %244 = load ptr, ptr getelementptr inbounds (i8, ptr @branch_names, i64 64), align 16, !tbaa !5
  %245 = mul nsw i64 %241, 100
  %246 = sitofp i64 %245 to double
  %247 = fdiv double %246, %186
  %248 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %243, ptr noundef nonnull @.str.49, ptr noundef %244, i64 noundef %241, double noundef %247) #11
  br label %249

249:                                              ; preds = %242, %240
  %250 = load i64, ptr getelementptr inbounds (i8, ptr @counts, i64 72), align 8, !tbaa !13
  %.not98.7 = icmp eq i64 %250, 0
  br i1 %.not98.7, label %258, label %251

251:                                              ; preds = %249
  %252 = load ptr, ptr @stderr, align 8, !tbaa !5
  %253 = load ptr, ptr getelementptr inbounds (i8, ptr @branch_names, i64 72), align 8, !tbaa !5
  %254 = mul nsw i64 %250, 100
  %255 = sitofp i64 %254 to double
  %256 = fdiv double %255, %186
  %257 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %252, ptr noundef nonnull @.str.49, ptr noundef %253, i64 noundef %250, double noundef %256) #11
  br label %258

258:                                              ; preds = %251, %249
  %259 = load i64, ptr getelementptr inbounds (i8, ptr @counts, i64 80), align 16, !tbaa !13
  %.not98.8 = icmp eq i64 %259, 0
  br i1 %.not98.8, label %267, label %260

260:                                              ; preds = %258
  %261 = load ptr, ptr @stderr, align 8, !tbaa !5
  %262 = load ptr, ptr getelementptr inbounds (i8, ptr @branch_names, i64 80), align 16, !tbaa !5
  %263 = mul nsw i64 %259, 100
  %264 = sitofp i64 %263 to double
  %265 = fdiv double %264, %186
  %266 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %261, ptr noundef nonnull @.str.49, ptr noundef %262, i64 noundef %259, double noundef %265) #11
  br label %267

267:                                              ; preds = %260, %258
  %268 = load i64, ptr getelementptr inbounds (i8, ptr @counts, i64 88), align 8, !tbaa !13
  %.not98.9 = icmp eq i64 %268, 0
  br i1 %.not98.9, label %276, label %269

269:                                              ; preds = %267
  %270 = load ptr, ptr @stderr, align 8, !tbaa !5
  %271 = load ptr, ptr getelementptr inbounds (i8, ptr @branch_names, i64 88), align 8, !tbaa !5
  %272 = mul nsw i64 %268, 100
  %273 = sitofp i64 %272 to double
  %274 = fdiv double %273, %186
  %275 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %270, ptr noundef nonnull @.str.49, ptr noundef %271, i64 noundef %268, double noundef %274) #11
  br label %276

276:                                              ; preds = %269, %267
  %277 = load i64, ptr getelementptr inbounds (i8, ptr @counts, i64 96), align 16, !tbaa !13
  %.not98.10 = icmp eq i64 %277, 0
  br i1 %.not98.10, label %285, label %278

278:                                              ; preds = %276
  %279 = load ptr, ptr @stderr, align 8, !tbaa !5
  %280 = load ptr, ptr getelementptr inbounds (i8, ptr @branch_names, i64 96), align 16, !tbaa !5
  %281 = mul nsw i64 %277, 100
  %282 = sitofp i64 %281 to double
  %283 = fdiv double %282, %186
  %284 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %279, ptr noundef nonnull @.str.49, ptr noundef %280, i64 noundef %277, double noundef %283) #11
  br label %285

285:                                              ; preds = %278, %276
  %286 = load i64, ptr getelementptr inbounds (i8, ptr @counts, i64 104), align 8, !tbaa !13
  %.not98.11 = icmp eq i64 %286, 0
  br i1 %.not98.11, label %294, label %287

287:                                              ; preds = %285
  %288 = load ptr, ptr @stderr, align 8, !tbaa !5
  %289 = load ptr, ptr getelementptr inbounds (i8, ptr @branch_names, i64 104), align 8, !tbaa !5
  %290 = mul nsw i64 %286, 100
  %291 = sitofp i64 %290 to double
  %292 = fdiv double %291, %186
  %293 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %288, ptr noundef nonnull @.str.49, ptr noundef %289, i64 noundef %286, double noundef %292) #11
  br label %294

294:                                              ; preds = %287, %285
  %295 = load ptr, ptr @stdin, align 8, !tbaa !5
  %.not97 = icmp eq ptr %7, %295
  br i1 %.not97, label %298, label %296

296:                                              ; preds = %294
  %297 = call i32 @pclose(ptr noundef nonnull %7)
  br label %298

298:                                              ; preds = %294, %296, %._crit_edge
  %.076 = phi i32 [ 1, %._crit_edge ], [ 0, %296 ], [ 0, %294 ]
  call void @llvm.lifetime.end.p0(i64 4648, ptr nonnull %3) #9
  ret i32 %.076
}

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #7

; 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 #8

; Function Attrs: nofree nounwind
declare noundef i64 @fwrite(ptr nocapture noundef, i64 noundef, i64 noundef, ptr nocapture noundef) local_unnamed_addr #3

attributes #0 = { mustprogress 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 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 #2 = { 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 #3 = { 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 #4 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { 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 #6 = { mustprogress norecurse 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 #7 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #8 = { 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 #9 = { nounwind }
attributes #10 = { nounwind willreturn memory(read) }
attributes #11 = { cold nounwind }
attributes #12 = { noreturn 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 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!14, !14, i64 0}
!14 = !{!"long long", !7, i64 0}
!15 = !{!16, !14, i64 0}
!16 = !{!"_ZTS11input_instr", !14, i64 0, !7, i64 8, !7, i64 9, !7, i64 10, !7, i64 12, !7, i64 16, !7, i64 32}
!17 = !{!16, !7, i64 8}
!18 = !{!19, !20, i64 4640}
!19 = !{!"_ZTS5trace", !14, i64 0, !14, i64 8, !14, i64 16, !7, i64 24, !7, i64 25, !7, i64 26, !7, i64 27, !7, i64 28, !7, i64 284, !7, i64 544, !20, i64 4640}
!20 = !{!"_ZTS9InstClass", !7, i64 0}
!21 = !{!19, !7, i64 25}
!22 = !{!16, !7, i64 9}
!23 = !{!7, !7, i64 0}
!24 = !{!19, !14, i64 16}
!25 = !{!19, !7, i64 26}
!26 = !{!19, !7, i64 27}
!27 = distinct !{!27, !12}
!28 = !{!19, !14, i64 8}
!29 = !{i8 0, i8 2}
!30 = !{}
!31 = !{!19, !14, i64 0}
!32 = distinct !{!32, !12}
!33 = distinct !{!33, !12}


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