; LLVM IR from HandmadeMath/HandmadeMath :: test/hmm_test.ll (Z23_hmt_test_Addition_Mat3P21hmt_testresult_struct)

; 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"

%union.HMM_Mat3 = type { [3 x [3 x float]] }
%struct.hmt_testresult_struct = type { i32, i32 }

@.str.15 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [34 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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @_ZL6HMM_M3v(ptr dead_on_unwind noalias writable sret(%union.HMM_Mat3) align 4) #3

; Function Attrs: mustprogress uwtable
define dso_local void @_Z23_hmt_test_Addition_Mat3P21hmt_testresult_struct(ptr noundef %0) #4 {
  %2 = alloca ptr, align 8
  %3 = alloca %union.HMM_Mat3, align 4
  %4 = alloca %union.HMM_Mat3, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca %union.HMM_Mat3, align 4
  %12 = alloca %union.HMM_Mat3, align 8
  %13 = alloca %union.HMM_Mat3, align 8
  %14 = alloca float, align 4
  %15 = alloca float, align 4
  %16 = alloca float, align 4
  %17 = alloca float, align 4
  %18 = alloca float, align 4
  %19 = alloca float, align 4
  %20 = alloca float, align 4
  %21 = alloca float, align 4
  %22 = alloca float, align 4
  %23 = alloca float, align 4
  %24 = alloca float, align 4
  %25 = alloca float, align 4
  %26 = alloca float, align 4
  %27 = alloca float, align 4
  %28 = alloca float, align 4
  %29 = alloca float, align 4
  %30 = alloca float, align 4
  %31 = alloca float, align 4
  %32 = alloca %union.HMM_Mat3, align 4
  %33 = alloca %union.HMM_Mat3, align 8
  %34 = alloca %union.HMM_Mat3, align 8
  %35 = alloca float, align 4
  %36 = alloca float, align 4
  %37 = alloca float, align 4
  %38 = alloca float, align 4
  %39 = alloca float, align 4
  %40 = alloca float, align 4
  %41 = alloca float, align 4
  %42 = alloca float, align 4
  %43 = alloca float, align 4
  %44 = alloca float, align 4
  %45 = alloca float, align 4
  %46 = alloca float, align 4
  %47 = alloca float, align 4
  %48 = alloca float, align 4
  %49 = alloca float, align 4
  %50 = alloca float, align 4
  %51 = alloca float, align 4
  %52 = alloca float, align 4
  %53 = alloca %union.HMM_Mat3, align 4
  %54 = alloca %union.HMM_Mat3, align 8
  %55 = alloca %union.HMM_Mat3, align 8
  %56 = alloca float, align 4
  %57 = alloca float, align 4
  %58 = alloca float, align 4
  %59 = alloca float, align 4
  %60 = alloca float, align 4
  %61 = alloca float, align 4
  %62 = alloca float, align 4
  %63 = alloca float, align 4
  %64 = alloca float, align 4
  %65 = alloca float, align 4
  %66 = alloca float, align 4
  %67 = alloca float, align 4
  %68 = alloca float, align 4
  %69 = alloca float, align 4
  %70 = alloca float, align 4
  %71 = alloca float, align 4
  %72 = alloca float, align 4
  %73 = alloca float, align 4
  %74 = alloca %union.HMM_Mat3, align 8
  %75 = alloca float, align 4
  %76 = alloca float, align 4
  %77 = alloca float, align 4
  %78 = alloca float, align 4
  %79 = alloca float, align 4
  %80 = alloca float, align 4
  %81 = alloca float, align 4
  %82 = alloca float, align 4
  %83 = alloca float, align 4
  %84 = alloca float, align 4
  %85 = alloca float, align 4
  %86 = alloca float, align 4
  %87 = alloca float, align 4
  %88 = alloca float, align 4
  %89 = alloca float, align 4
  %90 = alloca float, align 4
  %91 = alloca float, align 4
  %92 = alloca float, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 36, ptr %3) #5
  call void @_ZL6HMM_M3v(ptr dead_on_unwind writable sret(%union.HMM_Mat3) align 4 %3)
  call void @llvm.lifetime.start.p0(i64 36, ptr %4) #5
  call void @_ZL6HMM_M3v(ptr dead_on_unwind writable sret(%union.HMM_Mat3) align 4 %4)
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #5
  store i32 1, ptr %5, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #5
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %93

93:                                               ; preds = %116, %1
  %94 = load i32, ptr %6, align 4, !tbaa !9
  %95 = icmp slt i32 %94, 3
  br i1 %95, label %97, label %96

96:                                               ; preds = %93
  store i32 2, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #5
  br label %119

97:                                               ; preds = %93
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #5
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %98

98:                                               ; preds = %112, %97
  %99 = load i32, ptr %8, align 4, !tbaa !9
  %100 = icmp slt i32 %99, 3
  br i1 %100, label %102, label %101

101:                                              ; preds = %98
  store i32 5, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #5
  br label %115

102:                                              ; preds = %98
  %103 = load i32, ptr %5, align 4, !tbaa !9
  %104 = add nsw i32 %103, 1
  store i32 %104, ptr %5, align 4, !tbaa !9
  %105 = sitofp i32 %103 to float
  %106 = load i32, ptr %6, align 4, !tbaa !9
  %107 = sext i32 %106 to i64
  %108 = getelementptr inbounds [3 x [3 x float]], ptr %3, i64 0, i64 %107
  %109 = load i32, ptr %8, align 4, !tbaa !9
  %110 = sext i32 %109 to i64
  %111 = getelementptr inbounds [3 x float], ptr %108, i64 0, i64 %110
  store float %105, ptr %111, align 4, !tbaa !11
  br label %112

112:                                              ; preds = %102
  %113 = load i32, ptr %8, align 4, !tbaa !9
  %114 = add nsw i32 %113, 1
  store i32 %114, ptr %8, align 4, !tbaa !9
  br label %98, !llvm.loop !12

115:                                              ; preds = %101
  br label %116

116:                                              ; preds = %115
  %117 = load i32, ptr %6, align 4, !tbaa !9
  %118 = add nsw i32 %117, 1
  store i32 %118, ptr %6, align 4, !tbaa !9
  br label %93, !llvm.loop !14

119:                                              ; preds = %96
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #5
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %120

120:                                              ; preds = %143, %119
  %121 = load i32, ptr %9, align 4, !tbaa !9
  %122 = icmp slt i32 %121, 3
  br i1 %122, label %124, label %123

123:                                              ; preds = %120
  store i32 8, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  br label %146

124:                                              ; preds = %120
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #5
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %125

125:                                              ; preds = %139, %124
  %126 = load i32, ptr %10, align 4, !tbaa !9
  %127 = icmp slt i32 %126, 3
  br i1 %127, label %129, label %128

128:                                              ; preds = %125
  store i32 11, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  br label %142

129:                                              ; preds = %125
  %130 = load i32, ptr %5, align 4, !tbaa !9
  %131 = add nsw i32 %130, 1
  store i32 %131, ptr %5, align 4, !tbaa !9
  %132 = sitofp i32 %130 to float
  %133 = load i32, ptr %9, align 4, !tbaa !9
  %134 = sext i32 %133 to i64
  %135 = getelementptr inbounds [3 x [3 x float]], ptr %4, i64 0, i64 %134
  %136 = load i32, ptr %10, align 4, !tbaa !9
  %137 = sext i32 %136 to i64
  %138 = getelementptr inbounds [3 x float], ptr %135, i64 0, i64 %137
  store float %132, ptr %138, align 4, !tbaa !11
  br label %139

139:                                              ; preds = %129
  %140 = load i32, ptr %10, align 4, !tbaa !9
  %141 = add nsw i32 %140, 1
  store i32 %141, ptr %10, align 4, !tbaa !9
  br label %125, !llvm.loop !15

142:                                              ; preds = %128
  br label %143

143:                                              ; preds = %142
  %144 = load i32, ptr %9, align 4, !tbaa !9
  %145 = add nsw i32 %144, 1
  store i32 %145, ptr %9, align 4, !tbaa !9
  br label %120, !llvm.loop !16

146:                                              ; preds = %123
  call void @llvm.lifetime.start.p0(i64 36, ptr %11) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %12, ptr align 4 %3, i64 36, i1 false), !tbaa.struct !17
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %13, ptr align 4 %4, i64 36, i1 false), !tbaa.struct !17
  call void @_ZL9HMM_AddM38HMM_Mat3S_(ptr dead_on_unwind writable sret(%union.HMM_Mat3) align 4 %11, ptr noundef byval(%union.HMM_Mat3) align 8 %12, ptr noundef byval(%union.HMM_Mat3) align 8 %13)
  %147 = load ptr, ptr %2, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %147, i32 0, i32 0
  %149 = load i32, ptr %148, align 4, !tbaa !18
  %150 = add nsw i32 %149, 1
  store i32 %150, ptr %148, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  %151 = getelementptr inbounds [3 x [3 x float]], ptr %11, i64 0, i64 0
  %152 = getelementptr inbounds [3 x float], ptr %151, i64 0, i64 0
  %153 = load float, ptr %152, align 4, !tbaa !11
  store float %153, ptr %14, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  %154 = load float, ptr %14, align 4, !tbaa !20
  %155 = fsub float %154, 1.100000e+01
  store float %155, ptr %15, align 4, !tbaa !20
  %156 = load float, ptr %15, align 4, !tbaa !20
  %157 = fcmp olt float %156, 0xBE80000000000000
  br i1 %157, label %161, label %158

158:                                              ; preds = %146
  %159 = load float, ptr %15, align 4, !tbaa !20
  %160 = fcmp olt float 0x3E80000000000000, %159
  br i1 %160, label %161, label %172

161:                                              ; preds = %158, %146
  %162 = load ptr, ptr %2, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %162, i32 0, i32 1
  %164 = load i32, ptr %163, align 4, !tbaa !22
  %165 = add nsw i32 %164, 1
  store i32 %165, ptr %163, align 4, !tbaa !22
  %166 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 182)
  %167 = load float, ptr %14, align 4, !tbaa !20
  %168 = fpext float %167 to double
  %169 = load float, ptr %15, align 4, !tbaa !20
  %170 = fpext float %169 to double
  %171 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 1.100000e+01, double noundef %168, double noundef %170)
  br label %172

172:                                              ; preds = %161, %158
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  %173 = load ptr, ptr %2, align 8, !tbaa !5
  %174 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %173, i32 0, i32 0
  %175 = load i32, ptr %174, align 4, !tbaa !18
  %176 = add nsw i32 %175, 1
  store i32 %176, ptr %174, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  %177 = getelementptr inbounds [3 x [3 x float]], ptr %11, i64 0, i64 0
  %178 = getelementptr inbounds [3 x float], ptr %177, i64 0, i64 1
  %179 = load float, ptr %178, align 4, !tbaa !11
  store float %179, ptr %16, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  %180 = load float, ptr %16, align 4, !tbaa !20
  %181 = fsub float %180, 1.300000e+01
  store float %181, ptr %17, align 4, !tbaa !20
  %182 = load float, ptr %17, align 4, !tbaa !20
  %183 = fcmp olt float %182, 0xBE80000000000000
  br i1 %183, label %187, label %184

184:                                              ; preds = %172
  %185 = load float, ptr %17, align 4, !tbaa !20
  %186 = fcmp olt float 0x3E80000000000000, %185
  br i1 %186, label %187, label %198

187:                                              ; preds = %184, %172
  %188 = load ptr, ptr %2, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %188, i32 0, i32 1
  %190 = load i32, ptr %189, align 4, !tbaa !22
  %191 = add nsw i32 %190, 1
  store i32 %191, ptr %189, align 4, !tbaa !22
  %192 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 183)
  %193 = load float, ptr %16, align 4, !tbaa !20
  %194 = fpext float %193 to double
  %195 = load float, ptr %17, align 4, !tbaa !20
  %196 = fpext float %195 to double
  %197 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 1.300000e+01, double noundef %194, double noundef %196)
  br label %198

198:                                              ; preds = %187, %184
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  %199 = load ptr, ptr %2, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %199, i32 0, i32 0
  %201 = load i32, ptr %200, align 4, !tbaa !18
  %202 = add nsw i32 %201, 1
  store i32 %202, ptr %200, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  %203 = getelementptr inbounds [3 x [3 x float]], ptr %11, i64 0, i64 0
  %204 = getelementptr inbounds [3 x float], ptr %203, i64 0, i64 2
  %205 = load float, ptr %204, align 4, !tbaa !11
  store float %205, ptr %18, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  %206 = load float, ptr %18, align 4, !tbaa !20
  %207 = fsub float %206, 1.500000e+01
  store float %207, ptr %19, align 4, !tbaa !20
  %208 = load float, ptr %19, align 4, !tbaa !20
  %209 = fcmp olt float %208, 0xBE80000000000000
  br i1 %209, label %213, label %210

210:                                              ; preds = %198
  %211 = load float, ptr %19, align 4, !tbaa !20
  %212 = fcmp olt float 0x3E80000000000000, %211
  br i1 %212, label %213, label %224

213:                                              ; preds = %210, %198
  %214 = load ptr, ptr %2, align 8, !tbaa !5
  %215 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %214, i32 0, i32 1
  %216 = load i32, ptr %215, align 4, !tbaa !22
  %217 = add nsw i32 %216, 1
  store i32 %217, ptr %215, align 4, !tbaa !22
  %218 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 184)
  %219 = load float, ptr %18, align 4, !tbaa !20
  %220 = fpext float %219 to double
  %221 = load float, ptr %19, align 4, !tbaa !20
  %222 = fpext float %221 to double
  %223 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 1.500000e+01, double noundef %220, double noundef %222)
  br label %224

224:                                              ; preds = %213, %210
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  %225 = load ptr, ptr %2, align 8, !tbaa !5
  %226 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %225, i32 0, i32 0
  %227 = load i32, ptr %226, align 4, !tbaa !18
  %228 = add nsw i32 %227, 1
  store i32 %228, ptr %226, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  %229 = getelementptr inbounds [3 x [3 x float]], ptr %11, i64 0, i64 1
  %230 = getelementptr inbounds [3 x float], ptr %229, i64 0, i64 0
  %231 = load float, ptr %230, align 4, !tbaa !11
  store float %231, ptr %20, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  %232 = load float, ptr %20, align 4, !tbaa !20
  %233 = fsub float %232, 1.700000e+01
  store float %233, ptr %21, align 4, !tbaa !20
  %234 = load float, ptr %21, align 4, !tbaa !20
  %235 = fcmp olt float %234, 0xBE80000000000000
  br i1 %235, label %239, label %236

236:                                              ; preds = %224
  %237 = load float, ptr %21, align 4, !tbaa !20
  %238 = fcmp olt float 0x3E80000000000000, %237
  br i1 %238, label %239, label %250

239:                                              ; preds = %236, %224
  %240 = load ptr, ptr %2, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %240, i32 0, i32 1
  %242 = load i32, ptr %241, align 4, !tbaa !22
  %243 = add nsw i32 %242, 1
  store i32 %243, ptr %241, align 4, !tbaa !22
  %244 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 185)
  %245 = load float, ptr %20, align 4, !tbaa !20
  %246 = fpext float %245 to double
  %247 = load float, ptr %21, align 4, !tbaa !20
  %248 = fpext float %247 to double
  %249 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 1.700000e+01, double noundef %246, double noundef %248)
  br label %250

250:                                              ; preds = %239, %236
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  %251 = load ptr, ptr %2, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %251, i32 0, i32 0
  %253 = load i32, ptr %252, align 4, !tbaa !18
  %254 = add nsw i32 %253, 1
  store i32 %254, ptr %252, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  %255 = getelementptr inbounds [3 x [3 x float]], ptr %11, i64 0, i64 1
  %256 = getelementptr inbounds [3 x float], ptr %255, i64 0, i64 1
  %257 = load float, ptr %256, align 4, !tbaa !11
  store float %257, ptr %22, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #5
  %258 = load float, ptr %22, align 4, !tbaa !20
  %259 = fsub float %258, 1.900000e+01
  store float %259, ptr %23, align 4, !tbaa !20
  %260 = load float, ptr %23, align 4, !tbaa !20
  %261 = fcmp olt float %260, 0xBE80000000000000
  br i1 %261, label %265, label %262

262:                                              ; preds = %250
  %263 = load float, ptr %23, align 4, !tbaa !20
  %264 = fcmp olt float 0x3E80000000000000, %263
  br i1 %264, label %265, label %276

265:                                              ; preds = %262, %250
  %266 = load ptr, ptr %2, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %266, i32 0, i32 1
  %268 = load i32, ptr %267, align 4, !tbaa !22
  %269 = add nsw i32 %268, 1
  store i32 %269, ptr %267, align 4, !tbaa !22
  %270 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 186)
  %271 = load float, ptr %22, align 4, !tbaa !20
  %272 = fpext float %271 to double
  %273 = load float, ptr %23, align 4, !tbaa !20
  %274 = fpext float %273 to double
  %275 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 1.900000e+01, double noundef %272, double noundef %274)
  br label %276

276:                                              ; preds = %265, %262
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  %277 = load ptr, ptr %2, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %277, i32 0, i32 0
  %279 = load i32, ptr %278, align 4, !tbaa !18
  %280 = add nsw i32 %279, 1
  store i32 %280, ptr %278, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  %281 = getelementptr inbounds [3 x [3 x float]], ptr %11, i64 0, i64 1
  %282 = getelementptr inbounds [3 x float], ptr %281, i64 0, i64 2
  %283 = load float, ptr %282, align 4, !tbaa !11
  store float %283, ptr %24, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #5
  %284 = load float, ptr %24, align 4, !tbaa !20
  %285 = fsub float %284, 2.100000e+01
  store float %285, ptr %25, align 4, !tbaa !20
  %286 = load float, ptr %25, align 4, !tbaa !20
  %287 = fcmp olt float %286, 0xBE80000000000000
  br i1 %287, label %291, label %288

288:                                              ; preds = %276
  %289 = load float, ptr %25, align 4, !tbaa !20
  %290 = fcmp olt float 0x3E80000000000000, %289
  br i1 %290, label %291, label %302

291:                                              ; preds = %288, %276
  %292 = load ptr, ptr %2, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %292, i32 0, i32 1
  %294 = load i32, ptr %293, align 4, !tbaa !22
  %295 = add nsw i32 %294, 1
  store i32 %295, ptr %293, align 4, !tbaa !22
  %296 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 187)
  %297 = load float, ptr %24, align 4, !tbaa !20
  %298 = fpext float %297 to double
  %299 = load float, ptr %25, align 4, !tbaa !20
  %300 = fpext float %299 to double
  %301 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 2.100000e+01, double noundef %298, double noundef %300)
  br label %302

302:                                              ; preds = %291, %288
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  %303 = load ptr, ptr %2, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %303, i32 0, i32 0
  %305 = load i32, ptr %304, align 4, !tbaa !18
  %306 = add nsw i32 %305, 1
  store i32 %306, ptr %304, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #5
  %307 = getelementptr inbounds [3 x [3 x float]], ptr %11, i64 0, i64 2
  %308 = getelementptr inbounds [3 x float], ptr %307, i64 0, i64 0
  %309 = load float, ptr %308, align 4, !tbaa !11
  store float %309, ptr %26, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #5
  %310 = load float, ptr %26, align 4, !tbaa !20
  %311 = fsub float %310, 2.300000e+01
  store float %311, ptr %27, align 4, !tbaa !20
  %312 = load float, ptr %27, align 4, !tbaa !20
  %313 = fcmp olt float %312, 0xBE80000000000000
  br i1 %313, label %317, label %314

314:                                              ; preds = %302
  %315 = load float, ptr %27, align 4, !tbaa !20
  %316 = fcmp olt float 0x3E80000000000000, %315
  br i1 %316, label %317, label %328

317:                                              ; preds = %314, %302
  %318 = load ptr, ptr %2, align 8, !tbaa !5
  %319 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %318, i32 0, i32 1
  %320 = load i32, ptr %319, align 4, !tbaa !22
  %321 = add nsw i32 %320, 1
  store i32 %321, ptr %319, align 4, !tbaa !22
  %322 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 188)
  %323 = load float, ptr %26, align 4, !tbaa !20
  %324 = fpext float %323 to double
  %325 = load float, ptr %27, align 4, !tbaa !20
  %326 = fpext float %325 to double
  %327 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 2.300000e+01, double noundef %324, double noundef %326)
  br label %328

328:                                              ; preds = %317, %314
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  %329 = load ptr, ptr %2, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %329, i32 0, i32 0
  %331 = load i32, ptr %330, align 4, !tbaa !18
  %332 = add nsw i32 %331, 1
  store i32 %332, ptr %330, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #5
  %333 = getelementptr inbounds [3 x [3 x float]], ptr %11, i64 0, i64 2
  %334 = getelementptr inbounds [3 x float], ptr %333, i64 0, i64 1
  %335 = load float, ptr %334, align 4, !tbaa !11
  store float %335, ptr %28, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #5
  %336 = load float, ptr %28, align 4, !tbaa !20
  %337 = fsub float %336, 2.500000e+01
  store float %337, ptr %29, align 4, !tbaa !20
  %338 = load float, ptr %29, align 4, !tbaa !20
  %339 = fcmp olt float %338, 0xBE80000000000000
  br i1 %339, label %343, label %340

340:                                              ; preds = %328
  %341 = load float, ptr %29, align 4, !tbaa !20
  %342 = fcmp olt float 0x3E80000000000000, %341
  br i1 %342, label %343, label %354

343:                                              ; preds = %340, %328
  %344 = load ptr, ptr %2, align 8, !tbaa !5
  %345 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %344, i32 0, i32 1
  %346 = load i32, ptr %345, align 4, !tbaa !22
  %347 = add nsw i32 %346, 1
  store i32 %347, ptr %345, align 4, !tbaa !22
  %348 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 189)
  %349 = load float, ptr %28, align 4, !tbaa !20
  %350 = fpext float %349 to double
  %351 = load float, ptr %29, align 4, !tbaa !20
  %352 = fpext float %351 to double
  %353 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 2.500000e+01, double noundef %350, double noundef %352)
  br label %354

354:                                              ; preds = %343, %340
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #5
  %355 = load ptr, ptr %2, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %355, i32 0, i32 0
  %357 = load i32, ptr %356, align 4, !tbaa !18
  %358 = add nsw i32 %357, 1
  store i32 %358, ptr %356, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #5
  %359 = getelementptr inbounds [3 x [3 x float]], ptr %11, i64 0, i64 2
  %360 = getelementptr inbounds [3 x float], ptr %359, i64 0, i64 2
  %361 = load float, ptr %360, align 4, !tbaa !11
  store float %361, ptr %30, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #5
  %362 = load float, ptr %30, align 4, !tbaa !20
  %363 = fsub float %362, 2.700000e+01
  store float %363, ptr %31, align 4, !tbaa !20
  %364 = load float, ptr %31, align 4, !tbaa !20
  %365 = fcmp olt float %364, 0xBE80000000000000
  br i1 %365, label %369, label %366

366:                                              ; preds = %354
  %367 = load float, ptr %31, align 4, !tbaa !20
  %368 = fcmp olt float 0x3E80000000000000, %367
  br i1 %368, label %369, label %380

369:                                              ; preds = %366, %354
  %370 = load ptr, ptr %2, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %370, i32 0, i32 1
  %372 = load i32, ptr %371, align 4, !tbaa !22
  %373 = add nsw i32 %372, 1
  store i32 %373, ptr %371, align 4, !tbaa !22
  %374 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 190)
  %375 = load float, ptr %30, align 4, !tbaa !20
  %376 = fpext float %375 to double
  %377 = load float, ptr %31, align 4, !tbaa !20
  %378 = fpext float %377 to double
  %379 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 2.700000e+01, double noundef %376, double noundef %378)
  br label %380

380:                                              ; preds = %369, %366
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 36, ptr %11) #5
  call void @llvm.lifetime.start.p0(i64 36, ptr %32) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %33, ptr align 4 %3, i64 36, i1 false), !tbaa.struct !17
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %34, ptr align 4 %4, i64 36, i1 false), !tbaa.struct !17
  call void @_ZL7HMM_Add8HMM_Mat3S_(ptr dead_on_unwind writable sret(%union.HMM_Mat3) align 4 %32, ptr noundef byval(%union.HMM_Mat3) align 8 %33, ptr noundef byval(%union.HMM_Mat3) align 8 %34)
  %381 = load ptr, ptr %2, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %381, i32 0, i32 0
  %383 = load i32, ptr %382, align 4, !tbaa !18
  %384 = add nsw i32 %383, 1
  store i32 %384, ptr %382, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #5
  %385 = getelementptr inbounds [3 x [3 x float]], ptr %32, i64 0, i64 0
  %386 = getelementptr inbounds [3 x float], ptr %385, i64 0, i64 0
  %387 = load float, ptr %386, align 4, !tbaa !11
  store float %387, ptr %35, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #5
  %388 = load float, ptr %35, align 4, !tbaa !20
  %389 = fsub float %388, 1.100000e+01
  store float %389, ptr %36, align 4, !tbaa !20
  %390 = load float, ptr %36, align 4, !tbaa !20
  %391 = fcmp olt float %390, 0xBE80000000000000
  br i1 %391, label %395, label %392

392:                                              ; preds = %380
  %393 = load float, ptr %36, align 4, !tbaa !20
  %394 = fcmp olt float 0x3E80000000000000, %393
  br i1 %394, label %395, label %406

395:                                              ; preds = %392, %380
  %396 = load ptr, ptr %2, align 8, !tbaa !5
  %397 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %396, i32 0, i32 1
  %398 = load i32, ptr %397, align 4, !tbaa !22
  %399 = add nsw i32 %398, 1
  store i32 %399, ptr %397, align 4, !tbaa !22
  %400 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 196)
  %401 = load float, ptr %35, align 4, !tbaa !20
  %402 = fpext float %401 to double
  %403 = load float, ptr %36, align 4, !tbaa !20
  %404 = fpext float %403 to double
  %405 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 1.100000e+01, double noundef %402, double noundef %404)
  br label %406

406:                                              ; preds = %395, %392
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  %407 = load ptr, ptr %2, align 8, !tbaa !5
  %408 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %407, i32 0, i32 0
  %409 = load i32, ptr %408, align 4, !tbaa !18
  %410 = add nsw i32 %409, 1
  store i32 %410, ptr %408, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #5
  %411 = getelementptr inbounds [3 x [3 x float]], ptr %32, i64 0, i64 0
  %412 = getelementptr inbounds [3 x float], ptr %411, i64 0, i64 1
  %413 = load float, ptr %412, align 4, !tbaa !11
  store float %413, ptr %37, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #5
  %414 = load float, ptr %37, align 4, !tbaa !20
  %415 = fsub float %414, 1.300000e+01
  store float %415, ptr %38, align 4, !tbaa !20
  %416 = load float, ptr %38, align 4, !tbaa !20
  %417 = fcmp olt float %416, 0xBE80000000000000
  br i1 %417, label %421, label %418

418:                                              ; preds = %406
  %419 = load float, ptr %38, align 4, !tbaa !20
  %420 = fcmp olt float 0x3E80000000000000, %419
  br i1 %420, label %421, label %432

421:                                              ; preds = %418, %406
  %422 = load ptr, ptr %2, align 8, !tbaa !5
  %423 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %422, i32 0, i32 1
  %424 = load i32, ptr %423, align 4, !tbaa !22
  %425 = add nsw i32 %424, 1
  store i32 %425, ptr %423, align 4, !tbaa !22
  %426 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 197)
  %427 = load float, ptr %37, align 4, !tbaa !20
  %428 = fpext float %427 to double
  %429 = load float, ptr %38, align 4, !tbaa !20
  %430 = fpext float %429 to double
  %431 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 1.300000e+01, double noundef %428, double noundef %430)
  br label %432

432:                                              ; preds = %421, %418
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #5
  %433 = load ptr, ptr %2, align 8, !tbaa !5
  %434 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %433, i32 0, i32 0
  %435 = load i32, ptr %434, align 4, !tbaa !18
  %436 = add nsw i32 %435, 1
  store i32 %436, ptr %434, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #5
  %437 = getelementptr inbounds [3 x [3 x float]], ptr %32, i64 0, i64 0
  %438 = getelementptr inbounds [3 x float], ptr %437, i64 0, i64 2
  %439 = load float, ptr %438, align 4, !tbaa !11
  store float %439, ptr %39, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #5
  %440 = load float, ptr %39, align 4, !tbaa !20
  %441 = fsub float %440, 1.500000e+01
  store float %441, ptr %40, align 4, !tbaa !20
  %442 = load float, ptr %40, align 4, !tbaa !20
  %443 = fcmp olt float %442, 0xBE80000000000000
  br i1 %443, label %447, label %444

444:                                              ; preds = %432
  %445 = load float, ptr %40, align 4, !tbaa !20
  %446 = fcmp olt float 0x3E80000000000000, %445
  br i1 %446, label %447, label %458

447:                                              ; preds = %444, %432
  %448 = load ptr, ptr %2, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %448, i32 0, i32 1
  %450 = load i32, ptr %449, align 4, !tbaa !22
  %451 = add nsw i32 %450, 1
  store i32 %451, ptr %449, align 4, !tbaa !22
  %452 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 198)
  %453 = load float, ptr %39, align 4, !tbaa !20
  %454 = fpext float %453 to double
  %455 = load float, ptr %40, align 4, !tbaa !20
  %456 = fpext float %455 to double
  %457 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 1.500000e+01, double noundef %454, double noundef %456)
  br label %458

458:                                              ; preds = %447, %444
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #5
  %459 = load ptr, ptr %2, align 8, !tbaa !5
  %460 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %459, i32 0, i32 0
  %461 = load i32, ptr %460, align 4, !tbaa !18
  %462 = add nsw i32 %461, 1
  store i32 %462, ptr %460, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #5
  %463 = getelementptr inbounds [3 x [3 x float]], ptr %32, i64 0, i64 1
  %464 = getelementptr inbounds [3 x float], ptr %463, i64 0, i64 0
  %465 = load float, ptr %464, align 4, !tbaa !11
  store float %465, ptr %41, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #5
  %466 = load float, ptr %41, align 4, !tbaa !20
  %467 = fsub float %466, 1.700000e+01
  store float %467, ptr %42, align 4, !tbaa !20
  %468 = load float, ptr %42, align 4, !tbaa !20
  %469 = fcmp olt float %468, 0xBE80000000000000
  br i1 %469, label %473, label %470

470:                                              ; preds = %458
  %471 = load float, ptr %42, align 4, !tbaa !20
  %472 = fcmp olt float 0x3E80000000000000, %471
  br i1 %472, label %473, label %484

473:                                              ; preds = %470, %458
  %474 = load ptr, ptr %2, align 8, !tbaa !5
  %475 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %474, i32 0, i32 1
  %476 = load i32, ptr %475, align 4, !tbaa !22
  %477 = add nsw i32 %476, 1
  store i32 %477, ptr %475, align 4, !tbaa !22
  %478 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 199)
  %479 = load float, ptr %41, align 4, !tbaa !20
  %480 = fpext float %479 to double
  %481 = load float, ptr %42, align 4, !tbaa !20
  %482 = fpext float %481 to double
  %483 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 1.700000e+01, double noundef %480, double noundef %482)
  br label %484

484:                                              ; preds = %473, %470
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  %485 = load ptr, ptr %2, align 8, !tbaa !5
  %486 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %485, i32 0, i32 0
  %487 = load i32, ptr %486, align 4, !tbaa !18
  %488 = add nsw i32 %487, 1
  store i32 %488, ptr %486, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #5
  %489 = getelementptr inbounds [3 x [3 x float]], ptr %32, i64 0, i64 1
  %490 = getelementptr inbounds [3 x float], ptr %489, i64 0, i64 1
  %491 = load float, ptr %490, align 4, !tbaa !11
  store float %491, ptr %43, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #5
  %492 = load float, ptr %43, align 4, !tbaa !20
  %493 = fsub float %492, 1.900000e+01
  store float %493, ptr %44, align 4, !tbaa !20
  %494 = load float, ptr %44, align 4, !tbaa !20
  %495 = fcmp olt float %494, 0xBE80000000000000
  br i1 %495, label %499, label %496

496:                                              ; preds = %484
  %497 = load float, ptr %44, align 4, !tbaa !20
  %498 = fcmp olt float 0x3E80000000000000, %497
  br i1 %498, label %499, label %510

499:                                              ; preds = %496, %484
  %500 = load ptr, ptr %2, align 8, !tbaa !5
  %501 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %500, i32 0, i32 1
  %502 = load i32, ptr %501, align 4, !tbaa !22
  %503 = add nsw i32 %502, 1
  store i32 %503, ptr %501, align 4, !tbaa !22
  %504 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 200)
  %505 = load float, ptr %43, align 4, !tbaa !20
  %506 = fpext float %505 to double
  %507 = load float, ptr %44, align 4, !tbaa !20
  %508 = fpext float %507 to double
  %509 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 1.900000e+01, double noundef %506, double noundef %508)
  br label %510

510:                                              ; preds = %499, %496
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #5
  %511 = load ptr, ptr %2, align 8, !tbaa !5
  %512 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %511, i32 0, i32 0
  %513 = load i32, ptr %512, align 4, !tbaa !18
  %514 = add nsw i32 %513, 1
  store i32 %514, ptr %512, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #5
  %515 = getelementptr inbounds [3 x [3 x float]], ptr %32, i64 0, i64 1
  %516 = getelementptr inbounds [3 x float], ptr %515, i64 0, i64 2
  %517 = load float, ptr %516, align 4, !tbaa !11
  store float %517, ptr %45, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #5
  %518 = load float, ptr %45, align 4, !tbaa !20
  %519 = fsub float %518, 2.100000e+01
  store float %519, ptr %46, align 4, !tbaa !20
  %520 = load float, ptr %46, align 4, !tbaa !20
  %521 = fcmp olt float %520, 0xBE80000000000000
  br i1 %521, label %525, label %522

522:                                              ; preds = %510
  %523 = load float, ptr %46, align 4, !tbaa !20
  %524 = fcmp olt float 0x3E80000000000000, %523
  br i1 %524, label %525, label %536

525:                                              ; preds = %522, %510
  %526 = load ptr, ptr %2, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %526, i32 0, i32 1
  %528 = load i32, ptr %527, align 4, !tbaa !22
  %529 = add nsw i32 %528, 1
  store i32 %529, ptr %527, align 4, !tbaa !22
  %530 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 201)
  %531 = load float, ptr %45, align 4, !tbaa !20
  %532 = fpext float %531 to double
  %533 = load float, ptr %46, align 4, !tbaa !20
  %534 = fpext float %533 to double
  %535 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 2.100000e+01, double noundef %532, double noundef %534)
  br label %536

536:                                              ; preds = %525, %522
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #5
  %537 = load ptr, ptr %2, align 8, !tbaa !5
  %538 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %537, i32 0, i32 0
  %539 = load i32, ptr %538, align 4, !tbaa !18
  %540 = add nsw i32 %539, 1
  store i32 %540, ptr %538, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #5
  %541 = getelementptr inbounds [3 x [3 x float]], ptr %32, i64 0, i64 2
  %542 = getelementptr inbounds [3 x float], ptr %541, i64 0, i64 0
  %543 = load float, ptr %542, align 4, !tbaa !11
  store float %543, ptr %47, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #5
  %544 = load float, ptr %47, align 4, !tbaa !20
  %545 = fsub float %544, 2.300000e+01
  store float %545, ptr %48, align 4, !tbaa !20
  %546 = load float, ptr %48, align 4, !tbaa !20
  %547 = fcmp olt float %546, 0xBE80000000000000
  br i1 %547, label %551, label %548

548:                                              ; preds = %536
  %549 = load float, ptr %48, align 4, !tbaa !20
  %550 = fcmp olt float 0x3E80000000000000, %549
  br i1 %550, label %551, label %562

551:                                              ; preds = %548, %536
  %552 = load ptr, ptr %2, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %552, i32 0, i32 1
  %554 = load i32, ptr %553, align 4, !tbaa !22
  %555 = add nsw i32 %554, 1
  store i32 %555, ptr %553, align 4, !tbaa !22
  %556 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 202)
  %557 = load float, ptr %47, align 4, !tbaa !20
  %558 = fpext float %557 to double
  %559 = load float, ptr %48, align 4, !tbaa !20
  %560 = fpext float %559 to double
  %561 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 2.300000e+01, double noundef %558, double noundef %560)
  br label %562

562:                                              ; preds = %551, %548
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #5
  %563 = load ptr, ptr %2, align 8, !tbaa !5
  %564 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %563, i32 0, i32 0
  %565 = load i32, ptr %564, align 4, !tbaa !18
  %566 = add nsw i32 %565, 1
  store i32 %566, ptr %564, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #5
  %567 = getelementptr inbounds [3 x [3 x float]], ptr %32, i64 0, i64 2
  %568 = getelementptr inbounds [3 x float], ptr %567, i64 0, i64 1
  %569 = load float, ptr %568, align 4, !tbaa !11
  store float %569, ptr %49, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #5
  %570 = load float, ptr %49, align 4, !tbaa !20
  %571 = fsub float %570, 2.500000e+01
  store float %571, ptr %50, align 4, !tbaa !20
  %572 = load float, ptr %50, align 4, !tbaa !20
  %573 = fcmp olt float %572, 0xBE80000000000000
  br i1 %573, label %577, label %574

574:                                              ; preds = %562
  %575 = load float, ptr %50, align 4, !tbaa !20
  %576 = fcmp olt float 0x3E80000000000000, %575
  br i1 %576, label %577, label %588

577:                                              ; preds = %574, %562
  %578 = load ptr, ptr %2, align 8, !tbaa !5
  %579 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %578, i32 0, i32 1
  %580 = load i32, ptr %579, align 4, !tbaa !22
  %581 = add nsw i32 %580, 1
  store i32 %581, ptr %579, align 4, !tbaa !22
  %582 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 203)
  %583 = load float, ptr %49, align 4, !tbaa !20
  %584 = fpext float %583 to double
  %585 = load float, ptr %50, align 4, !tbaa !20
  %586 = fpext float %585 to double
  %587 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 2.500000e+01, double noundef %584, double noundef %586)
  br label %588

588:                                              ; preds = %577, %574
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #5
  %589 = load ptr, ptr %2, align 8, !tbaa !5
  %590 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %589, i32 0, i32 0
  %591 = load i32, ptr %590, align 4, !tbaa !18
  %592 = add nsw i32 %591, 1
  store i32 %592, ptr %590, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #5
  %593 = getelementptr inbounds [3 x [3 x float]], ptr %32, i64 0, i64 2
  %594 = getelementptr inbounds [3 x float], ptr %593, i64 0, i64 2
  %595 = load float, ptr %594, align 4, !tbaa !11
  store float %595, ptr %51, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #5
  %596 = load float, ptr %51, align 4, !tbaa !20
  %597 = fsub float %596, 2.700000e+01
  store float %597, ptr %52, align 4, !tbaa !20
  %598 = load float, ptr %52, align 4, !tbaa !20
  %599 = fcmp olt float %598, 0xBE80000000000000
  br i1 %599, label %603, label %600

600:                                              ; preds = %588
  %601 = load float, ptr %52, align 4, !tbaa !20
  %602 = fcmp olt float 0x3E80000000000000, %601
  br i1 %602, label %603, label %614

603:                                              ; preds = %600, %588
  %604 = load ptr, ptr %2, align 8, !tbaa !5
  %605 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %604, i32 0, i32 1
  %606 = load i32, ptr %605, align 4, !tbaa !22
  %607 = add nsw i32 %606, 1
  store i32 %607, ptr %605, align 4, !tbaa !22
  %608 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 204)
  %609 = load float, ptr %51, align 4, !tbaa !20
  %610 = fpext float %609 to double
  %611 = load float, ptr %52, align 4, !tbaa !20
  %612 = fpext float %611 to double
  %613 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 2.700000e+01, double noundef %610, double noundef %612)
  br label %614

614:                                              ; preds = %603, %600
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 36, ptr %32) #5
  call void @llvm.lifetime.start.p0(i64 36, ptr %53) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %54, ptr align 4 %3, i64 36, i1 false), !tbaa.struct !17
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %55, ptr align 4 %4, i64 36, i1 false), !tbaa.struct !17
  call void @_Zpl8HMM_Mat3S_(ptr dead_on_unwind writable sret(%union.HMM_Mat3) align 4 %53, ptr noundef byval(%union.HMM_Mat3) align 8 %54, ptr noundef byval(%union.HMM_Mat3) align 8 %55)
  %615 = load ptr, ptr %2, align 8, !tbaa !5
  %616 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %615, i32 0, i32 0
  %617 = load i32, ptr %616, align 4, !tbaa !18
  %618 = add nsw i32 %617, 1
  store i32 %618, ptr %616, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #5
  %619 = getelementptr inbounds [3 x [3 x float]], ptr %53, i64 0, i64 0
  %620 = getelementptr inbounds [3 x float], ptr %619, i64 0, i64 0
  %621 = load float, ptr %620, align 4, !tbaa !11
  store float %621, ptr %56, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #5
  %622 = load float, ptr %56, align 4, !tbaa !20
  %623 = fsub float %622, 1.100000e+01
  store float %623, ptr %57, align 4, !tbaa !20
  %624 = load float, ptr %57, align 4, !tbaa !20
  %625 = fcmp olt float %624, 0xBE80000000000000
  br i1 %625, label %629, label %626

626:                                              ; preds = %614
  %627 = load float, ptr %57, align 4, !tbaa !20
  %628 = fcmp olt float 0x3E80000000000000, %627
  br i1 %628, label %629, label %640

629:                                              ; preds = %626, %614
  %630 = load ptr, ptr %2, align 8, !tbaa !5
  %631 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %630, i32 0, i32 1
  %632 = load i32, ptr %631, align 4, !tbaa !22
  %633 = add nsw i32 %632, 1
  store i32 %633, ptr %631, align 4, !tbaa !22
  %634 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 210)
  %635 = load float, ptr %56, align 4, !tbaa !20
  %636 = fpext float %635 to double
  %637 = load float, ptr %57, align 4, !tbaa !20
  %638 = fpext float %637 to double
  %639 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 1.100000e+01, double noundef %636, double noundef %638)
  br label %640

640:                                              ; preds = %629, %626
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #5
  %641 = load ptr, ptr %2, align 8, !tbaa !5
  %642 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %641, i32 0, i32 0
  %643 = load i32, ptr %642, align 4, !tbaa !18
  %644 = add nsw i32 %643, 1
  store i32 %644, ptr %642, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #5
  %645 = getelementptr inbounds [3 x [3 x float]], ptr %53, i64 0, i64 0
  %646 = getelementptr inbounds [3 x float], ptr %645, i64 0, i64 1
  %647 = load float, ptr %646, align 4, !tbaa !11
  store float %647, ptr %58, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #5
  %648 = load float, ptr %58, align 4, !tbaa !20
  %649 = fsub float %648, 1.300000e+01
  store float %649, ptr %59, align 4, !tbaa !20
  %650 = load float, ptr %59, align 4, !tbaa !20
  %651 = fcmp olt float %650, 0xBE80000000000000
  br i1 %651, label %655, label %652

652:                                              ; preds = %640
  %653 = load float, ptr %59, align 4, !tbaa !20
  %654 = fcmp olt float 0x3E80000000000000, %653
  br i1 %654, label %655, label %666

655:                                              ; preds = %652, %640
  %656 = load ptr, ptr %2, align 8, !tbaa !5
  %657 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %656, i32 0, i32 1
  %658 = load i32, ptr %657, align 4, !tbaa !22
  %659 = add nsw i32 %658, 1
  store i32 %659, ptr %657, align 4, !tbaa !22
  %660 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 211)
  %661 = load float, ptr %58, align 4, !tbaa !20
  %662 = fpext float %661 to double
  %663 = load float, ptr %59, align 4, !tbaa !20
  %664 = fpext float %663 to double
  %665 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 1.300000e+01, double noundef %662, double noundef %664)
  br label %666

666:                                              ; preds = %655, %652
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #5
  %667 = load ptr, ptr %2, align 8, !tbaa !5
  %668 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %667, i32 0, i32 0
  %669 = load i32, ptr %668, align 4, !tbaa !18
  %670 = add nsw i32 %669, 1
  store i32 %670, ptr %668, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #5
  %671 = getelementptr inbounds [3 x [3 x float]], ptr %53, i64 0, i64 0
  %672 = getelementptr inbounds [3 x float], ptr %671, i64 0, i64 2
  %673 = load float, ptr %672, align 4, !tbaa !11
  store float %673, ptr %60, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #5
  %674 = load float, ptr %60, align 4, !tbaa !20
  %675 = fsub float %674, 1.500000e+01
  store float %675, ptr %61, align 4, !tbaa !20
  %676 = load float, ptr %61, align 4, !tbaa !20
  %677 = fcmp olt float %676, 0xBE80000000000000
  br i1 %677, label %681, label %678

678:                                              ; preds = %666
  %679 = load float, ptr %61, align 4, !tbaa !20
  %680 = fcmp olt float 0x3E80000000000000, %679
  br i1 %680, label %681, label %692

681:                                              ; preds = %678, %666
  %682 = load ptr, ptr %2, align 8, !tbaa !5
  %683 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %682, i32 0, i32 1
  %684 = load i32, ptr %683, align 4, !tbaa !22
  %685 = add nsw i32 %684, 1
  store i32 %685, ptr %683, align 4, !tbaa !22
  %686 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 212)
  %687 = load float, ptr %60, align 4, !tbaa !20
  %688 = fpext float %687 to double
  %689 = load float, ptr %61, align 4, !tbaa !20
  %690 = fpext float %689 to double
  %691 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 1.500000e+01, double noundef %688, double noundef %690)
  br label %692

692:                                              ; preds = %681, %678
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #5
  %693 = load ptr, ptr %2, align 8, !tbaa !5
  %694 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %693, i32 0, i32 0
  %695 = load i32, ptr %694, align 4, !tbaa !18
  %696 = add nsw i32 %695, 1
  store i32 %696, ptr %694, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #5
  %697 = getelementptr inbounds [3 x [3 x float]], ptr %53, i64 0, i64 1
  %698 = getelementptr inbounds [3 x float], ptr %697, i64 0, i64 0
  %699 = load float, ptr %698, align 4, !tbaa !11
  store float %699, ptr %62, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #5
  %700 = load float, ptr %62, align 4, !tbaa !20
  %701 = fsub float %700, 1.700000e+01
  store float %701, ptr %63, align 4, !tbaa !20
  %702 = load float, ptr %63, align 4, !tbaa !20
  %703 = fcmp olt float %702, 0xBE80000000000000
  br i1 %703, label %707, label %704

704:                                              ; preds = %692
  %705 = load float, ptr %63, align 4, !tbaa !20
  %706 = fcmp olt float 0x3E80000000000000, %705
  br i1 %706, label %707, label %718

707:                                              ; preds = %704, %692
  %708 = load ptr, ptr %2, align 8, !tbaa !5
  %709 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %708, i32 0, i32 1
  %710 = load i32, ptr %709, align 4, !tbaa !22
  %711 = add nsw i32 %710, 1
  store i32 %711, ptr %709, align 4, !tbaa !22
  %712 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 213)
  %713 = load float, ptr %62, align 4, !tbaa !20
  %714 = fpext float %713 to double
  %715 = load float, ptr %63, align 4, !tbaa !20
  %716 = fpext float %715 to double
  %717 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 1.700000e+01, double noundef %714, double noundef %716)
  br label %718

718:                                              ; preds = %707, %704
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #5
  %719 = load ptr, ptr %2, align 8, !tbaa !5
  %720 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %719, i32 0, i32 0
  %721 = load i32, ptr %720, align 4, !tbaa !18
  %722 = add nsw i32 %721, 1
  store i32 %722, ptr %720, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #5
  %723 = getelementptr inbounds [3 x [3 x float]], ptr %53, i64 0, i64 1
  %724 = getelementptr inbounds [3 x float], ptr %723, i64 0, i64 1
  %725 = load float, ptr %724, align 4, !tbaa !11
  store float %725, ptr %64, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #5
  %726 = load float, ptr %64, align 4, !tbaa !20
  %727 = fsub float %726, 1.900000e+01
  store float %727, ptr %65, align 4, !tbaa !20
  %728 = load float, ptr %65, align 4, !tbaa !20
  %729 = fcmp olt float %728, 0xBE80000000000000
  br i1 %729, label %733, label %730

730:                                              ; preds = %718
  %731 = load float, ptr %65, align 4, !tbaa !20
  %732 = fcmp olt float 0x3E80000000000000, %731
  br i1 %732, label %733, label %744

733:                                              ; preds = %730, %718
  %734 = load ptr, ptr %2, align 8, !tbaa !5
  %735 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %734, i32 0, i32 1
  %736 = load i32, ptr %735, align 4, !tbaa !22
  %737 = add nsw i32 %736, 1
  store i32 %737, ptr %735, align 4, !tbaa !22
  %738 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 214)
  %739 = load float, ptr %64, align 4, !tbaa !20
  %740 = fpext float %739 to double
  %741 = load float, ptr %65, align 4, !tbaa !20
  %742 = fpext float %741 to double
  %743 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 1.900000e+01, double noundef %740, double noundef %742)
  br label %744

744:                                              ; preds = %733, %730
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #5
  %745 = load ptr, ptr %2, align 8, !tbaa !5
  %746 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %745, i32 0, i32 0
  %747 = load i32, ptr %746, align 4, !tbaa !18
  %748 = add nsw i32 %747, 1
  store i32 %748, ptr %746, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #5
  %749 = getelementptr inbounds [3 x [3 x float]], ptr %53, i64 0, i64 1
  %750 = getelementptr inbounds [3 x float], ptr %749, i64 0, i64 2
  %751 = load float, ptr %750, align 4, !tbaa !11
  store float %751, ptr %66, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #5
  %752 = load float, ptr %66, align 4, !tbaa !20
  %753 = fsub float %752, 2.100000e+01
  store float %753, ptr %67, align 4, !tbaa !20
  %754 = load float, ptr %67, align 4, !tbaa !20
  %755 = fcmp olt float %754, 0xBE80000000000000
  br i1 %755, label %759, label %756

756:                                              ; preds = %744
  %757 = load float, ptr %67, align 4, !tbaa !20
  %758 = fcmp olt float 0x3E80000000000000, %757
  br i1 %758, label %759, label %770

759:                                              ; preds = %756, %744
  %760 = load ptr, ptr %2, align 8, !tbaa !5
  %761 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %760, i32 0, i32 1
  %762 = load i32, ptr %761, align 4, !tbaa !22
  %763 = add nsw i32 %762, 1
  store i32 %763, ptr %761, align 4, !tbaa !22
  %764 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 215)
  %765 = load float, ptr %66, align 4, !tbaa !20
  %766 = fpext float %765 to double
  %767 = load float, ptr %67, align 4, !tbaa !20
  %768 = fpext float %767 to double
  %769 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 2.100000e+01, double noundef %766, double noundef %768)
  br label %770

770:                                              ; preds = %759, %756
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #5
  %771 = load ptr, ptr %2, align 8, !tbaa !5
  %772 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %771, i32 0, i32 0
  %773 = load i32, ptr %772, align 4, !tbaa !18
  %774 = add nsw i32 %773, 1
  store i32 %774, ptr %772, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #5
  %775 = getelementptr inbounds [3 x [3 x float]], ptr %53, i64 0, i64 2
  %776 = getelementptr inbounds [3 x float], ptr %775, i64 0, i64 0
  %777 = load float, ptr %776, align 4, !tbaa !11
  store float %777, ptr %68, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #5
  %778 = load float, ptr %68, align 4, !tbaa !20
  %779 = fsub float %778, 2.300000e+01
  store float %779, ptr %69, align 4, !tbaa !20
  %780 = load float, ptr %69, align 4, !tbaa !20
  %781 = fcmp olt float %780, 0xBE80000000000000
  br i1 %781, label %785, label %782

782:                                              ; preds = %770
  %783 = load float, ptr %69, align 4, !tbaa !20
  %784 = fcmp olt float 0x3E80000000000000, %783
  br i1 %784, label %785, label %796

785:                                              ; preds = %782, %770
  %786 = load ptr, ptr %2, align 8, !tbaa !5
  %787 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %786, i32 0, i32 1
  %788 = load i32, ptr %787, align 4, !tbaa !22
  %789 = add nsw i32 %788, 1
  store i32 %789, ptr %787, align 4, !tbaa !22
  %790 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 216)
  %791 = load float, ptr %68, align 4, !tbaa !20
  %792 = fpext float %791 to double
  %793 = load float, ptr %69, align 4, !tbaa !20
  %794 = fpext float %793 to double
  %795 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 2.300000e+01, double noundef %792, double noundef %794)
  br label %796

796:                                              ; preds = %785, %782
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #5
  %797 = load ptr, ptr %2, align 8, !tbaa !5
  %798 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %797, i32 0, i32 0
  %799 = load i32, ptr %798, align 4, !tbaa !18
  %800 = add nsw i32 %799, 1
  store i32 %800, ptr %798, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #5
  %801 = getelementptr inbounds [3 x [3 x float]], ptr %53, i64 0, i64 2
  %802 = getelementptr inbounds [3 x float], ptr %801, i64 0, i64 1
  %803 = load float, ptr %802, align 4, !tbaa !11
  store float %803, ptr %70, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #5
  %804 = load float, ptr %70, align 4, !tbaa !20
  %805 = fsub float %804, 2.500000e+01
  store float %805, ptr %71, align 4, !tbaa !20
  %806 = load float, ptr %71, align 4, !tbaa !20
  %807 = fcmp olt float %806, 0xBE80000000000000
  br i1 %807, label %811, label %808

808:                                              ; preds = %796
  %809 = load float, ptr %71, align 4, !tbaa !20
  %810 = fcmp olt float 0x3E80000000000000, %809
  br i1 %810, label %811, label %822

811:                                              ; preds = %808, %796
  %812 = load ptr, ptr %2, align 8, !tbaa !5
  %813 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %812, i32 0, i32 1
  %814 = load i32, ptr %813, align 4, !tbaa !22
  %815 = add nsw i32 %814, 1
  store i32 %815, ptr %813, align 4, !tbaa !22
  %816 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 217)
  %817 = load float, ptr %70, align 4, !tbaa !20
  %818 = fpext float %817 to double
  %819 = load float, ptr %71, align 4, !tbaa !20
  %820 = fpext float %819 to double
  %821 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 2.500000e+01, double noundef %818, double noundef %820)
  br label %822

822:                                              ; preds = %811, %808
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #5
  %823 = load ptr, ptr %2, align 8, !tbaa !5
  %824 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %823, i32 0, i32 0
  %825 = load i32, ptr %824, align 4, !tbaa !18
  %826 = add nsw i32 %825, 1
  store i32 %826, ptr %824, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #5
  %827 = getelementptr inbounds [3 x [3 x float]], ptr %53, i64 0, i64 2
  %828 = getelementptr inbounds [3 x float], ptr %827, i64 0, i64 2
  %829 = load float, ptr %828, align 4, !tbaa !11
  store float %829, ptr %72, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #5
  %830 = load float, ptr %72, align 4, !tbaa !20
  %831 = fsub float %830, 2.700000e+01
  store float %831, ptr %73, align 4, !tbaa !20
  %832 = load float, ptr %73, align 4, !tbaa !20
  %833 = fcmp olt float %832, 0xBE80000000000000
  br i1 %833, label %837, label %834

834:                                              ; preds = %822
  %835 = load float, ptr %73, align 4, !tbaa !20
  %836 = fcmp olt float 0x3E80000000000000, %835
  br i1 %836, label %837, label %848

837:                                              ; preds = %834, %822
  %838 = load ptr, ptr %2, align 8, !tbaa !5
  %839 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %838, i32 0, i32 1
  %840 = load i32, ptr %839, align 4, !tbaa !22
  %841 = add nsw i32 %840, 1
  store i32 %841, ptr %839, align 4, !tbaa !22
  %842 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 218)
  %843 = load float, ptr %72, align 4, !tbaa !20
  %844 = fpext float %843 to double
  %845 = load float, ptr %73, align 4, !tbaa !20
  %846 = fpext float %845 to double
  %847 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 2.700000e+01, double noundef %844, double noundef %846)
  br label %848

848:                                              ; preds = %837, %834
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #5
  call void @llvm.lifetime.end.p0(i64 36, ptr %53) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %74, ptr align 4 %4, i64 36, i1 false), !tbaa.struct !17
  %849 = call noundef nonnull align 4 dereferenceable(36) ptr @_ZpLR8HMM_Mat3S_(ptr noundef nonnull align 4 dereferenceable(36) %3, ptr noundef byval(%union.HMM_Mat3) align 8 %74)
  %850 = load ptr, ptr %2, align 8, !tbaa !5
  %851 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %850, i32 0, i32 0
  %852 = load i32, ptr %851, align 4, !tbaa !18
  %853 = add nsw i32 %852, 1
  store i32 %853, ptr %851, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #5
  %854 = getelementptr inbounds [3 x [3 x float]], ptr %3, i64 0, i64 0
  %855 = getelementptr inbounds [3 x float], ptr %854, i64 0, i64 0
  %856 = load float, ptr %855, align 4, !tbaa !11
  store float %856, ptr %75, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #5
  %857 = load float, ptr %75, align 4, !tbaa !20
  %858 = fsub float %857, 1.100000e+01
  store float %858, ptr %76, align 4, !tbaa !20
  %859 = load float, ptr %76, align 4, !tbaa !20
  %860 = fcmp olt float %859, 0xBE80000000000000
  br i1 %860, label %864, label %861

861:                                              ; preds = %848
  %862 = load float, ptr %76, align 4, !tbaa !20
  %863 = fcmp olt float 0x3E80000000000000, %862
  br i1 %863, label %864, label %875

864:                                              ; preds = %861, %848
  %865 = load ptr, ptr %2, align 8, !tbaa !5
  %866 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %865, i32 0, i32 1
  %867 = load i32, ptr %866, align 4, !tbaa !22
  %868 = add nsw i32 %867, 1
  store i32 %868, ptr %866, align 4, !tbaa !22
  %869 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 221)
  %870 = load float, ptr %75, align 4, !tbaa !20
  %871 = fpext float %870 to double
  %872 = load float, ptr %76, align 4, !tbaa !20
  %873 = fpext float %872 to double
  %874 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 1.100000e+01, double noundef %871, double noundef %873)
  br label %875

875:                                              ; preds = %864, %861
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #5
  %876 = load ptr, ptr %2, align 8, !tbaa !5
  %877 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %876, i32 0, i32 0
  %878 = load i32, ptr %877, align 4, !tbaa !18
  %879 = add nsw i32 %878, 1
  store i32 %879, ptr %877, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #5
  %880 = getelementptr inbounds [3 x [3 x float]], ptr %3, i64 0, i64 0
  %881 = getelementptr inbounds [3 x float], ptr %880, i64 0, i64 1
  %882 = load float, ptr %881, align 4, !tbaa !11
  store float %882, ptr %77, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #5
  %883 = load float, ptr %77, align 4, !tbaa !20
  %884 = fsub float %883, 1.300000e+01
  store float %884, ptr %78, align 4, !tbaa !20
  %885 = load float, ptr %78, align 4, !tbaa !20
  %886 = fcmp olt float %885, 0xBE80000000000000
  br i1 %886, label %890, label %887

887:                                              ; preds = %875
  %888 = load float, ptr %78, align 4, !tbaa !20
  %889 = fcmp olt float 0x3E80000000000000, %888
  br i1 %889, label %890, label %901

890:                                              ; preds = %887, %875
  %891 = load ptr, ptr %2, align 8, !tbaa !5
  %892 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %891, i32 0, i32 1
  %893 = load i32, ptr %892, align 4, !tbaa !22
  %894 = add nsw i32 %893, 1
  store i32 %894, ptr %892, align 4, !tbaa !22
  %895 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 222)
  %896 = load float, ptr %77, align 4, !tbaa !20
  %897 = fpext float %896 to double
  %898 = load float, ptr %78, align 4, !tbaa !20
  %899 = fpext float %898 to double
  %900 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 1.300000e+01, double noundef %897, double noundef %899)
  br label %901

901:                                              ; preds = %890, %887
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #5
  %902 = load ptr, ptr %2, align 8, !tbaa !5
  %903 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %902, i32 0, i32 0
  %904 = load i32, ptr %903, align 4, !tbaa !18
  %905 = add nsw i32 %904, 1
  store i32 %905, ptr %903, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #5
  %906 = getelementptr inbounds [3 x [3 x float]], ptr %3, i64 0, i64 0
  %907 = getelementptr inbounds [3 x float], ptr %906, i64 0, i64 2
  %908 = load float, ptr %907, align 4, !tbaa !11
  store float %908, ptr %79, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #5
  %909 = load float, ptr %79, align 4, !tbaa !20
  %910 = fsub float %909, 1.500000e+01
  store float %910, ptr %80, align 4, !tbaa !20
  %911 = load float, ptr %80, align 4, !tbaa !20
  %912 = fcmp olt float %911, 0xBE80000000000000
  br i1 %912, label %916, label %913

913:                                              ; preds = %901
  %914 = load float, ptr %80, align 4, !tbaa !20
  %915 = fcmp olt float 0x3E80000000000000, %914
  br i1 %915, label %916, label %927

916:                                              ; preds = %913, %901
  %917 = load ptr, ptr %2, align 8, !tbaa !5
  %918 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %917, i32 0, i32 1
  %919 = load i32, ptr %918, align 4, !tbaa !22
  %920 = add nsw i32 %919, 1
  store i32 %920, ptr %918, align 4, !tbaa !22
  %921 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 223)
  %922 = load float, ptr %79, align 4, !tbaa !20
  %923 = fpext float %922 to double
  %924 = load float, ptr %80, align 4, !tbaa !20
  %925 = fpext float %924 to double
  %926 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 1.500000e+01, double noundef %923, double noundef %925)
  br label %927

927:                                              ; preds = %916, %913
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #5
  %928 = load ptr, ptr %2, align 8, !tbaa !5
  %929 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %928, i32 0, i32 0
  %930 = load i32, ptr %929, align 4, !tbaa !18
  %931 = add nsw i32 %930, 1
  store i32 %931, ptr %929, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #5
  %932 = getelementptr inbounds [3 x [3 x float]], ptr %3, i64 0, i64 1
  %933 = getelementptr inbounds [3 x float], ptr %932, i64 0, i64 0
  %934 = load float, ptr %933, align 4, !tbaa !11
  store float %934, ptr %81, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #5
  %935 = load float, ptr %81, align 4, !tbaa !20
  %936 = fsub float %935, 1.700000e+01
  store float %936, ptr %82, align 4, !tbaa !20
  %937 = load float, ptr %82, align 4, !tbaa !20
  %938 = fcmp olt float %937, 0xBE80000000000000
  br i1 %938, label %942, label %939

939:                                              ; preds = %927
  %940 = load float, ptr %82, align 4, !tbaa !20
  %941 = fcmp olt float 0x3E80000000000000, %940
  br i1 %941, label %942, label %953

942:                                              ; preds = %939, %927
  %943 = load ptr, ptr %2, align 8, !tbaa !5
  %944 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %943, i32 0, i32 1
  %945 = load i32, ptr %944, align 4, !tbaa !22
  %946 = add nsw i32 %945, 1
  store i32 %946, ptr %944, align 4, !tbaa !22
  %947 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 224)
  %948 = load float, ptr %81, align 4, !tbaa !20
  %949 = fpext float %948 to double
  %950 = load float, ptr %82, align 4, !tbaa !20
  %951 = fpext float %950 to double
  %952 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 1.700000e+01, double noundef %949, double noundef %951)
  br label %953

953:                                              ; preds = %942, %939
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #5
  %954 = load ptr, ptr %2, align 8, !tbaa !5
  %955 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %954, i32 0, i32 0
  %956 = load i32, ptr %955, align 4, !tbaa !18
  %957 = add nsw i32 %956, 1
  store i32 %957, ptr %955, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #5
  %958 = getelementptr inbounds [3 x [3 x float]], ptr %3, i64 0, i64 1
  %959 = getelementptr inbounds [3 x float], ptr %958, i64 0, i64 1
  %960 = load float, ptr %959, align 4, !tbaa !11
  store float %960, ptr %83, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #5
  %961 = load float, ptr %83, align 4, !tbaa !20
  %962 = fsub float %961, 1.900000e+01
  store float %962, ptr %84, align 4, !tbaa !20
  %963 = load float, ptr %84, align 4, !tbaa !20
  %964 = fcmp olt float %963, 0xBE80000000000000
  br i1 %964, label %968, label %965

965:                                              ; preds = %953
  %966 = load float, ptr %84, align 4, !tbaa !20
  %967 = fcmp olt float 0x3E80000000000000, %966
  br i1 %967, label %968, label %979

968:                                              ; preds = %965, %953
  %969 = load ptr, ptr %2, align 8, !tbaa !5
  %970 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %969, i32 0, i32 1
  %971 = load i32, ptr %970, align 4, !tbaa !22
  %972 = add nsw i32 %971, 1
  store i32 %972, ptr %970, align 4, !tbaa !22
  %973 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 225)
  %974 = load float, ptr %83, align 4, !tbaa !20
  %975 = fpext float %974 to double
  %976 = load float, ptr %84, align 4, !tbaa !20
  %977 = fpext float %976 to double
  %978 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 1.900000e+01, double noundef %975, double noundef %977)
  br label %979

979:                                              ; preds = %968, %965
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #5
  %980 = load ptr, ptr %2, align 8, !tbaa !5
  %981 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %980, i32 0, i32 0
  %982 = load i32, ptr %981, align 4, !tbaa !18
  %983 = add nsw i32 %982, 1
  store i32 %983, ptr %981, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #5
  %984 = getelementptr inbounds [3 x [3 x float]], ptr %3, i64 0, i64 1
  %985 = getelementptr inbounds [3 x float], ptr %984, i64 0, i64 2
  %986 = load float, ptr %985, align 4, !tbaa !11
  store float %986, ptr %85, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %86) #5
  %987 = load float, ptr %85, align 4, !tbaa !20
  %988 = fsub float %987, 2.100000e+01
  store float %988, ptr %86, align 4, !tbaa !20
  %989 = load float, ptr %86, align 4, !tbaa !20
  %990 = fcmp olt float %989, 0xBE80000000000000
  br i1 %990, label %994, label %991

991:                                              ; preds = %979
  %992 = load float, ptr %86, align 4, !tbaa !20
  %993 = fcmp olt float 0x3E80000000000000, %992
  br i1 %993, label %994, label %1005

994:                                              ; preds = %991, %979
  %995 = load ptr, ptr %2, align 8, !tbaa !5
  %996 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %995, i32 0, i32 1
  %997 = load i32, ptr %996, align 4, !tbaa !22
  %998 = add nsw i32 %997, 1
  store i32 %998, ptr %996, align 4, !tbaa !22
  %999 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 226)
  %1000 = load float, ptr %85, align 4, !tbaa !20
  %1001 = fpext float %1000 to double
  %1002 = load float, ptr %86, align 4, !tbaa !20
  %1003 = fpext float %1002 to double
  %1004 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 2.100000e+01, double noundef %1001, double noundef %1003)
  br label %1005

1005:                                             ; preds = %994, %991
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #5
  %1006 = load ptr, ptr %2, align 8, !tbaa !5
  %1007 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %1006, i32 0, i32 0
  %1008 = load i32, ptr %1007, align 4, !tbaa !18
  %1009 = add nsw i32 %1008, 1
  store i32 %1009, ptr %1007, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #5
  %1010 = getelementptr inbounds [3 x [3 x float]], ptr %3, i64 0, i64 2
  %1011 = getelementptr inbounds [3 x float], ptr %1010, i64 0, i64 0
  %1012 = load float, ptr %1011, align 4, !tbaa !11
  store float %1012, ptr %87, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %88) #5
  %1013 = load float, ptr %87, align 4, !tbaa !20
  %1014 = fsub float %1013, 2.300000e+01
  store float %1014, ptr %88, align 4, !tbaa !20
  %1015 = load float, ptr %88, align 4, !tbaa !20
  %1016 = fcmp olt float %1015, 0xBE80000000000000
  br i1 %1016, label %1020, label %1017

1017:                                             ; preds = %1005
  %1018 = load float, ptr %88, align 4, !tbaa !20
  %1019 = fcmp olt float 0x3E80000000000000, %1018
  br i1 %1019, label %1020, label %1031

1020:                                             ; preds = %1017, %1005
  %1021 = load ptr, ptr %2, align 8, !tbaa !5
  %1022 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %1021, i32 0, i32 1
  %1023 = load i32, ptr %1022, align 4, !tbaa !22
  %1024 = add nsw i32 %1023, 1
  store i32 %1024, ptr %1022, align 4, !tbaa !22
  %1025 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 227)
  %1026 = load float, ptr %87, align 4, !tbaa !20
  %1027 = fpext float %1026 to double
  %1028 = load float, ptr %88, align 4, !tbaa !20
  %1029 = fpext float %1028 to double
  %1030 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 2.300000e+01, double noundef %1027, double noundef %1029)
  br label %1031

1031:                                             ; preds = %1020, %1017
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #5
  %1032 = load ptr, ptr %2, align 8, !tbaa !5
  %1033 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %1032, i32 0, i32 0
  %1034 = load i32, ptr %1033, align 4, !tbaa !18
  %1035 = add nsw i32 %1034, 1
  store i32 %1035, ptr %1033, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %89) #5
  %1036 = getelementptr inbounds [3 x [3 x float]], ptr %3, i64 0, i64 2
  %1037 = getelementptr inbounds [3 x float], ptr %1036, i64 0, i64 1
  %1038 = load float, ptr %1037, align 4, !tbaa !11
  store float %1038, ptr %89, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %90) #5
  %1039 = load float, ptr %89, align 4, !tbaa !20
  %1040 = fsub float %1039, 2.500000e+01
  store float %1040, ptr %90, align 4, !tbaa !20
  %1041 = load float, ptr %90, align 4, !tbaa !20
  %1042 = fcmp olt float %1041, 0xBE80000000000000
  br i1 %1042, label %1046, label %1043

1043:                                             ; preds = %1031
  %1044 = load float, ptr %90, align 4, !tbaa !20
  %1045 = fcmp olt float 0x3E80000000000000, %1044
  br i1 %1045, label %1046, label %1057

1046:                                             ; preds = %1043, %1031
  %1047 = load ptr, ptr %2, align 8, !tbaa !5
  %1048 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %1047, i32 0, i32 1
  %1049 = load i32, ptr %1048, align 4, !tbaa !22
  %1050 = add nsw i32 %1049, 1
  store i32 %1050, ptr %1048, align 4, !tbaa !22
  %1051 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 228)
  %1052 = load float, ptr %89, align 4, !tbaa !20
  %1053 = fpext float %1052 to double
  %1054 = load float, ptr %90, align 4, !tbaa !20
  %1055 = fpext float %1054 to double
  %1056 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 2.500000e+01, double noundef %1053, double noundef %1055)
  br label %1057

1057:                                             ; preds = %1046, %1043
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #5
  %1058 = load ptr, ptr %2, align 8, !tbaa !5
  %1059 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %1058, i32 0, i32 0
  %1060 = load i32, ptr %1059, align 4, !tbaa !18
  %1061 = add nsw i32 %1060, 1
  store i32 %1061, ptr %1059, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #5
  %1062 = getelementptr inbounds [3 x [3 x float]], ptr %3, i64 0, i64 2
  %1063 = getelementptr inbounds [3 x float], ptr %1062, i64 0, i64 2
  %1064 = load float, ptr %1063, align 4, !tbaa !11
  store float %1064, ptr %91, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %92) #5
  %1065 = load float, ptr %91, align 4, !tbaa !20
  %1066 = fsub float %1065, 2.700000e+01
  store float %1066, ptr %92, align 4, !tbaa !20
  %1067 = load float, ptr %92, align 4, !tbaa !20
  %1068 = fcmp olt float %1067, 0xBE80000000000000
  br i1 %1068, label %1072, label %1069

1069:                                             ; preds = %1057
  %1070 = load float, ptr %92, align 4, !tbaa !20
  %1071 = fcmp olt float 0x3E80000000000000, %1070
  br i1 %1071, label %1072, label %1083

1072:                                             ; preds = %1069, %1057
  %1073 = load ptr, ptr %2, align 8, !tbaa !5
  %1074 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %1073, i32 0, i32 1
  %1075 = load i32, ptr %1074, align 4, !tbaa !22
  %1076 = add nsw i32 %1075, 1
  store i32 %1076, ptr %1074, align 4, !tbaa !22
  %1077 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 229)
  %1078 = load float, ptr %91, align 4, !tbaa !20
  %1079 = fpext float %1078 to double
  %1080 = load float, ptr %92, align 4, !tbaa !20
  %1081 = fpext float %1080 to double
  %1082 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 2.700000e+01, double noundef %1079, double noundef %1081)
  br label %1083

1083:                                             ; preds = %1072, %1069
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #5
  call void @llvm.lifetime.end.p0(i64 36, ptr %4) #5
  call void @llvm.lifetime.end.p0(i64 36, ptr %3) #5
  ret void
}

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @_ZL9HMM_AddM38HMM_Mat3S_(ptr dead_on_unwind noalias writable sret(%union.HMM_Mat3) align 4, ptr noundef byval(%union.HMM_Mat3) align 8, ptr noundef byval(%union.HMM_Mat3) align 8) #3

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @_ZL7HMM_Add8HMM_Mat3S_(ptr dead_on_unwind noalias writable sret(%union.HMM_Mat3) align 4, ptr noundef byval(%union.HMM_Mat3) align 8, ptr noundef byval(%union.HMM_Mat3) align 8) #3

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @_Zpl8HMM_Mat3S_(ptr dead_on_unwind noalias writable sret(%union.HMM_Mat3) align 4, ptr noundef byval(%union.HMM_Mat3) align 8, ptr noundef byval(%union.HMM_Mat3) align 8) #3

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef nonnull align 4 dereferenceable(36) ptr @_ZpLR8HMM_Mat3S_(ptr noundef nonnull align 4 dereferenceable(36), ptr noundef byval(%union.HMM_Mat3) align 8) #3

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { inlinehint 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 #4 = { 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 #5 = { 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 = !{!"int", !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = distinct !{!14, !13}
!15 = distinct !{!15, !13}
!16 = distinct !{!16, !13}
!17 = !{i64 0, i64 36, !11}
!18 = !{!19, !10, i64 0}
!19 = !{!"_ZTS21hmt_testresult_struct", !10, i64 0, !10, i64 4}
!20 = !{!21, !21, i64 0}
!21 = !{!"float", !7, i64 0}
!22 = !{!19, !10, i64 4}


; 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"

%union.HMM_Mat3 = type { [3 x [3 x float]] }

@.str.15 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [34 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: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @_ZL6HMM_M3v(ptr dead_on_unwind noalias writable sret(%union.HMM_Mat3) align 4) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
define dso_local void @_Z23_hmt_test_Addition_Mat3P21hmt_testresult_struct(ptr noundef %0) local_unnamed_addr #3 {
.preheader341:
  %1 = alloca %union.HMM_Mat3, align 16
  %2 = alloca %union.HMM_Mat3, align 16
  %3 = alloca %union.HMM_Mat3, align 4
  %4 = alloca %union.HMM_Mat3, align 4
  %5 = alloca %union.HMM_Mat3, align 4
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %1) #5
  call void @_ZL6HMM_M3v(ptr dead_on_unwind nonnull writable sret(%union.HMM_Mat3) align 4 %1)
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %2) #5
  call void @_ZL6HMM_M3v(ptr dead_on_unwind nonnull writable sret(%union.HMM_Mat3) align 4 %2)
  %6 = getelementptr inbounds i8, ptr %1, i64 4
  %7 = getelementptr inbounds i8, ptr %1, i64 8
  %8 = getelementptr inbounds i8, ptr %1, i64 12
  store <4 x float> <float 1.000000e+00, float 2.000000e+00, float 3.000000e+00, float 4.000000e+00>, ptr %1, align 16, !tbaa !5
  %9 = getelementptr inbounds i8, ptr %1, i64 16
  %10 = getelementptr inbounds i8, ptr %1, i64 20
  %11 = getelementptr inbounds i8, ptr %1, i64 24
  %12 = getelementptr inbounds i8, ptr %1, i64 28
  store <4 x float> <float 5.000000e+00, float 6.000000e+00, float 7.000000e+00, float 8.000000e+00>, ptr %9, align 16, !tbaa !5
  %13 = getelementptr inbounds i8, ptr %1, i64 32
  store float 9.000000e+00, ptr %13, align 16, !tbaa !5
  store <4 x float> <float 1.000000e+01, float 1.100000e+01, float 1.200000e+01, float 1.300000e+01>, ptr %2, align 16, !tbaa !5
  %14 = getelementptr inbounds i8, ptr %2, i64 16
  store <4 x float> <float 1.400000e+01, float 1.500000e+01, float 1.600000e+01, float 1.700000e+01>, ptr %14, align 16, !tbaa !5
  %15 = getelementptr inbounds i8, ptr %2, i64 32
  store float 1.800000e+01, ptr %15, align 16, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %3) #5
  call void @_ZL9HMM_AddM38HMM_Mat3S_(ptr dead_on_unwind nonnull writable sret(%union.HMM_Mat3) align 4 %3, ptr noundef nonnull byval(%union.HMM_Mat3) align 8 %1, ptr noundef nonnull byval(%union.HMM_Mat3) align 8 %2)
  %16 = load i32, ptr %0, align 4, !tbaa !8
  %17 = add nsw i32 %16, 1
  store i32 %17, ptr %0, align 4, !tbaa !8
  %18 = load float, ptr %3, align 4, !tbaa !5
  %19 = fadd float %18, -1.100000e+01
  %20 = call float @llvm.fabs.f32(float %19)
  %or.cond = fcmp ogt float %20, 0x3E80000000000000
  br i1 %or.cond, label %21, label %29

21:                                               ; preds = %.preheader341
  %22 = getelementptr inbounds i8, ptr %0, i64 4
  %23 = load i32, ptr %22, align 4, !tbaa !11
  %24 = add nsw i32 %23, 1
  store i32 %24, ptr %22, align 4, !tbaa !11
  %25 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 182)
  %26 = fpext float %18 to double
  %27 = fpext float %19 to double
  %28 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 1.100000e+01, double noundef %26, double noundef %27)
  %.pre = load i32, ptr %0, align 4, !tbaa !8
  br label %29

29:                                               ; preds = %.preheader341, %21
  %30 = phi i32 [ %17, %.preheader341 ], [ %.pre, %21 ]
  %31 = add nsw i32 %30, 1
  store i32 %31, ptr %0, align 4, !tbaa !8
  %32 = getelementptr inbounds i8, ptr %3, i64 4
  %33 = load float, ptr %32, align 4, !tbaa !5
  %34 = fadd float %33, -1.300000e+01
  %35 = call float @llvm.fabs.f32(float %34)
  %or.cond3 = fcmp ogt float %35, 0x3E80000000000000
  br i1 %or.cond3, label %36, label %44

36:                                               ; preds = %29
  %37 = getelementptr inbounds i8, ptr %0, i64 4
  %38 = load i32, ptr %37, align 4, !tbaa !11
  %39 = add nsw i32 %38, 1
  store i32 %39, ptr %37, align 4, !tbaa !11
  %40 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 183)
  %41 = fpext float %33 to double
  %42 = fpext float %34 to double
  %43 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 1.300000e+01, double noundef %41, double noundef %42)
  %.pre355 = load i32, ptr %0, align 4, !tbaa !8
  br label %44

44:                                               ; preds = %29, %36
  %45 = phi i32 [ %31, %29 ], [ %.pre355, %36 ]
  %46 = add nsw i32 %45, 1
  store i32 %46, ptr %0, align 4, !tbaa !8
  %47 = getelementptr inbounds i8, ptr %3, i64 8
  %48 = load float, ptr %47, align 4, !tbaa !5
  %49 = fadd float %48, -1.500000e+01
  %50 = call float @llvm.fabs.f32(float %49)
  %or.cond5 = fcmp ogt float %50, 0x3E80000000000000
  br i1 %or.cond5, label %51, label %59

51:                                               ; preds = %44
  %52 = getelementptr inbounds i8, ptr %0, i64 4
  %53 = load i32, ptr %52, align 4, !tbaa !11
  %54 = add nsw i32 %53, 1
  store i32 %54, ptr %52, align 4, !tbaa !11
  %55 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 184)
  %56 = fpext float %48 to double
  %57 = fpext float %49 to double
  %58 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 1.500000e+01, double noundef %56, double noundef %57)
  %.pre356 = load i32, ptr %0, align 4, !tbaa !8
  br label %59

59:                                               ; preds = %44, %51
  %60 = phi i32 [ %46, %44 ], [ %.pre356, %51 ]
  %61 = add nsw i32 %60, 1
  store i32 %61, ptr %0, align 4, !tbaa !8
  %62 = getelementptr inbounds i8, ptr %3, i64 12
  %63 = load float, ptr %62, align 4, !tbaa !5
  %64 = fadd float %63, -1.700000e+01
  %65 = call float @llvm.fabs.f32(float %64)
  %or.cond7 = fcmp ogt float %65, 0x3E80000000000000
  br i1 %or.cond7, label %66, label %74

66:                                               ; preds = %59
  %67 = getelementptr inbounds i8, ptr %0, i64 4
  %68 = load i32, ptr %67, align 4, !tbaa !11
  %69 = add nsw i32 %68, 1
  store i32 %69, ptr %67, align 4, !tbaa !11
  %70 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 185)
  %71 = fpext float %63 to double
  %72 = fpext float %64 to double
  %73 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 1.700000e+01, double noundef %71, double noundef %72)
  %.pre357 = load i32, ptr %0, align 4, !tbaa !8
  br label %74

74:                                               ; preds = %59, %66
  %75 = phi i32 [ %61, %59 ], [ %.pre357, %66 ]
  %76 = add nsw i32 %75, 1
  store i32 %76, ptr %0, align 4, !tbaa !8
  %77 = getelementptr inbounds i8, ptr %3, i64 16
  %78 = load float, ptr %77, align 4, !tbaa !5
  %79 = fadd float %78, -1.900000e+01
  %80 = call float @llvm.fabs.f32(float %79)
  %or.cond9 = fcmp ogt float %80, 0x3E80000000000000
  br i1 %or.cond9, label %81, label %89

81:                                               ; preds = %74
  %82 = getelementptr inbounds i8, ptr %0, i64 4
  %83 = load i32, ptr %82, align 4, !tbaa !11
  %84 = add nsw i32 %83, 1
  store i32 %84, ptr %82, align 4, !tbaa !11
  %85 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 186)
  %86 = fpext float %78 to double
  %87 = fpext float %79 to double
  %88 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 1.900000e+01, double noundef %86, double noundef %87)
  %.pre358 = load i32, ptr %0, align 4, !tbaa !8
  br label %89

89:                                               ; preds = %74, %81
  %90 = phi i32 [ %76, %74 ], [ %.pre358, %81 ]
  %91 = add nsw i32 %90, 1
  store i32 %91, ptr %0, align 4, !tbaa !8
  %92 = getelementptr inbounds i8, ptr %3, i64 20
  %93 = load float, ptr %92, align 4, !tbaa !5
  %94 = fadd float %93, -2.100000e+01
  %95 = call float @llvm.fabs.f32(float %94)
  %or.cond11 = fcmp ogt float %95, 0x3E80000000000000
  br i1 %or.cond11, label %96, label %104

96:                                               ; preds = %89
  %97 = getelementptr inbounds i8, ptr %0, i64 4
  %98 = load i32, ptr %97, align 4, !tbaa !11
  %99 = add nsw i32 %98, 1
  store i32 %99, ptr %97, align 4, !tbaa !11
  %100 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 187)
  %101 = fpext float %93 to double
  %102 = fpext float %94 to double
  %103 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 2.100000e+01, double noundef %101, double noundef %102)
  %.pre359 = load i32, ptr %0, align 4, !tbaa !8
  br label %104

104:                                              ; preds = %89, %96
  %105 = phi i32 [ %91, %89 ], [ %.pre359, %96 ]
  %106 = add nsw i32 %105, 1
  store i32 %106, ptr %0, align 4, !tbaa !8
  %107 = getelementptr inbounds i8, ptr %3, i64 24
  %108 = load float, ptr %107, align 4, !tbaa !5
  %109 = fadd float %108, -2.300000e+01
  %110 = call float @llvm.fabs.f32(float %109)
  %or.cond13 = fcmp ogt float %110, 0x3E80000000000000
  br i1 %or.cond13, label %111, label %119

111:                                              ; preds = %104
  %112 = getelementptr inbounds i8, ptr %0, i64 4
  %113 = load i32, ptr %112, align 4, !tbaa !11
  %114 = add nsw i32 %113, 1
  store i32 %114, ptr %112, align 4, !tbaa !11
  %115 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 188)
  %116 = fpext float %108 to double
  %117 = fpext float %109 to double
  %118 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 2.300000e+01, double noundef %116, double noundef %117)
  %.pre360 = load i32, ptr %0, align 4, !tbaa !8
  br label %119

119:                                              ; preds = %104, %111
  %120 = phi i32 [ %106, %104 ], [ %.pre360, %111 ]
  %121 = add nsw i32 %120, 1
  store i32 %121, ptr %0, align 4, !tbaa !8
  %122 = getelementptr inbounds i8, ptr %3, i64 28
  %123 = load float, ptr %122, align 4, !tbaa !5
  %124 = fadd float %123, -2.500000e+01
  %125 = call float @llvm.fabs.f32(float %124)
  %or.cond15 = fcmp ogt float %125, 0x3E80000000000000
  br i1 %or.cond15, label %126, label %134

126:                                              ; preds = %119
  %127 = getelementptr inbounds i8, ptr %0, i64 4
  %128 = load i32, ptr %127, align 4, !tbaa !11
  %129 = add nsw i32 %128, 1
  store i32 %129, ptr %127, align 4, !tbaa !11
  %130 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 189)
  %131 = fpext float %123 to double
  %132 = fpext float %124 to double
  %133 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 2.500000e+01, double noundef %131, double noundef %132)
  %.pre361 = load i32, ptr %0, align 4, !tbaa !8
  br label %134

134:                                              ; preds = %119, %126
  %135 = phi i32 [ %121, %119 ], [ %.pre361, %126 ]
  %136 = add nsw i32 %135, 1
  store i32 %136, ptr %0, align 4, !tbaa !8
  %137 = getelementptr inbounds i8, ptr %3, i64 32
  %138 = load float, ptr %137, align 4, !tbaa !5
  %139 = fadd float %138, -2.700000e+01
  %140 = call float @llvm.fabs.f32(float %139)
  %or.cond17 = fcmp ogt float %140, 0x3E80000000000000
  br i1 %or.cond17, label %141, label %149

141:                                              ; preds = %134
  %142 = getelementptr inbounds i8, ptr %0, i64 4
  %143 = load i32, ptr %142, align 4, !tbaa !11
  %144 = add nsw i32 %143, 1
  store i32 %144, ptr %142, align 4, !tbaa !11
  %145 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 190)
  %146 = fpext float %138 to double
  %147 = fpext float %139 to double
  %148 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 2.700000e+01, double noundef %146, double noundef %147)
  br label %149

149:                                              ; preds = %134, %141
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %3) #5
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %4) #5
  call void @_ZL7HMM_Add8HMM_Mat3S_(ptr dead_on_unwind nonnull writable sret(%union.HMM_Mat3) align 4 %4, ptr noundef nonnull byval(%union.HMM_Mat3) align 8 %1, ptr noundef nonnull byval(%union.HMM_Mat3) align 8 %2)
  %150 = load i32, ptr %0, align 4, !tbaa !8
  %151 = add nsw i32 %150, 1
  store i32 %151, ptr %0, align 4, !tbaa !8
  %152 = load float, ptr %4, align 4, !tbaa !5
  %153 = fadd float %152, -1.100000e+01
  %154 = call float @llvm.fabs.f32(float %153)
  %or.cond19 = fcmp ogt float %154, 0x3E80000000000000
  br i1 %or.cond19, label %155, label %163

155:                                              ; preds = %149
  %156 = getelementptr inbounds i8, ptr %0, i64 4
  %157 = load i32, ptr %156, align 4, !tbaa !11
  %158 = add nsw i32 %157, 1
  store i32 %158, ptr %156, align 4, !tbaa !11
  %159 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 196)
  %160 = fpext float %152 to double
  %161 = fpext float %153 to double
  %162 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 1.100000e+01, double noundef %160, double noundef %161)
  %.pre362 = load i32, ptr %0, align 4, !tbaa !8
  br label %163

163:                                              ; preds = %149, %155
  %164 = phi i32 [ %151, %149 ], [ %.pre362, %155 ]
  %165 = add nsw i32 %164, 1
  store i32 %165, ptr %0, align 4, !tbaa !8
  %166 = getelementptr inbounds i8, ptr %4, i64 4
  %167 = load float, ptr %166, align 4, !tbaa !5
  %168 = fadd float %167, -1.300000e+01
  %169 = call float @llvm.fabs.f32(float %168)
  %or.cond21 = fcmp ogt float %169, 0x3E80000000000000
  br i1 %or.cond21, label %170, label %178

170:                                              ; preds = %163
  %171 = getelementptr inbounds i8, ptr %0, i64 4
  %172 = load i32, ptr %171, align 4, !tbaa !11
  %173 = add nsw i32 %172, 1
  store i32 %173, ptr %171, align 4, !tbaa !11
  %174 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 197)
  %175 = fpext float %167 to double
  %176 = fpext float %168 to double
  %177 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 1.300000e+01, double noundef %175, double noundef %176)
  %.pre363 = load i32, ptr %0, align 4, !tbaa !8
  br label %178

178:                                              ; preds = %163, %170
  %179 = phi i32 [ %165, %163 ], [ %.pre363, %170 ]
  %180 = add nsw i32 %179, 1
  store i32 %180, ptr %0, align 4, !tbaa !8
  %181 = getelementptr inbounds i8, ptr %4, i64 8
  %182 = load float, ptr %181, align 4, !tbaa !5
  %183 = fadd float %182, -1.500000e+01
  %184 = call float @llvm.fabs.f32(float %183)
  %or.cond23 = fcmp ogt float %184, 0x3E80000000000000
  br i1 %or.cond23, label %185, label %193

185:                                              ; preds = %178
  %186 = getelementptr inbounds i8, ptr %0, i64 4
  %187 = load i32, ptr %186, align 4, !tbaa !11
  %188 = add nsw i32 %187, 1
  store i32 %188, ptr %186, align 4, !tbaa !11
  %189 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 198)
  %190 = fpext float %182 to double
  %191 = fpext float %183 to double
  %192 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 1.500000e+01, double noundef %190, double noundef %191)
  %.pre364 = load i32, ptr %0, align 4, !tbaa !8
  br label %193

193:                                              ; preds = %178, %185
  %194 = phi i32 [ %180, %178 ], [ %.pre364, %185 ]
  %195 = add nsw i32 %194, 1
  store i32 %195, ptr %0, align 4, !tbaa !8
  %196 = getelementptr inbounds i8, ptr %4, i64 12
  %197 = load float, ptr %196, align 4, !tbaa !5
  %198 = fadd float %197, -1.700000e+01
  %199 = call float @llvm.fabs.f32(float %198)
  %or.cond25 = fcmp ogt float %199, 0x3E80000000000000
  br i1 %or.cond25, label %200, label %208

200:                                              ; preds = %193
  %201 = getelementptr inbounds i8, ptr %0, i64 4
  %202 = load i32, ptr %201, align 4, !tbaa !11
  %203 = add nsw i32 %202, 1
  store i32 %203, ptr %201, align 4, !tbaa !11
  %204 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 199)
  %205 = fpext float %197 to double
  %206 = fpext float %198 to double
  %207 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 1.700000e+01, double noundef %205, double noundef %206)
  %.pre365 = load i32, ptr %0, align 4, !tbaa !8
  br label %208

208:                                              ; preds = %193, %200
  %209 = phi i32 [ %195, %193 ], [ %.pre365, %200 ]
  %210 = add nsw i32 %209, 1
  store i32 %210, ptr %0, align 4, !tbaa !8
  %211 = getelementptr inbounds i8, ptr %4, i64 16
  %212 = load float, ptr %211, align 4, !tbaa !5
  %213 = fadd float %212, -1.900000e+01
  %214 = call float @llvm.fabs.f32(float %213)
  %or.cond27 = fcmp ogt float %214, 0x3E80000000000000
  br i1 %or.cond27, label %215, label %223

215:                                              ; preds = %208
  %216 = getelementptr inbounds i8, ptr %0, i64 4
  %217 = load i32, ptr %216, align 4, !tbaa !11
  %218 = add nsw i32 %217, 1
  store i32 %218, ptr %216, align 4, !tbaa !11
  %219 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 200)
  %220 = fpext float %212 to double
  %221 = fpext float %213 to double
  %222 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 1.900000e+01, double noundef %220, double noundef %221)
  %.pre366 = load i32, ptr %0, align 4, !tbaa !8
  br label %223

223:                                              ; preds = %208, %215
  %224 = phi i32 [ %210, %208 ], [ %.pre366, %215 ]
  %225 = add nsw i32 %224, 1
  store i32 %225, ptr %0, align 4, !tbaa !8
  %226 = getelementptr inbounds i8, ptr %4, i64 20
  %227 = load float, ptr %226, align 4, !tbaa !5
  %228 = fadd float %227, -2.100000e+01
  %229 = call float @llvm.fabs.f32(float %228)
  %or.cond29 = fcmp ogt float %229, 0x3E80000000000000
  br i1 %or.cond29, label %230, label %238

230:                                              ; preds = %223
  %231 = getelementptr inbounds i8, ptr %0, i64 4
  %232 = load i32, ptr %231, align 4, !tbaa !11
  %233 = add nsw i32 %232, 1
  store i32 %233, ptr %231, align 4, !tbaa !11
  %234 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 201)
  %235 = fpext float %227 to double
  %236 = fpext float %228 to double
  %237 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 2.100000e+01, double noundef %235, double noundef %236)
  %.pre367 = load i32, ptr %0, align 4, !tbaa !8
  br label %238

238:                                              ; preds = %223, %230
  %239 = phi i32 [ %225, %223 ], [ %.pre367, %230 ]
  %240 = add nsw i32 %239, 1
  store i32 %240, ptr %0, align 4, !tbaa !8
  %241 = getelementptr inbounds i8, ptr %4, i64 24
  %242 = load float, ptr %241, align 4, !tbaa !5
  %243 = fadd float %242, -2.300000e+01
  %244 = call float @llvm.fabs.f32(float %243)
  %or.cond31 = fcmp ogt float %244, 0x3E80000000000000
  br i1 %or.cond31, label %245, label %253

245:                                              ; preds = %238
  %246 = getelementptr inbounds i8, ptr %0, i64 4
  %247 = load i32, ptr %246, align 4, !tbaa !11
  %248 = add nsw i32 %247, 1
  store i32 %248, ptr %246, align 4, !tbaa !11
  %249 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 202)
  %250 = fpext float %242 to double
  %251 = fpext float %243 to double
  %252 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 2.300000e+01, double noundef %250, double noundef %251)
  %.pre368 = load i32, ptr %0, align 4, !tbaa !8
  br label %253

253:                                              ; preds = %238, %245
  %254 = phi i32 [ %240, %238 ], [ %.pre368, %245 ]
  %255 = add nsw i32 %254, 1
  store i32 %255, ptr %0, align 4, !tbaa !8
  %256 = getelementptr inbounds i8, ptr %4, i64 28
  %257 = load float, ptr %256, align 4, !tbaa !5
  %258 = fadd float %257, -2.500000e+01
  %259 = call float @llvm.fabs.f32(float %258)
  %or.cond33 = fcmp ogt float %259, 0x3E80000000000000
  br i1 %or.cond33, label %260, label %268

260:                                              ; preds = %253
  %261 = getelementptr inbounds i8, ptr %0, i64 4
  %262 = load i32, ptr %261, align 4, !tbaa !11
  %263 = add nsw i32 %262, 1
  store i32 %263, ptr %261, align 4, !tbaa !11
  %264 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 203)
  %265 = fpext float %257 to double
  %266 = fpext float %258 to double
  %267 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 2.500000e+01, double noundef %265, double noundef %266)
  %.pre369 = load i32, ptr %0, align 4, !tbaa !8
  br label %268

268:                                              ; preds = %253, %260
  %269 = phi i32 [ %255, %253 ], [ %.pre369, %260 ]
  %270 = add nsw i32 %269, 1
  store i32 %270, ptr %0, align 4, !tbaa !8
  %271 = getelementptr inbounds i8, ptr %4, i64 32
  %272 = load float, ptr %271, align 4, !tbaa !5
  %273 = fadd float %272, -2.700000e+01
  %274 = call float @llvm.fabs.f32(float %273)
  %or.cond35 = fcmp ogt float %274, 0x3E80000000000000
  br i1 %or.cond35, label %275, label %283

275:                                              ; preds = %268
  %276 = getelementptr inbounds i8, ptr %0, i64 4
  %277 = load i32, ptr %276, align 4, !tbaa !11
  %278 = add nsw i32 %277, 1
  store i32 %278, ptr %276, align 4, !tbaa !11
  %279 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 204)
  %280 = fpext float %272 to double
  %281 = fpext float %273 to double
  %282 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 2.700000e+01, double noundef %280, double noundef %281)
  br label %283

283:                                              ; preds = %268, %275
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %4) #5
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %5) #5
  call void @_Zpl8HMM_Mat3S_(ptr dead_on_unwind nonnull writable sret(%union.HMM_Mat3) align 4 %5, ptr noundef nonnull byval(%union.HMM_Mat3) align 8 %1, ptr noundef nonnull byval(%union.HMM_Mat3) align 8 %2)
  %284 = load i32, ptr %0, align 4, !tbaa !8
  %285 = add nsw i32 %284, 1
  store i32 %285, ptr %0, align 4, !tbaa !8
  %286 = load float, ptr %5, align 4, !tbaa !5
  %287 = fadd float %286, -1.100000e+01
  %288 = call float @llvm.fabs.f32(float %287)
  %or.cond37 = fcmp ogt float %288, 0x3E80000000000000
  br i1 %or.cond37, label %289, label %297

289:                                              ; preds = %283
  %290 = getelementptr inbounds i8, ptr %0, i64 4
  %291 = load i32, ptr %290, align 4, !tbaa !11
  %292 = add nsw i32 %291, 1
  store i32 %292, ptr %290, align 4, !tbaa !11
  %293 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 210)
  %294 = fpext float %286 to double
  %295 = fpext float %287 to double
  %296 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 1.100000e+01, double noundef %294, double noundef %295)
  %.pre370 = load i32, ptr %0, align 4, !tbaa !8
  br label %297

297:                                              ; preds = %283, %289
  %298 = phi i32 [ %285, %283 ], [ %.pre370, %289 ]
  %299 = add nsw i32 %298, 1
  store i32 %299, ptr %0, align 4, !tbaa !8
  %300 = getelementptr inbounds i8, ptr %5, i64 4
  %301 = load float, ptr %300, align 4, !tbaa !5
  %302 = fadd float %301, -1.300000e+01
  %303 = call float @llvm.fabs.f32(float %302)
  %or.cond39 = fcmp ogt float %303, 0x3E80000000000000
  br i1 %or.cond39, label %304, label %312

304:                                              ; preds = %297
  %305 = getelementptr inbounds i8, ptr %0, i64 4
  %306 = load i32, ptr %305, align 4, !tbaa !11
  %307 = add nsw i32 %306, 1
  store i32 %307, ptr %305, align 4, !tbaa !11
  %308 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 211)
  %309 = fpext float %301 to double
  %310 = fpext float %302 to double
  %311 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 1.300000e+01, double noundef %309, double noundef %310)
  %.pre371 = load i32, ptr %0, align 4, !tbaa !8
  br label %312

312:                                              ; preds = %297, %304
  %313 = phi i32 [ %299, %297 ], [ %.pre371, %304 ]
  %314 = add nsw i32 %313, 1
  store i32 %314, ptr %0, align 4, !tbaa !8
  %315 = getelementptr inbounds i8, ptr %5, i64 8
  %316 = load float, ptr %315, align 4, !tbaa !5
  %317 = fadd float %316, -1.500000e+01
  %318 = call float @llvm.fabs.f32(float %317)
  %or.cond41 = fcmp ogt float %318, 0x3E80000000000000
  br i1 %or.cond41, label %319, label %327

319:                                              ; preds = %312
  %320 = getelementptr inbounds i8, ptr %0, i64 4
  %321 = load i32, ptr %320, align 4, !tbaa !11
  %322 = add nsw i32 %321, 1
  store i32 %322, ptr %320, align 4, !tbaa !11
  %323 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 212)
  %324 = fpext float %316 to double
  %325 = fpext float %317 to double
  %326 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 1.500000e+01, double noundef %324, double noundef %325)
  %.pre372 = load i32, ptr %0, align 4, !tbaa !8
  br label %327

327:                                              ; preds = %312, %319
  %328 = phi i32 [ %314, %312 ], [ %.pre372, %319 ]
  %329 = add nsw i32 %328, 1
  store i32 %329, ptr %0, align 4, !tbaa !8
  %330 = getelementptr inbounds i8, ptr %5, i64 12
  %331 = load float, ptr %330, align 4, !tbaa !5
  %332 = fadd float %331, -1.700000e+01
  %333 = call float @llvm.fabs.f32(float %332)
  %or.cond43 = fcmp ogt float %333, 0x3E80000000000000
  br i1 %or.cond43, label %334, label %342

334:                                              ; preds = %327
  %335 = getelementptr inbounds i8, ptr %0, i64 4
  %336 = load i32, ptr %335, align 4, !tbaa !11
  %337 = add nsw i32 %336, 1
  store i32 %337, ptr %335, align 4, !tbaa !11
  %338 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 213)
  %339 = fpext float %331 to double
  %340 = fpext float %332 to double
  %341 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 1.700000e+01, double noundef %339, double noundef %340)
  %.pre373 = load i32, ptr %0, align 4, !tbaa !8
  br label %342

342:                                              ; preds = %327, %334
  %343 = phi i32 [ %329, %327 ], [ %.pre373, %334 ]
  %344 = add nsw i32 %343, 1
  store i32 %344, ptr %0, align 4, !tbaa !8
  %345 = getelementptr inbounds i8, ptr %5, i64 16
  %346 = load float, ptr %345, align 4, !tbaa !5
  %347 = fadd float %346, -1.900000e+01
  %348 = call float @llvm.fabs.f32(float %347)
  %or.cond45 = fcmp ogt float %348, 0x3E80000000000000
  br i1 %or.cond45, label %349, label %357

349:                                              ; preds = %342
  %350 = getelementptr inbounds i8, ptr %0, i64 4
  %351 = load i32, ptr %350, align 4, !tbaa !11
  %352 = add nsw i32 %351, 1
  store i32 %352, ptr %350, align 4, !tbaa !11
  %353 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 214)
  %354 = fpext float %346 to double
  %355 = fpext float %347 to double
  %356 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 1.900000e+01, double noundef %354, double noundef %355)
  %.pre374 = load i32, ptr %0, align 4, !tbaa !8
  br label %357

357:                                              ; preds = %342, %349
  %358 = phi i32 [ %344, %342 ], [ %.pre374, %349 ]
  %359 = add nsw i32 %358, 1
  store i32 %359, ptr %0, align 4, !tbaa !8
  %360 = getelementptr inbounds i8, ptr %5, i64 20
  %361 = load float, ptr %360, align 4, !tbaa !5
  %362 = fadd float %361, -2.100000e+01
  %363 = call float @llvm.fabs.f32(float %362)
  %or.cond47 = fcmp ogt float %363, 0x3E80000000000000
  br i1 %or.cond47, label %364, label %372

364:                                              ; preds = %357
  %365 = getelementptr inbounds i8, ptr %0, i64 4
  %366 = load i32, ptr %365, align 4, !tbaa !11
  %367 = add nsw i32 %366, 1
  store i32 %367, ptr %365, align 4, !tbaa !11
  %368 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 215)
  %369 = fpext float %361 to double
  %370 = fpext float %362 to double
  %371 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 2.100000e+01, double noundef %369, double noundef %370)
  %.pre375 = load i32, ptr %0, align 4, !tbaa !8
  br label %372

372:                                              ; preds = %357, %364
  %373 = phi i32 [ %359, %357 ], [ %.pre375, %364 ]
  %374 = add nsw i32 %373, 1
  store i32 %374, ptr %0, align 4, !tbaa !8
  %375 = getelementptr inbounds i8, ptr %5, i64 24
  %376 = load float, ptr %375, align 4, !tbaa !5
  %377 = fadd float %376, -2.300000e+01
  %378 = call float @llvm.fabs.f32(float %377)
  %or.cond49 = fcmp ogt float %378, 0x3E80000000000000
  br i1 %or.cond49, label %379, label %387

379:                                              ; preds = %372
  %380 = getelementptr inbounds i8, ptr %0, i64 4
  %381 = load i32, ptr %380, align 4, !tbaa !11
  %382 = add nsw i32 %381, 1
  store i32 %382, ptr %380, align 4, !tbaa !11
  %383 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 216)
  %384 = fpext float %376 to double
  %385 = fpext float %377 to double
  %386 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 2.300000e+01, double noundef %384, double noundef %385)
  %.pre376 = load i32, ptr %0, align 4, !tbaa !8
  br label %387

387:                                              ; preds = %372, %379
  %388 = phi i32 [ %374, %372 ], [ %.pre376, %379 ]
  %389 = add nsw i32 %388, 1
  store i32 %389, ptr %0, align 4, !tbaa !8
  %390 = getelementptr inbounds i8, ptr %5, i64 28
  %391 = load float, ptr %390, align 4, !tbaa !5
  %392 = fadd float %391, -2.500000e+01
  %393 = call float @llvm.fabs.f32(float %392)
  %or.cond51 = fcmp ogt float %393, 0x3E80000000000000
  br i1 %or.cond51, label %394, label %402

394:                                              ; preds = %387
  %395 = getelementptr inbounds i8, ptr %0, i64 4
  %396 = load i32, ptr %395, align 4, !tbaa !11
  %397 = add nsw i32 %396, 1
  store i32 %397, ptr %395, align 4, !tbaa !11
  %398 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 217)
  %399 = fpext float %391 to double
  %400 = fpext float %392 to double
  %401 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 2.500000e+01, double noundef %399, double noundef %400)
  %.pre377 = load i32, ptr %0, align 4, !tbaa !8
  br label %402

402:                                              ; preds = %387, %394
  %403 = phi i32 [ %389, %387 ], [ %.pre377, %394 ]
  %404 = add nsw i32 %403, 1
  store i32 %404, ptr %0, align 4, !tbaa !8
  %405 = getelementptr inbounds i8, ptr %5, i64 32
  %406 = load float, ptr %405, align 4, !tbaa !5
  %407 = fadd float %406, -2.700000e+01
  %408 = call float @llvm.fabs.f32(float %407)
  %or.cond53 = fcmp ogt float %408, 0x3E80000000000000
  br i1 %or.cond53, label %409, label %417

409:                                              ; preds = %402
  %410 = getelementptr inbounds i8, ptr %0, i64 4
  %411 = load i32, ptr %410, align 4, !tbaa !11
  %412 = add nsw i32 %411, 1
  store i32 %412, ptr %410, align 4, !tbaa !11
  %413 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 218)
  %414 = fpext float %406 to double
  %415 = fpext float %407 to double
  %416 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 2.700000e+01, double noundef %414, double noundef %415)
  br label %417

417:                                              ; preds = %402, %409
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %5) #5
  %418 = call noundef nonnull align 4 dereferenceable(36) ptr @_ZpLR8HMM_Mat3S_(ptr noundef nonnull align 4 dereferenceable(36) %1, ptr noundef nonnull byval(%union.HMM_Mat3) align 8 %2)
  %419 = load i32, ptr %0, align 4, !tbaa !8
  %420 = add nsw i32 %419, 1
  store i32 %420, ptr %0, align 4, !tbaa !8
  %421 = load float, ptr %1, align 16, !tbaa !5
  %422 = fadd float %421, -1.100000e+01
  %423 = call float @llvm.fabs.f32(float %422)
  %or.cond55 = fcmp ogt float %423, 0x3E80000000000000
  br i1 %or.cond55, label %424, label %432

424:                                              ; preds = %417
  %425 = getelementptr inbounds i8, ptr %0, i64 4
  %426 = load i32, ptr %425, align 4, !tbaa !11
  %427 = add nsw i32 %426, 1
  store i32 %427, ptr %425, align 4, !tbaa !11
  %428 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 221)
  %429 = fpext float %421 to double
  %430 = fpext float %422 to double
  %431 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 1.100000e+01, double noundef %429, double noundef %430)
  %.pre378 = load i32, ptr %0, align 4, !tbaa !8
  br label %432

432:                                              ; preds = %417, %424
  %433 = phi i32 [ %420, %417 ], [ %.pre378, %424 ]
  %434 = add nsw i32 %433, 1
  store i32 %434, ptr %0, align 4, !tbaa !8
  %435 = load float, ptr %6, align 4, !tbaa !5
  %436 = fadd float %435, -1.300000e+01
  %437 = call float @llvm.fabs.f32(float %436)
  %or.cond57 = fcmp ogt float %437, 0x3E80000000000000
  br i1 %or.cond57, label %438, label %446

438:                                              ; preds = %432
  %439 = getelementptr inbounds i8, ptr %0, i64 4
  %440 = load i32, ptr %439, align 4, !tbaa !11
  %441 = add nsw i32 %440, 1
  store i32 %441, ptr %439, align 4, !tbaa !11
  %442 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 222)
  %443 = fpext float %435 to double
  %444 = fpext float %436 to double
  %445 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 1.300000e+01, double noundef %443, double noundef %444)
  %.pre379 = load i32, ptr %0, align 4, !tbaa !8
  br label %446

446:                                              ; preds = %432, %438
  %447 = phi i32 [ %434, %432 ], [ %.pre379, %438 ]
  %448 = add nsw i32 %447, 1
  store i32 %448, ptr %0, align 4, !tbaa !8
  %449 = load float, ptr %7, align 8, !tbaa !5
  %450 = fadd float %449, -1.500000e+01
  %451 = call float @llvm.fabs.f32(float %450)
  %or.cond59 = fcmp ogt float %451, 0x3E80000000000000
  br i1 %or.cond59, label %452, label %460

452:                                              ; preds = %446
  %453 = getelementptr inbounds i8, ptr %0, i64 4
  %454 = load i32, ptr %453, align 4, !tbaa !11
  %455 = add nsw i32 %454, 1
  store i32 %455, ptr %453, align 4, !tbaa !11
  %456 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 223)
  %457 = fpext float %449 to double
  %458 = fpext float %450 to double
  %459 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 1.500000e+01, double noundef %457, double noundef %458)
  %.pre380 = load i32, ptr %0, align 4, !tbaa !8
  br label %460

460:                                              ; preds = %446, %452
  %461 = phi i32 [ %448, %446 ], [ %.pre380, %452 ]
  %462 = add nsw i32 %461, 1
  store i32 %462, ptr %0, align 4, !tbaa !8
  %463 = load float, ptr %8, align 4, !tbaa !5
  %464 = fadd float %463, -1.700000e+01
  %465 = call float @llvm.fabs.f32(float %464)
  %or.cond61 = fcmp ogt float %465, 0x3E80000000000000
  br i1 %or.cond61, label %466, label %474

466:                                              ; preds = %460
  %467 = getelementptr inbounds i8, ptr %0, i64 4
  %468 = load i32, ptr %467, align 4, !tbaa !11
  %469 = add nsw i32 %468, 1
  store i32 %469, ptr %467, align 4, !tbaa !11
  %470 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 224)
  %471 = fpext float %463 to double
  %472 = fpext float %464 to double
  %473 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 1.700000e+01, double noundef %471, double noundef %472)
  %.pre381 = load i32, ptr %0, align 4, !tbaa !8
  br label %474

474:                                              ; preds = %460, %466
  %475 = phi i32 [ %462, %460 ], [ %.pre381, %466 ]
  %476 = add nsw i32 %475, 1
  store i32 %476, ptr %0, align 4, !tbaa !8
  %477 = load float, ptr %9, align 16, !tbaa !5
  %478 = fadd float %477, -1.900000e+01
  %479 = call float @llvm.fabs.f32(float %478)
  %or.cond63 = fcmp ogt float %479, 0x3E80000000000000
  br i1 %or.cond63, label %480, label %488

480:                                              ; preds = %474
  %481 = getelementptr inbounds i8, ptr %0, i64 4
  %482 = load i32, ptr %481, align 4, !tbaa !11
  %483 = add nsw i32 %482, 1
  store i32 %483, ptr %481, align 4, !tbaa !11
  %484 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 225)
  %485 = fpext float %477 to double
  %486 = fpext float %478 to double
  %487 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 1.900000e+01, double noundef %485, double noundef %486)
  %.pre382 = load i32, ptr %0, align 4, !tbaa !8
  br label %488

488:                                              ; preds = %474, %480
  %489 = phi i32 [ %476, %474 ], [ %.pre382, %480 ]
  %490 = add nsw i32 %489, 1
  store i32 %490, ptr %0, align 4, !tbaa !8
  %491 = load float, ptr %10, align 4, !tbaa !5
  %492 = fadd float %491, -2.100000e+01
  %493 = call float @llvm.fabs.f32(float %492)
  %or.cond65 = fcmp ogt float %493, 0x3E80000000000000
  br i1 %or.cond65, label %494, label %502

494:                                              ; preds = %488
  %495 = getelementptr inbounds i8, ptr %0, i64 4
  %496 = load i32, ptr %495, align 4, !tbaa !11
  %497 = add nsw i32 %496, 1
  store i32 %497, ptr %495, align 4, !tbaa !11
  %498 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 226)
  %499 = fpext float %491 to double
  %500 = fpext float %492 to double
  %501 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 2.100000e+01, double noundef %499, double noundef %500)
  %.pre383 = load i32, ptr %0, align 4, !tbaa !8
  br label %502

502:                                              ; preds = %488, %494
  %503 = phi i32 [ %490, %488 ], [ %.pre383, %494 ]
  %504 = add nsw i32 %503, 1
  store i32 %504, ptr %0, align 4, !tbaa !8
  %505 = load float, ptr %11, align 8, !tbaa !5
  %506 = fadd float %505, -2.300000e+01
  %507 = call float @llvm.fabs.f32(float %506)
  %or.cond67 = fcmp ogt float %507, 0x3E80000000000000
  br i1 %or.cond67, label %508, label %516

508:                                              ; preds = %502
  %509 = getelementptr inbounds i8, ptr %0, i64 4
  %510 = load i32, ptr %509, align 4, !tbaa !11
  %511 = add nsw i32 %510, 1
  store i32 %511, ptr %509, align 4, !tbaa !11
  %512 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 227)
  %513 = fpext float %505 to double
  %514 = fpext float %506 to double
  %515 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 2.300000e+01, double noundef %513, double noundef %514)
  %.pre384 = load i32, ptr %0, align 4, !tbaa !8
  br label %516

516:                                              ; preds = %502, %508
  %517 = phi i32 [ %504, %502 ], [ %.pre384, %508 ]
  %518 = add nsw i32 %517, 1
  store i32 %518, ptr %0, align 4, !tbaa !8
  %519 = load float, ptr %12, align 4, !tbaa !5
  %520 = fadd float %519, -2.500000e+01
  %521 = call float @llvm.fabs.f32(float %520)
  %or.cond69 = fcmp ogt float %521, 0x3E80000000000000
  br i1 %or.cond69, label %522, label %530

522:                                              ; preds = %516
  %523 = getelementptr inbounds i8, ptr %0, i64 4
  %524 = load i32, ptr %523, align 4, !tbaa !11
  %525 = add nsw i32 %524, 1
  store i32 %525, ptr %523, align 4, !tbaa !11
  %526 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 228)
  %527 = fpext float %519 to double
  %528 = fpext float %520 to double
  %529 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 2.500000e+01, double noundef %527, double noundef %528)
  %.pre385 = load i32, ptr %0, align 4, !tbaa !8
  br label %530

530:                                              ; preds = %516, %522
  %531 = phi i32 [ %518, %516 ], [ %.pre385, %522 ]
  %532 = add nsw i32 %531, 1
  store i32 %532, ptr %0, align 4, !tbaa !8
  %533 = load float, ptr %13, align 16, !tbaa !5
  %534 = fadd float %533, -2.700000e+01
  %535 = call float @llvm.fabs.f32(float %534)
  %or.cond71 = fcmp ogt float %535, 0x3E80000000000000
  br i1 %or.cond71, label %536, label %544

536:                                              ; preds = %530
  %537 = getelementptr inbounds i8, ptr %0, i64 4
  %538 = load i32, ptr %537, align 4, !tbaa !11
  %539 = add nsw i32 %538, 1
  store i32 %539, ptr %537, align 4, !tbaa !11
  %540 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 229)
  %541 = fpext float %533 to double
  %542 = fpext float %534 to double
  %543 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 2.700000e+01, double noundef %541, double noundef %542)
  br label %544

544:                                              ; preds = %530, %536
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %2) #5
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %1) #5
  ret void
}

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @_ZL9HMM_AddM38HMM_Mat3S_(ptr dead_on_unwind noalias writable sret(%union.HMM_Mat3) align 4, ptr noundef byval(%union.HMM_Mat3) align 8, ptr noundef byval(%union.HMM_Mat3) align 8) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @_ZL7HMM_Add8HMM_Mat3S_(ptr dead_on_unwind noalias writable sret(%union.HMM_Mat3) align 4, ptr noundef byval(%union.HMM_Mat3) align 8, ptr noundef byval(%union.HMM_Mat3) align 8) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @_Zpl8HMM_Mat3S_(ptr dead_on_unwind noalias writable sret(%union.HMM_Mat3) align 4, ptr noundef byval(%union.HMM_Mat3) align 8, ptr noundef byval(%union.HMM_Mat3) align 8) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef nonnull align 4 dereferenceable(36) ptr @_ZpLR8HMM_Mat3S_(ptr noundef nonnull align 4 dereferenceable(36), ptr noundef byval(%union.HMM_Mat3) align 8) local_unnamed_addr #2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fabs.f32(float) #4

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 = { inlinehint 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 #3 = { 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 #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = !{!9, !10, i64 0}
!9 = !{!"_ZTS21hmt_testresult_struct", !10, i64 0, !10, i64 4}
!10 = !{!"int", !6, i64 0}
!11 = !{!9, !10, i64 4}


; Effective O3 passes: DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,MemCpyOptPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass