; LLVM IR from HandmadeMath/HandmadeMath :: test/hmm_test.ll (Z35_hmt_test_Multiplication_Mat3ScalarP21hmt_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 @_Z35_hmt_test_Multiplication_Mat3ScalarP21hmt_testresult_struct(ptr noundef %0) #4 {
  %2 = alloca ptr, align 8
  %3 = alloca %union.HMM_Mat3, align 4
  %4 = alloca float, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca %union.HMM_Mat3, align 4
  %10 = alloca %union.HMM_Mat3, align 8
  %11 = alloca float, align 4
  %12 = alloca float, align 4
  %13 = alloca float, align 4
  %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 %union.HMM_Mat3, align 4
  %30 = alloca %union.HMM_Mat3, align 8
  %31 = alloca float, align 4
  %32 = alloca float, align 4
  %33 = alloca float, align 4
  %34 = alloca float, align 4
  %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 %union.HMM_Mat3, align 4
  %50 = alloca %union.HMM_Mat3, align 8
  %51 = alloca float, align 4
  %52 = alloca float, align 4
  %53 = alloca float, align 4
  %54 = alloca float, align 4
  %55 = alloca float, align 4
  %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 %union.HMM_Mat3, align 4
  %70 = alloca %union.HMM_Mat3, align 8
  %71 = alloca float, align 4
  %72 = alloca float, align 4
  %73 = alloca float, align 4
  %74 = alloca float, align 4
  %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
  %93 = alloca float, align 4
  %94 = alloca float, align 4
  %95 = alloca float, align 4
  %96 = alloca float, align 4
  %97 = alloca float, align 4
  %98 = alloca float, align 4
  %99 = alloca float, align 4
  %100 = alloca float, align 4
  %101 = alloca float, align 4
  %102 = alloca float, align 4
  %103 = alloca float, align 4
  %104 = alloca float, align 4
  %105 = alloca float, align 4
  %106 = 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 4, ptr %4) #5
  store float 1.000000e+01, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #5
  store i32 1, ptr %5, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #5
  store i32 0, ptr %6, align 4, !tbaa !11
  br label %107

107:                                              ; preds = %130, %1
  %108 = load i32, ptr %6, align 4, !tbaa !11
  %109 = icmp slt i32 %108, 3
  br i1 %109, label %111, label %110

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

111:                                              ; preds = %107
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #5
  store i32 0, ptr %8, align 4, !tbaa !11
  br label %112

112:                                              ; preds = %126, %111
  %113 = load i32, ptr %8, align 4, !tbaa !11
  %114 = icmp slt i32 %113, 3
  br i1 %114, label %116, label %115

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

116:                                              ; preds = %112
  %117 = load i32, ptr %5, align 4, !tbaa !11
  %118 = add nsw i32 %117, 1
  store i32 %118, ptr %5, align 4, !tbaa !11
  %119 = sitofp i32 %117 to float
  %120 = load i32, ptr %6, align 4, !tbaa !11
  %121 = sext i32 %120 to i64
  %122 = getelementptr inbounds [3 x [3 x float]], ptr %3, i64 0, i64 %121
  %123 = load i32, ptr %8, align 4, !tbaa !11
  %124 = sext i32 %123 to i64
  %125 = getelementptr inbounds [3 x float], ptr %122, i64 0, i64 %124
  store float %119, ptr %125, align 4, !tbaa !13
  br label %126

126:                                              ; preds = %116
  %127 = load i32, ptr %8, align 4, !tbaa !11
  %128 = add nsw i32 %127, 1
  store i32 %128, ptr %8, align 4, !tbaa !11
  br label %112, !llvm.loop !14

129:                                              ; preds = %115
  br label %130

130:                                              ; preds = %129
  %131 = load i32, ptr %6, align 4, !tbaa !11
  %132 = add nsw i32 %131, 1
  store i32 %132, ptr %6, align 4, !tbaa !11
  br label %107, !llvm.loop !16

133:                                              ; preds = %110
  call void @llvm.lifetime.start.p0(i64 36, ptr %9) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %10, ptr align 4 %3, i64 36, i1 false), !tbaa.struct !17
  %134 = load float, ptr %4, align 4, !tbaa !9
  call void @_ZL10HMM_MulM3F8HMM_Mat3f(ptr dead_on_unwind writable sret(%union.HMM_Mat3) align 4 %9, ptr noundef byval(%union.HMM_Mat3) align 8 %10, float noundef %134)
  %135 = load ptr, ptr %2, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %135, i32 0, i32 0
  %137 = load i32, ptr %136, align 4, !tbaa !18
  %138 = add nsw i32 %137, 1
  store i32 %138, ptr %136, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  %139 = getelementptr inbounds [3 x [3 x float]], ptr %9, i64 0, i64 0
  %140 = getelementptr inbounds [3 x float], ptr %139, i64 0, i64 0
  %141 = load float, ptr %140, align 4, !tbaa !13
  store float %141, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  %142 = load float, ptr %11, align 4, !tbaa !9
  %143 = fsub float %142, 1.000000e+01
  store float %143, ptr %12, align 4, !tbaa !9
  %144 = load float, ptr %12, align 4, !tbaa !9
  %145 = fcmp olt float %144, 0xBE80000000000000
  br i1 %145, label %149, label %146

146:                                              ; preds = %133
  %147 = load float, ptr %12, align 4, !tbaa !9
  %148 = fcmp olt float 0x3E80000000000000, %147
  br i1 %148, label %149, label %160

149:                                              ; preds = %146, %133
  %150 = load ptr, ptr %2, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %150, i32 0, i32 1
  %152 = load i32, ptr %151, align 4, !tbaa !20
  %153 = add nsw i32 %152, 1
  store i32 %153, ptr %151, align 4, !tbaa !20
  %154 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 433)
  %155 = load float, ptr %11, align 4, !tbaa !9
  %156 = fpext float %155 to double
  %157 = load float, ptr %12, align 4, !tbaa !9
  %158 = fpext float %157 to double
  %159 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 1.000000e+01, double noundef %156, double noundef %158)
  br label %160

160:                                              ; preds = %149, %146
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  %161 = load ptr, ptr %2, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %161, i32 0, i32 0
  %163 = load i32, ptr %162, align 4, !tbaa !18
  %164 = add nsw i32 %163, 1
  store i32 %164, ptr %162, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  %165 = getelementptr inbounds [3 x [3 x float]], ptr %9, i64 0, i64 0
  %166 = getelementptr inbounds [3 x float], ptr %165, i64 0, i64 1
  %167 = load float, ptr %166, align 4, !tbaa !13
  store float %167, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  %168 = load float, ptr %13, align 4, !tbaa !9
  %169 = fsub float %168, 2.000000e+01
  store float %169, ptr %14, align 4, !tbaa !9
  %170 = load float, ptr %14, align 4, !tbaa !9
  %171 = fcmp olt float %170, 0xBE80000000000000
  br i1 %171, label %175, label %172

172:                                              ; preds = %160
  %173 = load float, ptr %14, align 4, !tbaa !9
  %174 = fcmp olt float 0x3E80000000000000, %173
  br i1 %174, label %175, label %186

175:                                              ; preds = %172, %160
  %176 = load ptr, ptr %2, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %176, i32 0, i32 1
  %178 = load i32, ptr %177, align 4, !tbaa !20
  %179 = add nsw i32 %178, 1
  store i32 %179, ptr %177, align 4, !tbaa !20
  %180 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 434)
  %181 = load float, ptr %13, align 4, !tbaa !9
  %182 = fpext float %181 to double
  %183 = load float, ptr %14, align 4, !tbaa !9
  %184 = fpext float %183 to double
  %185 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 2.000000e+01, double noundef %182, double noundef %184)
  br label %186

186:                                              ; preds = %175, %172
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  %187 = load ptr, ptr %2, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %187, i32 0, i32 0
  %189 = load i32, ptr %188, align 4, !tbaa !18
  %190 = add nsw i32 %189, 1
  store i32 %190, ptr %188, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  %191 = getelementptr inbounds [3 x [3 x float]], ptr %9, i64 0, i64 0
  %192 = getelementptr inbounds [3 x float], ptr %191, i64 0, i64 2
  %193 = load float, ptr %192, align 4, !tbaa !13
  store float %193, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  %194 = load float, ptr %15, align 4, !tbaa !9
  %195 = fsub float %194, 3.000000e+01
  store float %195, ptr %16, align 4, !tbaa !9
  %196 = load float, ptr %16, align 4, !tbaa !9
  %197 = fcmp olt float %196, 0xBE80000000000000
  br i1 %197, label %201, label %198

198:                                              ; preds = %186
  %199 = load float, ptr %16, align 4, !tbaa !9
  %200 = fcmp olt float 0x3E80000000000000, %199
  br i1 %200, label %201, label %212

201:                                              ; preds = %198, %186
  %202 = load ptr, ptr %2, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %202, i32 0, i32 1
  %204 = load i32, ptr %203, align 4, !tbaa !20
  %205 = add nsw i32 %204, 1
  store i32 %205, ptr %203, align 4, !tbaa !20
  %206 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 435)
  %207 = load float, ptr %15, align 4, !tbaa !9
  %208 = fpext float %207 to double
  %209 = load float, ptr %16, align 4, !tbaa !9
  %210 = fpext float %209 to double
  %211 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 3.000000e+01, double noundef %208, double noundef %210)
  br label %212

212:                                              ; preds = %201, %198
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  %213 = load ptr, ptr %2, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %213, i32 0, i32 0
  %215 = load i32, ptr %214, align 4, !tbaa !18
  %216 = add nsw i32 %215, 1
  store i32 %216, ptr %214, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  %217 = getelementptr inbounds [3 x [3 x float]], ptr %9, i64 0, i64 1
  %218 = getelementptr inbounds [3 x float], ptr %217, i64 0, i64 0
  %219 = load float, ptr %218, align 4, !tbaa !13
  store float %219, ptr %17, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  %220 = load float, ptr %17, align 4, !tbaa !9
  %221 = fsub float %220, 4.000000e+01
  store float %221, ptr %18, align 4, !tbaa !9
  %222 = load float, ptr %18, align 4, !tbaa !9
  %223 = fcmp olt float %222, 0xBE80000000000000
  br i1 %223, label %227, label %224

224:                                              ; preds = %212
  %225 = load float, ptr %18, align 4, !tbaa !9
  %226 = fcmp olt float 0x3E80000000000000, %225
  br i1 %226, label %227, label %238

227:                                              ; preds = %224, %212
  %228 = load ptr, ptr %2, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %228, i32 0, i32 1
  %230 = load i32, ptr %229, align 4, !tbaa !20
  %231 = add nsw i32 %230, 1
  store i32 %231, ptr %229, align 4, !tbaa !20
  %232 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 436)
  %233 = load float, ptr %17, align 4, !tbaa !9
  %234 = fpext float %233 to double
  %235 = load float, ptr %18, align 4, !tbaa !9
  %236 = fpext float %235 to double
  %237 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 4.000000e+01, double noundef %234, double noundef %236)
  br label %238

238:                                              ; preds = %227, %224
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  %239 = load ptr, ptr %2, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %239, i32 0, i32 0
  %241 = load i32, ptr %240, align 4, !tbaa !18
  %242 = add nsw i32 %241, 1
  store i32 %242, ptr %240, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  %243 = getelementptr inbounds [3 x [3 x float]], ptr %9, i64 0, i64 1
  %244 = getelementptr inbounds [3 x float], ptr %243, i64 0, i64 1
  %245 = load float, ptr %244, align 4, !tbaa !13
  store float %245, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  %246 = load float, ptr %19, align 4, !tbaa !9
  %247 = fsub float %246, 5.000000e+01
  store float %247, ptr %20, align 4, !tbaa !9
  %248 = load float, ptr %20, align 4, !tbaa !9
  %249 = fcmp olt float %248, 0xBE80000000000000
  br i1 %249, label %253, label %250

250:                                              ; preds = %238
  %251 = load float, ptr %20, align 4, !tbaa !9
  %252 = fcmp olt float 0x3E80000000000000, %251
  br i1 %252, label %253, label %264

253:                                              ; preds = %250, %238
  %254 = load ptr, ptr %2, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %254, i32 0, i32 1
  %256 = load i32, ptr %255, align 4, !tbaa !20
  %257 = add nsw i32 %256, 1
  store i32 %257, ptr %255, align 4, !tbaa !20
  %258 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 437)
  %259 = load float, ptr %19, align 4, !tbaa !9
  %260 = fpext float %259 to double
  %261 = load float, ptr %20, align 4, !tbaa !9
  %262 = fpext float %261 to double
  %263 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 5.000000e+01, double noundef %260, double noundef %262)
  br label %264

264:                                              ; preds = %253, %250
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  %265 = load ptr, ptr %2, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %265, i32 0, i32 0
  %267 = load i32, ptr %266, align 4, !tbaa !18
  %268 = add nsw i32 %267, 1
  store i32 %268, ptr %266, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  %269 = getelementptr inbounds [3 x [3 x float]], ptr %9, i64 0, i64 1
  %270 = getelementptr inbounds [3 x float], ptr %269, i64 0, i64 2
  %271 = load float, ptr %270, align 4, !tbaa !13
  store float %271, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  %272 = load float, ptr %21, align 4, !tbaa !9
  %273 = fsub float %272, 6.000000e+01
  store float %273, ptr %22, align 4, !tbaa !9
  %274 = load float, ptr %22, align 4, !tbaa !9
  %275 = fcmp olt float %274, 0xBE80000000000000
  br i1 %275, label %279, label %276

276:                                              ; preds = %264
  %277 = load float, ptr %22, align 4, !tbaa !9
  %278 = fcmp olt float 0x3E80000000000000, %277
  br i1 %278, label %279, label %290

279:                                              ; preds = %276, %264
  %280 = load ptr, ptr %2, align 8, !tbaa !5
  %281 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %280, i32 0, i32 1
  %282 = load i32, ptr %281, align 4, !tbaa !20
  %283 = add nsw i32 %282, 1
  store i32 %283, ptr %281, align 4, !tbaa !20
  %284 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 438)
  %285 = load float, ptr %21, align 4, !tbaa !9
  %286 = fpext float %285 to double
  %287 = load float, ptr %22, align 4, !tbaa !9
  %288 = fpext float %287 to double
  %289 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 6.000000e+01, double noundef %286, double noundef %288)
  br label %290

290:                                              ; preds = %279, %276
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  %291 = load ptr, ptr %2, align 8, !tbaa !5
  %292 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %291, i32 0, i32 0
  %293 = load i32, ptr %292, align 4, !tbaa !18
  %294 = add nsw i32 %293, 1
  store i32 %294, ptr %292, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #5
  %295 = getelementptr inbounds [3 x [3 x float]], ptr %9, i64 0, i64 2
  %296 = getelementptr inbounds [3 x float], ptr %295, i64 0, i64 0
  %297 = load float, ptr %296, align 4, !tbaa !13
  store float %297, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  %298 = load float, ptr %23, align 4, !tbaa !9
  %299 = fsub float %298, 7.000000e+01
  store float %299, ptr %24, align 4, !tbaa !9
  %300 = load float, ptr %24, align 4, !tbaa !9
  %301 = fcmp olt float %300, 0xBE80000000000000
  br i1 %301, label %305, label %302

302:                                              ; preds = %290
  %303 = load float, ptr %24, align 4, !tbaa !9
  %304 = fcmp olt float 0x3E80000000000000, %303
  br i1 %304, label %305, label %316

305:                                              ; preds = %302, %290
  %306 = load ptr, ptr %2, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %306, i32 0, i32 1
  %308 = load i32, ptr %307, align 4, !tbaa !20
  %309 = add nsw i32 %308, 1
  store i32 %309, ptr %307, align 4, !tbaa !20
  %310 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 439)
  %311 = load float, ptr %23, align 4, !tbaa !9
  %312 = fpext float %311 to double
  %313 = load float, ptr %24, align 4, !tbaa !9
  %314 = fpext float %313 to double
  %315 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 7.000000e+01, double noundef %312, double noundef %314)
  br label %316

316:                                              ; preds = %305, %302
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  %317 = load ptr, ptr %2, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %317, i32 0, i32 0
  %319 = load i32, ptr %318, align 4, !tbaa !18
  %320 = add nsw i32 %319, 1
  store i32 %320, ptr %318, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #5
  %321 = getelementptr inbounds [3 x [3 x float]], ptr %9, i64 0, i64 2
  %322 = getelementptr inbounds [3 x float], ptr %321, i64 0, i64 1
  %323 = load float, ptr %322, align 4, !tbaa !13
  store float %323, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #5
  %324 = load float, ptr %25, align 4, !tbaa !9
  %325 = fsub float %324, 8.000000e+01
  store float %325, ptr %26, align 4, !tbaa !9
  %326 = load float, ptr %26, align 4, !tbaa !9
  %327 = fcmp olt float %326, 0xBE80000000000000
  br i1 %327, label %331, label %328

328:                                              ; preds = %316
  %329 = load float, ptr %26, align 4, !tbaa !9
  %330 = fcmp olt float 0x3E80000000000000, %329
  br i1 %330, label %331, label %342

331:                                              ; preds = %328, %316
  %332 = load ptr, ptr %2, align 8, !tbaa !5
  %333 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %332, i32 0, i32 1
  %334 = load i32, ptr %333, align 4, !tbaa !20
  %335 = add nsw i32 %334, 1
  store i32 %335, ptr %333, align 4, !tbaa !20
  %336 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 440)
  %337 = load float, ptr %25, align 4, !tbaa !9
  %338 = fpext float %337 to double
  %339 = load float, ptr %26, align 4, !tbaa !9
  %340 = fpext float %339 to double
  %341 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 8.000000e+01, double noundef %338, double noundef %340)
  br label %342

342:                                              ; preds = %331, %328
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #5
  %343 = load ptr, ptr %2, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %343, i32 0, i32 0
  %345 = load i32, ptr %344, align 4, !tbaa !18
  %346 = add nsw i32 %345, 1
  store i32 %346, ptr %344, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #5
  %347 = getelementptr inbounds [3 x [3 x float]], ptr %9, i64 0, i64 2
  %348 = getelementptr inbounds [3 x float], ptr %347, i64 0, i64 2
  %349 = load float, ptr %348, align 4, !tbaa !13
  store float %349, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #5
  %350 = load float, ptr %27, align 4, !tbaa !9
  %351 = fsub float %350, 9.000000e+01
  store float %351, ptr %28, align 4, !tbaa !9
  %352 = load float, ptr %28, align 4, !tbaa !9
  %353 = fcmp olt float %352, 0xBE80000000000000
  br i1 %353, label %357, label %354

354:                                              ; preds = %342
  %355 = load float, ptr %28, align 4, !tbaa !9
  %356 = fcmp olt float 0x3E80000000000000, %355
  br i1 %356, label %357, label %368

357:                                              ; preds = %354, %342
  %358 = load ptr, ptr %2, align 8, !tbaa !5
  %359 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %358, i32 0, i32 1
  %360 = load i32, ptr %359, align 4, !tbaa !20
  %361 = add nsw i32 %360, 1
  store i32 %361, ptr %359, align 4, !tbaa !20
  %362 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 441)
  %363 = load float, ptr %27, align 4, !tbaa !9
  %364 = fpext float %363 to double
  %365 = load float, ptr %28, align 4, !tbaa !9
  %366 = fpext float %365 to double
  %367 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 9.000000e+01, double noundef %364, double noundef %366)
  br label %368

368:                                              ; preds = %357, %354
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 36, ptr %9) #5
  call void @llvm.lifetime.start.p0(i64 36, ptr %29) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %30, ptr align 4 %3, i64 36, i1 false), !tbaa.struct !17
  %369 = load float, ptr %4, align 4, !tbaa !9
  call void @_ZL7HMM_Mul8HMM_Mat3f(ptr dead_on_unwind writable sret(%union.HMM_Mat3) align 4 %29, ptr noundef byval(%union.HMM_Mat3) align 8 %30, float noundef %369)
  %370 = load ptr, ptr %2, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %370, i32 0, i32 0
  %372 = load i32, ptr %371, align 4, !tbaa !18
  %373 = add nsw i32 %372, 1
  store i32 %373, ptr %371, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #5
  %374 = getelementptr inbounds [3 x [3 x float]], ptr %29, i64 0, i64 0
  %375 = getelementptr inbounds [3 x float], ptr %374, i64 0, i64 0
  %376 = load float, ptr %375, align 4, !tbaa !13
  store float %376, ptr %31, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #5
  %377 = load float, ptr %31, align 4, !tbaa !9
  %378 = fsub float %377, 1.000000e+01
  store float %378, ptr %32, align 4, !tbaa !9
  %379 = load float, ptr %32, align 4, !tbaa !9
  %380 = fcmp olt float %379, 0xBE80000000000000
  br i1 %380, label %384, label %381

381:                                              ; preds = %368
  %382 = load float, ptr %32, align 4, !tbaa !9
  %383 = fcmp olt float 0x3E80000000000000, %382
  br i1 %383, label %384, label %395

384:                                              ; preds = %381, %368
  %385 = load ptr, ptr %2, align 8, !tbaa !5
  %386 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %385, i32 0, i32 1
  %387 = load i32, ptr %386, align 4, !tbaa !20
  %388 = add nsw i32 %387, 1
  store i32 %388, ptr %386, align 4, !tbaa !20
  %389 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 446)
  %390 = load float, ptr %31, align 4, !tbaa !9
  %391 = fpext float %390 to double
  %392 = load float, ptr %32, align 4, !tbaa !9
  %393 = fpext float %392 to double
  %394 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 1.000000e+01, double noundef %391, double noundef %393)
  br label %395

395:                                              ; preds = %384, %381
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  %396 = load ptr, ptr %2, align 8, !tbaa !5
  %397 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %396, i32 0, i32 0
  %398 = load i32, ptr %397, align 4, !tbaa !18
  %399 = add nsw i32 %398, 1
  store i32 %399, ptr %397, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #5
  %400 = getelementptr inbounds [3 x [3 x float]], ptr %29, i64 0, i64 0
  %401 = getelementptr inbounds [3 x float], ptr %400, i64 0, i64 1
  %402 = load float, ptr %401, align 4, !tbaa !13
  store float %402, ptr %33, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #5
  %403 = load float, ptr %33, align 4, !tbaa !9
  %404 = fsub float %403, 2.000000e+01
  store float %404, ptr %34, align 4, !tbaa !9
  %405 = load float, ptr %34, align 4, !tbaa !9
  %406 = fcmp olt float %405, 0xBE80000000000000
  br i1 %406, label %410, label %407

407:                                              ; preds = %395
  %408 = load float, ptr %34, align 4, !tbaa !9
  %409 = fcmp olt float 0x3E80000000000000, %408
  br i1 %409, label %410, label %421

410:                                              ; preds = %407, %395
  %411 = load ptr, ptr %2, align 8, !tbaa !5
  %412 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %411, i32 0, i32 1
  %413 = load i32, ptr %412, align 4, !tbaa !20
  %414 = add nsw i32 %413, 1
  store i32 %414, ptr %412, align 4, !tbaa !20
  %415 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 447)
  %416 = load float, ptr %33, align 4, !tbaa !9
  %417 = fpext float %416 to double
  %418 = load float, ptr %34, align 4, !tbaa !9
  %419 = fpext float %418 to double
  %420 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 2.000000e+01, double noundef %417, double noundef %419)
  br label %421

421:                                              ; preds = %410, %407
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  %422 = load ptr, ptr %2, align 8, !tbaa !5
  %423 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %422, i32 0, i32 0
  %424 = load i32, ptr %423, align 4, !tbaa !18
  %425 = add nsw i32 %424, 1
  store i32 %425, ptr %423, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #5
  %426 = getelementptr inbounds [3 x [3 x float]], ptr %29, i64 0, i64 0
  %427 = getelementptr inbounds [3 x float], ptr %426, i64 0, i64 2
  %428 = load float, ptr %427, align 4, !tbaa !13
  store float %428, ptr %35, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #5
  %429 = load float, ptr %35, align 4, !tbaa !9
  %430 = fsub float %429, 3.000000e+01
  store float %430, ptr %36, align 4, !tbaa !9
  %431 = load float, ptr %36, align 4, !tbaa !9
  %432 = fcmp olt float %431, 0xBE80000000000000
  br i1 %432, label %436, label %433

433:                                              ; preds = %421
  %434 = load float, ptr %36, align 4, !tbaa !9
  %435 = fcmp olt float 0x3E80000000000000, %434
  br i1 %435, label %436, label %447

436:                                              ; preds = %433, %421
  %437 = load ptr, ptr %2, align 8, !tbaa !5
  %438 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %437, i32 0, i32 1
  %439 = load i32, ptr %438, align 4, !tbaa !20
  %440 = add nsw i32 %439, 1
  store i32 %440, ptr %438, align 4, !tbaa !20
  %441 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 448)
  %442 = load float, ptr %35, align 4, !tbaa !9
  %443 = fpext float %442 to double
  %444 = load float, ptr %36, align 4, !tbaa !9
  %445 = fpext float %444 to double
  %446 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 3.000000e+01, double noundef %443, double noundef %445)
  br label %447

447:                                              ; preds = %436, %433
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  %448 = load ptr, ptr %2, align 8, !tbaa !5
  %449 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %448, i32 0, i32 0
  %450 = load i32, ptr %449, align 4, !tbaa !18
  %451 = add nsw i32 %450, 1
  store i32 %451, ptr %449, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #5
  %452 = getelementptr inbounds [3 x [3 x float]], ptr %29, i64 0, i64 1
  %453 = getelementptr inbounds [3 x float], ptr %452, i64 0, i64 0
  %454 = load float, ptr %453, align 4, !tbaa !13
  store float %454, ptr %37, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #5
  %455 = load float, ptr %37, align 4, !tbaa !9
  %456 = fsub float %455, 4.000000e+01
  store float %456, ptr %38, align 4, !tbaa !9
  %457 = load float, ptr %38, align 4, !tbaa !9
  %458 = fcmp olt float %457, 0xBE80000000000000
  br i1 %458, label %462, label %459

459:                                              ; preds = %447
  %460 = load float, ptr %38, align 4, !tbaa !9
  %461 = fcmp olt float 0x3E80000000000000, %460
  br i1 %461, label %462, label %473

462:                                              ; preds = %459, %447
  %463 = load ptr, ptr %2, align 8, !tbaa !5
  %464 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %463, i32 0, i32 1
  %465 = load i32, ptr %464, align 4, !tbaa !20
  %466 = add nsw i32 %465, 1
  store i32 %466, ptr %464, align 4, !tbaa !20
  %467 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 449)
  %468 = load float, ptr %37, align 4, !tbaa !9
  %469 = fpext float %468 to double
  %470 = load float, ptr %38, align 4, !tbaa !9
  %471 = fpext float %470 to double
  %472 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 4.000000e+01, double noundef %469, double noundef %471)
  br label %473

473:                                              ; preds = %462, %459
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #5
  %474 = load ptr, ptr %2, align 8, !tbaa !5
  %475 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %474, i32 0, i32 0
  %476 = load i32, ptr %475, align 4, !tbaa !18
  %477 = add nsw i32 %476, 1
  store i32 %477, ptr %475, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #5
  %478 = getelementptr inbounds [3 x [3 x float]], ptr %29, i64 0, i64 1
  %479 = getelementptr inbounds [3 x float], ptr %478, i64 0, i64 1
  %480 = load float, ptr %479, align 4, !tbaa !13
  store float %480, ptr %39, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #5
  %481 = load float, ptr %39, align 4, !tbaa !9
  %482 = fsub float %481, 5.000000e+01
  store float %482, ptr %40, align 4, !tbaa !9
  %483 = load float, ptr %40, align 4, !tbaa !9
  %484 = fcmp olt float %483, 0xBE80000000000000
  br i1 %484, label %488, label %485

485:                                              ; preds = %473
  %486 = load float, ptr %40, align 4, !tbaa !9
  %487 = fcmp olt float 0x3E80000000000000, %486
  br i1 %487, label %488, label %499

488:                                              ; preds = %485, %473
  %489 = load ptr, ptr %2, align 8, !tbaa !5
  %490 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %489, i32 0, i32 1
  %491 = load i32, ptr %490, align 4, !tbaa !20
  %492 = add nsw i32 %491, 1
  store i32 %492, ptr %490, align 4, !tbaa !20
  %493 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 450)
  %494 = load float, ptr %39, align 4, !tbaa !9
  %495 = fpext float %494 to double
  %496 = load float, ptr %40, align 4, !tbaa !9
  %497 = fpext float %496 to double
  %498 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 5.000000e+01, double noundef %495, double noundef %497)
  br label %499

499:                                              ; preds = %488, %485
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #5
  %500 = load ptr, ptr %2, align 8, !tbaa !5
  %501 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %500, i32 0, i32 0
  %502 = load i32, ptr %501, align 4, !tbaa !18
  %503 = add nsw i32 %502, 1
  store i32 %503, ptr %501, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #5
  %504 = getelementptr inbounds [3 x [3 x float]], ptr %29, i64 0, i64 1
  %505 = getelementptr inbounds [3 x float], ptr %504, i64 0, i64 2
  %506 = load float, ptr %505, align 4, !tbaa !13
  store float %506, ptr %41, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #5
  %507 = load float, ptr %41, align 4, !tbaa !9
  %508 = fsub float %507, 6.000000e+01
  store float %508, ptr %42, align 4, !tbaa !9
  %509 = load float, ptr %42, align 4, !tbaa !9
  %510 = fcmp olt float %509, 0xBE80000000000000
  br i1 %510, label %514, label %511

511:                                              ; preds = %499
  %512 = load float, ptr %42, align 4, !tbaa !9
  %513 = fcmp olt float 0x3E80000000000000, %512
  br i1 %513, label %514, label %525

514:                                              ; preds = %511, %499
  %515 = load ptr, ptr %2, align 8, !tbaa !5
  %516 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %515, i32 0, i32 1
  %517 = load i32, ptr %516, align 4, !tbaa !20
  %518 = add nsw i32 %517, 1
  store i32 %518, ptr %516, align 4, !tbaa !20
  %519 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 451)
  %520 = load float, ptr %41, align 4, !tbaa !9
  %521 = fpext float %520 to double
  %522 = load float, ptr %42, align 4, !tbaa !9
  %523 = fpext float %522 to double
  %524 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 6.000000e+01, double noundef %521, double noundef %523)
  br label %525

525:                                              ; preds = %514, %511
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  %526 = load ptr, ptr %2, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %526, i32 0, i32 0
  %528 = load i32, ptr %527, align 4, !tbaa !18
  %529 = add nsw i32 %528, 1
  store i32 %529, ptr %527, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #5
  %530 = getelementptr inbounds [3 x [3 x float]], ptr %29, i64 0, i64 2
  %531 = getelementptr inbounds [3 x float], ptr %530, i64 0, i64 0
  %532 = load float, ptr %531, align 4, !tbaa !13
  store float %532, ptr %43, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #5
  %533 = load float, ptr %43, align 4, !tbaa !9
  %534 = fsub float %533, 7.000000e+01
  store float %534, ptr %44, align 4, !tbaa !9
  %535 = load float, ptr %44, align 4, !tbaa !9
  %536 = fcmp olt float %535, 0xBE80000000000000
  br i1 %536, label %540, label %537

537:                                              ; preds = %525
  %538 = load float, ptr %44, align 4, !tbaa !9
  %539 = fcmp olt float 0x3E80000000000000, %538
  br i1 %539, label %540, label %551

540:                                              ; preds = %537, %525
  %541 = load ptr, ptr %2, align 8, !tbaa !5
  %542 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %541, i32 0, i32 1
  %543 = load i32, ptr %542, align 4, !tbaa !20
  %544 = add nsw i32 %543, 1
  store i32 %544, ptr %542, align 4, !tbaa !20
  %545 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 452)
  %546 = load float, ptr %43, align 4, !tbaa !9
  %547 = fpext float %546 to double
  %548 = load float, ptr %44, align 4, !tbaa !9
  %549 = fpext float %548 to double
  %550 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 7.000000e+01, double noundef %547, double noundef %549)
  br label %551

551:                                              ; preds = %540, %537
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #5
  %552 = load ptr, ptr %2, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %552, i32 0, i32 0
  %554 = load i32, ptr %553, align 4, !tbaa !18
  %555 = add nsw i32 %554, 1
  store i32 %555, ptr %553, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #5
  %556 = getelementptr inbounds [3 x [3 x float]], ptr %29, i64 0, i64 2
  %557 = getelementptr inbounds [3 x float], ptr %556, i64 0, i64 1
  %558 = load float, ptr %557, align 4, !tbaa !13
  store float %558, ptr %45, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #5
  %559 = load float, ptr %45, align 4, !tbaa !9
  %560 = fsub float %559, 8.000000e+01
  store float %560, ptr %46, align 4, !tbaa !9
  %561 = load float, ptr %46, align 4, !tbaa !9
  %562 = fcmp olt float %561, 0xBE80000000000000
  br i1 %562, label %566, label %563

563:                                              ; preds = %551
  %564 = load float, ptr %46, align 4, !tbaa !9
  %565 = fcmp olt float 0x3E80000000000000, %564
  br i1 %565, label %566, label %577

566:                                              ; preds = %563, %551
  %567 = load ptr, ptr %2, align 8, !tbaa !5
  %568 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %567, i32 0, i32 1
  %569 = load i32, ptr %568, align 4, !tbaa !20
  %570 = add nsw i32 %569, 1
  store i32 %570, ptr %568, align 4, !tbaa !20
  %571 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 453)
  %572 = load float, ptr %45, align 4, !tbaa !9
  %573 = fpext float %572 to double
  %574 = load float, ptr %46, align 4, !tbaa !9
  %575 = fpext float %574 to double
  %576 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 8.000000e+01, double noundef %573, double noundef %575)
  br label %577

577:                                              ; preds = %566, %563
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #5
  %578 = load ptr, ptr %2, align 8, !tbaa !5
  %579 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %578, i32 0, i32 0
  %580 = load i32, ptr %579, align 4, !tbaa !18
  %581 = add nsw i32 %580, 1
  store i32 %581, ptr %579, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #5
  %582 = getelementptr inbounds [3 x [3 x float]], ptr %29, i64 0, i64 2
  %583 = getelementptr inbounds [3 x float], ptr %582, i64 0, i64 2
  %584 = load float, ptr %583, align 4, !tbaa !13
  store float %584, ptr %47, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #5
  %585 = load float, ptr %47, align 4, !tbaa !9
  %586 = fsub float %585, 9.000000e+01
  store float %586, ptr %48, align 4, !tbaa !9
  %587 = load float, ptr %48, align 4, !tbaa !9
  %588 = fcmp olt float %587, 0xBE80000000000000
  br i1 %588, label %592, label %589

589:                                              ; preds = %577
  %590 = load float, ptr %48, align 4, !tbaa !9
  %591 = fcmp olt float 0x3E80000000000000, %590
  br i1 %591, label %592, label %603

592:                                              ; preds = %589, %577
  %593 = load ptr, ptr %2, align 8, !tbaa !5
  %594 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %593, i32 0, i32 1
  %595 = load i32, ptr %594, align 4, !tbaa !20
  %596 = add nsw i32 %595, 1
  store i32 %596, ptr %594, align 4, !tbaa !20
  %597 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 454)
  %598 = load float, ptr %47, align 4, !tbaa !9
  %599 = fpext float %598 to double
  %600 = load float, ptr %48, align 4, !tbaa !9
  %601 = fpext float %600 to double
  %602 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 9.000000e+01, double noundef %599, double noundef %601)
  br label %603

603:                                              ; preds = %592, %589
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 36, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 36, ptr %49) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %50, ptr align 4 %3, i64 36, i1 false), !tbaa.struct !17
  %604 = load float, ptr %4, align 4, !tbaa !9
  call void @_Zml8HMM_Mat3f(ptr dead_on_unwind writable sret(%union.HMM_Mat3) align 4 %49, ptr noundef byval(%union.HMM_Mat3) align 8 %50, float noundef %604)
  %605 = load ptr, ptr %2, align 8, !tbaa !5
  %606 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %605, i32 0, i32 0
  %607 = load i32, ptr %606, align 4, !tbaa !18
  %608 = add nsw i32 %607, 1
  store i32 %608, ptr %606, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #5
  %609 = getelementptr inbounds [3 x [3 x float]], ptr %49, i64 0, i64 0
  %610 = getelementptr inbounds [3 x float], ptr %609, i64 0, i64 0
  %611 = load float, ptr %610, align 4, !tbaa !13
  store float %611, ptr %51, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #5
  %612 = load float, ptr %51, align 4, !tbaa !9
  %613 = fsub float %612, 1.000000e+01
  store float %613, ptr %52, align 4, !tbaa !9
  %614 = load float, ptr %52, align 4, !tbaa !9
  %615 = fcmp olt float %614, 0xBE80000000000000
  br i1 %615, label %619, label %616

616:                                              ; preds = %603
  %617 = load float, ptr %52, align 4, !tbaa !9
  %618 = fcmp olt float 0x3E80000000000000, %617
  br i1 %618, label %619, label %630

619:                                              ; preds = %616, %603
  %620 = load ptr, ptr %2, align 8, !tbaa !5
  %621 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %620, i32 0, i32 1
  %622 = load i32, ptr %621, align 4, !tbaa !20
  %623 = add nsw i32 %622, 1
  store i32 %623, ptr %621, align 4, !tbaa !20
  %624 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 460)
  %625 = load float, ptr %51, align 4, !tbaa !9
  %626 = fpext float %625 to double
  %627 = load float, ptr %52, align 4, !tbaa !9
  %628 = fpext float %627 to double
  %629 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 1.000000e+01, double noundef %626, double noundef %628)
  br label %630

630:                                              ; preds = %619, %616
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #5
  %631 = load ptr, ptr %2, align 8, !tbaa !5
  %632 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %631, i32 0, i32 0
  %633 = load i32, ptr %632, align 4, !tbaa !18
  %634 = add nsw i32 %633, 1
  store i32 %634, ptr %632, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #5
  %635 = getelementptr inbounds [3 x [3 x float]], ptr %49, i64 0, i64 0
  %636 = getelementptr inbounds [3 x float], ptr %635, i64 0, i64 1
  %637 = load float, ptr %636, align 4, !tbaa !13
  store float %637, ptr %53, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #5
  %638 = load float, ptr %53, align 4, !tbaa !9
  %639 = fsub float %638, 2.000000e+01
  store float %639, ptr %54, align 4, !tbaa !9
  %640 = load float, ptr %54, align 4, !tbaa !9
  %641 = fcmp olt float %640, 0xBE80000000000000
  br i1 %641, label %645, label %642

642:                                              ; preds = %630
  %643 = load float, ptr %54, align 4, !tbaa !9
  %644 = fcmp olt float 0x3E80000000000000, %643
  br i1 %644, label %645, label %656

645:                                              ; preds = %642, %630
  %646 = load ptr, ptr %2, align 8, !tbaa !5
  %647 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %646, i32 0, i32 1
  %648 = load i32, ptr %647, align 4, !tbaa !20
  %649 = add nsw i32 %648, 1
  store i32 %649, ptr %647, align 4, !tbaa !20
  %650 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 461)
  %651 = load float, ptr %53, align 4, !tbaa !9
  %652 = fpext float %651 to double
  %653 = load float, ptr %54, align 4, !tbaa !9
  %654 = fpext float %653 to double
  %655 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 2.000000e+01, double noundef %652, double noundef %654)
  br label %656

656:                                              ; preds = %645, %642
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #5
  %657 = load ptr, ptr %2, align 8, !tbaa !5
  %658 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %657, i32 0, i32 0
  %659 = load i32, ptr %658, align 4, !tbaa !18
  %660 = add nsw i32 %659, 1
  store i32 %660, ptr %658, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #5
  %661 = getelementptr inbounds [3 x [3 x float]], ptr %49, i64 0, i64 0
  %662 = getelementptr inbounds [3 x float], ptr %661, i64 0, i64 2
  %663 = load float, ptr %662, align 4, !tbaa !13
  store float %663, ptr %55, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #5
  %664 = load float, ptr %55, align 4, !tbaa !9
  %665 = fsub float %664, 3.000000e+01
  store float %665, ptr %56, align 4, !tbaa !9
  %666 = load float, ptr %56, align 4, !tbaa !9
  %667 = fcmp olt float %666, 0xBE80000000000000
  br i1 %667, label %671, label %668

668:                                              ; preds = %656
  %669 = load float, ptr %56, align 4, !tbaa !9
  %670 = fcmp olt float 0x3E80000000000000, %669
  br i1 %670, label %671, label %682

671:                                              ; preds = %668, %656
  %672 = load ptr, ptr %2, align 8, !tbaa !5
  %673 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %672, i32 0, i32 1
  %674 = load i32, ptr %673, align 4, !tbaa !20
  %675 = add nsw i32 %674, 1
  store i32 %675, ptr %673, align 4, !tbaa !20
  %676 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 462)
  %677 = load float, ptr %55, align 4, !tbaa !9
  %678 = fpext float %677 to double
  %679 = load float, ptr %56, align 4, !tbaa !9
  %680 = fpext float %679 to double
  %681 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 3.000000e+01, double noundef %678, double noundef %680)
  br label %682

682:                                              ; preds = %671, %668
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #5
  %683 = load ptr, ptr %2, align 8, !tbaa !5
  %684 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %683, i32 0, i32 0
  %685 = load i32, ptr %684, align 4, !tbaa !18
  %686 = add nsw i32 %685, 1
  store i32 %686, ptr %684, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #5
  %687 = getelementptr inbounds [3 x [3 x float]], ptr %49, i64 0, i64 1
  %688 = getelementptr inbounds [3 x float], ptr %687, i64 0, i64 0
  %689 = load float, ptr %688, align 4, !tbaa !13
  store float %689, ptr %57, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #5
  %690 = load float, ptr %57, align 4, !tbaa !9
  %691 = fsub float %690, 4.000000e+01
  store float %691, ptr %58, align 4, !tbaa !9
  %692 = load float, ptr %58, align 4, !tbaa !9
  %693 = fcmp olt float %692, 0xBE80000000000000
  br i1 %693, label %697, label %694

694:                                              ; preds = %682
  %695 = load float, ptr %58, align 4, !tbaa !9
  %696 = fcmp olt float 0x3E80000000000000, %695
  br i1 %696, label %697, label %708

697:                                              ; preds = %694, %682
  %698 = load ptr, ptr %2, align 8, !tbaa !5
  %699 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %698, i32 0, i32 1
  %700 = load i32, ptr %699, align 4, !tbaa !20
  %701 = add nsw i32 %700, 1
  store i32 %701, ptr %699, align 4, !tbaa !20
  %702 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 463)
  %703 = load float, ptr %57, align 4, !tbaa !9
  %704 = fpext float %703 to double
  %705 = load float, ptr %58, align 4, !tbaa !9
  %706 = fpext float %705 to double
  %707 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 4.000000e+01, double noundef %704, double noundef %706)
  br label %708

708:                                              ; preds = %697, %694
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #5
  %709 = load ptr, ptr %2, align 8, !tbaa !5
  %710 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %709, i32 0, i32 0
  %711 = load i32, ptr %710, align 4, !tbaa !18
  %712 = add nsw i32 %711, 1
  store i32 %712, ptr %710, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #5
  %713 = getelementptr inbounds [3 x [3 x float]], ptr %49, i64 0, i64 1
  %714 = getelementptr inbounds [3 x float], ptr %713, i64 0, i64 1
  %715 = load float, ptr %714, align 4, !tbaa !13
  store float %715, ptr %59, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #5
  %716 = load float, ptr %59, align 4, !tbaa !9
  %717 = fsub float %716, 5.000000e+01
  store float %717, ptr %60, align 4, !tbaa !9
  %718 = load float, ptr %60, align 4, !tbaa !9
  %719 = fcmp olt float %718, 0xBE80000000000000
  br i1 %719, label %723, label %720

720:                                              ; preds = %708
  %721 = load float, ptr %60, align 4, !tbaa !9
  %722 = fcmp olt float 0x3E80000000000000, %721
  br i1 %722, label %723, label %734

723:                                              ; preds = %720, %708
  %724 = load ptr, ptr %2, align 8, !tbaa !5
  %725 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %724, i32 0, i32 1
  %726 = load i32, ptr %725, align 4, !tbaa !20
  %727 = add nsw i32 %726, 1
  store i32 %727, ptr %725, align 4, !tbaa !20
  %728 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 464)
  %729 = load float, ptr %59, align 4, !tbaa !9
  %730 = fpext float %729 to double
  %731 = load float, ptr %60, align 4, !tbaa !9
  %732 = fpext float %731 to double
  %733 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 5.000000e+01, double noundef %730, double noundef %732)
  br label %734

734:                                              ; preds = %723, %720
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #5
  %735 = load ptr, ptr %2, align 8, !tbaa !5
  %736 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %735, i32 0, i32 0
  %737 = load i32, ptr %736, align 4, !tbaa !18
  %738 = add nsw i32 %737, 1
  store i32 %738, ptr %736, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #5
  %739 = getelementptr inbounds [3 x [3 x float]], ptr %49, i64 0, i64 1
  %740 = getelementptr inbounds [3 x float], ptr %739, i64 0, i64 2
  %741 = load float, ptr %740, align 4, !tbaa !13
  store float %741, ptr %61, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #5
  %742 = load float, ptr %61, align 4, !tbaa !9
  %743 = fsub float %742, 6.000000e+01
  store float %743, ptr %62, align 4, !tbaa !9
  %744 = load float, ptr %62, align 4, !tbaa !9
  %745 = fcmp olt float %744, 0xBE80000000000000
  br i1 %745, label %749, label %746

746:                                              ; preds = %734
  %747 = load float, ptr %62, align 4, !tbaa !9
  %748 = fcmp olt float 0x3E80000000000000, %747
  br i1 %748, label %749, label %760

749:                                              ; preds = %746, %734
  %750 = load ptr, ptr %2, align 8, !tbaa !5
  %751 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %750, i32 0, i32 1
  %752 = load i32, ptr %751, align 4, !tbaa !20
  %753 = add nsw i32 %752, 1
  store i32 %753, ptr %751, align 4, !tbaa !20
  %754 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 465)
  %755 = load float, ptr %61, align 4, !tbaa !9
  %756 = fpext float %755 to double
  %757 = load float, ptr %62, align 4, !tbaa !9
  %758 = fpext float %757 to double
  %759 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 6.000000e+01, double noundef %756, double noundef %758)
  br label %760

760:                                              ; preds = %749, %746
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #5
  %761 = load ptr, ptr %2, align 8, !tbaa !5
  %762 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %761, i32 0, i32 0
  %763 = load i32, ptr %762, align 4, !tbaa !18
  %764 = add nsw i32 %763, 1
  store i32 %764, ptr %762, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #5
  %765 = getelementptr inbounds [3 x [3 x float]], ptr %49, i64 0, i64 2
  %766 = getelementptr inbounds [3 x float], ptr %765, i64 0, i64 0
  %767 = load float, ptr %766, align 4, !tbaa !13
  store float %767, ptr %63, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #5
  %768 = load float, ptr %63, align 4, !tbaa !9
  %769 = fsub float %768, 7.000000e+01
  store float %769, ptr %64, align 4, !tbaa !9
  %770 = load float, ptr %64, align 4, !tbaa !9
  %771 = fcmp olt float %770, 0xBE80000000000000
  br i1 %771, label %775, label %772

772:                                              ; preds = %760
  %773 = load float, ptr %64, align 4, !tbaa !9
  %774 = fcmp olt float 0x3E80000000000000, %773
  br i1 %774, label %775, label %786

775:                                              ; preds = %772, %760
  %776 = load ptr, ptr %2, align 8, !tbaa !5
  %777 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %776, i32 0, i32 1
  %778 = load i32, ptr %777, align 4, !tbaa !20
  %779 = add nsw i32 %778, 1
  store i32 %779, ptr %777, align 4, !tbaa !20
  %780 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 466)
  %781 = load float, ptr %63, align 4, !tbaa !9
  %782 = fpext float %781 to double
  %783 = load float, ptr %64, align 4, !tbaa !9
  %784 = fpext float %783 to double
  %785 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 7.000000e+01, double noundef %782, double noundef %784)
  br label %786

786:                                              ; preds = %775, %772
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #5
  %787 = load ptr, ptr %2, align 8, !tbaa !5
  %788 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %787, i32 0, i32 0
  %789 = load i32, ptr %788, align 4, !tbaa !18
  %790 = add nsw i32 %789, 1
  store i32 %790, ptr %788, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #5
  %791 = getelementptr inbounds [3 x [3 x float]], ptr %49, i64 0, i64 2
  %792 = getelementptr inbounds [3 x float], ptr %791, i64 0, i64 1
  %793 = load float, ptr %792, align 4, !tbaa !13
  store float %793, ptr %65, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #5
  %794 = load float, ptr %65, align 4, !tbaa !9
  %795 = fsub float %794, 8.000000e+01
  store float %795, ptr %66, align 4, !tbaa !9
  %796 = load float, ptr %66, align 4, !tbaa !9
  %797 = fcmp olt float %796, 0xBE80000000000000
  br i1 %797, label %801, label %798

798:                                              ; preds = %786
  %799 = load float, ptr %66, align 4, !tbaa !9
  %800 = fcmp olt float 0x3E80000000000000, %799
  br i1 %800, label %801, label %812

801:                                              ; preds = %798, %786
  %802 = load ptr, ptr %2, align 8, !tbaa !5
  %803 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %802, i32 0, i32 1
  %804 = load i32, ptr %803, align 4, !tbaa !20
  %805 = add nsw i32 %804, 1
  store i32 %805, ptr %803, align 4, !tbaa !20
  %806 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 467)
  %807 = load float, ptr %65, align 4, !tbaa !9
  %808 = fpext float %807 to double
  %809 = load float, ptr %66, align 4, !tbaa !9
  %810 = fpext float %809 to double
  %811 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 8.000000e+01, double noundef %808, double noundef %810)
  br label %812

812:                                              ; preds = %801, %798
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #5
  %813 = load ptr, ptr %2, align 8, !tbaa !5
  %814 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %813, i32 0, i32 0
  %815 = load i32, ptr %814, align 4, !tbaa !18
  %816 = add nsw i32 %815, 1
  store i32 %816, ptr %814, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #5
  %817 = getelementptr inbounds [3 x [3 x float]], ptr %49, i64 0, i64 2
  %818 = getelementptr inbounds [3 x float], ptr %817, i64 0, i64 2
  %819 = load float, ptr %818, align 4, !tbaa !13
  store float %819, ptr %67, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #5
  %820 = load float, ptr %67, align 4, !tbaa !9
  %821 = fsub float %820, 9.000000e+01
  store float %821, ptr %68, align 4, !tbaa !9
  %822 = load float, ptr %68, align 4, !tbaa !9
  %823 = fcmp olt float %822, 0xBE80000000000000
  br i1 %823, label %827, label %824

824:                                              ; preds = %812
  %825 = load float, ptr %68, align 4, !tbaa !9
  %826 = fcmp olt float 0x3E80000000000000, %825
  br i1 %826, label %827, label %838

827:                                              ; preds = %824, %812
  %828 = load ptr, ptr %2, align 8, !tbaa !5
  %829 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %828, i32 0, i32 1
  %830 = load i32, ptr %829, align 4, !tbaa !20
  %831 = add nsw i32 %830, 1
  store i32 %831, ptr %829, align 4, !tbaa !20
  %832 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 468)
  %833 = load float, ptr %67, align 4, !tbaa !9
  %834 = fpext float %833 to double
  %835 = load float, ptr %68, align 4, !tbaa !9
  %836 = fpext float %835 to double
  %837 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 9.000000e+01, double noundef %834, double noundef %836)
  br label %838

838:                                              ; preds = %827, %824
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #5
  call void @llvm.lifetime.end.p0(i64 36, ptr %49) #5
  call void @llvm.lifetime.start.p0(i64 36, ptr %69) #5
  %839 = load float, ptr %4, align 4, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %70, ptr align 4 %3, i64 36, i1 false), !tbaa.struct !17
  call void @_Zmlf8HMM_Mat3(ptr dead_on_unwind writable sret(%union.HMM_Mat3) align 4 %69, float noundef %839, ptr noundef byval(%union.HMM_Mat3) align 8 %70)
  %840 = load ptr, ptr %2, align 8, !tbaa !5
  %841 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %840, i32 0, i32 0
  %842 = load i32, ptr %841, align 4, !tbaa !18
  %843 = add nsw i32 %842, 1
  store i32 %843, ptr %841, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #5
  %844 = getelementptr inbounds [3 x [3 x float]], ptr %69, i64 0, i64 0
  %845 = getelementptr inbounds [3 x float], ptr %844, i64 0, i64 0
  %846 = load float, ptr %845, align 4, !tbaa !13
  store float %846, ptr %71, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #5
  %847 = load float, ptr %71, align 4, !tbaa !9
  %848 = fsub float %847, 1.000000e+01
  store float %848, ptr %72, align 4, !tbaa !9
  %849 = load float, ptr %72, align 4, !tbaa !9
  %850 = fcmp olt float %849, 0xBE80000000000000
  br i1 %850, label %854, label %851

851:                                              ; preds = %838
  %852 = load float, ptr %72, align 4, !tbaa !9
  %853 = fcmp olt float 0x3E80000000000000, %852
  br i1 %853, label %854, label %865

854:                                              ; preds = %851, %838
  %855 = load ptr, ptr %2, align 8, !tbaa !5
  %856 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %855, i32 0, i32 1
  %857 = load i32, ptr %856, align 4, !tbaa !20
  %858 = add nsw i32 %857, 1
  store i32 %858, ptr %856, align 4, !tbaa !20
  %859 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 472)
  %860 = load float, ptr %71, align 4, !tbaa !9
  %861 = fpext float %860 to double
  %862 = load float, ptr %72, align 4, !tbaa !9
  %863 = fpext float %862 to double
  %864 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 1.000000e+01, double noundef %861, double noundef %863)
  br label %865

865:                                              ; preds = %854, %851
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #5
  %866 = load ptr, ptr %2, align 8, !tbaa !5
  %867 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %866, i32 0, i32 0
  %868 = load i32, ptr %867, align 4, !tbaa !18
  %869 = add nsw i32 %868, 1
  store i32 %869, ptr %867, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #5
  %870 = getelementptr inbounds [3 x [3 x float]], ptr %69, i64 0, i64 0
  %871 = getelementptr inbounds [3 x float], ptr %870, i64 0, i64 1
  %872 = load float, ptr %871, align 4, !tbaa !13
  store float %872, ptr %73, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #5
  %873 = load float, ptr %73, align 4, !tbaa !9
  %874 = fsub float %873, 2.000000e+01
  store float %874, ptr %74, align 4, !tbaa !9
  %875 = load float, ptr %74, align 4, !tbaa !9
  %876 = fcmp olt float %875, 0xBE80000000000000
  br i1 %876, label %880, label %877

877:                                              ; preds = %865
  %878 = load float, ptr %74, align 4, !tbaa !9
  %879 = fcmp olt float 0x3E80000000000000, %878
  br i1 %879, label %880, label %891

880:                                              ; preds = %877, %865
  %881 = load ptr, ptr %2, align 8, !tbaa !5
  %882 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %881, i32 0, i32 1
  %883 = load i32, ptr %882, align 4, !tbaa !20
  %884 = add nsw i32 %883, 1
  store i32 %884, ptr %882, align 4, !tbaa !20
  %885 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 473)
  %886 = load float, ptr %73, align 4, !tbaa !9
  %887 = fpext float %886 to double
  %888 = load float, ptr %74, align 4, !tbaa !9
  %889 = fpext float %888 to double
  %890 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 2.000000e+01, double noundef %887, double noundef %889)
  br label %891

891:                                              ; preds = %880, %877
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #5
  %892 = load ptr, ptr %2, align 8, !tbaa !5
  %893 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %892, i32 0, i32 0
  %894 = load i32, ptr %893, align 4, !tbaa !18
  %895 = add nsw i32 %894, 1
  store i32 %895, ptr %893, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #5
  %896 = getelementptr inbounds [3 x [3 x float]], ptr %69, i64 0, i64 0
  %897 = getelementptr inbounds [3 x float], ptr %896, i64 0, i64 2
  %898 = load float, ptr %897, align 4, !tbaa !13
  store float %898, ptr %75, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #5
  %899 = load float, ptr %75, align 4, !tbaa !9
  %900 = fsub float %899, 3.000000e+01
  store float %900, ptr %76, align 4, !tbaa !9
  %901 = load float, ptr %76, align 4, !tbaa !9
  %902 = fcmp olt float %901, 0xBE80000000000000
  br i1 %902, label %906, label %903

903:                                              ; preds = %891
  %904 = load float, ptr %76, align 4, !tbaa !9
  %905 = fcmp olt float 0x3E80000000000000, %904
  br i1 %905, label %906, label %917

906:                                              ; preds = %903, %891
  %907 = load ptr, ptr %2, align 8, !tbaa !5
  %908 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %907, i32 0, i32 1
  %909 = load i32, ptr %908, align 4, !tbaa !20
  %910 = add nsw i32 %909, 1
  store i32 %910, ptr %908, align 4, !tbaa !20
  %911 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 474)
  %912 = load float, ptr %75, align 4, !tbaa !9
  %913 = fpext float %912 to double
  %914 = load float, ptr %76, align 4, !tbaa !9
  %915 = fpext float %914 to double
  %916 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 3.000000e+01, double noundef %913, double noundef %915)
  br label %917

917:                                              ; preds = %906, %903
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #5
  %918 = load ptr, ptr %2, align 8, !tbaa !5
  %919 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %918, i32 0, i32 0
  %920 = load i32, ptr %919, align 4, !tbaa !18
  %921 = add nsw i32 %920, 1
  store i32 %921, ptr %919, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #5
  %922 = getelementptr inbounds [3 x [3 x float]], ptr %69, i64 0, i64 1
  %923 = getelementptr inbounds [3 x float], ptr %922, i64 0, i64 0
  %924 = load float, ptr %923, align 4, !tbaa !13
  store float %924, ptr %77, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #5
  %925 = load float, ptr %77, align 4, !tbaa !9
  %926 = fsub float %925, 4.000000e+01
  store float %926, ptr %78, align 4, !tbaa !9
  %927 = load float, ptr %78, align 4, !tbaa !9
  %928 = fcmp olt float %927, 0xBE80000000000000
  br i1 %928, label %932, label %929

929:                                              ; preds = %917
  %930 = load float, ptr %78, align 4, !tbaa !9
  %931 = fcmp olt float 0x3E80000000000000, %930
  br i1 %931, label %932, label %943

932:                                              ; preds = %929, %917
  %933 = load ptr, ptr %2, align 8, !tbaa !5
  %934 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %933, i32 0, i32 1
  %935 = load i32, ptr %934, align 4, !tbaa !20
  %936 = add nsw i32 %935, 1
  store i32 %936, ptr %934, align 4, !tbaa !20
  %937 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 475)
  %938 = load float, ptr %77, align 4, !tbaa !9
  %939 = fpext float %938 to double
  %940 = load float, ptr %78, align 4, !tbaa !9
  %941 = fpext float %940 to double
  %942 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 4.000000e+01, double noundef %939, double noundef %941)
  br label %943

943:                                              ; preds = %932, %929
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #5
  %944 = load ptr, ptr %2, align 8, !tbaa !5
  %945 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %944, i32 0, i32 0
  %946 = load i32, ptr %945, align 4, !tbaa !18
  %947 = add nsw i32 %946, 1
  store i32 %947, ptr %945, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #5
  %948 = getelementptr inbounds [3 x [3 x float]], ptr %69, i64 0, i64 1
  %949 = getelementptr inbounds [3 x float], ptr %948, i64 0, i64 1
  %950 = load float, ptr %949, align 4, !tbaa !13
  store float %950, ptr %79, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #5
  %951 = load float, ptr %79, align 4, !tbaa !9
  %952 = fsub float %951, 5.000000e+01
  store float %952, ptr %80, align 4, !tbaa !9
  %953 = load float, ptr %80, align 4, !tbaa !9
  %954 = fcmp olt float %953, 0xBE80000000000000
  br i1 %954, label %958, label %955

955:                                              ; preds = %943
  %956 = load float, ptr %80, align 4, !tbaa !9
  %957 = fcmp olt float 0x3E80000000000000, %956
  br i1 %957, label %958, label %969

958:                                              ; preds = %955, %943
  %959 = load ptr, ptr %2, align 8, !tbaa !5
  %960 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %959, i32 0, i32 1
  %961 = load i32, ptr %960, align 4, !tbaa !20
  %962 = add nsw i32 %961, 1
  store i32 %962, ptr %960, align 4, !tbaa !20
  %963 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 476)
  %964 = load float, ptr %79, align 4, !tbaa !9
  %965 = fpext float %964 to double
  %966 = load float, ptr %80, align 4, !tbaa !9
  %967 = fpext float %966 to double
  %968 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 5.000000e+01, double noundef %965, double noundef %967)
  br label %969

969:                                              ; preds = %958, %955
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #5
  %970 = load ptr, ptr %2, align 8, !tbaa !5
  %971 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %970, i32 0, i32 0
  %972 = load i32, ptr %971, align 4, !tbaa !18
  %973 = add nsw i32 %972, 1
  store i32 %973, ptr %971, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #5
  %974 = getelementptr inbounds [3 x [3 x float]], ptr %69, i64 0, i64 1
  %975 = getelementptr inbounds [3 x float], ptr %974, i64 0, i64 2
  %976 = load float, ptr %975, align 4, !tbaa !13
  store float %976, ptr %81, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #5
  %977 = load float, ptr %81, align 4, !tbaa !9
  %978 = fsub float %977, 6.000000e+01
  store float %978, ptr %82, align 4, !tbaa !9
  %979 = load float, ptr %82, align 4, !tbaa !9
  %980 = fcmp olt float %979, 0xBE80000000000000
  br i1 %980, label %984, label %981

981:                                              ; preds = %969
  %982 = load float, ptr %82, align 4, !tbaa !9
  %983 = fcmp olt float 0x3E80000000000000, %982
  br i1 %983, label %984, label %995

984:                                              ; preds = %981, %969
  %985 = load ptr, ptr %2, align 8, !tbaa !5
  %986 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %985, i32 0, i32 1
  %987 = load i32, ptr %986, align 4, !tbaa !20
  %988 = add nsw i32 %987, 1
  store i32 %988, ptr %986, align 4, !tbaa !20
  %989 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 477)
  %990 = load float, ptr %81, align 4, !tbaa !9
  %991 = fpext float %990 to double
  %992 = load float, ptr %82, align 4, !tbaa !9
  %993 = fpext float %992 to double
  %994 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 6.000000e+01, double noundef %991, double noundef %993)
  br label %995

995:                                              ; preds = %984, %981
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #5
  %996 = load ptr, ptr %2, align 8, !tbaa !5
  %997 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %996, i32 0, i32 0
  %998 = load i32, ptr %997, align 4, !tbaa !18
  %999 = add nsw i32 %998, 1
  store i32 %999, ptr %997, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #5
  %1000 = getelementptr inbounds [3 x [3 x float]], ptr %69, i64 0, i64 2
  %1001 = getelementptr inbounds [3 x float], ptr %1000, i64 0, i64 0
  %1002 = load float, ptr %1001, align 4, !tbaa !13
  store float %1002, ptr %83, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #5
  %1003 = load float, ptr %83, align 4, !tbaa !9
  %1004 = fsub float %1003, 7.000000e+01
  store float %1004, ptr %84, align 4, !tbaa !9
  %1005 = load float, ptr %84, align 4, !tbaa !9
  %1006 = fcmp olt float %1005, 0xBE80000000000000
  br i1 %1006, label %1010, label %1007

1007:                                             ; preds = %995
  %1008 = load float, ptr %84, align 4, !tbaa !9
  %1009 = fcmp olt float 0x3E80000000000000, %1008
  br i1 %1009, label %1010, label %1021

1010:                                             ; preds = %1007, %995
  %1011 = load ptr, ptr %2, align 8, !tbaa !5
  %1012 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %1011, i32 0, i32 1
  %1013 = load i32, ptr %1012, align 4, !tbaa !20
  %1014 = add nsw i32 %1013, 1
  store i32 %1014, ptr %1012, align 4, !tbaa !20
  %1015 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 478)
  %1016 = load float, ptr %83, align 4, !tbaa !9
  %1017 = fpext float %1016 to double
  %1018 = load float, ptr %84, align 4, !tbaa !9
  %1019 = fpext float %1018 to double
  %1020 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 7.000000e+01, double noundef %1017, double noundef %1019)
  br label %1021

1021:                                             ; preds = %1010, %1007
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #5
  %1022 = load ptr, ptr %2, align 8, !tbaa !5
  %1023 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %1022, i32 0, i32 0
  %1024 = load i32, ptr %1023, align 4, !tbaa !18
  %1025 = add nsw i32 %1024, 1
  store i32 %1025, ptr %1023, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #5
  %1026 = getelementptr inbounds [3 x [3 x float]], ptr %69, i64 0, i64 2
  %1027 = getelementptr inbounds [3 x float], ptr %1026, i64 0, i64 1
  %1028 = load float, ptr %1027, align 4, !tbaa !13
  store float %1028, ptr %85, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %86) #5
  %1029 = load float, ptr %85, align 4, !tbaa !9
  %1030 = fsub float %1029, 8.000000e+01
  store float %1030, ptr %86, align 4, !tbaa !9
  %1031 = load float, ptr %86, align 4, !tbaa !9
  %1032 = fcmp olt float %1031, 0xBE80000000000000
  br i1 %1032, label %1036, label %1033

1033:                                             ; preds = %1021
  %1034 = load float, ptr %86, align 4, !tbaa !9
  %1035 = fcmp olt float 0x3E80000000000000, %1034
  br i1 %1035, label %1036, label %1047

1036:                                             ; preds = %1033, %1021
  %1037 = load ptr, ptr %2, align 8, !tbaa !5
  %1038 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %1037, i32 0, i32 1
  %1039 = load i32, ptr %1038, align 4, !tbaa !20
  %1040 = add nsw i32 %1039, 1
  store i32 %1040, ptr %1038, align 4, !tbaa !20
  %1041 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 479)
  %1042 = load float, ptr %85, align 4, !tbaa !9
  %1043 = fpext float %1042 to double
  %1044 = load float, ptr %86, align 4, !tbaa !9
  %1045 = fpext float %1044 to double
  %1046 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 8.000000e+01, double noundef %1043, double noundef %1045)
  br label %1047

1047:                                             ; preds = %1036, %1033
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #5
  %1048 = load ptr, ptr %2, align 8, !tbaa !5
  %1049 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %1048, i32 0, i32 0
  %1050 = load i32, ptr %1049, align 4, !tbaa !18
  %1051 = add nsw i32 %1050, 1
  store i32 %1051, ptr %1049, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #5
  %1052 = getelementptr inbounds [3 x [3 x float]], ptr %69, i64 0, i64 2
  %1053 = getelementptr inbounds [3 x float], ptr %1052, i64 0, i64 2
  %1054 = load float, ptr %1053, align 4, !tbaa !13
  store float %1054, ptr %87, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %88) #5
  %1055 = load float, ptr %87, align 4, !tbaa !9
  %1056 = fsub float %1055, 9.000000e+01
  store float %1056, ptr %88, align 4, !tbaa !9
  %1057 = load float, ptr %88, align 4, !tbaa !9
  %1058 = fcmp olt float %1057, 0xBE80000000000000
  br i1 %1058, label %1062, label %1059

1059:                                             ; preds = %1047
  %1060 = load float, ptr %88, align 4, !tbaa !9
  %1061 = fcmp olt float 0x3E80000000000000, %1060
  br i1 %1061, label %1062, label %1073

1062:                                             ; preds = %1059, %1047
  %1063 = load ptr, ptr %2, align 8, !tbaa !5
  %1064 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %1063, i32 0, i32 1
  %1065 = load i32, ptr %1064, align 4, !tbaa !20
  %1066 = add nsw i32 %1065, 1
  store i32 %1066, ptr %1064, align 4, !tbaa !20
  %1067 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 480)
  %1068 = load float, ptr %87, align 4, !tbaa !9
  %1069 = fpext float %1068 to double
  %1070 = load float, ptr %88, align 4, !tbaa !9
  %1071 = fpext float %1070 to double
  %1072 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 9.000000e+01, double noundef %1069, double noundef %1071)
  br label %1073

1073:                                             ; preds = %1062, %1059
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #5
  call void @llvm.lifetime.end.p0(i64 36, ptr %69) #5
  %1074 = load float, ptr %4, align 4, !tbaa !9
  %1075 = call noundef nonnull align 4 dereferenceable(36) ptr @_ZmLR8HMM_Mat3f(ptr noundef nonnull align 4 dereferenceable(36) %3, float noundef %1074)
  %1076 = load ptr, ptr %2, align 8, !tbaa !5
  %1077 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %1076, i32 0, i32 0
  %1078 = load i32, ptr %1077, align 4, !tbaa !18
  %1079 = add nsw i32 %1078, 1
  store i32 %1079, ptr %1077, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %89) #5
  %1080 = getelementptr inbounds [3 x [3 x float]], ptr %3, i64 0, i64 0
  %1081 = getelementptr inbounds [3 x float], ptr %1080, i64 0, i64 0
  %1082 = load float, ptr %1081, align 4, !tbaa !13
  store float %1082, ptr %89, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %90) #5
  %1083 = load float, ptr %89, align 4, !tbaa !9
  %1084 = fsub float %1083, 1.000000e+01
  store float %1084, ptr %90, align 4, !tbaa !9
  %1085 = load float, ptr %90, align 4, !tbaa !9
  %1086 = fcmp olt float %1085, 0xBE80000000000000
  br i1 %1086, label %1090, label %1087

1087:                                             ; preds = %1073
  %1088 = load float, ptr %90, align 4, !tbaa !9
  %1089 = fcmp olt float 0x3E80000000000000, %1088
  br i1 %1089, label %1090, label %1101

1090:                                             ; preds = %1087, %1073
  %1091 = load ptr, ptr %2, align 8, !tbaa !5
  %1092 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %1091, i32 0, i32 1
  %1093 = load i32, ptr %1092, align 4, !tbaa !20
  %1094 = add nsw i32 %1093, 1
  store i32 %1094, ptr %1092, align 4, !tbaa !20
  %1095 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 483)
  %1096 = load float, ptr %89, align 4, !tbaa !9
  %1097 = fpext float %1096 to double
  %1098 = load float, ptr %90, align 4, !tbaa !9
  %1099 = fpext float %1098 to double
  %1100 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 1.000000e+01, double noundef %1097, double noundef %1099)
  br label %1101

1101:                                             ; preds = %1090, %1087
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #5
  %1102 = load ptr, ptr %2, align 8, !tbaa !5
  %1103 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %1102, i32 0, i32 0
  %1104 = load i32, ptr %1103, align 4, !tbaa !18
  %1105 = add nsw i32 %1104, 1
  store i32 %1105, ptr %1103, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #5
  %1106 = getelementptr inbounds [3 x [3 x float]], ptr %3, i64 0, i64 0
  %1107 = getelementptr inbounds [3 x float], ptr %1106, i64 0, i64 1
  %1108 = load float, ptr %1107, align 4, !tbaa !13
  store float %1108, ptr %91, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %92) #5
  %1109 = load float, ptr %91, align 4, !tbaa !9
  %1110 = fsub float %1109, 2.000000e+01
  store float %1110, ptr %92, align 4, !tbaa !9
  %1111 = load float, ptr %92, align 4, !tbaa !9
  %1112 = fcmp olt float %1111, 0xBE80000000000000
  br i1 %1112, label %1116, label %1113

1113:                                             ; preds = %1101
  %1114 = load float, ptr %92, align 4, !tbaa !9
  %1115 = fcmp olt float 0x3E80000000000000, %1114
  br i1 %1115, label %1116, label %1127

1116:                                             ; preds = %1113, %1101
  %1117 = load ptr, ptr %2, align 8, !tbaa !5
  %1118 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %1117, i32 0, i32 1
  %1119 = load i32, ptr %1118, align 4, !tbaa !20
  %1120 = add nsw i32 %1119, 1
  store i32 %1120, ptr %1118, align 4, !tbaa !20
  %1121 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 484)
  %1122 = load float, ptr %91, align 4, !tbaa !9
  %1123 = fpext float %1122 to double
  %1124 = load float, ptr %92, align 4, !tbaa !9
  %1125 = fpext float %1124 to double
  %1126 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 2.000000e+01, double noundef %1123, double noundef %1125)
  br label %1127

1127:                                             ; preds = %1116, %1113
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #5
  %1128 = load ptr, ptr %2, align 8, !tbaa !5
  %1129 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %1128, i32 0, i32 0
  %1130 = load i32, ptr %1129, align 4, !tbaa !18
  %1131 = add nsw i32 %1130, 1
  store i32 %1131, ptr %1129, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %93) #5
  %1132 = getelementptr inbounds [3 x [3 x float]], ptr %3, i64 0, i64 0
  %1133 = getelementptr inbounds [3 x float], ptr %1132, i64 0, i64 2
  %1134 = load float, ptr %1133, align 4, !tbaa !13
  store float %1134, ptr %93, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %94) #5
  %1135 = load float, ptr %93, align 4, !tbaa !9
  %1136 = fsub float %1135, 3.000000e+01
  store float %1136, ptr %94, align 4, !tbaa !9
  %1137 = load float, ptr %94, align 4, !tbaa !9
  %1138 = fcmp olt float %1137, 0xBE80000000000000
  br i1 %1138, label %1142, label %1139

1139:                                             ; preds = %1127
  %1140 = load float, ptr %94, align 4, !tbaa !9
  %1141 = fcmp olt float 0x3E80000000000000, %1140
  br i1 %1141, label %1142, label %1153

1142:                                             ; preds = %1139, %1127
  %1143 = load ptr, ptr %2, align 8, !tbaa !5
  %1144 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %1143, i32 0, i32 1
  %1145 = load i32, ptr %1144, align 4, !tbaa !20
  %1146 = add nsw i32 %1145, 1
  store i32 %1146, ptr %1144, align 4, !tbaa !20
  %1147 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 485)
  %1148 = load float, ptr %93, align 4, !tbaa !9
  %1149 = fpext float %1148 to double
  %1150 = load float, ptr %94, align 4, !tbaa !9
  %1151 = fpext float %1150 to double
  %1152 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 3.000000e+01, double noundef %1149, double noundef %1151)
  br label %1153

1153:                                             ; preds = %1142, %1139
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %93) #5
  %1154 = load ptr, ptr %2, align 8, !tbaa !5
  %1155 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %1154, i32 0, i32 0
  %1156 = load i32, ptr %1155, align 4, !tbaa !18
  %1157 = add nsw i32 %1156, 1
  store i32 %1157, ptr %1155, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #5
  %1158 = getelementptr inbounds [3 x [3 x float]], ptr %3, i64 0, i64 1
  %1159 = getelementptr inbounds [3 x float], ptr %1158, i64 0, i64 0
  %1160 = load float, ptr %1159, align 4, !tbaa !13
  store float %1160, ptr %95, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %96) #5
  %1161 = load float, ptr %95, align 4, !tbaa !9
  %1162 = fsub float %1161, 4.000000e+01
  store float %1162, ptr %96, align 4, !tbaa !9
  %1163 = load float, ptr %96, align 4, !tbaa !9
  %1164 = fcmp olt float %1163, 0xBE80000000000000
  br i1 %1164, label %1168, label %1165

1165:                                             ; preds = %1153
  %1166 = load float, ptr %96, align 4, !tbaa !9
  %1167 = fcmp olt float 0x3E80000000000000, %1166
  br i1 %1167, label %1168, label %1179

1168:                                             ; preds = %1165, %1153
  %1169 = load ptr, ptr %2, align 8, !tbaa !5
  %1170 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %1169, i32 0, i32 1
  %1171 = load i32, ptr %1170, align 4, !tbaa !20
  %1172 = add nsw i32 %1171, 1
  store i32 %1172, ptr %1170, align 4, !tbaa !20
  %1173 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 486)
  %1174 = load float, ptr %95, align 4, !tbaa !9
  %1175 = fpext float %1174 to double
  %1176 = load float, ptr %96, align 4, !tbaa !9
  %1177 = fpext float %1176 to double
  %1178 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 4.000000e+01, double noundef %1175, double noundef %1177)
  br label %1179

1179:                                             ; preds = %1168, %1165
  call void @llvm.lifetime.end.p0(i64 4, ptr %96) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #5
  %1180 = load ptr, ptr %2, align 8, !tbaa !5
  %1181 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %1180, i32 0, i32 0
  %1182 = load i32, ptr %1181, align 4, !tbaa !18
  %1183 = add nsw i32 %1182, 1
  store i32 %1183, ptr %1181, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %97) #5
  %1184 = getelementptr inbounds [3 x [3 x float]], ptr %3, i64 0, i64 1
  %1185 = getelementptr inbounds [3 x float], ptr %1184, i64 0, i64 1
  %1186 = load float, ptr %1185, align 4, !tbaa !13
  store float %1186, ptr %97, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %98) #5
  %1187 = load float, ptr %97, align 4, !tbaa !9
  %1188 = fsub float %1187, 5.000000e+01
  store float %1188, ptr %98, align 4, !tbaa !9
  %1189 = load float, ptr %98, align 4, !tbaa !9
  %1190 = fcmp olt float %1189, 0xBE80000000000000
  br i1 %1190, label %1194, label %1191

1191:                                             ; preds = %1179
  %1192 = load float, ptr %98, align 4, !tbaa !9
  %1193 = fcmp olt float 0x3E80000000000000, %1192
  br i1 %1193, label %1194, label %1205

1194:                                             ; preds = %1191, %1179
  %1195 = load ptr, ptr %2, align 8, !tbaa !5
  %1196 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %1195, i32 0, i32 1
  %1197 = load i32, ptr %1196, align 4, !tbaa !20
  %1198 = add nsw i32 %1197, 1
  store i32 %1198, ptr %1196, align 4, !tbaa !20
  %1199 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 487)
  %1200 = load float, ptr %97, align 4, !tbaa !9
  %1201 = fpext float %1200 to double
  %1202 = load float, ptr %98, align 4, !tbaa !9
  %1203 = fpext float %1202 to double
  %1204 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 5.000000e+01, double noundef %1201, double noundef %1203)
  br label %1205

1205:                                             ; preds = %1194, %1191
  call void @llvm.lifetime.end.p0(i64 4, ptr %98) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %97) #5
  %1206 = load ptr, ptr %2, align 8, !tbaa !5
  %1207 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %1206, i32 0, i32 0
  %1208 = load i32, ptr %1207, align 4, !tbaa !18
  %1209 = add nsw i32 %1208, 1
  store i32 %1209, ptr %1207, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %99) #5
  %1210 = getelementptr inbounds [3 x [3 x float]], ptr %3, i64 0, i64 1
  %1211 = getelementptr inbounds [3 x float], ptr %1210, i64 0, i64 2
  %1212 = load float, ptr %1211, align 4, !tbaa !13
  store float %1212, ptr %99, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %100) #5
  %1213 = load float, ptr %99, align 4, !tbaa !9
  %1214 = fsub float %1213, 6.000000e+01
  store float %1214, ptr %100, align 4, !tbaa !9
  %1215 = load float, ptr %100, align 4, !tbaa !9
  %1216 = fcmp olt float %1215, 0xBE80000000000000
  br i1 %1216, label %1220, label %1217

1217:                                             ; preds = %1205
  %1218 = load float, ptr %100, align 4, !tbaa !9
  %1219 = fcmp olt float 0x3E80000000000000, %1218
  br i1 %1219, label %1220, label %1231

1220:                                             ; preds = %1217, %1205
  %1221 = load ptr, ptr %2, align 8, !tbaa !5
  %1222 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %1221, i32 0, i32 1
  %1223 = load i32, ptr %1222, align 4, !tbaa !20
  %1224 = add nsw i32 %1223, 1
  store i32 %1224, ptr %1222, align 4, !tbaa !20
  %1225 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 488)
  %1226 = load float, ptr %99, align 4, !tbaa !9
  %1227 = fpext float %1226 to double
  %1228 = load float, ptr %100, align 4, !tbaa !9
  %1229 = fpext float %1228 to double
  %1230 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 6.000000e+01, double noundef %1227, double noundef %1229)
  br label %1231

1231:                                             ; preds = %1220, %1217
  call void @llvm.lifetime.end.p0(i64 4, ptr %100) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %99) #5
  %1232 = load ptr, ptr %2, align 8, !tbaa !5
  %1233 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %1232, i32 0, i32 0
  %1234 = load i32, ptr %1233, align 4, !tbaa !18
  %1235 = add nsw i32 %1234, 1
  store i32 %1235, ptr %1233, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %101) #5
  %1236 = getelementptr inbounds [3 x [3 x float]], ptr %3, i64 0, i64 2
  %1237 = getelementptr inbounds [3 x float], ptr %1236, i64 0, i64 0
  %1238 = load float, ptr %1237, align 4, !tbaa !13
  store float %1238, ptr %101, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %102) #5
  %1239 = load float, ptr %101, align 4, !tbaa !9
  %1240 = fsub float %1239, 7.000000e+01
  store float %1240, ptr %102, align 4, !tbaa !9
  %1241 = load float, ptr %102, align 4, !tbaa !9
  %1242 = fcmp olt float %1241, 0xBE80000000000000
  br i1 %1242, label %1246, label %1243

1243:                                             ; preds = %1231
  %1244 = load float, ptr %102, align 4, !tbaa !9
  %1245 = fcmp olt float 0x3E80000000000000, %1244
  br i1 %1245, label %1246, label %1257

1246:                                             ; preds = %1243, %1231
  %1247 = load ptr, ptr %2, align 8, !tbaa !5
  %1248 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %1247, i32 0, i32 1
  %1249 = load i32, ptr %1248, align 4, !tbaa !20
  %1250 = add nsw i32 %1249, 1
  store i32 %1250, ptr %1248, align 4, !tbaa !20
  %1251 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 489)
  %1252 = load float, ptr %101, align 4, !tbaa !9
  %1253 = fpext float %1252 to double
  %1254 = load float, ptr %102, align 4, !tbaa !9
  %1255 = fpext float %1254 to double
  %1256 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 7.000000e+01, double noundef %1253, double noundef %1255)
  br label %1257

1257:                                             ; preds = %1246, %1243
  call void @llvm.lifetime.end.p0(i64 4, ptr %102) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %101) #5
  %1258 = load ptr, ptr %2, align 8, !tbaa !5
  %1259 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %1258, i32 0, i32 0
  %1260 = load i32, ptr %1259, align 4, !tbaa !18
  %1261 = add nsw i32 %1260, 1
  store i32 %1261, ptr %1259, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %103) #5
  %1262 = getelementptr inbounds [3 x [3 x float]], ptr %3, i64 0, i64 2
  %1263 = getelementptr inbounds [3 x float], ptr %1262, i64 0, i64 1
  %1264 = load float, ptr %1263, align 4, !tbaa !13
  store float %1264, ptr %103, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %104) #5
  %1265 = load float, ptr %103, align 4, !tbaa !9
  %1266 = fsub float %1265, 8.000000e+01
  store float %1266, ptr %104, align 4, !tbaa !9
  %1267 = load float, ptr %104, align 4, !tbaa !9
  %1268 = fcmp olt float %1267, 0xBE80000000000000
  br i1 %1268, label %1272, label %1269

1269:                                             ; preds = %1257
  %1270 = load float, ptr %104, align 4, !tbaa !9
  %1271 = fcmp olt float 0x3E80000000000000, %1270
  br i1 %1271, label %1272, label %1283

1272:                                             ; preds = %1269, %1257
  %1273 = load ptr, ptr %2, align 8, !tbaa !5
  %1274 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %1273, i32 0, i32 1
  %1275 = load i32, ptr %1274, align 4, !tbaa !20
  %1276 = add nsw i32 %1275, 1
  store i32 %1276, ptr %1274, align 4, !tbaa !20
  %1277 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 490)
  %1278 = load float, ptr %103, align 4, !tbaa !9
  %1279 = fpext float %1278 to double
  %1280 = load float, ptr %104, align 4, !tbaa !9
  %1281 = fpext float %1280 to double
  %1282 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 8.000000e+01, double noundef %1279, double noundef %1281)
  br label %1283

1283:                                             ; preds = %1272, %1269
  call void @llvm.lifetime.end.p0(i64 4, ptr %104) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %103) #5
  %1284 = load ptr, ptr %2, align 8, !tbaa !5
  %1285 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %1284, i32 0, i32 0
  %1286 = load i32, ptr %1285, align 4, !tbaa !18
  %1287 = add nsw i32 %1286, 1
  store i32 %1287, ptr %1285, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %105) #5
  %1288 = getelementptr inbounds [3 x [3 x float]], ptr %3, i64 0, i64 2
  %1289 = getelementptr inbounds [3 x float], ptr %1288, i64 0, i64 2
  %1290 = load float, ptr %1289, align 4, !tbaa !13
  store float %1290, ptr %105, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %106) #5
  %1291 = load float, ptr %105, align 4, !tbaa !9
  %1292 = fsub float %1291, 9.000000e+01
  store float %1292, ptr %106, align 4, !tbaa !9
  %1293 = load float, ptr %106, align 4, !tbaa !9
  %1294 = fcmp olt float %1293, 0xBE80000000000000
  br i1 %1294, label %1298, label %1295

1295:                                             ; preds = %1283
  %1296 = load float, ptr %106, align 4, !tbaa !9
  %1297 = fcmp olt float 0x3E80000000000000, %1296
  br i1 %1297, label %1298, label %1309

1298:                                             ; preds = %1295, %1283
  %1299 = load ptr, ptr %2, align 8, !tbaa !5
  %1300 = getelementptr inbounds %struct.hmt_testresult_struct, ptr %1299, i32 0, i32 1
  %1301 = load i32, ptr %1300, align 4, !tbaa !20
  %1302 = add nsw i32 %1301, 1
  store i32 %1302, ptr %1300, align 4, !tbaa !20
  %1303 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 491)
  %1304 = load float, ptr %105, align 4, !tbaa !9
  %1305 = fpext float %1304 to double
  %1306 = load float, ptr %106, align 4, !tbaa !9
  %1307 = fpext float %1306 to double
  %1308 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef 9.000000e+01, double noundef %1305, double noundef %1307)
  br label %1309

1309:                                             ; preds = %1298, %1295
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %105) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #5
  call void @llvm.lifetime.end.p0(i64 36, ptr %3) #5
  ret void
}

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef nonnull align 4 dereferenceable(36) ptr @_ZmLR8HMM_Mat3f(ptr noundef nonnull align 4 dereferenceable(36), float noundef) #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 = !{!"float", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!7, !7, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = distinct !{!16, !15}
!17 = !{i64 0, i64 36, !13}
!18 = !{!19, !12, i64 0}
!19 = !{!"_ZTS21hmt_testresult_struct", !12, i64 0, !12, i64 4}
!20 = !{!19, !12, 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 @_Z35_hmt_test_Multiplication_Mat3ScalarP21hmt_testresult_struct(ptr noundef %0) local_unnamed_addr #3 {
.preheader:
  %1 = alloca %union.HMM_Mat3, align 16
  %2 = alloca %union.HMM_Mat3, align 4
  %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)
  %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
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %2) #5
  call void @_ZL10HMM_MulM3F8HMM_Mat3f(ptr dead_on_unwind nonnull writable sret(%union.HMM_Mat3) align 4 %2, ptr noundef nonnull byval(%union.HMM_Mat3) align 8 %1, float noundef 1.000000e+01)
  %14 = load i32, ptr %0, align 4, !tbaa !8
  %15 = add nsw i32 %14, 1
  store i32 %15, ptr %0, align 4, !tbaa !8
  %16 = load float, ptr %2, align 4, !tbaa !5
  %17 = fadd float %16, -1.000000e+01
  %18 = call float @llvm.fabs.f32(float %17)
  %or.cond = fcmp ogt float %18, 0x3E80000000000000
  br i1 %or.cond, label %19, label %27

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

27:                                               ; preds = %.preheader, %19
  %28 = phi i32 [ %15, %.preheader ], [ %.pre, %19 ]
  %29 = add nsw i32 %28, 1
  store i32 %29, ptr %0, align 4, !tbaa !8
  %30 = getelementptr inbounds i8, ptr %2, i64 4
  %31 = load float, ptr %30, align 4, !tbaa !5
  %32 = fadd float %31, -2.000000e+01
  %33 = call float @llvm.fabs.f32(float %32)
  %or.cond3 = fcmp ogt float %33, 0x3E80000000000000
  br i1 %or.cond3, label %34, label %42

34:                                               ; preds = %27
  %35 = getelementptr inbounds i8, ptr %0, i64 4
  %36 = load i32, ptr %35, align 4, !tbaa !11
  %37 = add nsw i32 %36, 1
  store i32 %37, ptr %35, align 4, !tbaa !11
  %38 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 434)
  %39 = fpext float %31 to double
  %40 = fpext float %32 to double
  %41 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 2.000000e+01, double noundef %39, double noundef %40)
  %.pre423 = load i32, ptr %0, align 4, !tbaa !8
  br label %42

42:                                               ; preds = %27, %34
  %43 = phi i32 [ %29, %27 ], [ %.pre423, %34 ]
  %44 = add nsw i32 %43, 1
  store i32 %44, ptr %0, align 4, !tbaa !8
  %45 = getelementptr inbounds i8, ptr %2, i64 8
  %46 = load float, ptr %45, align 4, !tbaa !5
  %47 = fadd float %46, -3.000000e+01
  %48 = call float @llvm.fabs.f32(float %47)
  %or.cond5 = fcmp ogt float %48, 0x3E80000000000000
  br i1 %or.cond5, label %49, label %57

49:                                               ; preds = %42
  %50 = getelementptr inbounds i8, ptr %0, i64 4
  %51 = load i32, ptr %50, align 4, !tbaa !11
  %52 = add nsw i32 %51, 1
  store i32 %52, ptr %50, align 4, !tbaa !11
  %53 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 435)
  %54 = fpext float %46 to double
  %55 = fpext float %47 to double
  %56 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 3.000000e+01, double noundef %54, double noundef %55)
  %.pre424 = load i32, ptr %0, align 4, !tbaa !8
  br label %57

57:                                               ; preds = %42, %49
  %58 = phi i32 [ %44, %42 ], [ %.pre424, %49 ]
  %59 = add nsw i32 %58, 1
  store i32 %59, ptr %0, align 4, !tbaa !8
  %60 = getelementptr inbounds i8, ptr %2, i64 12
  %61 = load float, ptr %60, align 4, !tbaa !5
  %62 = fadd float %61, -4.000000e+01
  %63 = call float @llvm.fabs.f32(float %62)
  %or.cond7 = fcmp ogt float %63, 0x3E80000000000000
  br i1 %or.cond7, label %64, label %72

64:                                               ; preds = %57
  %65 = getelementptr inbounds i8, ptr %0, i64 4
  %66 = load i32, ptr %65, align 4, !tbaa !11
  %67 = add nsw i32 %66, 1
  store i32 %67, ptr %65, align 4, !tbaa !11
  %68 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 436)
  %69 = fpext float %61 to double
  %70 = fpext float %62 to double
  %71 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 4.000000e+01, double noundef %69, double noundef %70)
  %.pre425 = load i32, ptr %0, align 4, !tbaa !8
  br label %72

72:                                               ; preds = %57, %64
  %73 = phi i32 [ %59, %57 ], [ %.pre425, %64 ]
  %74 = add nsw i32 %73, 1
  store i32 %74, ptr %0, align 4, !tbaa !8
  %75 = getelementptr inbounds i8, ptr %2, i64 16
  %76 = load float, ptr %75, align 4, !tbaa !5
  %77 = fadd float %76, -5.000000e+01
  %78 = call float @llvm.fabs.f32(float %77)
  %or.cond9 = fcmp ogt float %78, 0x3E80000000000000
  br i1 %or.cond9, label %79, label %87

79:                                               ; preds = %72
  %80 = getelementptr inbounds i8, ptr %0, i64 4
  %81 = load i32, ptr %80, align 4, !tbaa !11
  %82 = add nsw i32 %81, 1
  store i32 %82, ptr %80, align 4, !tbaa !11
  %83 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 437)
  %84 = fpext float %76 to double
  %85 = fpext float %77 to double
  %86 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 5.000000e+01, double noundef %84, double noundef %85)
  %.pre426 = load i32, ptr %0, align 4, !tbaa !8
  br label %87

87:                                               ; preds = %72, %79
  %88 = phi i32 [ %74, %72 ], [ %.pre426, %79 ]
  %89 = add nsw i32 %88, 1
  store i32 %89, ptr %0, align 4, !tbaa !8
  %90 = getelementptr inbounds i8, ptr %2, i64 20
  %91 = load float, ptr %90, align 4, !tbaa !5
  %92 = fadd float %91, -6.000000e+01
  %93 = call float @llvm.fabs.f32(float %92)
  %or.cond11 = fcmp ogt float %93, 0x3E80000000000000
  br i1 %or.cond11, label %94, label %102

94:                                               ; preds = %87
  %95 = getelementptr inbounds i8, ptr %0, i64 4
  %96 = load i32, ptr %95, align 4, !tbaa !11
  %97 = add nsw i32 %96, 1
  store i32 %97, ptr %95, align 4, !tbaa !11
  %98 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 438)
  %99 = fpext float %91 to double
  %100 = fpext float %92 to double
  %101 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 6.000000e+01, double noundef %99, double noundef %100)
  %.pre427 = load i32, ptr %0, align 4, !tbaa !8
  br label %102

102:                                              ; preds = %87, %94
  %103 = phi i32 [ %89, %87 ], [ %.pre427, %94 ]
  %104 = add nsw i32 %103, 1
  store i32 %104, ptr %0, align 4, !tbaa !8
  %105 = getelementptr inbounds i8, ptr %2, i64 24
  %106 = load float, ptr %105, align 4, !tbaa !5
  %107 = fadd float %106, -7.000000e+01
  %108 = call float @llvm.fabs.f32(float %107)
  %or.cond13 = fcmp ogt float %108, 0x3E80000000000000
  br i1 %or.cond13, label %109, label %117

109:                                              ; preds = %102
  %110 = getelementptr inbounds i8, ptr %0, i64 4
  %111 = load i32, ptr %110, align 4, !tbaa !11
  %112 = add nsw i32 %111, 1
  store i32 %112, ptr %110, align 4, !tbaa !11
  %113 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 439)
  %114 = fpext float %106 to double
  %115 = fpext float %107 to double
  %116 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 7.000000e+01, double noundef %114, double noundef %115)
  %.pre428 = load i32, ptr %0, align 4, !tbaa !8
  br label %117

117:                                              ; preds = %102, %109
  %118 = phi i32 [ %104, %102 ], [ %.pre428, %109 ]
  %119 = add nsw i32 %118, 1
  store i32 %119, ptr %0, align 4, !tbaa !8
  %120 = getelementptr inbounds i8, ptr %2, i64 28
  %121 = load float, ptr %120, align 4, !tbaa !5
  %122 = fadd float %121, -8.000000e+01
  %123 = call float @llvm.fabs.f32(float %122)
  %or.cond15 = fcmp ogt float %123, 0x3E80000000000000
  br i1 %or.cond15, label %124, label %132

124:                                              ; preds = %117
  %125 = getelementptr inbounds i8, ptr %0, i64 4
  %126 = load i32, ptr %125, align 4, !tbaa !11
  %127 = add nsw i32 %126, 1
  store i32 %127, ptr %125, align 4, !tbaa !11
  %128 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 440)
  %129 = fpext float %121 to double
  %130 = fpext float %122 to double
  %131 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 8.000000e+01, double noundef %129, double noundef %130)
  %.pre429 = load i32, ptr %0, align 4, !tbaa !8
  br label %132

132:                                              ; preds = %117, %124
  %133 = phi i32 [ %119, %117 ], [ %.pre429, %124 ]
  %134 = add nsw i32 %133, 1
  store i32 %134, ptr %0, align 4, !tbaa !8
  %135 = getelementptr inbounds i8, ptr %2, i64 32
  %136 = load float, ptr %135, align 4, !tbaa !5
  %137 = fadd float %136, -9.000000e+01
  %138 = call float @llvm.fabs.f32(float %137)
  %or.cond17 = fcmp ogt float %138, 0x3E80000000000000
  br i1 %or.cond17, label %139, label %147

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

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

153:                                              ; preds = %147
  %154 = getelementptr inbounds i8, ptr %0, i64 4
  %155 = load i32, ptr %154, align 4, !tbaa !11
  %156 = add nsw i32 %155, 1
  store i32 %156, ptr %154, align 4, !tbaa !11
  %157 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 446)
  %158 = fpext float %150 to double
  %159 = fpext float %151 to double
  %160 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 1.000000e+01, double noundef %158, double noundef %159)
  %.pre430 = load i32, ptr %0, align 4, !tbaa !8
  br label %161

161:                                              ; preds = %147, %153
  %162 = phi i32 [ %149, %147 ], [ %.pre430, %153 ]
  %163 = add nsw i32 %162, 1
  store i32 %163, ptr %0, align 4, !tbaa !8
  %164 = getelementptr inbounds i8, ptr %3, i64 4
  %165 = load float, ptr %164, align 4, !tbaa !5
  %166 = fadd float %165, -2.000000e+01
  %167 = call float @llvm.fabs.f32(float %166)
  %or.cond21 = fcmp ogt float %167, 0x3E80000000000000
  br i1 %or.cond21, label %168, label %176

168:                                              ; preds = %161
  %169 = getelementptr inbounds i8, ptr %0, i64 4
  %170 = load i32, ptr %169, align 4, !tbaa !11
  %171 = add nsw i32 %170, 1
  store i32 %171, ptr %169, align 4, !tbaa !11
  %172 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 447)
  %173 = fpext float %165 to double
  %174 = fpext float %166 to double
  %175 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 2.000000e+01, double noundef %173, double noundef %174)
  %.pre431 = load i32, ptr %0, align 4, !tbaa !8
  br label %176

176:                                              ; preds = %161, %168
  %177 = phi i32 [ %163, %161 ], [ %.pre431, %168 ]
  %178 = add nsw i32 %177, 1
  store i32 %178, ptr %0, align 4, !tbaa !8
  %179 = getelementptr inbounds i8, ptr %3, i64 8
  %180 = load float, ptr %179, align 4, !tbaa !5
  %181 = fadd float %180, -3.000000e+01
  %182 = call float @llvm.fabs.f32(float %181)
  %or.cond23 = fcmp ogt float %182, 0x3E80000000000000
  br i1 %or.cond23, label %183, label %191

183:                                              ; preds = %176
  %184 = getelementptr inbounds i8, ptr %0, i64 4
  %185 = load i32, ptr %184, align 4, !tbaa !11
  %186 = add nsw i32 %185, 1
  store i32 %186, ptr %184, align 4, !tbaa !11
  %187 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 448)
  %188 = fpext float %180 to double
  %189 = fpext float %181 to double
  %190 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 3.000000e+01, double noundef %188, double noundef %189)
  %.pre432 = load i32, ptr %0, align 4, !tbaa !8
  br label %191

191:                                              ; preds = %176, %183
  %192 = phi i32 [ %178, %176 ], [ %.pre432, %183 ]
  %193 = add nsw i32 %192, 1
  store i32 %193, ptr %0, align 4, !tbaa !8
  %194 = getelementptr inbounds i8, ptr %3, i64 12
  %195 = load float, ptr %194, align 4, !tbaa !5
  %196 = fadd float %195, -4.000000e+01
  %197 = call float @llvm.fabs.f32(float %196)
  %or.cond25 = fcmp ogt float %197, 0x3E80000000000000
  br i1 %or.cond25, label %198, label %206

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

206:                                              ; preds = %191, %198
  %207 = phi i32 [ %193, %191 ], [ %.pre433, %198 ]
  %208 = add nsw i32 %207, 1
  store i32 %208, ptr %0, align 4, !tbaa !8
  %209 = getelementptr inbounds i8, ptr %3, i64 16
  %210 = load float, ptr %209, align 4, !tbaa !5
  %211 = fadd float %210, -5.000000e+01
  %212 = call float @llvm.fabs.f32(float %211)
  %or.cond27 = fcmp ogt float %212, 0x3E80000000000000
  br i1 %or.cond27, label %213, label %221

213:                                              ; preds = %206
  %214 = getelementptr inbounds i8, ptr %0, i64 4
  %215 = load i32, ptr %214, align 4, !tbaa !11
  %216 = add nsw i32 %215, 1
  store i32 %216, ptr %214, align 4, !tbaa !11
  %217 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 450)
  %218 = fpext float %210 to double
  %219 = fpext float %211 to double
  %220 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 5.000000e+01, double noundef %218, double noundef %219)
  %.pre434 = load i32, ptr %0, align 4, !tbaa !8
  br label %221

221:                                              ; preds = %206, %213
  %222 = phi i32 [ %208, %206 ], [ %.pre434, %213 ]
  %223 = add nsw i32 %222, 1
  store i32 %223, ptr %0, align 4, !tbaa !8
  %224 = getelementptr inbounds i8, ptr %3, i64 20
  %225 = load float, ptr %224, align 4, !tbaa !5
  %226 = fadd float %225, -6.000000e+01
  %227 = call float @llvm.fabs.f32(float %226)
  %or.cond29 = fcmp ogt float %227, 0x3E80000000000000
  br i1 %or.cond29, label %228, label %236

228:                                              ; preds = %221
  %229 = getelementptr inbounds i8, ptr %0, i64 4
  %230 = load i32, ptr %229, align 4, !tbaa !11
  %231 = add nsw i32 %230, 1
  store i32 %231, ptr %229, align 4, !tbaa !11
  %232 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 451)
  %233 = fpext float %225 to double
  %234 = fpext float %226 to double
  %235 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 6.000000e+01, double noundef %233, double noundef %234)
  %.pre435 = load i32, ptr %0, align 4, !tbaa !8
  br label %236

236:                                              ; preds = %221, %228
  %237 = phi i32 [ %223, %221 ], [ %.pre435, %228 ]
  %238 = add nsw i32 %237, 1
  store i32 %238, ptr %0, align 4, !tbaa !8
  %239 = getelementptr inbounds i8, ptr %3, i64 24
  %240 = load float, ptr %239, align 4, !tbaa !5
  %241 = fadd float %240, -7.000000e+01
  %242 = call float @llvm.fabs.f32(float %241)
  %or.cond31 = fcmp ogt float %242, 0x3E80000000000000
  br i1 %or.cond31, label %243, label %251

243:                                              ; preds = %236
  %244 = getelementptr inbounds i8, ptr %0, i64 4
  %245 = load i32, ptr %244, align 4, !tbaa !11
  %246 = add nsw i32 %245, 1
  store i32 %246, ptr %244, align 4, !tbaa !11
  %247 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 452)
  %248 = fpext float %240 to double
  %249 = fpext float %241 to double
  %250 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 7.000000e+01, double noundef %248, double noundef %249)
  %.pre436 = load i32, ptr %0, align 4, !tbaa !8
  br label %251

251:                                              ; preds = %236, %243
  %252 = phi i32 [ %238, %236 ], [ %.pre436, %243 ]
  %253 = add nsw i32 %252, 1
  store i32 %253, ptr %0, align 4, !tbaa !8
  %254 = getelementptr inbounds i8, ptr %3, i64 28
  %255 = load float, ptr %254, align 4, !tbaa !5
  %256 = fadd float %255, -8.000000e+01
  %257 = call float @llvm.fabs.f32(float %256)
  %or.cond33 = fcmp ogt float %257, 0x3E80000000000000
  br i1 %or.cond33, label %258, label %266

258:                                              ; preds = %251
  %259 = getelementptr inbounds i8, ptr %0, i64 4
  %260 = load i32, ptr %259, align 4, !tbaa !11
  %261 = add nsw i32 %260, 1
  store i32 %261, ptr %259, align 4, !tbaa !11
  %262 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 453)
  %263 = fpext float %255 to double
  %264 = fpext float %256 to double
  %265 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 8.000000e+01, double noundef %263, double noundef %264)
  %.pre437 = load i32, ptr %0, align 4, !tbaa !8
  br label %266

266:                                              ; preds = %251, %258
  %267 = phi i32 [ %253, %251 ], [ %.pre437, %258 ]
  %268 = add nsw i32 %267, 1
  store i32 %268, ptr %0, align 4, !tbaa !8
  %269 = getelementptr inbounds i8, ptr %3, i64 32
  %270 = load float, ptr %269, align 4, !tbaa !5
  %271 = fadd float %270, -9.000000e+01
  %272 = call float @llvm.fabs.f32(float %271)
  %or.cond35 = fcmp ogt float %272, 0x3E80000000000000
  br i1 %or.cond35, label %273, label %281

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

281:                                              ; preds = %266, %273
  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 @_Zml8HMM_Mat3f(ptr dead_on_unwind nonnull writable sret(%union.HMM_Mat3) align 4 %4, ptr noundef nonnull byval(%union.HMM_Mat3) align 8 %1, float noundef 1.000000e+01)
  %282 = load i32, ptr %0, align 4, !tbaa !8
  %283 = add nsw i32 %282, 1
  store i32 %283, ptr %0, align 4, !tbaa !8
  %284 = load float, ptr %4, align 4, !tbaa !5
  %285 = fadd float %284, -1.000000e+01
  %286 = call float @llvm.fabs.f32(float %285)
  %or.cond37 = fcmp ogt float %286, 0x3E80000000000000
  br i1 %or.cond37, label %287, label %295

287:                                              ; preds = %281
  %288 = getelementptr inbounds i8, ptr %0, i64 4
  %289 = load i32, ptr %288, align 4, !tbaa !11
  %290 = add nsw i32 %289, 1
  store i32 %290, ptr %288, align 4, !tbaa !11
  %291 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 460)
  %292 = fpext float %284 to double
  %293 = fpext float %285 to double
  %294 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 1.000000e+01, double noundef %292, double noundef %293)
  %.pre438 = load i32, ptr %0, align 4, !tbaa !8
  br label %295

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

302:                                              ; preds = %295
  %303 = getelementptr inbounds i8, ptr %0, i64 4
  %304 = load i32, ptr %303, align 4, !tbaa !11
  %305 = add nsw i32 %304, 1
  store i32 %305, ptr %303, align 4, !tbaa !11
  %306 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 461)
  %307 = fpext float %299 to double
  %308 = fpext float %300 to double
  %309 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 2.000000e+01, double noundef %307, double noundef %308)
  %.pre439 = load i32, ptr %0, align 4, !tbaa !8
  br label %310

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

317:                                              ; preds = %310
  %318 = getelementptr inbounds i8, ptr %0, i64 4
  %319 = load i32, ptr %318, align 4, !tbaa !11
  %320 = add nsw i32 %319, 1
  store i32 %320, ptr %318, align 4, !tbaa !11
  %321 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 462)
  %322 = fpext float %314 to double
  %323 = fpext float %315 to double
  %324 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 3.000000e+01, double noundef %322, double noundef %323)
  %.pre440 = load i32, ptr %0, align 4, !tbaa !8
  br label %325

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

332:                                              ; preds = %325
  %333 = getelementptr inbounds i8, ptr %0, i64 4
  %334 = load i32, ptr %333, align 4, !tbaa !11
  %335 = add nsw i32 %334, 1
  store i32 %335, ptr %333, align 4, !tbaa !11
  %336 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 463)
  %337 = fpext float %329 to double
  %338 = fpext float %330 to double
  %339 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 4.000000e+01, double noundef %337, double noundef %338)
  %.pre441 = load i32, ptr %0, align 4, !tbaa !8
  br label %340

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

347:                                              ; preds = %340
  %348 = getelementptr inbounds i8, ptr %0, i64 4
  %349 = load i32, ptr %348, align 4, !tbaa !11
  %350 = add nsw i32 %349, 1
  store i32 %350, ptr %348, align 4, !tbaa !11
  %351 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 464)
  %352 = fpext float %344 to double
  %353 = fpext float %345 to double
  %354 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 5.000000e+01, double noundef %352, double noundef %353)
  %.pre442 = load i32, ptr %0, align 4, !tbaa !8
  br label %355

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

362:                                              ; preds = %355
  %363 = getelementptr inbounds i8, ptr %0, i64 4
  %364 = load i32, ptr %363, align 4, !tbaa !11
  %365 = add nsw i32 %364, 1
  store i32 %365, ptr %363, align 4, !tbaa !11
  %366 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 465)
  %367 = fpext float %359 to double
  %368 = fpext float %360 to double
  %369 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 6.000000e+01, double noundef %367, double noundef %368)
  %.pre443 = load i32, ptr %0, align 4, !tbaa !8
  br label %370

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

377:                                              ; preds = %370
  %378 = getelementptr inbounds i8, ptr %0, i64 4
  %379 = load i32, ptr %378, align 4, !tbaa !11
  %380 = add nsw i32 %379, 1
  store i32 %380, ptr %378, align 4, !tbaa !11
  %381 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 466)
  %382 = fpext float %374 to double
  %383 = fpext float %375 to double
  %384 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 7.000000e+01, double noundef %382, double noundef %383)
  %.pre444 = load i32, ptr %0, align 4, !tbaa !8
  br label %385

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

392:                                              ; preds = %385
  %393 = getelementptr inbounds i8, ptr %0, i64 4
  %394 = load i32, ptr %393, align 4, !tbaa !11
  %395 = add nsw i32 %394, 1
  store i32 %395, ptr %393, align 4, !tbaa !11
  %396 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 467)
  %397 = fpext float %389 to double
  %398 = fpext float %390 to double
  %399 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 8.000000e+01, double noundef %397, double noundef %398)
  %.pre445 = load i32, ptr %0, align 4, !tbaa !8
  br label %400

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

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

415:                                              ; preds = %400, %407
  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 @_Zmlf8HMM_Mat3(ptr dead_on_unwind nonnull writable sret(%union.HMM_Mat3) align 4 %5, float noundef 1.000000e+01, ptr noundef nonnull byval(%union.HMM_Mat3) align 8 %1)
  %416 = load i32, ptr %0, align 4, !tbaa !8
  %417 = add nsw i32 %416, 1
  store i32 %417, ptr %0, align 4, !tbaa !8
  %418 = load float, ptr %5, align 4, !tbaa !5
  %419 = fadd float %418, -1.000000e+01
  %420 = call float @llvm.fabs.f32(float %419)
  %or.cond55 = fcmp ogt float %420, 0x3E80000000000000
  br i1 %or.cond55, label %421, label %429

421:                                              ; preds = %415
  %422 = getelementptr inbounds i8, ptr %0, i64 4
  %423 = load i32, ptr %422, align 4, !tbaa !11
  %424 = add nsw i32 %423, 1
  store i32 %424, ptr %422, align 4, !tbaa !11
  %425 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 472)
  %426 = fpext float %418 to double
  %427 = fpext float %419 to double
  %428 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 1.000000e+01, double noundef %426, double noundef %427)
  %.pre446 = load i32, ptr %0, align 4, !tbaa !8
  br label %429

429:                                              ; preds = %415, %421
  %430 = phi i32 [ %417, %415 ], [ %.pre446, %421 ]
  %431 = add nsw i32 %430, 1
  store i32 %431, ptr %0, align 4, !tbaa !8
  %432 = getelementptr inbounds i8, ptr %5, i64 4
  %433 = load float, ptr %432, align 4, !tbaa !5
  %434 = fadd float %433, -2.000000e+01
  %435 = call float @llvm.fabs.f32(float %434)
  %or.cond57 = fcmp ogt float %435, 0x3E80000000000000
  br i1 %or.cond57, label %436, label %444

436:                                              ; preds = %429
  %437 = getelementptr inbounds i8, ptr %0, i64 4
  %438 = load i32, ptr %437, align 4, !tbaa !11
  %439 = add nsw i32 %438, 1
  store i32 %439, ptr %437, align 4, !tbaa !11
  %440 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 473)
  %441 = fpext float %433 to double
  %442 = fpext float %434 to double
  %443 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 2.000000e+01, double noundef %441, double noundef %442)
  %.pre447 = load i32, ptr %0, align 4, !tbaa !8
  br label %444

444:                                              ; preds = %429, %436
  %445 = phi i32 [ %431, %429 ], [ %.pre447, %436 ]
  %446 = add nsw i32 %445, 1
  store i32 %446, ptr %0, align 4, !tbaa !8
  %447 = getelementptr inbounds i8, ptr %5, i64 8
  %448 = load float, ptr %447, align 4, !tbaa !5
  %449 = fadd float %448, -3.000000e+01
  %450 = call float @llvm.fabs.f32(float %449)
  %or.cond59 = fcmp ogt float %450, 0x3E80000000000000
  br i1 %or.cond59, label %451, label %459

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

459:                                              ; preds = %444, %451
  %460 = phi i32 [ %446, %444 ], [ %.pre448, %451 ]
  %461 = add nsw i32 %460, 1
  store i32 %461, ptr %0, align 4, !tbaa !8
  %462 = getelementptr inbounds i8, ptr %5, i64 12
  %463 = load float, ptr %462, align 4, !tbaa !5
  %464 = fadd float %463, -4.000000e+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 = %459
  %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 475)
  %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 4.000000e+01, double noundef %471, double noundef %472)
  %.pre449 = load i32, ptr %0, align 4, !tbaa !8
  br label %474

474:                                              ; preds = %459, %466
  %475 = phi i32 [ %461, %459 ], [ %.pre449, %466 ]
  %476 = add nsw i32 %475, 1
  store i32 %476, ptr %0, align 4, !tbaa !8
  %477 = getelementptr inbounds i8, ptr %5, i64 16
  %478 = load float, ptr %477, align 4, !tbaa !5
  %479 = fadd float %478, -5.000000e+01
  %480 = call float @llvm.fabs.f32(float %479)
  %or.cond63 = fcmp ogt float %480, 0x3E80000000000000
  br i1 %or.cond63, label %481, label %489

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

489:                                              ; preds = %474, %481
  %490 = phi i32 [ %476, %474 ], [ %.pre450, %481 ]
  %491 = add nsw i32 %490, 1
  store i32 %491, ptr %0, align 4, !tbaa !8
  %492 = getelementptr inbounds i8, ptr %5, i64 20
  %493 = load float, ptr %492, align 4, !tbaa !5
  %494 = fadd float %493, -6.000000e+01
  %495 = call float @llvm.fabs.f32(float %494)
  %or.cond65 = fcmp ogt float %495, 0x3E80000000000000
  br i1 %or.cond65, label %496, label %504

496:                                              ; preds = %489
  %497 = getelementptr inbounds i8, ptr %0, i64 4
  %498 = load i32, ptr %497, align 4, !tbaa !11
  %499 = add nsw i32 %498, 1
  store i32 %499, ptr %497, align 4, !tbaa !11
  %500 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 477)
  %501 = fpext float %493 to double
  %502 = fpext float %494 to double
  %503 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 6.000000e+01, double noundef %501, double noundef %502)
  %.pre451 = load i32, ptr %0, align 4, !tbaa !8
  br label %504

504:                                              ; preds = %489, %496
  %505 = phi i32 [ %491, %489 ], [ %.pre451, %496 ]
  %506 = add nsw i32 %505, 1
  store i32 %506, ptr %0, align 4, !tbaa !8
  %507 = getelementptr inbounds i8, ptr %5, i64 24
  %508 = load float, ptr %507, align 4, !tbaa !5
  %509 = fadd float %508, -7.000000e+01
  %510 = call float @llvm.fabs.f32(float %509)
  %or.cond67 = fcmp ogt float %510, 0x3E80000000000000
  br i1 %or.cond67, label %511, label %519

511:                                              ; preds = %504
  %512 = getelementptr inbounds i8, ptr %0, i64 4
  %513 = load i32, ptr %512, align 4, !tbaa !11
  %514 = add nsw i32 %513, 1
  store i32 %514, ptr %512, align 4, !tbaa !11
  %515 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 478)
  %516 = fpext float %508 to double
  %517 = fpext float %509 to double
  %518 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 7.000000e+01, double noundef %516, double noundef %517)
  %.pre452 = load i32, ptr %0, align 4, !tbaa !8
  br label %519

519:                                              ; preds = %504, %511
  %520 = phi i32 [ %506, %504 ], [ %.pre452, %511 ]
  %521 = add nsw i32 %520, 1
  store i32 %521, ptr %0, align 4, !tbaa !8
  %522 = getelementptr inbounds i8, ptr %5, i64 28
  %523 = load float, ptr %522, align 4, !tbaa !5
  %524 = fadd float %523, -8.000000e+01
  %525 = call float @llvm.fabs.f32(float %524)
  %or.cond69 = fcmp ogt float %525, 0x3E80000000000000
  br i1 %or.cond69, label %526, label %534

526:                                              ; preds = %519
  %527 = getelementptr inbounds i8, ptr %0, i64 4
  %528 = load i32, ptr %527, align 4, !tbaa !11
  %529 = add nsw i32 %528, 1
  store i32 %529, ptr %527, align 4, !tbaa !11
  %530 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 479)
  %531 = fpext float %523 to double
  %532 = fpext float %524 to double
  %533 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 8.000000e+01, double noundef %531, double noundef %532)
  %.pre453 = load i32, ptr %0, align 4, !tbaa !8
  br label %534

534:                                              ; preds = %519, %526
  %535 = phi i32 [ %521, %519 ], [ %.pre453, %526 ]
  %536 = add nsw i32 %535, 1
  store i32 %536, ptr %0, align 4, !tbaa !8
  %537 = getelementptr inbounds i8, ptr %5, i64 32
  %538 = load float, ptr %537, align 4, !tbaa !5
  %539 = fadd float %538, -9.000000e+01
  %540 = call float @llvm.fabs.f32(float %539)
  %or.cond71 = fcmp ogt float %540, 0x3E80000000000000
  br i1 %or.cond71, label %541, label %549

541:                                              ; preds = %534
  %542 = getelementptr inbounds i8, ptr %0, i64 4
  %543 = load i32, ptr %542, align 4, !tbaa !11
  %544 = add nsw i32 %543, 1
  store i32 %544, ptr %542, align 4, !tbaa !11
  %545 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 480)
  %546 = fpext float %538 to double
  %547 = fpext float %539 to double
  %548 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 9.000000e+01, double noundef %546, double noundef %547)
  br label %549

549:                                              ; preds = %534, %541
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %5) #5
  %550 = call noundef nonnull align 4 dereferenceable(36) ptr @_ZmLR8HMM_Mat3f(ptr noundef nonnull align 4 dereferenceable(36) %1, float noundef 1.000000e+01)
  %551 = load i32, ptr %0, align 4, !tbaa !8
  %552 = add nsw i32 %551, 1
  store i32 %552, ptr %0, align 4, !tbaa !8
  %553 = load float, ptr %1, align 16, !tbaa !5
  %554 = fadd float %553, -1.000000e+01
  %555 = call float @llvm.fabs.f32(float %554)
  %or.cond73 = fcmp ogt float %555, 0x3E80000000000000
  br i1 %or.cond73, label %556, label %564

556:                                              ; preds = %549
  %557 = getelementptr inbounds i8, ptr %0, i64 4
  %558 = load i32, ptr %557, align 4, !tbaa !11
  %559 = add nsw i32 %558, 1
  store i32 %559, ptr %557, align 4, !tbaa !11
  %560 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 483)
  %561 = fpext float %553 to double
  %562 = fpext float %554 to double
  %563 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 1.000000e+01, double noundef %561, double noundef %562)
  %.pre454 = load i32, ptr %0, align 4, !tbaa !8
  br label %564

564:                                              ; preds = %549, %556
  %565 = phi i32 [ %552, %549 ], [ %.pre454, %556 ]
  %566 = add nsw i32 %565, 1
  store i32 %566, ptr %0, align 4, !tbaa !8
  %567 = load float, ptr %6, align 4, !tbaa !5
  %568 = fadd float %567, -2.000000e+01
  %569 = call float @llvm.fabs.f32(float %568)
  %or.cond75 = fcmp ogt float %569, 0x3E80000000000000
  br i1 %or.cond75, label %570, label %578

570:                                              ; preds = %564
  %571 = getelementptr inbounds i8, ptr %0, i64 4
  %572 = load i32, ptr %571, align 4, !tbaa !11
  %573 = add nsw i32 %572, 1
  store i32 %573, ptr %571, align 4, !tbaa !11
  %574 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 484)
  %575 = fpext float %567 to double
  %576 = fpext float %568 to double
  %577 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 2.000000e+01, double noundef %575, double noundef %576)
  %.pre455 = load i32, ptr %0, align 4, !tbaa !8
  br label %578

578:                                              ; preds = %564, %570
  %579 = phi i32 [ %566, %564 ], [ %.pre455, %570 ]
  %580 = add nsw i32 %579, 1
  store i32 %580, ptr %0, align 4, !tbaa !8
  %581 = load float, ptr %7, align 8, !tbaa !5
  %582 = fadd float %581, -3.000000e+01
  %583 = call float @llvm.fabs.f32(float %582)
  %or.cond77 = fcmp ogt float %583, 0x3E80000000000000
  br i1 %or.cond77, label %584, label %592

584:                                              ; preds = %578
  %585 = getelementptr inbounds i8, ptr %0, i64 4
  %586 = load i32, ptr %585, align 4, !tbaa !11
  %587 = add nsw i32 %586, 1
  store i32 %587, ptr %585, align 4, !tbaa !11
  %588 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 485)
  %589 = fpext float %581 to double
  %590 = fpext float %582 to double
  %591 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 3.000000e+01, double noundef %589, double noundef %590)
  %.pre456 = load i32, ptr %0, align 4, !tbaa !8
  br label %592

592:                                              ; preds = %578, %584
  %593 = phi i32 [ %580, %578 ], [ %.pre456, %584 ]
  %594 = add nsw i32 %593, 1
  store i32 %594, ptr %0, align 4, !tbaa !8
  %595 = load float, ptr %8, align 4, !tbaa !5
  %596 = fadd float %595, -4.000000e+01
  %597 = call float @llvm.fabs.f32(float %596)
  %or.cond79 = fcmp ogt float %597, 0x3E80000000000000
  br i1 %or.cond79, label %598, label %606

598:                                              ; preds = %592
  %599 = getelementptr inbounds i8, ptr %0, i64 4
  %600 = load i32, ptr %599, align 4, !tbaa !11
  %601 = add nsw i32 %600, 1
  store i32 %601, ptr %599, align 4, !tbaa !11
  %602 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 486)
  %603 = fpext float %595 to double
  %604 = fpext float %596 to double
  %605 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 4.000000e+01, double noundef %603, double noundef %604)
  %.pre457 = load i32, ptr %0, align 4, !tbaa !8
  br label %606

606:                                              ; preds = %592, %598
  %607 = phi i32 [ %594, %592 ], [ %.pre457, %598 ]
  %608 = add nsw i32 %607, 1
  store i32 %608, ptr %0, align 4, !tbaa !8
  %609 = load float, ptr %9, align 16, !tbaa !5
  %610 = fadd float %609, -5.000000e+01
  %611 = call float @llvm.fabs.f32(float %610)
  %or.cond81 = fcmp ogt float %611, 0x3E80000000000000
  br i1 %or.cond81, label %612, label %620

612:                                              ; preds = %606
  %613 = getelementptr inbounds i8, ptr %0, i64 4
  %614 = load i32, ptr %613, align 4, !tbaa !11
  %615 = add nsw i32 %614, 1
  store i32 %615, ptr %613, align 4, !tbaa !11
  %616 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 487)
  %617 = fpext float %609 to double
  %618 = fpext float %610 to double
  %619 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 5.000000e+01, double noundef %617, double noundef %618)
  %.pre458 = load i32, ptr %0, align 4, !tbaa !8
  br label %620

620:                                              ; preds = %606, %612
  %621 = phi i32 [ %608, %606 ], [ %.pre458, %612 ]
  %622 = add nsw i32 %621, 1
  store i32 %622, ptr %0, align 4, !tbaa !8
  %623 = load float, ptr %10, align 4, !tbaa !5
  %624 = fadd float %623, -6.000000e+01
  %625 = call float @llvm.fabs.f32(float %624)
  %or.cond83 = fcmp ogt float %625, 0x3E80000000000000
  br i1 %or.cond83, label %626, label %634

626:                                              ; preds = %620
  %627 = getelementptr inbounds i8, ptr %0, i64 4
  %628 = load i32, ptr %627, align 4, !tbaa !11
  %629 = add nsw i32 %628, 1
  store i32 %629, ptr %627, align 4, !tbaa !11
  %630 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 488)
  %631 = fpext float %623 to double
  %632 = fpext float %624 to double
  %633 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 6.000000e+01, double noundef %631, double noundef %632)
  %.pre459 = load i32, ptr %0, align 4, !tbaa !8
  br label %634

634:                                              ; preds = %620, %626
  %635 = phi i32 [ %622, %620 ], [ %.pre459, %626 ]
  %636 = add nsw i32 %635, 1
  store i32 %636, ptr %0, align 4, !tbaa !8
  %637 = load float, ptr %11, align 8, !tbaa !5
  %638 = fadd float %637, -7.000000e+01
  %639 = call float @llvm.fabs.f32(float %638)
  %or.cond85 = fcmp ogt float %639, 0x3E80000000000000
  br i1 %or.cond85, label %640, label %648

640:                                              ; preds = %634
  %641 = getelementptr inbounds i8, ptr %0, i64 4
  %642 = load i32, ptr %641, align 4, !tbaa !11
  %643 = add nsw i32 %642, 1
  store i32 %643, ptr %641, align 4, !tbaa !11
  %644 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 489)
  %645 = fpext float %637 to double
  %646 = fpext float %638 to double
  %647 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 7.000000e+01, double noundef %645, double noundef %646)
  %.pre460 = load i32, ptr %0, align 4, !tbaa !8
  br label %648

648:                                              ; preds = %634, %640
  %649 = phi i32 [ %636, %634 ], [ %.pre460, %640 ]
  %650 = add nsw i32 %649, 1
  store i32 %650, ptr %0, align 4, !tbaa !8
  %651 = load float, ptr %12, align 4, !tbaa !5
  %652 = fadd float %651, -8.000000e+01
  %653 = call float @llvm.fabs.f32(float %652)
  %or.cond87 = fcmp ogt float %653, 0x3E80000000000000
  br i1 %or.cond87, label %654, label %662

654:                                              ; preds = %648
  %655 = getelementptr inbounds i8, ptr %0, i64 4
  %656 = load i32, ptr %655, align 4, !tbaa !11
  %657 = add nsw i32 %656, 1
  store i32 %657, ptr %655, align 4, !tbaa !11
  %658 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 490)
  %659 = fpext float %651 to double
  %660 = fpext float %652 to double
  %661 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 8.000000e+01, double noundef %659, double noundef %660)
  %.pre461 = load i32, ptr %0, align 4, !tbaa !8
  br label %662

662:                                              ; preds = %648, %654
  %663 = phi i32 [ %650, %648 ], [ %.pre461, %654 ]
  %664 = add nsw i32 %663, 1
  store i32 %664, ptr %0, align 4, !tbaa !8
  %665 = load float, ptr %13, align 16, !tbaa !5
  %666 = fadd float %665, -9.000000e+01
  %667 = call float @llvm.fabs.f32(float %666)
  %or.cond89 = fcmp ogt float %667, 0x3E80000000000000
  br i1 %or.cond89, label %668, label %676

668:                                              ; preds = %662
  %669 = getelementptr inbounds i8, ptr %0, i64 4
  %670 = load i32, ptr %669, align 4, !tbaa !11
  %671 = add nsw i32 %670, 1
  store i32 %671, ptr %669, align 4, !tbaa !11
  %672 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 491)
  %673 = fpext float %665 to double
  %674 = fpext float %666 to double
  %675 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.18, double noundef 9.000000e+01, double noundef %673, double noundef %674)
  br label %676

676:                                              ; preds = %662, %668
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %1) #5
  ret void
}

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @_Zmlf8HMM_Mat3(ptr dead_on_unwind noalias writable sret(%union.HMM_Mat3) align 4, float noundef, 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 @_ZmLR8HMM_Mat3f(ptr noundef nonnull align 4 dereferenceable(36), float noundef) 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