; LLVM IR from jrouwe/JoltPhysics :: Jolt/Geometry/OrientedBox.ll (ZNK3JPH11OrientedBox8OverlapsERKNS_5AABoxEf)

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

%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::Vec4" = type { %union.anon.0 }
%union.anon.0 = type { <4 x float> }
%"class.JPH::OrientedBox" = type { %"class.JPH::Mat44", %"class.JPH::Vec3" }

; 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 nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZNK3JPH11OrientedBox8OverlapsERKNS_5AABoxEf(ptr noundef nonnull align 16 dereferenceable(80) %0, ptr noundef nonnull align 16 dereferenceable(32) %1, float noundef %2) #1 align 2 {
  %4 = alloca i1, align 1
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca float, align 4
  %8 = alloca %"class.JPH::Vec3", align 16
  %9 = alloca %"class.JPH::Vec3", align 16
  %10 = alloca %"class.JPH::Mat44", align 16
  %11 = alloca %"class.JPH::Vec4", align 16
  %12 = alloca %"class.JPH::Vec4", align 16
  %13 = alloca %"class.JPH::Vec4", align 16
  %14 = alloca %"class.JPH::Vec4", align 16
  %15 = alloca %"class.JPH::Vec4", align 16
  %16 = alloca %"class.JPH::Vec4", align 16
  %17 = alloca %"class.JPH::Vec3", align 16
  %18 = alloca %"class.JPH::Vec3", align 16
  %19 = alloca [3 x %"class.JPH::Vec3"], align 16
  %20 = alloca %"class.JPH::Vec3", align 16
  %21 = alloca %"class.JPH::Vec3", align 16
  %22 = alloca %"class.JPH::Vec3", align 16
  %23 = alloca %"class.JPH::Vec3", align 16
  %24 = alloca %"class.JPH::Vec3", align 16
  %25 = alloca %"class.JPH::Vec3", align 16
  %26 = alloca %"class.JPH::Vec3", align 16
  %27 = alloca %"class.JPH::Vec3", align 16
  %28 = alloca %"class.JPH::Vec3", align 16
  %29 = alloca float, align 4
  %30 = alloca float, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca %"class.JPH::Vec3", align 16
  %35 = alloca %"class.JPH::Vec3", align 16
  %36 = alloca %"class.JPH::Vec3", align 16
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store float %2, ptr %7, align 4, !tbaa !9
  %37 = load ptr, ptr %5, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %8) #8
  %38 = load ptr, ptr %6, align 8, !tbaa !5
  %39 = call { double, double } @_ZNK3JPH5AABox9GetCenterEv(ptr noundef nonnull align 16 dereferenceable(32) %38)
  %40 = getelementptr inbounds %"class.JPH::Vec3", ptr %8, i32 0, i32 0
  %41 = getelementptr inbounds %union.anon, ptr %40, i32 0, i32 0
  %42 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 0
  %43 = extractvalue { double, double } %39, 0
  store double %43, ptr %42, align 16
  %44 = getelementptr inbounds { double, double }, ptr %41, i32 0, i32 1
  %45 = extractvalue { double, double } %39, 1
  store double %45, ptr %44, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %9) #8
  %46 = load ptr, ptr %6, align 8, !tbaa !5
  %47 = call { double, double } @_ZNK3JPH5AABox9GetExtentEv(ptr noundef nonnull align 16 dereferenceable(32) %46)
  %48 = getelementptr inbounds %"class.JPH::Vec3", ptr %9, i32 0, i32 0
  %49 = getelementptr inbounds %union.anon, ptr %48, i32 0, i32 0
  %50 = getelementptr inbounds { double, double }, ptr %49, i32 0, i32 0
  %51 = extractvalue { double, double } %47, 0
  store double %51, ptr %50, align 16
  %52 = getelementptr inbounds { double, double }, ptr %49, i32 0, i32 1
  %53 = extractvalue { double, double } %47, 1
  store double %53, ptr %52, align 8
  call void @llvm.lifetime.start.p0(i64 64, ptr %10) #8
  %54 = getelementptr inbounds %"class.JPH::OrientedBox", ptr %37, i32 0, i32 0
  %55 = call { double, double } @_ZNK3JPH5Mat4410GetColumn4Ej(ptr noundef nonnull align 16 dereferenceable(64) %54, i32 noundef 0)
  %56 = getelementptr inbounds %"class.JPH::Vec4", ptr %11, i32 0, i32 0
  %57 = getelementptr inbounds %union.anon.0, ptr %56, i32 0, i32 0
  %58 = getelementptr inbounds { double, double }, ptr %57, i32 0, i32 0
  %59 = extractvalue { double, double } %55, 0
  store double %59, ptr %58, align 16
  %60 = getelementptr inbounds { double, double }, ptr %57, i32 0, i32 1
  %61 = extractvalue { double, double } %55, 1
  store double %61, ptr %60, align 8
  %62 = getelementptr inbounds %"class.JPH::OrientedBox", ptr %37, i32 0, i32 0
  %63 = call { double, double } @_ZNK3JPH5Mat4410GetColumn4Ej(ptr noundef nonnull align 16 dereferenceable(64) %62, i32 noundef 1)
  %64 = getelementptr inbounds %"class.JPH::Vec4", ptr %12, i32 0, i32 0
  %65 = getelementptr inbounds %union.anon.0, ptr %64, i32 0, i32 0
  %66 = getelementptr inbounds { double, double }, ptr %65, i32 0, i32 0
  %67 = extractvalue { double, double } %63, 0
  store double %67, ptr %66, align 16
  %68 = getelementptr inbounds { double, double }, ptr %65, i32 0, i32 1
  %69 = extractvalue { double, double } %63, 1
  store double %69, ptr %68, align 8
  %70 = getelementptr inbounds %"class.JPH::OrientedBox", ptr %37, i32 0, i32 0
  %71 = call { double, double } @_ZNK3JPH5Mat4410GetColumn4Ej(ptr noundef nonnull align 16 dereferenceable(64) %70, i32 noundef 2)
  %72 = getelementptr inbounds %"class.JPH::Vec4", ptr %13, i32 0, i32 0
  %73 = getelementptr inbounds %union.anon.0, ptr %72, i32 0, i32 0
  %74 = getelementptr inbounds { double, double }, ptr %73, i32 0, i32 0
  %75 = extractvalue { double, double } %71, 0
  store double %75, ptr %74, align 16
  %76 = getelementptr inbounds { double, double }, ptr %73, i32 0, i32 1
  %77 = extractvalue { double, double } %71, 1
  store double %77, ptr %76, align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr %15) #8
  %78 = getelementptr inbounds %"class.JPH::OrientedBox", ptr %37, i32 0, i32 0
  %79 = call { double, double } @_ZNK3JPH5Mat4410GetColumn4Ej(ptr noundef nonnull align 16 dereferenceable(64) %78, i32 noundef 3)
  %80 = getelementptr inbounds %"class.JPH::Vec4", ptr %15, i32 0, i32 0
  %81 = getelementptr inbounds %union.anon.0, ptr %80, i32 0, i32 0
  %82 = getelementptr inbounds { double, double }, ptr %81, i32 0, i32 0
  %83 = extractvalue { double, double } %79, 0
  store double %83, ptr %82, align 16
  %84 = getelementptr inbounds { double, double }, ptr %81, i32 0, i32 1
  %85 = extractvalue { double, double } %79, 1
  store double %85, ptr %84, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %17, ptr align 16 %8, i64 16, i1 false), !tbaa.struct !11
  %86 = getelementptr inbounds { double, double }, ptr %17, i32 0, i32 0
  %87 = load double, ptr %86, align 16
  %88 = getelementptr inbounds { double, double }, ptr %17, i32 0, i32 1
  %89 = load double, ptr %88, align 8
  call void @_ZN3JPH4Vec4C2ENS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(16) %16, double %87, double %89, float noundef 0.000000e+00)
  %90 = getelementptr inbounds { double, double }, ptr %16, i32 0, i32 0
  %91 = load double, ptr %90, align 16
  %92 = getelementptr inbounds { double, double }, ptr %16, i32 0, i32 1
  %93 = load double, ptr %92, align 8
  %94 = call { double, double } @_ZNK3JPH4Vec4miES0_(ptr noundef nonnull align 16 dereferenceable(16) %15, double %91, double %93)
  %95 = getelementptr inbounds %"class.JPH::Vec4", ptr %14, i32 0, i32 0
  %96 = getelementptr inbounds %union.anon.0, ptr %95, i32 0, i32 0
  %97 = getelementptr inbounds { double, double }, ptr %96, i32 0, i32 0
  %98 = extractvalue { double, double } %94, 0
  store double %98, ptr %97, align 16
  %99 = getelementptr inbounds { double, double }, ptr %96, i32 0, i32 1
  %100 = extractvalue { double, double } %94, 1
  store double %100, ptr %99, align 8
  %101 = getelementptr inbounds { double, double }, ptr %11, i32 0, i32 0
  %102 = load double, ptr %101, align 16
  %103 = getelementptr inbounds { double, double }, ptr %11, i32 0, i32 1
  %104 = load double, ptr %103, align 8
  %105 = getelementptr inbounds { double, double }, ptr %12, i32 0, i32 0
  %106 = load double, ptr %105, align 16
  %107 = getelementptr inbounds { double, double }, ptr %12, i32 0, i32 1
  %108 = load double, ptr %107, align 8
  %109 = getelementptr inbounds { double, double }, ptr %13, i32 0, i32 0
  %110 = load double, ptr %109, align 16
  %111 = getelementptr inbounds { double, double }, ptr %13, i32 0, i32 1
  %112 = load double, ptr %111, align 8
  %113 = getelementptr inbounds { double, double }, ptr %14, i32 0, i32 0
  %114 = load double, ptr %113, align 16
  %115 = getelementptr inbounds { double, double }, ptr %14, i32 0, i32 1
  %116 = load double, ptr %115, align 8
  call void @_ZN3JPH5Mat44C2ENS_4Vec4ES1_S1_S1_(ptr noundef nonnull align 16 dereferenceable(64) %10, double %102, double %104, double %106, double %108, double %110, double %112, double %114, double %116)
  call void @llvm.lifetime.end.p0(i64 16, ptr %15) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %18) #8
  %117 = load float, ptr %7, align 4, !tbaa !9
  %118 = call { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef %117)
  %119 = getelementptr inbounds %"class.JPH::Vec3", ptr %18, i32 0, i32 0
  %120 = getelementptr inbounds %union.anon, ptr %119, i32 0, i32 0
  %121 = getelementptr inbounds { double, double }, ptr %120, i32 0, i32 0
  %122 = extractvalue { double, double } %118, 0
  store double %122, ptr %121, align 16
  %123 = getelementptr inbounds { double, double }, ptr %120, i32 0, i32 1
  %124 = extractvalue { double, double } %118, 1
  store double %124, ptr %123, align 8
  call void @llvm.lifetime.start.p0(i64 48, ptr %19) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %20) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %21) #8
  %125 = call { double, double } @_ZNK3JPH5Mat448GetAxisXEv(ptr noundef nonnull align 16 dereferenceable(64) %10)
  %126 = getelementptr inbounds %"class.JPH::Vec3", ptr %21, i32 0, i32 0
  %127 = getelementptr inbounds %union.anon, ptr %126, i32 0, i32 0
  %128 = getelementptr inbounds { double, double }, ptr %127, i32 0, i32 0
  %129 = extractvalue { double, double } %125, 0
  store double %129, ptr %128, align 16
  %130 = getelementptr inbounds { double, double }, ptr %127, i32 0, i32 1
  %131 = extractvalue { double, double } %125, 1
  store double %131, ptr %130, align 8
  %132 = call { double, double } @_ZNK3JPH4Vec33AbsEv(ptr noundef nonnull align 16 dereferenceable(16) %21)
  %133 = getelementptr inbounds %"class.JPH::Vec3", ptr %20, i32 0, i32 0
  %134 = getelementptr inbounds %union.anon, ptr %133, i32 0, i32 0
  %135 = getelementptr inbounds { double, double }, ptr %134, i32 0, i32 0
  %136 = extractvalue { double, double } %132, 0
  store double %136, ptr %135, align 16
  %137 = getelementptr inbounds { double, double }, ptr %134, i32 0, i32 1
  %138 = extractvalue { double, double } %132, 1
  store double %138, ptr %137, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %22, ptr align 16 %18, i64 16, i1 false), !tbaa.struct !11
  %139 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 0
  %140 = load double, ptr %139, align 16
  %141 = getelementptr inbounds { double, double }, ptr %22, i32 0, i32 1
  %142 = load double, ptr %141, align 8
  %143 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %20, double %140, double %142)
  %144 = getelementptr inbounds %"class.JPH::Vec3", ptr %19, i32 0, i32 0
  %145 = getelementptr inbounds %union.anon, ptr %144, i32 0, i32 0
  %146 = getelementptr inbounds { double, double }, ptr %145, i32 0, i32 0
  %147 = extractvalue { double, double } %143, 0
  store double %147, ptr %146, align 16
  %148 = getelementptr inbounds { double, double }, ptr %145, i32 0, i32 1
  %149 = extractvalue { double, double } %143, 1
  store double %149, ptr %148, align 8
  %150 = getelementptr inbounds %"class.JPH::Vec3", ptr %19, i64 1
  call void @llvm.lifetime.start.p0(i64 16, ptr %23) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #8
  %151 = call { double, double } @_ZNK3JPH5Mat448GetAxisYEv(ptr noundef nonnull align 16 dereferenceable(64) %10)
  %152 = getelementptr inbounds %"class.JPH::Vec3", ptr %24, i32 0, i32 0
  %153 = getelementptr inbounds %union.anon, ptr %152, i32 0, i32 0
  %154 = getelementptr inbounds { double, double }, ptr %153, i32 0, i32 0
  %155 = extractvalue { double, double } %151, 0
  store double %155, ptr %154, align 16
  %156 = getelementptr inbounds { double, double }, ptr %153, i32 0, i32 1
  %157 = extractvalue { double, double } %151, 1
  store double %157, ptr %156, align 8
  %158 = call { double, double } @_ZNK3JPH4Vec33AbsEv(ptr noundef nonnull align 16 dereferenceable(16) %24)
  %159 = getelementptr inbounds %"class.JPH::Vec3", ptr %23, i32 0, i32 0
  %160 = getelementptr inbounds %union.anon, ptr %159, i32 0, i32 0
  %161 = getelementptr inbounds { double, double }, ptr %160, i32 0, i32 0
  %162 = extractvalue { double, double } %158, 0
  store double %162, ptr %161, align 16
  %163 = getelementptr inbounds { double, double }, ptr %160, i32 0, i32 1
  %164 = extractvalue { double, double } %158, 1
  store double %164, ptr %163, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %25, ptr align 16 %18, i64 16, i1 false), !tbaa.struct !11
  %165 = getelementptr inbounds { double, double }, ptr %25, i32 0, i32 0
  %166 = load double, ptr %165, align 16
  %167 = getelementptr inbounds { double, double }, ptr %25, i32 0, i32 1
  %168 = load double, ptr %167, align 8
  %169 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %23, double %166, double %168)
  %170 = getelementptr inbounds %"class.JPH::Vec3", ptr %150, i32 0, i32 0
  %171 = getelementptr inbounds %union.anon, ptr %170, i32 0, i32 0
  %172 = getelementptr inbounds { double, double }, ptr %171, i32 0, i32 0
  %173 = extractvalue { double, double } %169, 0
  store double %173, ptr %172, align 16
  %174 = getelementptr inbounds { double, double }, ptr %171, i32 0, i32 1
  %175 = extractvalue { double, double } %169, 1
  store double %175, ptr %174, align 8
  %176 = getelementptr inbounds %"class.JPH::Vec3", ptr %19, i64 2
  call void @llvm.lifetime.start.p0(i64 16, ptr %26) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr %27) #8
  %177 = call { double, double } @_ZNK3JPH5Mat448GetAxisZEv(ptr noundef nonnull align 16 dereferenceable(64) %10)
  %178 = getelementptr inbounds %"class.JPH::Vec3", ptr %27, i32 0, i32 0
  %179 = getelementptr inbounds %union.anon, ptr %178, i32 0, i32 0
  %180 = getelementptr inbounds { double, double }, ptr %179, i32 0, i32 0
  %181 = extractvalue { double, double } %177, 0
  store double %181, ptr %180, align 16
  %182 = getelementptr inbounds { double, double }, ptr %179, i32 0, i32 1
  %183 = extractvalue { double, double } %177, 1
  store double %183, ptr %182, align 8
  %184 = call { double, double } @_ZNK3JPH4Vec33AbsEv(ptr noundef nonnull align 16 dereferenceable(16) %27)
  %185 = getelementptr inbounds %"class.JPH::Vec3", ptr %26, i32 0, i32 0
  %186 = getelementptr inbounds %union.anon, ptr %185, i32 0, i32 0
  %187 = getelementptr inbounds { double, double }, ptr %186, i32 0, i32 0
  %188 = extractvalue { double, double } %184, 0
  store double %188, ptr %187, align 16
  %189 = getelementptr inbounds { double, double }, ptr %186, i32 0, i32 1
  %190 = extractvalue { double, double } %184, 1
  store double %190, ptr %189, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %28, ptr align 16 %18, i64 16, i1 false), !tbaa.struct !11
  %191 = getelementptr inbounds { double, double }, ptr %28, i32 0, i32 0
  %192 = load double, ptr %191, align 16
  %193 = getelementptr inbounds { double, double }, ptr %28, i32 0, i32 1
  %194 = load double, ptr %193, align 8
  %195 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %26, double %192, double %194)
  %196 = getelementptr inbounds %"class.JPH::Vec3", ptr %176, i32 0, i32 0
  %197 = getelementptr inbounds %union.anon, ptr %196, i32 0, i32 0
  %198 = getelementptr inbounds { double, double }, ptr %197, i32 0, i32 0
  %199 = extractvalue { double, double } %195, 0
  store double %199, ptr %198, align 16
  %200 = getelementptr inbounds { double, double }, ptr %197, i32 0, i32 1
  %201 = extractvalue { double, double } %195, 1
  store double %201, ptr %200, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #8
  store i32 0, ptr %31, align 4, !tbaa !13
  br label %202

202:                                              ; preds = %237, %3
  %203 = load i32, ptr %31, align 4, !tbaa !13
  %204 = icmp slt i32 %203, 3
  br i1 %204, label %206, label %205

205:                                              ; preds = %202
  store i32 2, ptr %32, align 4
  br label %240

206:                                              ; preds = %202
  %207 = load i32, ptr %31, align 4, !tbaa !13
  %208 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %9, i32 noundef %207)
  store float %208, ptr %29, align 4, !tbaa !9
  %209 = getelementptr inbounds %"class.JPH::OrientedBox", ptr %37, i32 0, i32 1
  %210 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %209, i32 noundef 0)
  %211 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 0
  %212 = load i32, ptr %31, align 4, !tbaa !13
  %213 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %211, i32 noundef %212)
  %214 = getelementptr inbounds %"class.JPH::OrientedBox", ptr %37, i32 0, i32 1
  %215 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %214, i32 noundef 1)
  %216 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 1
  %217 = load i32, ptr %31, align 4, !tbaa !13
  %218 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %216, i32 noundef %217)
  %219 = fmul float %215, %218
  %220 = call float @llvm.fmuladd.f32(float %210, float %213, float %219)
  %221 = getelementptr inbounds %"class.JPH::OrientedBox", ptr %37, i32 0, i32 1
  %222 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %221, i32 noundef 2)
  %223 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 2
  %224 = load i32, ptr %31, align 4, !tbaa !13
  %225 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %223, i32 noundef %224)
  %226 = call float @llvm.fmuladd.f32(float %222, float %225, float %220)
  store float %226, ptr %30, align 4, !tbaa !9
  %227 = load i32, ptr %31, align 4, !tbaa !13
  %228 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef %227, i32 noundef 3)
  %229 = load float, ptr %228, align 4, !tbaa !9
  %230 = call noundef float @_ZSt3absf(float noundef %229)
  %231 = load float, ptr %29, align 4, !tbaa !9
  %232 = load float, ptr %30, align 4, !tbaa !9
  %233 = fadd float %231, %232
  %234 = fcmp ogt float %230, %233
  br i1 %234, label %235, label %236

235:                                              ; preds = %206
  store i1 false, ptr %4, align 1
  store i32 1, ptr %32, align 4
  br label %240

236:                                              ; preds = %206
  br label %237

237:                                              ; preds = %236
  %238 = load i32, ptr %31, align 4, !tbaa !13
  %239 = add nsw i32 %238, 1
  store i32 %239, ptr %31, align 4, !tbaa !13
  br label %202, !llvm.loop !15

240:                                              ; preds = %235, %205
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #8
  %241 = load i32, ptr %32, align 4
  switch i32 %241, label %616 [
    i32 2, label %242
  ]

242:                                              ; preds = %240
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #8
  store i32 0, ptr %33, align 4, !tbaa !13
  br label %243

243:                                              ; preds = %286, %242
  %244 = load i32, ptr %33, align 4, !tbaa !13
  %245 = icmp slt i32 %244, 3
  br i1 %245, label %247, label %246

246:                                              ; preds = %243
  store i32 5, ptr %32, align 4
  br label %289

247:                                              ; preds = %243
  %248 = load i32, ptr %33, align 4, !tbaa !13
  %249 = sext i32 %248 to i64
  %250 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 %249
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %34, ptr align 16 %250, i64 16, i1 false), !tbaa.struct !11
  %251 = getelementptr inbounds { double, double }, ptr %34, i32 0, i32 0
  %252 = load double, ptr %251, align 16
  %253 = getelementptr inbounds { double, double }, ptr %34, i32 0, i32 1
  %254 = load double, ptr %253, align 8
  %255 = call noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %9, double %252, double %254)
  store float %255, ptr %29, align 4, !tbaa !9
  %256 = getelementptr inbounds %"class.JPH::OrientedBox", ptr %37, i32 0, i32 1
  %257 = load i32, ptr %33, align 4, !tbaa !13
  %258 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %256, i32 noundef %257)
  store float %258, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %35) #8
  %259 = call { double, double } @_ZNK3JPH5Mat4414GetTranslationEv(ptr noundef nonnull align 16 dereferenceable(64) %10)
  %260 = getelementptr inbounds %"class.JPH::Vec3", ptr %35, i32 0, i32 0
  %261 = getelementptr inbounds %union.anon, ptr %260, i32 0, i32 0
  %262 = getelementptr inbounds { double, double }, ptr %261, i32 0, i32 0
  %263 = extractvalue { double, double } %259, 0
  store double %263, ptr %262, align 16
  %264 = getelementptr inbounds { double, double }, ptr %261, i32 0, i32 1
  %265 = extractvalue { double, double } %259, 1
  store double %265, ptr %264, align 8
  %266 = load i32, ptr %33, align 4, !tbaa !13
  %267 = call { double, double } @_ZNK3JPH5Mat4410GetColumn3Ej(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef %266)
  %268 = getelementptr inbounds %"class.JPH::Vec3", ptr %36, i32 0, i32 0
  %269 = getelementptr inbounds %union.anon, ptr %268, i32 0, i32 0
  %270 = getelementptr inbounds { double, double }, ptr %269, i32 0, i32 0
  %271 = extractvalue { double, double } %267, 0
  store double %271, ptr %270, align 16
  %272 = getelementptr inbounds { double, double }, ptr %269, i32 0, i32 1
  %273 = extractvalue { double, double } %267, 1
  store double %273, ptr %272, align 8
  %274 = getelementptr inbounds { double, double }, ptr %36, i32 0, i32 0
  %275 = load double, ptr %274, align 16
  %276 = getelementptr inbounds { double, double }, ptr %36, i32 0, i32 1
  %277 = load double, ptr %276, align 8
  %278 = call noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %35, double %275, double %277)
  %279 = call noundef float @_ZSt3absf(float noundef %278)
  %280 = load float, ptr %29, align 4, !tbaa !9
  %281 = load float, ptr %30, align 4, !tbaa !9
  %282 = fadd float %280, %281
  %283 = fcmp ogt float %279, %282
  call void @llvm.lifetime.end.p0(i64 16, ptr %35) #8
  br i1 %283, label %284, label %285

284:                                              ; preds = %247
  store i1 false, ptr %4, align 1
  store i32 1, ptr %32, align 4
  br label %289

285:                                              ; preds = %247
  br label %286

286:                                              ; preds = %285
  %287 = load i32, ptr %33, align 4, !tbaa !13
  %288 = add nsw i32 %287, 1
  store i32 %288, ptr %33, align 4, !tbaa !13
  br label %243, !llvm.loop !17

289:                                              ; preds = %284, %246
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  %290 = load i32, ptr %32, align 4
  switch i32 %290, label %616 [
    i32 5, label %291
  ]

291:                                              ; preds = %289
  %292 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %9, i32 noundef 1)
  %293 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 0
  %294 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %293, i32 noundef 2)
  %295 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %9, i32 noundef 2)
  %296 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 0
  %297 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %296, i32 noundef 1)
  %298 = fmul float %295, %297
  %299 = call float @llvm.fmuladd.f32(float %292, float %294, float %298)
  store float %299, ptr %29, align 4, !tbaa !9
  %300 = getelementptr inbounds %"class.JPH::OrientedBox", ptr %37, i32 0, i32 1
  %301 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %300, i32 noundef 1)
  %302 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 2
  %303 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %302, i32 noundef 0)
  %304 = getelementptr inbounds %"class.JPH::OrientedBox", ptr %37, i32 0, i32 1
  %305 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %304, i32 noundef 2)
  %306 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 1
  %307 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %306, i32 noundef 0)
  %308 = fmul float %305, %307
  %309 = call float @llvm.fmuladd.f32(float %301, float %303, float %308)
  store float %309, ptr %30, align 4, !tbaa !9
  %310 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 2, i32 noundef 3)
  %311 = load float, ptr %310, align 4, !tbaa !9
  %312 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 1, i32 noundef 0)
  %313 = load float, ptr %312, align 4, !tbaa !9
  %314 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 1, i32 noundef 3)
  %315 = load float, ptr %314, align 4, !tbaa !9
  %316 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 2, i32 noundef 0)
  %317 = load float, ptr %316, align 4, !tbaa !9
  %318 = fmul float %315, %317
  %319 = fneg float %318
  %320 = call float @llvm.fmuladd.f32(float %311, float %313, float %319)
  %321 = call noundef float @_ZSt3absf(float noundef %320)
  %322 = load float, ptr %29, align 4, !tbaa !9
  %323 = load float, ptr %30, align 4, !tbaa !9
  %324 = fadd float %322, %323
  %325 = fcmp ogt float %321, %324
  br i1 %325, label %326, label %327

326:                                              ; preds = %291
  store i1 false, ptr %4, align 1
  store i32 1, ptr %32, align 4
  br label %616

327:                                              ; preds = %291
  %328 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %9, i32 noundef 1)
  %329 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 1
  %330 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %329, i32 noundef 2)
  %331 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %9, i32 noundef 2)
  %332 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 1
  %333 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %332, i32 noundef 1)
  %334 = fmul float %331, %333
  %335 = call float @llvm.fmuladd.f32(float %328, float %330, float %334)
  store float %335, ptr %29, align 4, !tbaa !9
  %336 = getelementptr inbounds %"class.JPH::OrientedBox", ptr %37, i32 0, i32 1
  %337 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %336, i32 noundef 0)
  %338 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 2
  %339 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %338, i32 noundef 0)
  %340 = getelementptr inbounds %"class.JPH::OrientedBox", ptr %37, i32 0, i32 1
  %341 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %340, i32 noundef 2)
  %342 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 0
  %343 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %342, i32 noundef 0)
  %344 = fmul float %341, %343
  %345 = call float @llvm.fmuladd.f32(float %337, float %339, float %344)
  store float %345, ptr %30, align 4, !tbaa !9
  %346 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 2, i32 noundef 3)
  %347 = load float, ptr %346, align 4, !tbaa !9
  %348 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 1, i32 noundef 1)
  %349 = load float, ptr %348, align 4, !tbaa !9
  %350 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 1, i32 noundef 3)
  %351 = load float, ptr %350, align 4, !tbaa !9
  %352 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 2, i32 noundef 1)
  %353 = load float, ptr %352, align 4, !tbaa !9
  %354 = fmul float %351, %353
  %355 = fneg float %354
  %356 = call float @llvm.fmuladd.f32(float %347, float %349, float %355)
  %357 = call noundef float @_ZSt3absf(float noundef %356)
  %358 = load float, ptr %29, align 4, !tbaa !9
  %359 = load float, ptr %30, align 4, !tbaa !9
  %360 = fadd float %358, %359
  %361 = fcmp ogt float %357, %360
  br i1 %361, label %362, label %363

362:                                              ; preds = %327
  store i1 false, ptr %4, align 1
  store i32 1, ptr %32, align 4
  br label %616

363:                                              ; preds = %327
  %364 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %9, i32 noundef 1)
  %365 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 2
  %366 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %365, i32 noundef 2)
  %367 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %9, i32 noundef 2)
  %368 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 2
  %369 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %368, i32 noundef 1)
  %370 = fmul float %367, %369
  %371 = call float @llvm.fmuladd.f32(float %364, float %366, float %370)
  store float %371, ptr %29, align 4, !tbaa !9
  %372 = getelementptr inbounds %"class.JPH::OrientedBox", ptr %37, i32 0, i32 1
  %373 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %372, i32 noundef 0)
  %374 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 1
  %375 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %374, i32 noundef 0)
  %376 = getelementptr inbounds %"class.JPH::OrientedBox", ptr %37, i32 0, i32 1
  %377 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %376, i32 noundef 1)
  %378 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 0
  %379 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %378, i32 noundef 0)
  %380 = fmul float %377, %379
  %381 = call float @llvm.fmuladd.f32(float %373, float %375, float %380)
  store float %381, ptr %30, align 4, !tbaa !9
  %382 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 2, i32 noundef 3)
  %383 = load float, ptr %382, align 4, !tbaa !9
  %384 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 1, i32 noundef 2)
  %385 = load float, ptr %384, align 4, !tbaa !9
  %386 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 1, i32 noundef 3)
  %387 = load float, ptr %386, align 4, !tbaa !9
  %388 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 2, i32 noundef 2)
  %389 = load float, ptr %388, align 4, !tbaa !9
  %390 = fmul float %387, %389
  %391 = fneg float %390
  %392 = call float @llvm.fmuladd.f32(float %383, float %385, float %391)
  %393 = call noundef float @_ZSt3absf(float noundef %392)
  %394 = load float, ptr %29, align 4, !tbaa !9
  %395 = load float, ptr %30, align 4, !tbaa !9
  %396 = fadd float %394, %395
  %397 = fcmp ogt float %393, %396
  br i1 %397, label %398, label %399

398:                                              ; preds = %363
  store i1 false, ptr %4, align 1
  store i32 1, ptr %32, align 4
  br label %616

399:                                              ; preds = %363
  %400 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %9, i32 noundef 0)
  %401 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 0
  %402 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %401, i32 noundef 2)
  %403 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %9, i32 noundef 2)
  %404 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 0
  %405 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %404, i32 noundef 0)
  %406 = fmul float %403, %405
  %407 = call float @llvm.fmuladd.f32(float %400, float %402, float %406)
  store float %407, ptr %29, align 4, !tbaa !9
  %408 = getelementptr inbounds %"class.JPH::OrientedBox", ptr %37, i32 0, i32 1
  %409 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %408, i32 noundef 1)
  %410 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 2
  %411 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %410, i32 noundef 1)
  %412 = getelementptr inbounds %"class.JPH::OrientedBox", ptr %37, i32 0, i32 1
  %413 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %412, i32 noundef 2)
  %414 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 1
  %415 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %414, i32 noundef 1)
  %416 = fmul float %413, %415
  %417 = call float @llvm.fmuladd.f32(float %409, float %411, float %416)
  store float %417, ptr %30, align 4, !tbaa !9
  %418 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 0, i32 noundef 3)
  %419 = load float, ptr %418, align 4, !tbaa !9
  %420 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 2, i32 noundef 0)
  %421 = load float, ptr %420, align 4, !tbaa !9
  %422 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 2, i32 noundef 3)
  %423 = load float, ptr %422, align 4, !tbaa !9
  %424 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 0, i32 noundef 0)
  %425 = load float, ptr %424, align 4, !tbaa !9
  %426 = fmul float %423, %425
  %427 = fneg float %426
  %428 = call float @llvm.fmuladd.f32(float %419, float %421, float %427)
  %429 = call noundef float @_ZSt3absf(float noundef %428)
  %430 = load float, ptr %29, align 4, !tbaa !9
  %431 = load float, ptr %30, align 4, !tbaa !9
  %432 = fadd float %430, %431
  %433 = fcmp ogt float %429, %432
  br i1 %433, label %434, label %435

434:                                              ; preds = %399
  store i1 false, ptr %4, align 1
  store i32 1, ptr %32, align 4
  br label %616

435:                                              ; preds = %399
  %436 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %9, i32 noundef 0)
  %437 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 1
  %438 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %437, i32 noundef 2)
  %439 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %9, i32 noundef 2)
  %440 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 1
  %441 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %440, i32 noundef 0)
  %442 = fmul float %439, %441
  %443 = call float @llvm.fmuladd.f32(float %436, float %438, float %442)
  store float %443, ptr %29, align 4, !tbaa !9
  %444 = getelementptr inbounds %"class.JPH::OrientedBox", ptr %37, i32 0, i32 1
  %445 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %444, i32 noundef 0)
  %446 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 2
  %447 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %446, i32 noundef 1)
  %448 = getelementptr inbounds %"class.JPH::OrientedBox", ptr %37, i32 0, i32 1
  %449 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %448, i32 noundef 2)
  %450 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 0
  %451 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %450, i32 noundef 1)
  %452 = fmul float %449, %451
  %453 = call float @llvm.fmuladd.f32(float %445, float %447, float %452)
  store float %453, ptr %30, align 4, !tbaa !9
  %454 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 0, i32 noundef 3)
  %455 = load float, ptr %454, align 4, !tbaa !9
  %456 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 2, i32 noundef 1)
  %457 = load float, ptr %456, align 4, !tbaa !9
  %458 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 2, i32 noundef 3)
  %459 = load float, ptr %458, align 4, !tbaa !9
  %460 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 0, i32 noundef 1)
  %461 = load float, ptr %460, align 4, !tbaa !9
  %462 = fmul float %459, %461
  %463 = fneg float %462
  %464 = call float @llvm.fmuladd.f32(float %455, float %457, float %463)
  %465 = call noundef float @_ZSt3absf(float noundef %464)
  %466 = load float, ptr %29, align 4, !tbaa !9
  %467 = load float, ptr %30, align 4, !tbaa !9
  %468 = fadd float %466, %467
  %469 = fcmp ogt float %465, %468
  br i1 %469, label %470, label %471

470:                                              ; preds = %435
  store i1 false, ptr %4, align 1
  store i32 1, ptr %32, align 4
  br label %616

471:                                              ; preds = %435
  %472 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %9, i32 noundef 0)
  %473 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 2
  %474 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %473, i32 noundef 2)
  %475 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %9, i32 noundef 2)
  %476 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 2
  %477 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %476, i32 noundef 0)
  %478 = fmul float %475, %477
  %479 = call float @llvm.fmuladd.f32(float %472, float %474, float %478)
  store float %479, ptr %29, align 4, !tbaa !9
  %480 = getelementptr inbounds %"class.JPH::OrientedBox", ptr %37, i32 0, i32 1
  %481 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %480, i32 noundef 0)
  %482 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 1
  %483 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %482, i32 noundef 1)
  %484 = getelementptr inbounds %"class.JPH::OrientedBox", ptr %37, i32 0, i32 1
  %485 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %484, i32 noundef 1)
  %486 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 0
  %487 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %486, i32 noundef 1)
  %488 = fmul float %485, %487
  %489 = call float @llvm.fmuladd.f32(float %481, float %483, float %488)
  store float %489, ptr %30, align 4, !tbaa !9
  %490 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 0, i32 noundef 3)
  %491 = load float, ptr %490, align 4, !tbaa !9
  %492 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 2, i32 noundef 2)
  %493 = load float, ptr %492, align 4, !tbaa !9
  %494 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 2, i32 noundef 3)
  %495 = load float, ptr %494, align 4, !tbaa !9
  %496 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 0, i32 noundef 2)
  %497 = load float, ptr %496, align 4, !tbaa !9
  %498 = fmul float %495, %497
  %499 = fneg float %498
  %500 = call float @llvm.fmuladd.f32(float %491, float %493, float %499)
  %501 = call noundef float @_ZSt3absf(float noundef %500)
  %502 = load float, ptr %29, align 4, !tbaa !9
  %503 = load float, ptr %30, align 4, !tbaa !9
  %504 = fadd float %502, %503
  %505 = fcmp ogt float %501, %504
  br i1 %505, label %506, label %507

506:                                              ; preds = %471
  store i1 false, ptr %4, align 1
  store i32 1, ptr %32, align 4
  br label %616

507:                                              ; preds = %471
  %508 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %9, i32 noundef 0)
  %509 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 0
  %510 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %509, i32 noundef 1)
  %511 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %9, i32 noundef 1)
  %512 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 0
  %513 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %512, i32 noundef 0)
  %514 = fmul float %511, %513
  %515 = call float @llvm.fmuladd.f32(float %508, float %510, float %514)
  store float %515, ptr %29, align 4, !tbaa !9
  %516 = getelementptr inbounds %"class.JPH::OrientedBox", ptr %37, i32 0, i32 1
  %517 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %516, i32 noundef 1)
  %518 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 2
  %519 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %518, i32 noundef 2)
  %520 = getelementptr inbounds %"class.JPH::OrientedBox", ptr %37, i32 0, i32 1
  %521 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %520, i32 noundef 2)
  %522 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 1
  %523 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %522, i32 noundef 2)
  %524 = fmul float %521, %523
  %525 = call float @llvm.fmuladd.f32(float %517, float %519, float %524)
  store float %525, ptr %30, align 4, !tbaa !9
  %526 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 1, i32 noundef 3)
  %527 = load float, ptr %526, align 4, !tbaa !9
  %528 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 0, i32 noundef 0)
  %529 = load float, ptr %528, align 4, !tbaa !9
  %530 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 0, i32 noundef 3)
  %531 = load float, ptr %530, align 4, !tbaa !9
  %532 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 1, i32 noundef 0)
  %533 = load float, ptr %532, align 4, !tbaa !9
  %534 = fmul float %531, %533
  %535 = fneg float %534
  %536 = call float @llvm.fmuladd.f32(float %527, float %529, float %535)
  %537 = call noundef float @_ZSt3absf(float noundef %536)
  %538 = load float, ptr %29, align 4, !tbaa !9
  %539 = load float, ptr %30, align 4, !tbaa !9
  %540 = fadd float %538, %539
  %541 = fcmp ogt float %537, %540
  br i1 %541, label %542, label %543

542:                                              ; preds = %507
  store i1 false, ptr %4, align 1
  store i32 1, ptr %32, align 4
  br label %616

543:                                              ; preds = %507
  %544 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %9, i32 noundef 0)
  %545 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 1
  %546 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %545, i32 noundef 1)
  %547 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %9, i32 noundef 1)
  %548 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 1
  %549 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %548, i32 noundef 0)
  %550 = fmul float %547, %549
  %551 = call float @llvm.fmuladd.f32(float %544, float %546, float %550)
  store float %551, ptr %29, align 4, !tbaa !9
  %552 = getelementptr inbounds %"class.JPH::OrientedBox", ptr %37, i32 0, i32 1
  %553 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %552, i32 noundef 0)
  %554 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 2
  %555 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %554, i32 noundef 2)
  %556 = getelementptr inbounds %"class.JPH::OrientedBox", ptr %37, i32 0, i32 1
  %557 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %556, i32 noundef 2)
  %558 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 0
  %559 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %558, i32 noundef 2)
  %560 = fmul float %557, %559
  %561 = call float @llvm.fmuladd.f32(float %553, float %555, float %560)
  store float %561, ptr %30, align 4, !tbaa !9
  %562 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 1, i32 noundef 3)
  %563 = load float, ptr %562, align 4, !tbaa !9
  %564 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 0, i32 noundef 1)
  %565 = load float, ptr %564, align 4, !tbaa !9
  %566 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 0, i32 noundef 3)
  %567 = load float, ptr %566, align 4, !tbaa !9
  %568 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 1, i32 noundef 1)
  %569 = load float, ptr %568, align 4, !tbaa !9
  %570 = fmul float %567, %569
  %571 = fneg float %570
  %572 = call float @llvm.fmuladd.f32(float %563, float %565, float %571)
  %573 = call noundef float @_ZSt3absf(float noundef %572)
  %574 = load float, ptr %29, align 4, !tbaa !9
  %575 = load float, ptr %30, align 4, !tbaa !9
  %576 = fadd float %574, %575
  %577 = fcmp ogt float %573, %576
  br i1 %577, label %578, label %579

578:                                              ; preds = %543
  store i1 false, ptr %4, align 1
  store i32 1, ptr %32, align 4
  br label %616

579:                                              ; preds = %543
  %580 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %9, i32 noundef 0)
  %581 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 2
  %582 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %581, i32 noundef 1)
  %583 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %9, i32 noundef 1)
  %584 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 2
  %585 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %584, i32 noundef 0)
  %586 = fmul float %583, %585
  %587 = call float @llvm.fmuladd.f32(float %580, float %582, float %586)
  store float %587, ptr %29, align 4, !tbaa !9
  %588 = getelementptr inbounds %"class.JPH::OrientedBox", ptr %37, i32 0, i32 1
  %589 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %588, i32 noundef 0)
  %590 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 1
  %591 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %590, i32 noundef 2)
  %592 = getelementptr inbounds %"class.JPH::OrientedBox", ptr %37, i32 0, i32 1
  %593 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %592, i32 noundef 1)
  %594 = getelementptr inbounds [3 x %"class.JPH::Vec3"], ptr %19, i64 0, i64 0
  %595 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %594, i32 noundef 2)
  %596 = fmul float %593, %595
  %597 = call float @llvm.fmuladd.f32(float %589, float %591, float %596)
  store float %597, ptr %30, align 4, !tbaa !9
  %598 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 1, i32 noundef 3)
  %599 = load float, ptr %598, align 4, !tbaa !9
  %600 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 0, i32 noundef 2)
  %601 = load float, ptr %600, align 4, !tbaa !9
  %602 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 0, i32 noundef 3)
  %603 = load float, ptr %602, align 4, !tbaa !9
  %604 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %10, i32 noundef 1, i32 noundef 2)
  %605 = load float, ptr %604, align 4, !tbaa !9
  %606 = fmul float %603, %605
  %607 = fneg float %606
  %608 = call float @llvm.fmuladd.f32(float %599, float %601, float %607)
  %609 = call noundef float @_ZSt3absf(float noundef %608)
  %610 = load float, ptr %29, align 4, !tbaa !9
  %611 = load float, ptr %30, align 4, !tbaa !9
  %612 = fadd float %610, %611
  %613 = fcmp ogt float %609, %612
  br i1 %613, label %614, label %615

614:                                              ; preds = %579
  store i1 false, ptr %4, align 1
  store i32 1, ptr %32, align 4
  br label %616

615:                                              ; preds = %579
  store i1 true, ptr %4, align 1
  store i32 1, ptr %32, align 4
  br label %616

616:                                              ; preds = %615, %614, %578, %542, %506, %470, %434, %398, %362, %326, %289, %240
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %8) #8
  %617 = load i1, ptr %4, align 1
  ret i1 %617
}

; Function Attrs: mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH5AABox9GetCenterEv(ptr noundef nonnull align 16 dereferenceable(32)) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH5AABox9GetExtentEv(ptr noundef nonnull align 16 dereferenceable(32)) #1 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH5Mat4410GetColumn4Ej(ptr noundef nonnull align 16 dereferenceable(64), i32 noundef) #2 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Vec4miES0_(ptr noundef nonnull align 16 dereferenceable(16), double, double) #3 align 2

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #4

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH4Vec4C2ENS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(16), double, double, float noundef) unnamed_addr #5 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH5Mat44C2ENS_4Vec4ES1_S1_S1_(ptr noundef nonnull align 16 dereferenceable(64), double, double, double, double, double, double, double, double) unnamed_addr #5 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef) #3 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH5Mat448GetAxisXEv(ptr noundef nonnull align 16 dereferenceable(64)) #2 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Vec33AbsEv(ptr noundef nonnull align 16 dereferenceable(16)) #3 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16), double, double) #3 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH5Mat448GetAxisYEv(ptr noundef nonnull align 16 dereferenceable(64)) #2 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH5Mat448GetAxisZEv(ptr noundef nonnull align 16 dereferenceable(64)) #2 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16), i32 noundef) #2 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt3absf(float noundef) #7

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64), i32 noundef, i32 noundef) #2 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16), double, double) #5 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH5Mat4414GetTranslationEv(ptr noundef nonnull align 16 dereferenceable(64)) #2 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH5Mat4410GetColumn3Ej(ptr noundef nonnull align 16 dereferenceable(64), i32 noundef) #2 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { alwaysinline 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 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="128" "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 nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { alwaysinline mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { 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 = !{i64 0, i64 16, !12}
!12 = !{!7, !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}


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

%"class.JPH::Vec3" = type { %union.anon }
%union.anon = type { <4 x float> }
%"class.JPH::Mat44" = type { [4 x %"class.JPH::Vec4"] }
%"class.JPH::Vec4" = type { %union.anon.0 }
%union.anon.0 = type { <4 x float> }

; 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: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZNK3JPH11OrientedBox8OverlapsERKNS_5AABoxEf(ptr noundef nonnull align 16 dereferenceable(80) %0, ptr noundef nonnull align 16 dereferenceable(32) %1, float noundef %2) local_unnamed_addr #1 align 2 {
  %4 = alloca %"class.JPH::Vec3", align 16
  %5 = alloca %"class.JPH::Mat44", align 16
  %6 = alloca %"class.JPH::Vec4", align 16
  %7 = alloca %"class.JPH::Vec4", align 16
  %8 = alloca [3 x %"class.JPH::Vec3"], align 16
  %9 = alloca %"class.JPH::Vec3", align 16
  %10 = alloca %"class.JPH::Vec3", align 16
  %11 = alloca %"class.JPH::Vec3", align 16
  %12 = alloca %"class.JPH::Vec3", align 16
  %13 = alloca %"class.JPH::Vec3", align 16
  %14 = alloca %"class.JPH::Vec3", align 16
  %15 = alloca %"class.JPH::Vec3", align 16
  %16 = tail call { double, double } @_ZNK3JPH5AABox9GetCenterEv(ptr noundef nonnull align 16 dereferenceable(32) %1)
  %17 = extractvalue { double, double } %16, 0
  %18 = extractvalue { double, double } %16, 1
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %4) #8
  %19 = tail call { double, double } @_ZNK3JPH5AABox9GetExtentEv(ptr noundef nonnull align 16 dereferenceable(32) %1)
  %20 = extractvalue { double, double } %19, 0
  store double %20, ptr %4, align 16
  %21 = getelementptr inbounds i8, ptr %4, i64 8
  %22 = extractvalue { double, double } %19, 1
  store double %22, ptr %21, align 8
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %5) #8
  %23 = tail call { double, double } @_ZNK3JPH5Mat4410GetColumn4Ej(ptr noundef nonnull align 16 dereferenceable(64) %0, i32 noundef 0)
  %24 = extractvalue { double, double } %23, 0
  %25 = extractvalue { double, double } %23, 1
  %26 = tail call { double, double } @_ZNK3JPH5Mat4410GetColumn4Ej(ptr noundef nonnull align 16 dereferenceable(64) %0, i32 noundef 1)
  %27 = extractvalue { double, double } %26, 0
  %28 = extractvalue { double, double } %26, 1
  %29 = tail call { double, double } @_ZNK3JPH5Mat4410GetColumn4Ej(ptr noundef nonnull align 16 dereferenceable(64) %0, i32 noundef 2)
  %30 = extractvalue { double, double } %29, 0
  %31 = extractvalue { double, double } %29, 1
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #8
  %32 = tail call { double, double } @_ZNK3JPH5Mat4410GetColumn4Ej(ptr noundef nonnull align 16 dereferenceable(64) %0, i32 noundef 3)
  %33 = extractvalue { double, double } %32, 0
  store double %33, ptr %6, align 16
  %34 = getelementptr inbounds i8, ptr %6, i64 8
  %35 = extractvalue { double, double } %32, 1
  store double %35, ptr %34, align 8
  call void @_ZN3JPH4Vec4C2ENS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(16) %7, double %17, double %18, float noundef 0.000000e+00)
  %36 = load double, ptr %7, align 16
  %37 = getelementptr inbounds i8, ptr %7, i64 8
  %38 = load double, ptr %37, align 8
  %39 = call { double, double } @_ZNK3JPH4Vec4miES0_(ptr noundef nonnull align 16 dereferenceable(16) %6, double %36, double %38)
  %40 = extractvalue { double, double } %39, 0
  %41 = extractvalue { double, double } %39, 1
  call void @_ZN3JPH5Mat44C2ENS_4Vec4ES1_S1_S1_(ptr noundef nonnull align 16 dereferenceable(64) %5, double %24, double %25, double %27, double %28, double %30, double %31, double %40, double %41)
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #8
  %42 = call { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef %2)
  %43 = extractvalue { double, double } %42, 0
  %44 = extractvalue { double, double } %42, 1
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %8) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %10) #8
  %45 = call { double, double } @_ZNK3JPH5Mat448GetAxisXEv(ptr noundef nonnull align 16 dereferenceable(64) %5)
  %46 = extractvalue { double, double } %45, 0
  store double %46, ptr %10, align 16
  %47 = getelementptr inbounds i8, ptr %10, i64 8
  %48 = extractvalue { double, double } %45, 1
  store double %48, ptr %47, align 8
  %49 = call { double, double } @_ZNK3JPH4Vec33AbsEv(ptr noundef nonnull align 16 dereferenceable(16) %10)
  %50 = extractvalue { double, double } %49, 0
  store double %50, ptr %9, align 16
  %51 = getelementptr inbounds i8, ptr %9, i64 8
  %52 = extractvalue { double, double } %49, 1
  store double %52, ptr %51, align 8
  %53 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %9, double %43, double %44)
  %54 = extractvalue { double, double } %53, 0
  store double %54, ptr %8, align 16
  %55 = getelementptr inbounds i8, ptr %8, i64 8
  %56 = extractvalue { double, double } %53, 1
  store double %56, ptr %55, align 8
  %57 = getelementptr inbounds i8, ptr %8, i64 16
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %12) #8
  %58 = call { double, double } @_ZNK3JPH5Mat448GetAxisYEv(ptr noundef nonnull align 16 dereferenceable(64) %5)
  %59 = extractvalue { double, double } %58, 0
  store double %59, ptr %12, align 16
  %60 = getelementptr inbounds i8, ptr %12, i64 8
  %61 = extractvalue { double, double } %58, 1
  store double %61, ptr %60, align 8
  %62 = call { double, double } @_ZNK3JPH4Vec33AbsEv(ptr noundef nonnull align 16 dereferenceable(16) %12)
  %63 = extractvalue { double, double } %62, 0
  store double %63, ptr %11, align 16
  %64 = getelementptr inbounds i8, ptr %11, i64 8
  %65 = extractvalue { double, double } %62, 1
  store double %65, ptr %64, align 8
  %66 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %11, double %43, double %44)
  %67 = extractvalue { double, double } %66, 0
  store double %67, ptr %57, align 16
  %68 = getelementptr inbounds i8, ptr %8, i64 24
  %69 = extractvalue { double, double } %66, 1
  store double %69, ptr %68, align 8
  %70 = getelementptr inbounds i8, ptr %8, i64 32
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %13) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #8
  %71 = call { double, double } @_ZNK3JPH5Mat448GetAxisZEv(ptr noundef nonnull align 16 dereferenceable(64) %5)
  %72 = extractvalue { double, double } %71, 0
  store double %72, ptr %14, align 16
  %73 = getelementptr inbounds i8, ptr %14, i64 8
  %74 = extractvalue { double, double } %71, 1
  store double %74, ptr %73, align 8
  %75 = call { double, double } @_ZNK3JPH4Vec33AbsEv(ptr noundef nonnull align 16 dereferenceable(16) %14)
  %76 = extractvalue { double, double } %75, 0
  store double %76, ptr %13, align 16
  %77 = getelementptr inbounds i8, ptr %13, i64 8
  %78 = extractvalue { double, double } %75, 1
  store double %78, ptr %77, align 8
  %79 = call { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16) %13, double %43, double %44)
  %80 = extractvalue { double, double } %79, 0
  store double %80, ptr %70, align 16
  %81 = getelementptr inbounds i8, ptr %8, i64 40
  %82 = extractvalue { double, double } %79, 1
  store double %82, ptr %81, align 8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %13) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %10) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) #8
  %83 = getelementptr inbounds i8, ptr %0, i64 64
  %84 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %4, i32 noundef 0)
  %85 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 0)
  %86 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %8, i32 noundef 0)
  %87 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 1)
  %88 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %57, i32 noundef 0)
  %89 = fmul float %87, %88
  %90 = call float @llvm.fmuladd.f32(float %85, float %86, float %89)
  %91 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 2)
  %92 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %70, i32 noundef 0)
  %93 = call float @llvm.fmuladd.f32(float %91, float %92, float %90)
  %94 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 0, i32 noundef 3)
  %95 = load float, ptr %94, align 4, !tbaa !5
  %96 = call noundef float @_ZSt3absf(float noundef %95)
  %97 = fadd float %84, %93
  %98 = fcmp ogt float %96, %97
  br i1 %98, label %.loopexit, label %99

99:                                               ; preds = %3
  %100 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %4, i32 noundef 1)
  %101 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 0)
  %102 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %8, i32 noundef 1)
  %103 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 1)
  %104 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %57, i32 noundef 1)
  %105 = fmul float %103, %104
  %106 = call float @llvm.fmuladd.f32(float %101, float %102, float %105)
  %107 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 2)
  %108 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %70, i32 noundef 1)
  %109 = call float @llvm.fmuladd.f32(float %107, float %108, float %106)
  %110 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 1, i32 noundef 3)
  %111 = load float, ptr %110, align 4, !tbaa !5
  %112 = call noundef float @_ZSt3absf(float noundef %111)
  %113 = fadd float %100, %109
  %114 = fcmp ogt float %112, %113
  br i1 %114, label %.loopexit, label %115

115:                                              ; preds = %99
  %116 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %4, i32 noundef 2)
  %117 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 0)
  %118 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %8, i32 noundef 2)
  %119 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 1)
  %120 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %57, i32 noundef 2)
  %121 = fmul float %119, %120
  %122 = call float @llvm.fmuladd.f32(float %117, float %118, float %121)
  %123 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 2)
  %124 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %70, i32 noundef 2)
  %125 = call float @llvm.fmuladd.f32(float %123, float %124, float %122)
  %126 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 2, i32 noundef 3)
  %127 = load float, ptr %126, align 4, !tbaa !5
  %128 = call noundef float @_ZSt3absf(float noundef %127)
  %129 = fadd float %116, %125
  %130 = fcmp ogt float %128, %129
  br i1 %130, label %.loopexit, label %.critedge.preheader

.critedge.preheader:                              ; preds = %115
  %131 = getelementptr inbounds i8, ptr %15, i64 8
  %.sroa.02.0.copyload = load double, ptr %8, align 16
  %.sroa.23.0.copyload = load double, ptr %55, align 8, !tbaa !9
  %132 = call noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %4, double %.sroa.02.0.copyload, double %.sroa.23.0.copyload)
  %133 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 0)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #8
  %134 = call { double, double } @_ZNK3JPH5Mat4414GetTranslationEv(ptr noundef nonnull align 16 dereferenceable(64) %5)
  %135 = extractvalue { double, double } %134, 0
  store double %135, ptr %15, align 16
  %136 = extractvalue { double, double } %134, 1
  store double %136, ptr %131, align 8
  %137 = call { double, double } @_ZNK3JPH5Mat4410GetColumn3Ej(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 0)
  %138 = extractvalue { double, double } %137, 0
  %139 = extractvalue { double, double } %137, 1
  %140 = call noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %15, double %138, double %139)
  %141 = call noundef float @_ZSt3absf(float noundef %140)
  %142 = fadd float %132, %133
  %143 = fcmp ogt float %141, %142
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #8
  br i1 %143, label %.loopexit, label %.critedge

.critedge:                                        ; preds = %.critedge.preheader
  %.sroa.02.0.copyload.1 = load double, ptr %57, align 16
  %.sroa.23.0..sroa_idx.1 = getelementptr inbounds i8, ptr %8, i64 24
  %.sroa.23.0.copyload.1 = load double, ptr %.sroa.23.0..sroa_idx.1, align 8, !tbaa !9
  %144 = call noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %4, double %.sroa.02.0.copyload.1, double %.sroa.23.0.copyload.1)
  %145 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 1)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #8
  %146 = call { double, double } @_ZNK3JPH5Mat4414GetTranslationEv(ptr noundef nonnull align 16 dereferenceable(64) %5)
  %147 = extractvalue { double, double } %146, 0
  store double %147, ptr %15, align 16
  %148 = extractvalue { double, double } %146, 1
  store double %148, ptr %131, align 8
  %149 = call { double, double } @_ZNK3JPH5Mat4410GetColumn3Ej(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 1)
  %150 = extractvalue { double, double } %149, 0
  %151 = extractvalue { double, double } %149, 1
  %152 = call noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %15, double %150, double %151)
  %153 = call noundef float @_ZSt3absf(float noundef %152)
  %154 = fadd float %144, %145
  %155 = fcmp ogt float %153, %154
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #8
  br i1 %155, label %.loopexit, label %.critedge.1

.critedge.1:                                      ; preds = %.critedge
  %.sroa.02.0.copyload.2 = load double, ptr %70, align 16
  %.sroa.23.0..sroa_idx.2 = getelementptr inbounds i8, ptr %8, i64 40
  %.sroa.23.0.copyload.2 = load double, ptr %.sroa.23.0..sroa_idx.2, align 8, !tbaa !9
  %156 = call noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %4, double %.sroa.02.0.copyload.2, double %.sroa.23.0.copyload.2)
  %157 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 2)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %15) #8
  %158 = call { double, double } @_ZNK3JPH5Mat4414GetTranslationEv(ptr noundef nonnull align 16 dereferenceable(64) %5)
  %159 = extractvalue { double, double } %158, 0
  store double %159, ptr %15, align 16
  %160 = extractvalue { double, double } %158, 1
  store double %160, ptr %131, align 8
  %161 = call { double, double } @_ZNK3JPH5Mat4410GetColumn3Ej(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 2)
  %162 = extractvalue { double, double } %161, 0
  %163 = extractvalue { double, double } %161, 1
  %164 = call noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16) %15, double %162, double %163)
  %165 = call noundef float @_ZSt3absf(float noundef %164)
  %166 = fadd float %156, %157
  %167 = fcmp ogt float %165, %166
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %15) #8
  br i1 %167, label %.loopexit, label %.critedge.2

.critedge.2:                                      ; preds = %.critedge.1
  %168 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %4, i32 noundef 1)
  %169 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %8, i32 noundef 2)
  %170 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %4, i32 noundef 2)
  %171 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %8, i32 noundef 1)
  %172 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 1)
  %173 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %70, i32 noundef 0)
  %174 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 2)
  %175 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %57, i32 noundef 0)
  %176 = insertelement <2 x float> poison, float %170, i64 0
  %177 = insertelement <2 x float> %176, float %174, i64 1
  %178 = insertelement <2 x float> poison, float %171, i64 0
  %179 = insertelement <2 x float> %178, float %175, i64 1
  %180 = fmul <2 x float> %177, %179
  %181 = insertelement <2 x float> poison, float %168, i64 0
  %182 = insertelement <2 x float> %181, float %172, i64 1
  %183 = insertelement <2 x float> poison, float %169, i64 0
  %184 = insertelement <2 x float> %183, float %173, i64 1
  %185 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %182, <2 x float> %184, <2 x float> %180)
  %186 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 2, i32 noundef 3)
  %187 = load float, ptr %186, align 4, !tbaa !5
  %188 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 1, i32 noundef 0)
  %189 = load float, ptr %188, align 4, !tbaa !5
  %190 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 1, i32 noundef 3)
  %191 = load float, ptr %190, align 4, !tbaa !5
  %192 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 2, i32 noundef 0)
  %193 = load float, ptr %192, align 4, !tbaa !5
  %194 = fneg float %191
  %195 = fmul float %193, %194
  %196 = call float @llvm.fmuladd.f32(float %187, float %189, float %195)
  %197 = call noundef float @_ZSt3absf(float noundef %196)
  %shift = shufflevector <2 x float> %185, <2 x float> poison, <2 x i32> <i32 1, i32 poison>
  %198 = fadd <2 x float> %185, %shift
  %199 = extractelement <2 x float> %198, i64 0
  %200 = fcmp ogt float %197, %199
  br i1 %200, label %.loopexit, label %201

201:                                              ; preds = %.critedge.2
  %202 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %4, i32 noundef 1)
  %203 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %57, i32 noundef 2)
  %204 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %4, i32 noundef 2)
  %205 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %57, i32 noundef 1)
  %206 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 0)
  %207 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %70, i32 noundef 0)
  %208 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 2)
  %209 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %8, i32 noundef 0)
  %210 = insertelement <2 x float> poison, float %204, i64 0
  %211 = insertelement <2 x float> %210, float %208, i64 1
  %212 = insertelement <2 x float> poison, float %205, i64 0
  %213 = insertelement <2 x float> %212, float %209, i64 1
  %214 = fmul <2 x float> %211, %213
  %215 = insertelement <2 x float> poison, float %202, i64 0
  %216 = insertelement <2 x float> %215, float %206, i64 1
  %217 = insertelement <2 x float> poison, float %203, i64 0
  %218 = insertelement <2 x float> %217, float %207, i64 1
  %219 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %216, <2 x float> %218, <2 x float> %214)
  %220 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 2, i32 noundef 3)
  %221 = load float, ptr %220, align 4, !tbaa !5
  %222 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 1, i32 noundef 1)
  %223 = load float, ptr %222, align 4, !tbaa !5
  %224 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 1, i32 noundef 3)
  %225 = load float, ptr %224, align 4, !tbaa !5
  %226 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 2, i32 noundef 1)
  %227 = load float, ptr %226, align 4, !tbaa !5
  %228 = fneg float %225
  %229 = fmul float %227, %228
  %230 = call float @llvm.fmuladd.f32(float %221, float %223, float %229)
  %231 = call noundef float @_ZSt3absf(float noundef %230)
  %shift72 = shufflevector <2 x float> %219, <2 x float> poison, <2 x i32> <i32 1, i32 poison>
  %232 = fadd <2 x float> %219, %shift72
  %233 = extractelement <2 x float> %232, i64 0
  %234 = fcmp ogt float %231, %233
  br i1 %234, label %.loopexit, label %235

235:                                              ; preds = %201
  %236 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %4, i32 noundef 1)
  %237 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %70, i32 noundef 2)
  %238 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %4, i32 noundef 2)
  %239 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %70, i32 noundef 1)
  %240 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 0)
  %241 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %57, i32 noundef 0)
  %242 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 1)
  %243 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %8, i32 noundef 0)
  %244 = insertelement <2 x float> poison, float %238, i64 0
  %245 = insertelement <2 x float> %244, float %242, i64 1
  %246 = insertelement <2 x float> poison, float %239, i64 0
  %247 = insertelement <2 x float> %246, float %243, i64 1
  %248 = fmul <2 x float> %245, %247
  %249 = insertelement <2 x float> poison, float %236, i64 0
  %250 = insertelement <2 x float> %249, float %240, i64 1
  %251 = insertelement <2 x float> poison, float %237, i64 0
  %252 = insertelement <2 x float> %251, float %241, i64 1
  %253 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %250, <2 x float> %252, <2 x float> %248)
  %254 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 2, i32 noundef 3)
  %255 = load float, ptr %254, align 4, !tbaa !5
  %256 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 1, i32 noundef 2)
  %257 = load float, ptr %256, align 4, !tbaa !5
  %258 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 1, i32 noundef 3)
  %259 = load float, ptr %258, align 4, !tbaa !5
  %260 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 2, i32 noundef 2)
  %261 = load float, ptr %260, align 4, !tbaa !5
  %262 = fneg float %259
  %263 = fmul float %261, %262
  %264 = call float @llvm.fmuladd.f32(float %255, float %257, float %263)
  %265 = call noundef float @_ZSt3absf(float noundef %264)
  %shift73 = shufflevector <2 x float> %253, <2 x float> poison, <2 x i32> <i32 1, i32 poison>
  %266 = fadd <2 x float> %253, %shift73
  %267 = extractelement <2 x float> %266, i64 0
  %268 = fcmp ogt float %265, %267
  br i1 %268, label %.loopexit, label %269

269:                                              ; preds = %235
  %270 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %4, i32 noundef 0)
  %271 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %8, i32 noundef 2)
  %272 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %4, i32 noundef 2)
  %273 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %8, i32 noundef 0)
  %274 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 1)
  %275 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %70, i32 noundef 1)
  %276 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 2)
  %277 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %57, i32 noundef 1)
  %278 = insertelement <2 x float> poison, float %272, i64 0
  %279 = insertelement <2 x float> %278, float %276, i64 1
  %280 = insertelement <2 x float> poison, float %273, i64 0
  %281 = insertelement <2 x float> %280, float %277, i64 1
  %282 = fmul <2 x float> %279, %281
  %283 = insertelement <2 x float> poison, float %270, i64 0
  %284 = insertelement <2 x float> %283, float %274, i64 1
  %285 = insertelement <2 x float> poison, float %271, i64 0
  %286 = insertelement <2 x float> %285, float %275, i64 1
  %287 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %284, <2 x float> %286, <2 x float> %282)
  %288 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 0, i32 noundef 3)
  %289 = load float, ptr %288, align 4, !tbaa !5
  %290 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 2, i32 noundef 0)
  %291 = load float, ptr %290, align 4, !tbaa !5
  %292 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 2, i32 noundef 3)
  %293 = load float, ptr %292, align 4, !tbaa !5
  %294 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 0, i32 noundef 0)
  %295 = load float, ptr %294, align 4, !tbaa !5
  %296 = fneg float %293
  %297 = fmul float %295, %296
  %298 = call float @llvm.fmuladd.f32(float %289, float %291, float %297)
  %299 = call noundef float @_ZSt3absf(float noundef %298)
  %shift74 = shufflevector <2 x float> %287, <2 x float> poison, <2 x i32> <i32 1, i32 poison>
  %300 = fadd <2 x float> %287, %shift74
  %301 = extractelement <2 x float> %300, i64 0
  %302 = fcmp ogt float %299, %301
  br i1 %302, label %.loopexit, label %303

303:                                              ; preds = %269
  %304 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %4, i32 noundef 0)
  %305 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %57, i32 noundef 2)
  %306 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %4, i32 noundef 2)
  %307 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %57, i32 noundef 0)
  %308 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 0)
  %309 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %70, i32 noundef 1)
  %310 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 2)
  %311 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %8, i32 noundef 1)
  %312 = insertelement <2 x float> poison, float %306, i64 0
  %313 = insertelement <2 x float> %312, float %310, i64 1
  %314 = insertelement <2 x float> poison, float %307, i64 0
  %315 = insertelement <2 x float> %314, float %311, i64 1
  %316 = fmul <2 x float> %313, %315
  %317 = insertelement <2 x float> poison, float %304, i64 0
  %318 = insertelement <2 x float> %317, float %308, i64 1
  %319 = insertelement <2 x float> poison, float %305, i64 0
  %320 = insertelement <2 x float> %319, float %309, i64 1
  %321 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %318, <2 x float> %320, <2 x float> %316)
  %322 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 0, i32 noundef 3)
  %323 = load float, ptr %322, align 4, !tbaa !5
  %324 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 2, i32 noundef 1)
  %325 = load float, ptr %324, align 4, !tbaa !5
  %326 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 2, i32 noundef 3)
  %327 = load float, ptr %326, align 4, !tbaa !5
  %328 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 0, i32 noundef 1)
  %329 = load float, ptr %328, align 4, !tbaa !5
  %330 = fneg float %327
  %331 = fmul float %329, %330
  %332 = call float @llvm.fmuladd.f32(float %323, float %325, float %331)
  %333 = call noundef float @_ZSt3absf(float noundef %332)
  %shift75 = shufflevector <2 x float> %321, <2 x float> poison, <2 x i32> <i32 1, i32 poison>
  %334 = fadd <2 x float> %321, %shift75
  %335 = extractelement <2 x float> %334, i64 0
  %336 = fcmp ogt float %333, %335
  br i1 %336, label %.loopexit, label %337

337:                                              ; preds = %303
  %338 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %4, i32 noundef 0)
  %339 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %70, i32 noundef 2)
  %340 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %4, i32 noundef 2)
  %341 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %70, i32 noundef 0)
  %342 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 0)
  %343 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %57, i32 noundef 1)
  %344 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 1)
  %345 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %8, i32 noundef 1)
  %346 = insertelement <2 x float> poison, float %340, i64 0
  %347 = insertelement <2 x float> %346, float %344, i64 1
  %348 = insertelement <2 x float> poison, float %341, i64 0
  %349 = insertelement <2 x float> %348, float %345, i64 1
  %350 = fmul <2 x float> %347, %349
  %351 = insertelement <2 x float> poison, float %338, i64 0
  %352 = insertelement <2 x float> %351, float %342, i64 1
  %353 = insertelement <2 x float> poison, float %339, i64 0
  %354 = insertelement <2 x float> %353, float %343, i64 1
  %355 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %352, <2 x float> %354, <2 x float> %350)
  %356 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 0, i32 noundef 3)
  %357 = load float, ptr %356, align 4, !tbaa !5
  %358 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 2, i32 noundef 2)
  %359 = load float, ptr %358, align 4, !tbaa !5
  %360 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 2, i32 noundef 3)
  %361 = load float, ptr %360, align 4, !tbaa !5
  %362 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 0, i32 noundef 2)
  %363 = load float, ptr %362, align 4, !tbaa !5
  %364 = fneg float %361
  %365 = fmul float %363, %364
  %366 = call float @llvm.fmuladd.f32(float %357, float %359, float %365)
  %367 = call noundef float @_ZSt3absf(float noundef %366)
  %shift76 = shufflevector <2 x float> %355, <2 x float> poison, <2 x i32> <i32 1, i32 poison>
  %368 = fadd <2 x float> %355, %shift76
  %369 = extractelement <2 x float> %368, i64 0
  %370 = fcmp ogt float %367, %369
  br i1 %370, label %.loopexit, label %371

371:                                              ; preds = %337
  %372 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %4, i32 noundef 0)
  %373 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %8, i32 noundef 1)
  %374 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %4, i32 noundef 1)
  %375 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %8, i32 noundef 0)
  %376 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 1)
  %377 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %70, i32 noundef 2)
  %378 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 2)
  %379 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %57, i32 noundef 2)
  %380 = insertelement <2 x float> poison, float %374, i64 0
  %381 = insertelement <2 x float> %380, float %378, i64 1
  %382 = insertelement <2 x float> poison, float %375, i64 0
  %383 = insertelement <2 x float> %382, float %379, i64 1
  %384 = fmul <2 x float> %381, %383
  %385 = insertelement <2 x float> poison, float %372, i64 0
  %386 = insertelement <2 x float> %385, float %376, i64 1
  %387 = insertelement <2 x float> poison, float %373, i64 0
  %388 = insertelement <2 x float> %387, float %377, i64 1
  %389 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %386, <2 x float> %388, <2 x float> %384)
  %390 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 1, i32 noundef 3)
  %391 = load float, ptr %390, align 4, !tbaa !5
  %392 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 0, i32 noundef 0)
  %393 = load float, ptr %392, align 4, !tbaa !5
  %394 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 0, i32 noundef 3)
  %395 = load float, ptr %394, align 4, !tbaa !5
  %396 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 1, i32 noundef 0)
  %397 = load float, ptr %396, align 4, !tbaa !5
  %398 = fneg float %395
  %399 = fmul float %397, %398
  %400 = call float @llvm.fmuladd.f32(float %391, float %393, float %399)
  %401 = call noundef float @_ZSt3absf(float noundef %400)
  %shift77 = shufflevector <2 x float> %389, <2 x float> poison, <2 x i32> <i32 1, i32 poison>
  %402 = fadd <2 x float> %389, %shift77
  %403 = extractelement <2 x float> %402, i64 0
  %404 = fcmp ogt float %401, %403
  br i1 %404, label %.loopexit, label %405

405:                                              ; preds = %371
  %406 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %4, i32 noundef 0)
  %407 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %57, i32 noundef 1)
  %408 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %4, i32 noundef 1)
  %409 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %57, i32 noundef 0)
  %410 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 0)
  %411 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %70, i32 noundef 2)
  %412 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 2)
  %413 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %8, i32 noundef 2)
  %414 = insertelement <2 x float> poison, float %408, i64 0
  %415 = insertelement <2 x float> %414, float %412, i64 1
  %416 = insertelement <2 x float> poison, float %409, i64 0
  %417 = insertelement <2 x float> %416, float %413, i64 1
  %418 = fmul <2 x float> %415, %417
  %419 = insertelement <2 x float> poison, float %406, i64 0
  %420 = insertelement <2 x float> %419, float %410, i64 1
  %421 = insertelement <2 x float> poison, float %407, i64 0
  %422 = insertelement <2 x float> %421, float %411, i64 1
  %423 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %420, <2 x float> %422, <2 x float> %418)
  %424 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 1, i32 noundef 3)
  %425 = load float, ptr %424, align 4, !tbaa !5
  %426 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 0, i32 noundef 1)
  %427 = load float, ptr %426, align 4, !tbaa !5
  %428 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 0, i32 noundef 3)
  %429 = load float, ptr %428, align 4, !tbaa !5
  %430 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 1, i32 noundef 1)
  %431 = load float, ptr %430, align 4, !tbaa !5
  %432 = fneg float %429
  %433 = fmul float %431, %432
  %434 = call float @llvm.fmuladd.f32(float %425, float %427, float %433)
  %435 = call noundef float @_ZSt3absf(float noundef %434)
  %shift78 = shufflevector <2 x float> %423, <2 x float> poison, <2 x i32> <i32 1, i32 poison>
  %436 = fadd <2 x float> %423, %shift78
  %437 = extractelement <2 x float> %436, i64 0
  %438 = fcmp ogt float %435, %437
  br i1 %438, label %.loopexit, label %439

439:                                              ; preds = %405
  %440 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %4, i32 noundef 0)
  %441 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %70, i32 noundef 1)
  %442 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %4, i32 noundef 1)
  %443 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %70, i32 noundef 0)
  %444 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 0)
  %445 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %57, i32 noundef 2)
  %446 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %83, i32 noundef 1)
  %447 = call noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16) %8, i32 noundef 2)
  %448 = insertelement <2 x float> poison, float %442, i64 0
  %449 = insertelement <2 x float> %448, float %446, i64 1
  %450 = insertelement <2 x float> poison, float %443, i64 0
  %451 = insertelement <2 x float> %450, float %447, i64 1
  %452 = fmul <2 x float> %449, %451
  %453 = insertelement <2 x float> poison, float %440, i64 0
  %454 = insertelement <2 x float> %453, float %444, i64 1
  %455 = insertelement <2 x float> poison, float %441, i64 0
  %456 = insertelement <2 x float> %455, float %445, i64 1
  %457 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %454, <2 x float> %456, <2 x float> %452)
  %458 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 1, i32 noundef 3)
  %459 = load float, ptr %458, align 4, !tbaa !5
  %460 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 0, i32 noundef 2)
  %461 = load float, ptr %460, align 4, !tbaa !5
  %462 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 0, i32 noundef 3)
  %463 = load float, ptr %462, align 4, !tbaa !5
  %464 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64) %5, i32 noundef 1, i32 noundef 2)
  %465 = load float, ptr %464, align 4, !tbaa !5
  %466 = fneg float %463
  %467 = fmul float %465, %466
  %468 = call float @llvm.fmuladd.f32(float %459, float %461, float %467)
  %469 = call noundef float @_ZSt3absf(float noundef %468)
  %shift79 = shufflevector <2 x float> %457, <2 x float> poison, <2 x i32> <i32 1, i32 poison>
  %470 = fadd <2 x float> %457, %shift79
  %471 = extractelement <2 x float> %470, i64 0
  %472 = fcmp ule float %469, %471
  br label %.loopexit

.loopexit:                                        ; preds = %3, %99, %115, %.critedge.preheader, %.critedge, %.critedge.1, %439, %405, %371, %337, %303, %269, %235, %201, %.critedge.2
  %.2 = phi i1 [ false, %.critedge.2 ], [ false, %201 ], [ false, %235 ], [ false, %269 ], [ false, %303 ], [ false, %337 ], [ false, %371 ], [ false, %405 ], [ %472, %439 ], [ false, %.critedge.1 ], [ false, %.critedge ], [ false, %.critedge.preheader ], [ false, %115 ], [ false, %99 ], [ false, %3 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %8) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %5) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #8
  ret i1 %.2
}

; Function Attrs: mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH5AABox9GetCenterEv(ptr noundef nonnull align 16 dereferenceable(32)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH5AABox9GetExtentEv(ptr noundef nonnull align 16 dereferenceable(32)) local_unnamed_addr #1 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH5Mat4410GetColumn4Ej(ptr noundef nonnull align 16 dereferenceable(64), i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Vec4miES0_(ptr noundef nonnull align 16 dereferenceable(16), double, double) local_unnamed_addr #3 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH4Vec4C2ENS_4Vec3Ef(ptr noundef nonnull align 16 dereferenceable(16), double, double, float noundef) unnamed_addr #4 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN3JPH5Mat44C2ENS_4Vec4ES1_S1_S1_(ptr noundef nonnull align 16 dereferenceable(64), double, double, double, double, double, double, double, double) unnamed_addr #4 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZN3JPH4Vec310sReplicateEf(float noundef) local_unnamed_addr #3 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH5Mat448GetAxisXEv(ptr noundef nonnull align 16 dereferenceable(64)) local_unnamed_addr #2 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Vec33AbsEv(ptr noundef nonnull align 16 dereferenceable(16)) local_unnamed_addr #3 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH4Vec3plES0_(ptr noundef nonnull align 16 dereferenceable(16), double, double) local_unnamed_addr #3 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH5Mat448GetAxisYEv(ptr noundef nonnull align 16 dereferenceable(64)) local_unnamed_addr #2 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH5Mat448GetAxisZEv(ptr noundef nonnull align 16 dereferenceable(64)) local_unnamed_addr #2 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef float @_ZNK3JPH4Vec3ixEj(ptr noundef nonnull align 16 dereferenceable(16), i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #5

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef float @_ZSt3absf(float noundef) local_unnamed_addr #6

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZN3JPH5Mat44clEjj(ptr noundef nonnull align 16 dereferenceable(64), i32 noundef, i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef float @_ZNK3JPH4Vec33DotES0_(ptr noundef nonnull align 16 dereferenceable(16), double, double) local_unnamed_addr #4 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH5Mat4414GetTranslationEv(ptr noundef nonnull align 16 dereferenceable(64)) local_unnamed_addr #2 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local { double, double } @_ZNK3JPH5Mat4410GetColumn3Ej(ptr noundef nonnull align 16 dereferenceable(64), i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x float> @llvm.fmuladd.v2f32(<2 x float>, <2 x float>, <2 x float>) #7

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { alwaysinline 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 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="128" "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 = { alwaysinline mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { 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 = !{!"float", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!7, !7, i64 0}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass,VectorCombinePass