; LLVM IR from moarseniy/CudaFEMproject :: FEMproject/femfunc/src/femfunc.ll (Z19gpuCalculateFEM_DYN11DEVICE_NAMER10dataKeeperb)

; 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.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%struct.WaveletParams = type <{ %"class.std::__cxx11::basic_string", float, float, float, [4 x i8] }>
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%struct.MechanicalParams = type { float, float, float, float, float, float, float, float, float }
%"class.std::allocator" = type { i8 }

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.8 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [93 x i8], align 1
@__PRETTY_FUNCTION__._Z19gpuCalculateFEM_DYN11DEVICE_NAMER10dataKeeperb = external hidden unnamed_addr constant [58 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [60 x i8], align 1

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

declare noundef ptr @_ZN12ElementsData15setElementsDataE11DEVICE_NAMERK10dataKeeper(i32 noundef, ptr noundef nonnull align 8 dereferenceable(3168)) #1

declare noundef ptr @_ZNK12ElementsData11get_KlocalsEv(ptr noundef nonnull align 8 dereferenceable(336)) #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK10dataKeeper7get_dimEv(ptr noundef nonnull align 8 dereferenceable(3168)) #2 align 2

declare noundef ptr @_ZNK12ElementsData9get_diagKEv(ptr noundef nonnull align 8 dereferenceable(336)) #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK10dataKeeper16getWaveletParamsEv(ptr dead_on_unwind noalias writable sret(%struct.WaveletParams) align 8, ptr noundef nonnull align 8 dereferenceable(3168)) #3 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN13WaveletParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(44)) unnamed_addr #4 align 2

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

declare noundef ptr @_ZNK12ElementsData11get_FlocalsEv(ptr noundef nonnull align 8 dereferenceable(336)) #1

declare void @_ZNK6Matrix4copyERS_(ptr noundef nonnull align 8 dereferenceable(49), ptr noundef nonnull align 8 dereferenceable(49)) #1

declare noundef ptr @_ZNK12ElementsData5get_rEv(ptr noundef nonnull align 8 dereferenceable(336)) #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z14gpuPCG_EbE_vecR6Matrix11DEVICE_NAMER10dataKeeperR12ElementsDatabfb(ptr noundef nonnull align 8 dereferenceable(49), i32 noundef, ptr noundef nonnull align 8 dereferenceable(3168), ptr noundef nonnull align 8 dereferenceable(336), i1 noundef zeroext, float noundef, i1 noundef zeroext) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK10dataKeeper17get_displacementsEv(ptr noundef nonnull align 8 dereferenceable(3168)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK10dataKeeper17get_elementsCountEv(ptr noundef nonnull align 8 dereferenceable(3168)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK10dataKeeper14get_nodesCountEv(ptr noundef nonnull align 8 dereferenceable(3168)) #2 align 2

declare noundef ptr @_ZNK12ElementsData5get_xEv(ptr noundef nonnull align 8 dereferenceable(336)) #1

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #5

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8), float noundef) #3 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #5

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) #1

declare noundef ptr @_ZN6Matrix9setMatrixE11DEVICE_NAMEmm(i32 noundef, i64 noundef, i64 noundef) #1

declare noundef i32 @_ZNK12ElementsData10get_deviceEv(ptr noundef nonnull align 8 dereferenceable(336)) #1

declare noundef ptr @_ZNK12ElementsData15get_adjElementsEv(ptr noundef nonnull align 8 dereferenceable(336)) #1

; Function Attrs: mustprogress uwtable
define dso_local void @_Z19gpuCalculateFEM_DYN11DEVICE_NAMER10dataKeeperb(i32 noundef %0, ptr noundef nonnull align 8 dereferenceable(3168) %1, i1 noundef zeroext %2) #3 personality ptr @__gxx_personality_v0 {
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i8, align 1
  %7 = alloca float, align 4
  %8 = alloca %struct.MechanicalParams, align 4
  %9 = alloca float, align 4
  %10 = alloca %struct.MechanicalParams, align 4
  %11 = alloca float, align 4
  %12 = alloca %struct.MechanicalParams, align 4
  %13 = alloca float, align 4
  %14 = alloca %struct.MechanicalParams, align 4
  %15 = alloca float, align 4
  %16 = alloca %struct.MechanicalParams, align 4
  %17 = alloca float, align 4
  %18 = alloca %struct.MechanicalParams, align 4
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca i8, align 1
  %22 = alloca i8, align 1
  %23 = alloca i8, align 1
  %24 = alloca i8, align 1
  %25 = alloca float, align 4
  %26 = alloca float, align 4
  %27 = alloca i8, align 1
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca %struct.MechanicalParams, align 4
  %33 = alloca %struct.WaveletParams, align 8
  %34 = alloca ptr, align 8
  %35 = alloca i32, align 4
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca float, align 4
  %39 = alloca float, align 4
  %40 = alloca float, align 4
  %41 = alloca ptr, align 8
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca float, align 4
  %45 = alloca float, align 4
  %46 = alloca float, align 4
  %47 = alloca %struct.WaveletParams, align 8
  %48 = alloca i32, align 4
  %49 = alloca %"class.std::__cxx11::basic_string", align 8
  %50 = alloca %"class.std::allocator", align 1
  %51 = alloca ptr, align 8
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  %52 = zext i1 %2 to i8
  store i8 %52, ptr %6, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #7
  call void @llvm.lifetime.start.p0(i64 36, ptr %8) #7
  %53 = load ptr, ptr %5, align 8, !tbaa !9
  call void @_ZNK10dataKeeper13getMechParamsEv(ptr dead_on_unwind writable sret(%struct.MechanicalParams) align 4 %8, ptr noundef nonnull align 8 dereferenceable(3168) %53)
  %54 = getelementptr inbounds %struct.MechanicalParams, ptr %8, i32 0, i32 7
  %55 = load float, ptr %54, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 36, ptr %8) #7
  store float %55, ptr %7, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #7
  call void @llvm.lifetime.start.p0(i64 36, ptr %10) #7
  %56 = load ptr, ptr %5, align 8, !tbaa !9
  call void @_ZNK10dataKeeper13getMechParamsEv(ptr dead_on_unwind writable sret(%struct.MechanicalParams) align 4 %10, ptr noundef nonnull align 8 dereferenceable(3168) %56)
  %57 = getelementptr inbounds %struct.MechanicalParams, ptr %10, i32 0, i32 8
  %58 = load float, ptr %57, align 4, !tbaa !17
  call void @llvm.lifetime.end.p0(i64 36, ptr %10) #7
  store float %58, ptr %9, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #7
  call void @llvm.lifetime.start.p0(i64 36, ptr %12) #7
  %59 = load ptr, ptr %5, align 8, !tbaa !9
  call void @_ZNK10dataKeeper13getMechParamsEv(ptr dead_on_unwind writable sret(%struct.MechanicalParams) align 4 %12, ptr noundef nonnull align 8 dereferenceable(3168) %59)
  %60 = getelementptr inbounds %struct.MechanicalParams, ptr %12, i32 0, i32 3
  %61 = load float, ptr %60, align 4, !tbaa !18
  call void @llvm.lifetime.end.p0(i64 36, ptr %12) #7
  store float %61, ptr %11, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #7
  call void @llvm.lifetime.start.p0(i64 36, ptr %14) #7
  %62 = load ptr, ptr %5, align 8, !tbaa !9
  call void @_ZNK10dataKeeper13getMechParamsEv(ptr dead_on_unwind writable sret(%struct.MechanicalParams) align 4 %14, ptr noundef nonnull align 8 dereferenceable(3168) %62)
  %63 = getelementptr inbounds %struct.MechanicalParams, ptr %14, i32 0, i32 4
  %64 = load float, ptr %63, align 4, !tbaa !19
  call void @llvm.lifetime.end.p0(i64 36, ptr %14) #7
  store float %64, ptr %13, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.start.p0(i64 36, ptr %16) #7
  %65 = load ptr, ptr %5, align 8, !tbaa !9
  call void @_ZNK10dataKeeper13getMechParamsEv(ptr dead_on_unwind writable sret(%struct.MechanicalParams) align 4 %16, ptr noundef nonnull align 8 dereferenceable(3168) %65)
  %66 = getelementptr inbounds %struct.MechanicalParams, ptr %16, i32 0, i32 5
  %67 = load float, ptr %66, align 4, !tbaa !20
  call void @llvm.lifetime.end.p0(i64 36, ptr %16) #7
  store float %67, ptr %15, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #7
  call void @llvm.lifetime.start.p0(i64 36, ptr %18) #7
  %68 = load ptr, ptr %5, align 8, !tbaa !9
  call void @_ZNK10dataKeeper13getMechParamsEv(ptr dead_on_unwind writable sret(%struct.MechanicalParams) align 4 %18, ptr noundef nonnull align 8 dereferenceable(3168) %68)
  %69 = getelementptr inbounds %struct.MechanicalParams, ptr %18, i32 0, i32 6
  %70 = load float, ptr %69, align 4, !tbaa !21
  call void @llvm.lifetime.end.p0(i64 36, ptr %18) #7
  store float %70, ptr %17, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  %71 = load ptr, ptr %5, align 8, !tbaa !9
  %72 = call noundef i64 @_ZNK10dataKeeper17get_elementsCountEv(ptr noundef nonnull align 8 dereferenceable(3168) %71)
  store i64 %72, ptr %19, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #7
  %73 = load ptr, ptr %5, align 8, !tbaa !9
  %74 = call noundef i64 @_ZNK10dataKeeper7get_dimEv(ptr noundef nonnull align 8 dereferenceable(3168) %73)
  store i64 %74, ptr %20, align 8, !tbaa !22
  call void @llvm.lifetime.start.p0(i64 1, ptr %21) #7
  %75 = load float, ptr %9, align 4, !tbaa !16
  %76 = fcmp oeq float %75, 0.000000e+00
  %77 = zext i1 %76 to i8
  store i8 %77, ptr %21, align 1, !tbaa !11
  %78 = load i8, ptr %21, align 1, !tbaa !11, !range !24, !noundef !25
  %79 = trunc i8 %78 to i1
  br i1 %79, label %80, label %87

80:                                               ; preds = %3
  %81 = load float, ptr %13, align 4, !tbaa !16
  %82 = fcmp oeq float %81, 0.000000e+00
  br i1 %82, label %83, label %84

83:                                               ; preds = %80
  br label %86

84:                                               ; preds = %80
  call void @__assert_fail(ptr noundef @.str.8, ptr noundef @.str.9, i32 noundef 147, ptr noundef @__PRETTY_FUNCTION__._Z19gpuCalculateFEM_DYN11DEVICE_NAMER10dataKeeperb) #8
  unreachable

85:                                               ; No predecessors!
  br label %86

86:                                               ; preds = %85, %83
  br label %87

87:                                               ; preds = %86, %3
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #7
  store i8 0, ptr %22, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #7
  %88 = load i8, ptr %21, align 1, !tbaa !11, !range !24, !noundef !25
  %89 = trunc i8 %88 to i1
  %90 = zext i1 %89 to i8
  store i8 %90, ptr %23, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #7
  store i8 0, ptr %24, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #7
  store float 0x3F1A36E2E0000000, ptr %25, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %27) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #7
  %91 = load i32, ptr %4, align 4, !tbaa !5
  %92 = load i64, ptr %19, align 8, !tbaa !22
  %93 = load i64, ptr %20, align 8, !tbaa !22
  %94 = sub i64 %93, 1
  %95 = mul i64 6, %94
  %96 = call noundef ptr @_ZN6Matrix9setMatrixE11DEVICE_NAMEmm(i32 noundef %91, i64 noundef %92, i64 noundef %95)
  store ptr %96, ptr %28, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #7
  %97 = load i32, ptr %4, align 4, !tbaa !5
  %98 = load i64, ptr %19, align 8, !tbaa !22
  %99 = load i64, ptr %20, align 8, !tbaa !22
  %100 = sub i64 %99, 1
  %101 = mul i64 6, %100
  %102 = call noundef ptr @_ZN6Matrix9setMatrixE11DEVICE_NAMEmm(i32 noundef %97, i64 noundef %98, i64 noundef %101)
  store ptr %102, ptr %29, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #7
  %103 = load i32, ptr %4, align 4, !tbaa !5
  %104 = load i64, ptr %19, align 8, !tbaa !22
  %105 = load i64, ptr %20, align 8, !tbaa !22
  %106 = sub i64 %105, 1
  %107 = mul i64 6, %106
  %108 = call noundef ptr @_ZN6Matrix9setMatrixE11DEVICE_NAMEmm(i32 noundef %103, i64 noundef %104, i64 noundef %107)
  store ptr %108, ptr %30, align 8, !tbaa !9
  %109 = load ptr, ptr %28, align 8, !tbaa !9
  %110 = load ptr, ptr %109, align 8, !tbaa !26
  %111 = getelementptr inbounds ptr, ptr %110, i64 29
  %112 = load ptr, ptr %111, align 8
  call void %112(ptr noundef nonnull align 8 dereferenceable(49) %109, float noundef 0.000000e+00)
  %113 = load ptr, ptr %29, align 8, !tbaa !9
  %114 = load ptr, ptr %113, align 8, !tbaa !26
  %115 = getelementptr inbounds ptr, ptr %114, i64 29
  %116 = load ptr, ptr %115, align 8
  call void %116(ptr noundef nonnull align 8 dereferenceable(49) %113, float noundef 0.000000e+00)
  %117 = load ptr, ptr %30, align 8, !tbaa !9
  %118 = load ptr, ptr %117, align 8, !tbaa !26
  %119 = getelementptr inbounds ptr, ptr %118, i64 29
  %120 = load ptr, ptr %119, align 8
  call void %120(ptr noundef nonnull align 8 dereferenceable(49) %117, float noundef 0.000000e+00)
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #7
  %121 = load i32, ptr %4, align 4, !tbaa !5
  %122 = load ptr, ptr %5, align 8, !tbaa !9
  %123 = call noundef ptr @_ZN12ElementsData15setElementsDataE11DEVICE_NAMERK10dataKeeper(i32 noundef %121, ptr noundef nonnull align 8 dereferenceable(3168) %122)
  store ptr %123, ptr %31, align 8, !tbaa !9
  %124 = load ptr, ptr %31, align 8, !tbaa !9
  %125 = load ptr, ptr %124, align 8, !tbaa !26
  %126 = getelementptr inbounds ptr, ptr %125, i64 18
  %127 = load ptr, ptr %126, align 8
  call void %127(ptr noundef nonnull align 8 dereferenceable(336) %124)
  %128 = load ptr, ptr %31, align 8, !tbaa !9
  %129 = load ptr, ptr %128, align 8, !tbaa !26
  %130 = getelementptr inbounds ptr, ptr %129, i64 8
  %131 = load ptr, ptr %130, align 8
  call void %131(ptr noundef nonnull align 8 dereferenceable(336) %128)
  %132 = load ptr, ptr %31, align 8, !tbaa !9
  %133 = load i8, ptr %23, align 1, !tbaa !11, !range !24, !noundef !25
  %134 = trunc i8 %133 to i1
  call void @llvm.lifetime.start.p0(i64 36, ptr %32) #7
  %135 = load ptr, ptr %5, align 8, !tbaa !9
  call void @_ZNK10dataKeeper13getMechParamsEv(ptr dead_on_unwind writable sret(%struct.MechanicalParams) align 4 %32, ptr noundef nonnull align 8 dereferenceable(3168) %135)
  %136 = load ptr, ptr %132, align 8, !tbaa !26
  %137 = getelementptr inbounds ptr, ptr %136, i64 26
  %138 = load ptr, ptr %137, align 8
  call void %138(ptr noundef nonnull align 8 dereferenceable(336) %132, i1 noundef zeroext %134, ptr noundef nonnull align 4 dereferenceable(36) %32)
  call void @llvm.lifetime.end.p0(i64 36, ptr %32) #7
  %139 = load ptr, ptr %31, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 48, ptr %33) #7
  %140 = load ptr, ptr %5, align 8, !tbaa !9
  call void @_ZNK10dataKeeper16getWaveletParamsEv(ptr dead_on_unwind writable sret(%struct.WaveletParams) align 8 %33, ptr noundef nonnull align 8 dereferenceable(3168) %140)
  %141 = load ptr, ptr %139, align 8, !tbaa !26
  %142 = getelementptr inbounds ptr, ptr %141, i64 13
  %143 = load ptr, ptr %142, align 8
  invoke void %143(ptr noundef nonnull align 8 dereferenceable(336) %139, float noundef 0.000000e+00, ptr noundef nonnull align 8 dereferenceable(44) %33)
          to label %144 unwind label %164

144:                                              ; preds = %87
  call void @_ZN13WaveletParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(44) %33) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr %33) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #7
  %145 = load ptr, ptr %31, align 8, !tbaa !9
  %146 = call noundef ptr @_ZNK12ElementsData5get_rEv(ptr noundef nonnull align 8 dereferenceable(336) %145)
  store ptr %146, ptr %36, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #7
  %147 = load ptr, ptr %31, align 8, !tbaa !9
  %148 = call noundef ptr @_ZNK12ElementsData5get_xEv(ptr noundef nonnull align 8 dereferenceable(336) %147)
  store ptr %148, ptr %37, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #7
  store float 1.000000e+00, ptr %38, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #7
  store float 0.000000e+00, ptr %39, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #7
  store float 0.000000e+00, ptr %40, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #7
  %149 = load i8, ptr %24, align 1, !tbaa !11, !range !24, !noundef !25
  %150 = trunc i8 %149 to i1
  br i1 %150, label %151, label %179

151:                                              ; preds = %144
  %152 = load i32, ptr %4, align 4, !tbaa !5
  %153 = load i64, ptr %19, align 8, !tbaa !22
  %154 = load i64, ptr %20, align 8, !tbaa !22
  %155 = sub i64 %154, 1
  %156 = mul i64 6, %155
  %157 = call noundef ptr @_ZN6Matrix9setMatrixE11DEVICE_NAMEmm(i32 noundef %152, i64 noundef %153, i64 noundef %156)
  store ptr %157, ptr %41, align 8, !tbaa !9
  %158 = load i8, ptr %21, align 1, !tbaa !11, !range !24, !noundef !25
  %159 = trunc i8 %158 to i1
  br i1 %159, label %160, label %168

160:                                              ; preds = %151
  store float 0.000000e+00, ptr %39, align 4, !tbaa !16
  %161 = load float, ptr %7, align 4, !tbaa !16
  %162 = load float, ptr %15, align 4, !tbaa !16
  %163 = fmul float %161, %162
  store float %163, ptr %40, align 4, !tbaa !16
  br label %178

164:                                              ; preds = %87
  %165 = landingpad { ptr, i32 }
          cleanup
  %166 = extractvalue { ptr, i32 } %165, 0
  store ptr %166, ptr %34, align 8
  %167 = extractvalue { ptr, i32 } %165, 1
  store i32 %167, ptr %35, align 4
  call void @_ZN13WaveletParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(44) %33) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr %33) #7
  br label %546

168:                                              ; preds = %151
  %169 = load float, ptr %9, align 4, !tbaa !16
  %170 = fmul float 5.000000e-01, %169
  %171 = load float, ptr %15, align 4, !tbaa !16
  %172 = fmul float %170, %171
  %173 = load float, ptr %15, align 4, !tbaa !16
  %174 = fmul float %172, %173
  store float %174, ptr %39, align 4, !tbaa !16
  %175 = load float, ptr %7, align 4, !tbaa !16
  %176 = load float, ptr %15, align 4, !tbaa !16
  %177 = fmul float %175, %176
  store float %177, ptr %40, align 4, !tbaa !16
  br label %178

178:                                              ; preds = %168, %160
  br label %220

179:                                              ; preds = %144
  %180 = load i8, ptr %21, align 1, !tbaa !11, !range !24, !noundef !25
  %181 = trunc i8 %180 to i1
  br i1 %181, label %182, label %183

182:                                              ; preds = %179
  br label %219

183:                                              ; preds = %179
  %184 = load float, ptr %9, align 4, !tbaa !16
  %185 = fmul float 5.000000e-01, %184
  %186 = load float, ptr %15, align 4, !tbaa !16
  %187 = fmul float %185, %186
  %188 = load float, ptr %15, align 4, !tbaa !16
  %189 = fmul float %187, %188
  store float %189, ptr %39, align 4, !tbaa !16
  store float 0.000000e+00, ptr %40, align 4, !tbaa !16
  %190 = load ptr, ptr %31, align 8, !tbaa !9
  %191 = call noundef ptr @_ZNK12ElementsData11get_KlocalsEv(ptr noundef nonnull align 8 dereferenceable(336) %190)
  %192 = load i64, ptr %20, align 8, !tbaa !22
  %193 = sub i64 %192, 1
  %194 = mul i64 6, %193
  %195 = load ptr, ptr %31, align 8, !tbaa !9
  %196 = call noundef ptr @_ZNK12ElementsData9get_diagKEv(ptr noundef nonnull align 8 dereferenceable(336) %195)
  %197 = load ptr, ptr %191, align 8, !tbaa !26
  %198 = getelementptr inbounds ptr, ptr %197, i64 30
  %199 = load ptr, ptr %198, align 8
  call void %199(ptr noundef nonnull align 8 dereferenceable(49) %191, i64 noundef %194, ptr noundef nonnull align 8 dereferenceable(49) %196)
  %200 = load ptr, ptr %31, align 8, !tbaa !9
  %201 = call noundef ptr @_ZNK12ElementsData11get_MlocalsEv(ptr noundef nonnull align 8 dereferenceable(336) %200)
  %202 = load i64, ptr %20, align 8, !tbaa !22
  %203 = sub i64 %202, 1
  %204 = mul i64 6, %203
  %205 = load ptr, ptr %31, align 8, !tbaa !9
  %206 = call noundef ptr @_ZNK12ElementsData9get_diagMEv(ptr noundef nonnull align 8 dereferenceable(336) %205)
  %207 = load ptr, ptr %201, align 8, !tbaa !26
  %208 = getelementptr inbounds ptr, ptr %207, i64 30
  %209 = load ptr, ptr %208, align 8
  call void %209(ptr noundef nonnull align 8 dereferenceable(49) %201, i64 noundef %204, ptr noundef nonnull align 8 dereferenceable(49) %206)
  %210 = load ptr, ptr %31, align 8, !tbaa !9
  %211 = call noundef ptr @_ZNK12ElementsData9get_diagKEv(ptr noundef nonnull align 8 dereferenceable(336) %210)
  %212 = load ptr, ptr %31, align 8, !tbaa !9
  %213 = call noundef ptr @_ZNK12ElementsData9get_diagMEv(ptr noundef nonnull align 8 dereferenceable(336) %212)
  %214 = load float, ptr %39, align 4, !tbaa !16
  %215 = load float, ptr %38, align 4, !tbaa !16
  %216 = load ptr, ptr %211, align 8, !tbaa !26
  %217 = getelementptr inbounds ptr, ptr %216, i64 20
  %218 = load ptr, ptr %217, align 8
  call void %218(ptr noundef nonnull align 8 dereferenceable(49) %211, ptr noundef nonnull align 8 dereferenceable(49) %213, float noundef %214, float noundef %215)
  br label %219

219:                                              ; preds = %183, %182
  br label %220

220:                                              ; preds = %219, %178
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #7
  %221 = load float, ptr %17, align 4, !tbaa !16
  %222 = fcmp olt float %221, 0.000000e+00
  %223 = zext i1 %222 to i8
  store i8 %223, ptr %27, align 1, !tbaa !11
  %224 = load i8, ptr %27, align 1, !tbaa !11, !range !24, !noundef !25
  %225 = trunc i8 %224 to i1
  br i1 %225, label %231, label %226

226:                                              ; preds = %220
  %227 = load float, ptr %17, align 4, !tbaa !16
  %228 = load float, ptr %15, align 4, !tbaa !16
  %229 = fdiv float %227, %228
  %230 = fptosi float %229 to i32
  store i32 %230, ptr %42, align 4, !tbaa !28
  br label %242

231:                                              ; preds = %220
  %232 = load float, ptr %17, align 4, !tbaa !16
  %233 = call noundef float @_ZSt4fabsf(float noundef %232)
  store float %233, ptr %26, align 4, !tbaa !16
  %234 = load i8, ptr %6, align 1, !tbaa !11, !range !24, !noundef !25
  %235 = trunc i8 %234 to i1
  br i1 %235, label %236, label %241

236:                                              ; preds = %231
  %237 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.10)
  %238 = load float, ptr %26, align 4, !tbaa !16
  %239 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %237, float noundef %238)
  %240 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %239, ptr noundef @.str.11)
  br label %241

241:                                              ; preds = %236, %231
  br label %242

242:                                              ; preds = %241, %226
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #7
  store i32 1, ptr %43, align 4, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #7
  br label %243

243:                                              ; preds = %468, %242
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #7
  %244 = load i32, ptr %43, align 4, !tbaa !28
  %245 = sitofp i32 %244 to float
  %246 = load float, ptr %15, align 4, !tbaa !16
  %247 = fmul float %245, %246
  store float %247, ptr %46, align 4, !tbaa !16
  %248 = load i8, ptr %6, align 1, !tbaa !11, !range !24, !noundef !25
  %249 = trunc i8 %248 to i1
  br i1 %249, label %250, label %267

250:                                              ; preds = %243
  %251 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.12)
  %252 = load i32, ptr %43, align 4, !tbaa !28
  %253 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %251, i32 noundef %252)
  %254 = load i8, ptr %27, align 1, !tbaa !11, !range !24, !noundef !25
  %255 = trunc i8 %254 to i1
  br i1 %255, label %261, label %256

256:                                              ; preds = %250
  %257 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.13)
  %258 = load i32, ptr %42, align 4, !tbaa !28
  %259 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %257, i32 noundef %258)
  %260 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %259, ptr noundef @.str.14)
  br label %261

261:                                              ; preds = %256, %250
  %262 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.14)
  %263 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.15)
  %264 = load float, ptr %46, align 4, !tbaa !16
  %265 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %263, float noundef %264)
  %266 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %265, ptr noundef @.str.16)
  br label %267

267:                                              ; preds = %261, %243
  %268 = load ptr, ptr %28, align 8, !tbaa !9
  %269 = load ptr, ptr %29, align 8, !tbaa !9
  %270 = load float, ptr %15, align 4, !tbaa !16
  %271 = load ptr, ptr %268, align 8, !tbaa !26
  %272 = getelementptr inbounds ptr, ptr %271, i64 20
  %273 = load ptr, ptr %272, align 8
  call void %273(ptr noundef nonnull align 8 dereferenceable(49) %268, ptr noundef nonnull align 8 dereferenceable(49) %269, float noundef 1.000000e+00, float noundef %270)
  %274 = load ptr, ptr %28, align 8, !tbaa !9
  %275 = load ptr, ptr %37, align 8, !tbaa !9
  %276 = load float, ptr %9, align 4, !tbaa !16
  %277 = fsub float 1.000000e+00, %276
  %278 = fmul float 5.000000e-01, %277
  %279 = load float, ptr %15, align 4, !tbaa !16
  %280 = fmul float %278, %279
  %281 = load float, ptr %15, align 4, !tbaa !16
  %282 = fmul float %280, %281
  %283 = load ptr, ptr %274, align 8, !tbaa !26
  %284 = getelementptr inbounds ptr, ptr %283, i64 20
  %285 = load ptr, ptr %284, align 8
  call void %285(ptr noundef nonnull align 8 dereferenceable(49) %274, ptr noundef nonnull align 8 dereferenceable(49) %275, float noundef 1.000000e+00, float noundef %282)
  %286 = load ptr, ptr %29, align 8, !tbaa !9
  %287 = load ptr, ptr %37, align 8, !tbaa !9
  %288 = load float, ptr %7, align 4, !tbaa !16
  %289 = fsub float 1.000000e+00, %288
  %290 = load float, ptr %15, align 4, !tbaa !16
  %291 = fmul float %289, %290
  %292 = load ptr, ptr %286, align 8, !tbaa !26
  %293 = getelementptr inbounds ptr, ptr %292, i64 20
  %294 = load ptr, ptr %293, align 8
  call void %294(ptr noundef nonnull align 8 dereferenceable(49) %286, ptr noundef nonnull align 8 dereferenceable(49) %287, float noundef 1.000000e+00, float noundef %291)
  %295 = load ptr, ptr %37, align 8, !tbaa !9
  %296 = load ptr, ptr %295, align 8, !tbaa !26
  %297 = getelementptr inbounds ptr, ptr %296, i64 29
  %298 = load ptr, ptr %297, align 8
  call void %298(ptr noundef nonnull align 8 dereferenceable(49) %295, float noundef 0.000000e+00)
  %299 = load ptr, ptr %36, align 8, !tbaa !9
  %300 = load ptr, ptr %28, align 8, !tbaa !9
  %301 = load i64, ptr %20, align 8, !tbaa !22
  %302 = sub i64 %301, 1
  %303 = mul i64 6, %302
  %304 = load ptr, ptr %31, align 8, !tbaa !9
  %305 = call noundef ptr @_ZNK12ElementsData11get_KlocalsEv(ptr noundef nonnull align 8 dereferenceable(336) %304)
  %306 = load i64, ptr %20, align 8, !tbaa !22
  %307 = sub i64 %306, 1
  %308 = mul i64 6, %307
  %309 = load i64, ptr %19, align 8, !tbaa !22
  %310 = load ptr, ptr %299, align 8, !tbaa !26
  %311 = getelementptr inbounds ptr, ptr %310, i64 3
  %312 = load ptr, ptr %311, align 8
  call void %312(ptr noundef nonnull align 8 dereferenceable(49) %299, ptr noundef nonnull align 8 dereferenceable(49) %300, i64 noundef 1, i64 noundef %303, i1 noundef zeroext false, ptr noundef nonnull align 8 dereferenceable(49) %305, i64 noundef %308, i1 noundef zeroext false, i64 noundef %309, float noundef 1.000000e+00)
  %313 = load i8, ptr %24, align 1, !tbaa !11, !range !24, !noundef !25
  %314 = trunc i8 %313 to i1
  br i1 %314, label %315, label %346

315:                                              ; preds = %267
  %316 = load ptr, ptr %31, align 8, !tbaa !9
  %317 = call noundef ptr @_ZNK12ElementsData11get_MlocalsEv(ptr noundef nonnull align 8 dereferenceable(336) %316)
  %318 = load ptr, ptr %31, align 8, !tbaa !9
  %319 = call noundef ptr @_ZNK12ElementsData11get_KlocalsEv(ptr noundef nonnull align 8 dereferenceable(336) %318)
  %320 = load float, ptr %11, align 4, !tbaa !16
  %321 = load float, ptr %13, align 4, !tbaa !16
  %322 = load ptr, ptr %31, align 8, !tbaa !9
  %323 = call noundef ptr @_ZNK12ElementsData11get_ClocalsEv(ptr noundef nonnull align 8 dereferenceable(336) %322)
  %324 = load ptr, ptr %317, align 8, !tbaa !26
  %325 = getelementptr inbounds ptr, ptr %324, i64 21
  %326 = load ptr, ptr %325, align 8
  call void %326(ptr noundef nonnull align 8 dereferenceable(49) %317, ptr noundef nonnull align 8 dereferenceable(49) %319, float noundef %320, float noundef %321, ptr noundef nonnull align 8 dereferenceable(49) %323)
  %327 = load ptr, ptr %41, align 8, !tbaa !9
  %328 = load ptr, ptr %29, align 8, !tbaa !9
  %329 = load i64, ptr %20, align 8, !tbaa !22
  %330 = sub i64 %329, 1
  %331 = mul i64 6, %330
  %332 = load ptr, ptr %31, align 8, !tbaa !9
  %333 = call noundef ptr @_ZNK12ElementsData11get_ClocalsEv(ptr noundef nonnull align 8 dereferenceable(336) %332)
  %334 = load i64, ptr %20, align 8, !tbaa !22
  %335 = sub i64 %334, 1
  %336 = mul i64 6, %335
  %337 = load i64, ptr %19, align 8, !tbaa !22
  %338 = load ptr, ptr %327, align 8, !tbaa !26
  %339 = getelementptr inbounds ptr, ptr %338, i64 3
  %340 = load ptr, ptr %339, align 8
  call void %340(ptr noundef nonnull align 8 dereferenceable(49) %327, ptr noundef nonnull align 8 dereferenceable(49) %328, i64 noundef 1, i64 noundef %331, i1 noundef zeroext true, ptr noundef nonnull align 8 dereferenceable(49) %333, i64 noundef %336, i1 noundef zeroext false, i64 noundef %337, float noundef 1.000000e+00)
  %341 = load ptr, ptr %36, align 8, !tbaa !9
  %342 = load ptr, ptr %41, align 8, !tbaa !9
  %343 = load ptr, ptr %341, align 8, !tbaa !26
  %344 = getelementptr inbounds ptr, ptr %343, i64 22
  %345 = load ptr, ptr %344, align 8
  call void %345(ptr noundef nonnull align 8 dereferenceable(49) %341, ptr noundef nonnull align 8 dereferenceable(49) %342)
  br label %346

346:                                              ; preds = %315, %267
  %347 = load ptr, ptr %31, align 8, !tbaa !9
  %348 = load float, ptr %46, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 48, ptr %47) #7
  %349 = load ptr, ptr %5, align 8, !tbaa !9
  call void @_ZNK10dataKeeper16getWaveletParamsEv(ptr dead_on_unwind writable sret(%struct.WaveletParams) align 8 %47, ptr noundef nonnull align 8 dereferenceable(3168) %349)
  %350 = load ptr, ptr %347, align 8, !tbaa !26
  %351 = getelementptr inbounds ptr, ptr %350, i64 14
  %352 = load ptr, ptr %351, align 8
  invoke void %352(ptr noundef nonnull align 8 dereferenceable(336) %347, float noundef %348, ptr noundef nonnull align 8 dereferenceable(44) %47)
          to label %353 unwind label %376

353:                                              ; preds = %346
  call void @_ZN13WaveletParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(44) %47) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr %47) #7
  %354 = load ptr, ptr %36, align 8, !tbaa !9
  %355 = load ptr, ptr %31, align 8, !tbaa !9
  %356 = call noundef ptr @_ZNK12ElementsData11get_FlocalsEv(ptr noundef nonnull align 8 dereferenceable(336) %355)
  %357 = load ptr, ptr %354, align 8, !tbaa !26
  %358 = getelementptr inbounds ptr, ptr %357, i64 20
  %359 = load ptr, ptr %358, align 8
  call void %359(ptr noundef nonnull align 8 dereferenceable(49) %354, ptr noundef nonnull align 8 dereferenceable(49) %356, float noundef -1.000000e+00, float noundef 1.000000e+00)
  %360 = load i8, ptr %24, align 1, !tbaa !11, !range !24, !noundef !25
  %361 = trunc i8 %360 to i1
  br i1 %361, label %362, label %382

362:                                              ; preds = %353
  %363 = load i8, ptr %21, align 1, !tbaa !11, !range !24, !noundef !25
  %364 = trunc i8 %363 to i1
  br i1 %364, label %365, label %380

365:                                              ; preds = %362
  %366 = load ptr, ptr %31, align 8, !tbaa !9
  %367 = load ptr, ptr %31, align 8, !tbaa !9
  %368 = call noundef ptr @_ZNK12ElementsData9get_diagKEv(ptr noundef nonnull align 8 dereferenceable(336) %367)
  %369 = load ptr, ptr %36, align 8, !tbaa !9
  %370 = load ptr, ptr %37, align 8, !tbaa !9
  %371 = load i8, ptr %22, align 1, !tbaa !11, !range !24, !noundef !25
  %372 = trunc i8 %371 to i1
  %373 = load ptr, ptr %366, align 8, !tbaa !26
  %374 = getelementptr inbounds ptr, ptr %373, i64 25
  %375 = load ptr, ptr %374, align 8
  call void %375(ptr noundef nonnull align 8 dereferenceable(336) %366, ptr noundef nonnull align 8 dereferenceable(49) %368, ptr noundef nonnull align 8 dereferenceable(49) %369, ptr noundef nonnull align 8 dereferenceable(49) %370, i1 noundef zeroext %372)
  br label %381

376:                                              ; preds = %346
  %377 = landingpad { ptr, i32 }
          cleanup
  %378 = extractvalue { ptr, i32 } %377, 0
  store ptr %378, ptr %34, align 8
  %379 = extractvalue { ptr, i32 } %377, 1
  store i32 %379, ptr %35, align 4
  call void @_ZN13WaveletParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(44) %47) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr %47) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #7
  br label %545

380:                                              ; preds = %362
  br label %381

381:                                              ; preds = %380, %365
  br label %407

382:                                              ; preds = %353
  %383 = load i8, ptr %21, align 1, !tbaa !11, !range !24, !noundef !25
  %384 = trunc i8 %383 to i1
  br i1 %384, label %385, label %396

385:                                              ; preds = %382
  %386 = load ptr, ptr %31, align 8, !tbaa !9
  %387 = load ptr, ptr %31, align 8, !tbaa !9
  %388 = call noundef ptr @_ZNK12ElementsData11get_MlocalsEv(ptr noundef nonnull align 8 dereferenceable(336) %387)
  %389 = load ptr, ptr %36, align 8, !tbaa !9
  %390 = load ptr, ptr %37, align 8, !tbaa !9
  %391 = load i8, ptr %22, align 1, !tbaa !11, !range !24, !noundef !25
  %392 = trunc i8 %391 to i1
  %393 = load ptr, ptr %386, align 8, !tbaa !26
  %394 = getelementptr inbounds ptr, ptr %393, i64 25
  %395 = load ptr, ptr %394, align 8
  call void %395(ptr noundef nonnull align 8 dereferenceable(336) %386, ptr noundef nonnull align 8 dereferenceable(49) %388, ptr noundef nonnull align 8 dereferenceable(49) %389, ptr noundef nonnull align 8 dereferenceable(49) %390, i1 noundef zeroext %392)
  br label %406

396:                                              ; preds = %382
  %397 = load ptr, ptr %37, align 8, !tbaa !9
  %398 = load i32, ptr %4, align 4, !tbaa !5
  %399 = load ptr, ptr %5, align 8, !tbaa !9
  %400 = load ptr, ptr %31, align 8, !tbaa !9
  %401 = load i8, ptr %22, align 1, !tbaa !11, !range !24, !noundef !25
  %402 = trunc i8 %401 to i1
  %403 = load float, ptr %25, align 4, !tbaa !16
  %404 = load i8, ptr %6, align 1, !tbaa !11, !range !24, !noundef !25
  %405 = trunc i8 %404 to i1
  call void @_Z14gpuPCG_EbE_vecR6Matrix11DEVICE_NAMER10dataKeeperR12ElementsDatabfb(ptr noundef nonnull align 8 dereferenceable(49) %397, i32 noundef %398, ptr noundef nonnull align 8 dereferenceable(3168) %399, ptr noundef nonnull align 8 dereferenceable(336) %400, i1 noundef zeroext %402, float noundef %403, i1 noundef zeroext %405)
  br label %406

406:                                              ; preds = %396, %385
  br label %407

407:                                              ; preds = %406, %381
  %408 = load ptr, ptr %29, align 8, !tbaa !9
  %409 = load ptr, ptr %37, align 8, !tbaa !9
  %410 = load float, ptr %7, align 4, !tbaa !16
  %411 = load float, ptr %15, align 4, !tbaa !16
  %412 = fmul float %410, %411
  %413 = load ptr, ptr %408, align 8, !tbaa !26
  %414 = getelementptr inbounds ptr, ptr %413, i64 20
  %415 = load ptr, ptr %414, align 8
  call void %415(ptr noundef nonnull align 8 dereferenceable(49) %408, ptr noundef nonnull align 8 dereferenceable(49) %409, float noundef 1.000000e+00, float noundef %412)
  %416 = load i8, ptr %21, align 1, !tbaa !11, !range !24, !noundef !25
  %417 = trunc i8 %416 to i1
  br i1 %417, label %430, label %418

418:                                              ; preds = %407
  %419 = load ptr, ptr %28, align 8, !tbaa !9
  %420 = load ptr, ptr %37, align 8, !tbaa !9
  %421 = load float, ptr %9, align 4, !tbaa !16
  %422 = fmul float 5.000000e-01, %421
  %423 = load float, ptr %15, align 4, !tbaa !16
  %424 = fmul float %422, %423
  %425 = load float, ptr %15, align 4, !tbaa !16
  %426 = fmul float %424, %425
  %427 = load ptr, ptr %419, align 8, !tbaa !26
  %428 = getelementptr inbounds ptr, ptr %427, i64 20
  %429 = load ptr, ptr %428, align 8
  call void %429(ptr noundef nonnull align 8 dereferenceable(49) %419, ptr noundef nonnull align 8 dereferenceable(49) %420, float noundef 1.000000e+00, float noundef %426)
  br label %430

430:                                              ; preds = %418, %407
  %431 = load i32, ptr %43, align 4, !tbaa !28
  %432 = add nsw i32 %431, 1
  store i32 %432, ptr %43, align 4, !tbaa !28
  %433 = load i8, ptr %27, align 1, !tbaa !11, !range !24, !noundef !25
  %434 = trunc i8 %433 to i1
  br i1 %434, label %435, label %453

435:                                              ; preds = %430
  store float 0.000000e+00, ptr %44, align 4, !tbaa !16
  store float 0.000000e+00, ptr %45, align 4, !tbaa !16
  %436 = load i8, ptr %6, align 1, !tbaa !11, !range !24, !noundef !25
  %437 = trunc i8 %436 to i1
  br i1 %437, label %438, label %447

438:                                              ; preds = %435
  %439 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.17)
  %440 = load float, ptr %44, align 4, !tbaa !16
  %441 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %439, float noundef %440)
  %442 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %441, ptr noundef @.str.18)
  %443 = load float, ptr %45, align 4, !tbaa !16
  %444 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %442, float noundef %443)
  %445 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %444, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %446 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %447

447:                                              ; preds = %438, %435
  %448 = load float, ptr %45, align 4, !tbaa !16
  %449 = load float, ptr %26, align 4, !tbaa !16
  %450 = fcmp olt float %448, %449
  br i1 %450, label %451, label %452

451:                                              ; preds = %447
  store i32 2, ptr %48, align 4
  br label %465

452:                                              ; preds = %447
  br label %464

453:                                              ; preds = %430
  %454 = load i8, ptr %6, align 1, !tbaa !11, !range !24, !noundef !25
  %455 = trunc i8 %454 to i1
  br i1 %455, label %456, label %458

456:                                              ; preds = %453
  %457 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %458

458:                                              ; preds = %456, %453
  %459 = load i32, ptr %43, align 4, !tbaa !28
  %460 = load i32, ptr %42, align 4, !tbaa !28
  %461 = icmp sgt i32 %459, %460
  br i1 %461, label %462, label %463

462:                                              ; preds = %458
  store i32 2, ptr %48, align 4
  br label %465

463:                                              ; preds = %458
  br label %464

464:                                              ; preds = %463, %452
  store i32 0, ptr %48, align 4
  br label %465

465:                                              ; preds = %464, %462, %451
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #7
  %466 = load i32, ptr %48, align 4
  switch i32 %466, label %552 [
    i32 0, label %467
    i32 2, label %469
  ]

467:                                              ; preds = %465
  br label %468

468:                                              ; preds = %467
  br i1 true, label %243, label %469, !llvm.loop !30

469:                                              ; preds = %468, %465
  call void @llvm.lifetime.start.p0(i64 32, ptr %49) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %50) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %50) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef @.str.19, ptr noundef nonnull align 1 dereferenceable(1) %50)
          to label %470 unwind label %536

470:                                              ; preds = %469
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %50) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %50) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #7
  %471 = load ptr, ptr %31, align 8, !tbaa !9
  %472 = invoke noundef i32 @_ZNK12ElementsData10get_deviceEv(ptr noundef nonnull align 8 dereferenceable(336) %471)
          to label %473 unwind label %540

473:                                              ; preds = %470
  %474 = load ptr, ptr %5, align 8, !tbaa !9
  %475 = invoke noundef i64 @_ZNK10dataKeeper14get_nodesCountEv(ptr noundef nonnull align 8 dereferenceable(3168) %474)
          to label %476 unwind label %540

476:                                              ; preds = %473
  %477 = load i64, ptr %20, align 8, !tbaa !22
  %478 = invoke noundef ptr @_ZN6Matrix9setMatrixE11DEVICE_NAMEmm(i32 noundef %472, i64 noundef %475, i64 noundef %477)
          to label %479 unwind label %540

479:                                              ; preds = %476
  store ptr %478, ptr %51, align 8, !tbaa !9
  %480 = load ptr, ptr %31, align 8, !tbaa !9
  %481 = load ptr, ptr %28, align 8, !tbaa !9
  %482 = load ptr, ptr %51, align 8, !tbaa !9
  %483 = load ptr, ptr %480, align 8, !tbaa !26
  %484 = getelementptr inbounds ptr, ptr %483, i64 4
  %485 = load ptr, ptr %484, align 8
  invoke void %485(ptr noundef nonnull align 8 dereferenceable(336) %480, ptr noundef nonnull align 8 dereferenceable(49) %481, ptr noundef nonnull align 8 dereferenceable(49) %482)
          to label %486 unwind label %540

486:                                              ; preds = %479
  %487 = load ptr, ptr %51, align 8, !tbaa !9
  %488 = load ptr, ptr %31, align 8, !tbaa !9
  %489 = invoke noundef ptr @_ZNK12ElementsData15get_adjElementsEv(ptr noundef nonnull align 8 dereferenceable(336) %488)
          to label %490 unwind label %540

490:                                              ; preds = %486
  %491 = load ptr, ptr %51, align 8, !tbaa !9
  %492 = load ptr, ptr %487, align 8, !tbaa !26
  %493 = getelementptr inbounds ptr, ptr %492, i64 5
  %494 = load ptr, ptr %493, align 8
  invoke void %494(ptr noundef nonnull align 8 dereferenceable(49) %487, ptr noundef nonnull align 8 dereferenceable(49) %489, ptr noundef nonnull align 8 dereferenceable(49) %491)
          to label %495 unwind label %540

495:                                              ; preds = %490
  %496 = load ptr, ptr %51, align 8, !tbaa !9
  %497 = load ptr, ptr %5, align 8, !tbaa !9
  %498 = invoke noundef ptr @_ZNK10dataKeeper17get_displacementsEv(ptr noundef nonnull align 8 dereferenceable(3168) %497)
          to label %499 unwind label %540

499:                                              ; preds = %495
  invoke void @_ZNK6Matrix4copyERS_(ptr noundef nonnull align 8 dereferenceable(49) %496, ptr noundef nonnull align 8 dereferenceable(49) %498)
          to label %500 unwind label %540

500:                                              ; preds = %499
  %501 = load ptr, ptr %51, align 8, !tbaa !9
  %502 = icmp eq ptr %501, null
  br i1 %502, label %507, label %503

503:                                              ; preds = %500
  %504 = load ptr, ptr %501, align 8, !tbaa !26
  %505 = getelementptr inbounds ptr, ptr %504, i64 1
  %506 = load ptr, ptr %505, align 8
  call void %506(ptr noundef nonnull align 8 dereferenceable(49) %501) #7
  br label %507

507:                                              ; preds = %503, %500
  %508 = load ptr, ptr %31, align 8, !tbaa !9
  %509 = icmp eq ptr %508, null
  br i1 %509, label %514, label %510

510:                                              ; preds = %507
  %511 = load ptr, ptr %508, align 8, !tbaa !26
  %512 = getelementptr inbounds ptr, ptr %511, i64 1
  %513 = load ptr, ptr %512, align 8
  call void %513(ptr noundef nonnull align 8 dereferenceable(336) %508) #7
  br label %514

514:                                              ; preds = %510, %507
  %515 = load ptr, ptr %28, align 8, !tbaa !9
  %516 = icmp eq ptr %515, null
  br i1 %516, label %521, label %517

517:                                              ; preds = %514
  %518 = load ptr, ptr %515, align 8, !tbaa !26
  %519 = getelementptr inbounds ptr, ptr %518, i64 1
  %520 = load ptr, ptr %519, align 8
  call void %520(ptr noundef nonnull align 8 dereferenceable(49) %515) #7
  br label %521

521:                                              ; preds = %517, %514
  %522 = load ptr, ptr %29, align 8, !tbaa !9
  %523 = icmp eq ptr %522, null
  br i1 %523, label %528, label %524

524:                                              ; preds = %521
  %525 = load ptr, ptr %522, align 8, !tbaa !26
  %526 = getelementptr inbounds ptr, ptr %525, i64 1
  %527 = load ptr, ptr %526, align 8
  call void %527(ptr noundef nonnull align 8 dereferenceable(49) %522) #7
  br label %528

528:                                              ; preds = %524, %521
  %529 = load ptr, ptr %30, align 8, !tbaa !9
  %530 = icmp eq ptr %529, null
  br i1 %530, label %535, label %531

531:                                              ; preds = %528
  %532 = load ptr, ptr %529, align 8, !tbaa !26
  %533 = getelementptr inbounds ptr, ptr %532, i64 1
  %534 = load ptr, ptr %533, align 8
  call void %534(ptr noundef nonnull align 8 dereferenceable(49) %529) #7
  br label %535

535:                                              ; preds = %531, %528
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #7
  ret void

536:                                              ; preds = %469
  %537 = landingpad { ptr, i32 }
          cleanup
  %538 = extractvalue { ptr, i32 } %537, 0
  store ptr %538, ptr %34, align 8
  %539 = extractvalue { ptr, i32 } %537, 1
  store i32 %539, ptr %35, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %50) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %50) #7
  br label %544

540:                                              ; preds = %499, %495, %490, %486, %479, %476, %473, %470
  %541 = landingpad { ptr, i32 }
          cleanup
  %542 = extractvalue { ptr, i32 } %541, 0
  store ptr %542, ptr %34, align 8
  %543 = extractvalue { ptr, i32 } %541, 1
  store i32 %543, ptr %35, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #7
  br label %544

544:                                              ; preds = %540, %536
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #7
  br label %545

545:                                              ; preds = %544, %376
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #7
  br label %546

546:                                              ; preds = %545, %164
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #7
  br label %547

547:                                              ; preds = %546
  %548 = load ptr, ptr %34, align 8
  %549 = load i32, ptr %35, align 4
  %550 = insertvalue { ptr, i32 } poison, ptr %548, 0
  %551 = insertvalue { ptr, i32 } %550, i32 %549, 1
  resume { ptr, i32 } %551

552:                                              ; preds = %465
  unreachable
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNK10dataKeeper13getMechParamsEv(ptr dead_on_unwind noalias writable sret(%struct.MechanicalParams) align 4, ptr noundef nonnull align 8 dereferenceable(3168)) #2 align 2

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

declare noundef ptr @_ZNK12ElementsData11get_MlocalsEv(ptr noundef nonnull align 8 dereferenceable(336)) #1

declare noundef ptr @_ZNK12ElementsData9get_diagMEv(ptr noundef nonnull align 8 dereferenceable(336)) #1

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

declare noundef ptr @_ZNK12ElementsData11get_ClocalsEv(ptr noundef nonnull align 8 dereferenceable(336)) #1

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 #3 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 #5 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind }
attributes #8 = { noreturn nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"_ZTS11DEVICE_NAME", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{!14, !15, i64 28}
!14 = !{!"_ZTS16MechanicalParams", !15, i64 0, !15, i64 4, !15, i64 8, !15, i64 12, !15, i64 16, !15, i64 20, !15, i64 24, !15, i64 28, !15, i64 32}
!15 = !{!"float", !7, i64 0}
!16 = !{!15, !15, i64 0}
!17 = !{!14, !15, i64 32}
!18 = !{!14, !15, i64 12}
!19 = !{!14, !15, i64 16}
!20 = !{!14, !15, i64 20}
!21 = !{!14, !15, i64 24}
!22 = !{!23, !23, i64 0}
!23 = !{!"long", !7, i64 0}
!24 = !{i8 0, i8 2}
!25 = !{}
!26 = !{!27, !27, i64 0}
!27 = !{!"vtable pointer", !8, i64 0}
!28 = !{!29, !29, i64 0}
!29 = !{!"int", !7, i64 0}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}


; 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.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%struct.WaveletParams = type <{ %"class.std::__cxx11::basic_string", float, float, float, [4 x i8] }>
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%struct.MechanicalParams = type { float, float, float, float, float, float, float, float, float }
%"class.std::allocator" = type { i8 }

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str.8 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [93 x i8], align 1
@__PRETTY_FUNCTION__._Z19gpuCalculateFEM_DYN11DEVICE_NAMER10dataKeeperb = external hidden unnamed_addr constant [58 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [60 x i8], align 1

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

declare noundef ptr @_ZN12ElementsData15setElementsDataE11DEVICE_NAMERK10dataKeeper(i32 noundef, ptr noundef nonnull align 8 dereferenceable(3168)) local_unnamed_addr #1

declare noundef ptr @_ZNK12ElementsData11get_KlocalsEv(ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK10dataKeeper7get_dimEv(ptr noundef nonnull align 8 dereferenceable(3168)) local_unnamed_addr #2 align 2

declare noundef ptr @_ZNK12ElementsData9get_diagKEv(ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK10dataKeeper16getWaveletParamsEv(ptr dead_on_unwind noalias writable sret(%struct.WaveletParams) align 8, ptr noundef nonnull align 8 dereferenceable(3168)) local_unnamed_addr #3 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN13WaveletParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(44)) unnamed_addr #4 align 2

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

declare noundef ptr @_ZNK12ElementsData11get_FlocalsEv(ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #1

declare void @_ZNK6Matrix4copyERS_(ptr noundef nonnull align 8 dereferenceable(49), ptr noundef nonnull align 8 dereferenceable(49)) local_unnamed_addr #1

declare noundef ptr @_ZNK12ElementsData5get_rEv(ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z14gpuPCG_EbE_vecR6Matrix11DEVICE_NAMER10dataKeeperR12ElementsDatabfb(ptr noundef nonnull align 8 dereferenceable(49), i32 noundef, ptr noundef nonnull align 8 dereferenceable(3168), ptr noundef nonnull align 8 dereferenceable(336), i1 noundef zeroext, float noundef, i1 noundef zeroext) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK10dataKeeper17get_displacementsEv(ptr noundef nonnull align 8 dereferenceable(3168)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK10dataKeeper17get_elementsCountEv(ptr noundef nonnull align 8 dereferenceable(3168)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK10dataKeeper14get_nodesCountEv(ptr noundef nonnull align 8 dereferenceable(3168)) local_unnamed_addr #2 align 2

declare noundef ptr @_ZNK12ElementsData5get_xEv(ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #5

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8), float noundef) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #5

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) local_unnamed_addr #1

declare noundef ptr @_ZN6Matrix9setMatrixE11DEVICE_NAMEmm(i32 noundef, i64 noundef, i64 noundef) local_unnamed_addr #1

declare noundef i32 @_ZNK12ElementsData10get_deviceEv(ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #1

declare noundef ptr @_ZNK12ElementsData15get_adjElementsEv(ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
define dso_local void @_Z19gpuCalculateFEM_DYN11DEVICE_NAMER10dataKeeperb(i32 noundef %0, ptr noundef nonnull align 8 dereferenceable(3168) %1, i1 noundef zeroext %2) local_unnamed_addr #3 personality ptr @__gxx_personality_v0 {
  %4 = alloca %struct.MechanicalParams, align 4
  %5 = alloca %struct.MechanicalParams, align 4
  %6 = alloca %struct.MechanicalParams, align 4
  %7 = alloca %struct.MechanicalParams, align 4
  %8 = alloca %struct.MechanicalParams, align 4
  %9 = alloca %struct.MechanicalParams, align 4
  %10 = alloca %struct.MechanicalParams, align 4
  %11 = alloca %struct.WaveletParams, align 8
  %12 = alloca %struct.WaveletParams, align 8
  %13 = alloca %"class.std::__cxx11::basic_string", align 8
  %14 = alloca %"class.std::allocator", align 1
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %4) #7
  call void @_ZNK10dataKeeper13getMechParamsEv(ptr dead_on_unwind nonnull writable sret(%struct.MechanicalParams) align 4 %4, ptr noundef nonnull align 8 dereferenceable(3168) %1)
  %15 = getelementptr inbounds i8, ptr %4, i64 28
  %16 = load float, ptr %15, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %4) #7
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %5) #7
  call void @_ZNK10dataKeeper13getMechParamsEv(ptr dead_on_unwind nonnull writable sret(%struct.MechanicalParams) align 4 %5, ptr noundef nonnull align 8 dereferenceable(3168) %1)
  %17 = getelementptr inbounds i8, ptr %5, i64 32
  %18 = load float, ptr %17, align 4, !tbaa !10
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %5) #7
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %6) #7
  call void @_ZNK10dataKeeper13getMechParamsEv(ptr dead_on_unwind nonnull writable sret(%struct.MechanicalParams) align 4 %6, ptr noundef nonnull align 8 dereferenceable(3168) %1)
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %6) #7
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %7) #7
  call void @_ZNK10dataKeeper13getMechParamsEv(ptr dead_on_unwind nonnull writable sret(%struct.MechanicalParams) align 4 %7, ptr noundef nonnull align 8 dereferenceable(3168) %1)
  %19 = getelementptr inbounds i8, ptr %7, i64 16
  %20 = load float, ptr %19, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %7) #7
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %8) #7
  call void @_ZNK10dataKeeper13getMechParamsEv(ptr dead_on_unwind nonnull writable sret(%struct.MechanicalParams) align 4 %8, ptr noundef nonnull align 8 dereferenceable(3168) %1)
  %21 = getelementptr inbounds i8, ptr %8, i64 20
  %22 = load float, ptr %21, align 4, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %8) #7
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %9) #7
  call void @_ZNK10dataKeeper13getMechParamsEv(ptr dead_on_unwind nonnull writable sret(%struct.MechanicalParams) align 4 %9, ptr noundef nonnull align 8 dereferenceable(3168) %1)
  %23 = getelementptr inbounds i8, ptr %9, i64 24
  %24 = load float, ptr %23, align 4, !tbaa !13
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %9) #7
  %25 = call noundef i64 @_ZNK10dataKeeper17get_elementsCountEv(ptr noundef nonnull align 8 dereferenceable(3168) %1)
  %26 = call noundef i64 @_ZNK10dataKeeper7get_dimEv(ptr noundef nonnull align 8 dereferenceable(3168) %1)
  %27 = fcmp oeq float %18, 0.000000e+00
  %28 = fcmp une float %20, 0.000000e+00
  %or.cond.not = select i1 %27, i1 %28, i1 false
  br i1 %or.cond.not, label %29, label %30

29:                                               ; preds = %3
  call void @__assert_fail(ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.9, i32 noundef 147, ptr noundef nonnull @__PRETTY_FUNCTION__._Z19gpuCalculateFEM_DYN11DEVICE_NAMER10dataKeeperb) #8
  unreachable

30:                                               ; preds = %3
  %31 = mul i64 %26, 6
  %32 = add i64 %31, -6
  %33 = call noundef ptr @_ZN6Matrix9setMatrixE11DEVICE_NAMEmm(i32 noundef %0, i64 noundef %25, i64 noundef %32)
  %34 = call noundef ptr @_ZN6Matrix9setMatrixE11DEVICE_NAMEmm(i32 noundef %0, i64 noundef %25, i64 noundef %32)
  %35 = call noundef ptr @_ZN6Matrix9setMatrixE11DEVICE_NAMEmm(i32 noundef %0, i64 noundef %25, i64 noundef %32)
  %36 = load ptr, ptr %33, align 8, !tbaa !14
  %37 = getelementptr inbounds i8, ptr %36, i64 232
  %38 = load ptr, ptr %37, align 8
  call void %38(ptr noundef nonnull align 8 dereferenceable(49) %33, float noundef 0.000000e+00)
  %39 = load ptr, ptr %34, align 8, !tbaa !14
  %40 = getelementptr inbounds i8, ptr %39, i64 232
  %41 = load ptr, ptr %40, align 8
  call void %41(ptr noundef nonnull align 8 dereferenceable(49) %34, float noundef 0.000000e+00)
  %42 = load ptr, ptr %35, align 8, !tbaa !14
  %43 = getelementptr inbounds i8, ptr %42, i64 232
  %44 = load ptr, ptr %43, align 8
  call void %44(ptr noundef nonnull align 8 dereferenceable(49) %35, float noundef 0.000000e+00)
  %45 = call noundef ptr @_ZN12ElementsData15setElementsDataE11DEVICE_NAMERK10dataKeeper(i32 noundef %0, ptr noundef nonnull align 8 dereferenceable(3168) %1)
  %46 = load ptr, ptr %45, align 8, !tbaa !14
  %47 = getelementptr inbounds i8, ptr %46, i64 144
  %48 = load ptr, ptr %47, align 8
  call void %48(ptr noundef nonnull align 8 dereferenceable(336) %45)
  %49 = load ptr, ptr %45, align 8, !tbaa !14
  %50 = getelementptr inbounds i8, ptr %49, i64 64
  %51 = load ptr, ptr %50, align 8
  call void %51(ptr noundef nonnull align 8 dereferenceable(336) %45)
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %10) #7
  call void @_ZNK10dataKeeper13getMechParamsEv(ptr dead_on_unwind nonnull writable sret(%struct.MechanicalParams) align 4 %10, ptr noundef nonnull align 8 dereferenceable(3168) %1)
  %52 = load ptr, ptr %45, align 8, !tbaa !14
  %53 = getelementptr inbounds i8, ptr %52, i64 208
  %54 = load ptr, ptr %53, align 8
  call void %54(ptr noundef nonnull align 8 dereferenceable(336) %45, i1 noundef zeroext %27, ptr noundef nonnull align 4 dereferenceable(36) %10)
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %10) #7
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %11) #7
  call void @_ZNK10dataKeeper16getWaveletParamsEv(ptr dead_on_unwind nonnull writable sret(%struct.WaveletParams) align 8 %11, ptr noundef nonnull align 8 dereferenceable(3168) %1)
  %55 = load ptr, ptr %45, align 8, !tbaa !14
  %56 = getelementptr inbounds i8, ptr %55, i64 104
  %57 = load ptr, ptr %56, align 8
  invoke void %57(ptr noundef nonnull align 8 dereferenceable(336) %45, float noundef 0.000000e+00, ptr noundef nonnull align 8 dereferenceable(44) %11)
          to label %58 unwind label %61

58:                                               ; preds = %30
  call void @_ZN13WaveletParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(44) %11) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %11) #7
  %59 = call noundef ptr @_ZNK12ElementsData5get_rEv(ptr noundef nonnull align 8 dereferenceable(336) %45)
  %60 = call noundef ptr @_ZNK12ElementsData5get_xEv(ptr noundef nonnull align 8 dereferenceable(336) %45)
  br i1 %27, label %82, label %63

61:                                               ; preds = %30
  %62 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN13WaveletParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(44) %11) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %11) #7
  br label %215

63:                                               ; preds = %58
  %64 = fmul float %18, 5.000000e-01
  %65 = fmul float %64, %22
  %66 = fmul float %22, %65
  %67 = call noundef ptr @_ZNK12ElementsData11get_KlocalsEv(ptr noundef nonnull align 8 dereferenceable(336) %45)
  %68 = call noundef ptr @_ZNK12ElementsData9get_diagKEv(ptr noundef nonnull align 8 dereferenceable(336) %45)
  %69 = load ptr, ptr %67, align 8, !tbaa !14
  %70 = getelementptr inbounds i8, ptr %69, i64 240
  %71 = load ptr, ptr %70, align 8
  call void %71(ptr noundef nonnull align 8 dereferenceable(49) %67, i64 noundef %32, ptr noundef nonnull align 8 dereferenceable(49) %68)
  %72 = call noundef ptr @_ZNK12ElementsData11get_MlocalsEv(ptr noundef nonnull align 8 dereferenceable(336) %45)
  %73 = call noundef ptr @_ZNK12ElementsData9get_diagMEv(ptr noundef nonnull align 8 dereferenceable(336) %45)
  %74 = load ptr, ptr %72, align 8, !tbaa !14
  %75 = getelementptr inbounds i8, ptr %74, i64 240
  %76 = load ptr, ptr %75, align 8
  call void %76(ptr noundef nonnull align 8 dereferenceable(49) %72, i64 noundef %32, ptr noundef nonnull align 8 dereferenceable(49) %73)
  %77 = call noundef ptr @_ZNK12ElementsData9get_diagKEv(ptr noundef nonnull align 8 dereferenceable(336) %45)
  %78 = call noundef ptr @_ZNK12ElementsData9get_diagMEv(ptr noundef nonnull align 8 dereferenceable(336) %45)
  %79 = load ptr, ptr %77, align 8, !tbaa !14
  %80 = getelementptr inbounds i8, ptr %79, i64 160
  %81 = load ptr, ptr %80, align 8
  call void %81(ptr noundef nonnull align 8 dereferenceable(49) %77, ptr noundef nonnull align 8 dereferenceable(49) %78, float noundef %66, float noundef 1.000000e+00)
  br label %82

82:                                               ; preds = %63, %58
  %83 = fcmp olt float %24, 0.000000e+00
  br i1 %83, label %87, label %84

84:                                               ; preds = %82
  %85 = fdiv float %24, %22
  %86 = fptosi float %85 to i32
  br label %93

87:                                               ; preds = %82
  %88 = call noundef float @_ZSt4fabsf(float noundef %24)
  br i1 %2, label %89, label %93

89:                                               ; preds = %87
  %90 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.10)
  %91 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %90, float noundef %88)
  %92 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %91, ptr noundef nonnull @.str.11)
  br label %93

93:                                               ; preds = %87, %89, %84
  %.0178 = phi i32 [ undef, %89 ], [ undef, %87 ], [ %86, %84 ]
  %.0 = phi float [ %88, %89 ], [ %88, %87 ], [ undef, %84 ]
  %94 = fsub float 1.000000e+00, %18
  %95 = fmul float %94, 5.000000e-01
  %96 = fmul float %95, %22
  %97 = fmul float %22, %96
  %98 = fsub float 1.000000e+00, %16
  %99 = fmul float %98, %22
  %100 = fmul float %16, %22
  %101 = fmul float %18, 5.000000e-01
  %102 = fmul float %101, %22
  %103 = fmul float %22, %102
  %104 = fcmp ogt float %.0, 0.000000e+00
  br label %105

105:                                              ; preds = %.backedge, %93
  %.0177 = phi i32 [ 1, %93 ], [ %162, %.backedge ]
  %106 = uitofp nneg i32 %.0177 to float
  %107 = fmul float %22, %106
  br i1 %2, label %108, label %120

108:                                              ; preds = %105
  %109 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.12)
  %110 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %109, i32 noundef %.0177)
  br i1 %83, label %115, label %111

111:                                              ; preds = %108
  %112 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.13)
  %113 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %112, i32 noundef %.0178)
  %114 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %113, ptr noundef nonnull @.str.14)
  br label %115

115:                                              ; preds = %111, %108
  %116 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.14)
  %117 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.15)
  %118 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %117, float noundef %107)
  %119 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %118, ptr noundef nonnull @.str.16)
  br label %120

120:                                              ; preds = %115, %105
  %121 = load ptr, ptr %33, align 8, !tbaa !14
  %122 = getelementptr inbounds i8, ptr %121, i64 160
  %123 = load ptr, ptr %122, align 8
  call void %123(ptr noundef nonnull align 8 dereferenceable(49) %33, ptr noundef nonnull align 8 dereferenceable(49) %34, float noundef 1.000000e+00, float noundef %22)
  %124 = load ptr, ptr %33, align 8, !tbaa !14
  %125 = getelementptr inbounds i8, ptr %124, i64 160
  %126 = load ptr, ptr %125, align 8
  call void %126(ptr noundef nonnull align 8 dereferenceable(49) %33, ptr noundef nonnull align 8 dereferenceable(49) %60, float noundef 1.000000e+00, float noundef %97)
  %127 = load ptr, ptr %34, align 8, !tbaa !14
  %128 = getelementptr inbounds i8, ptr %127, i64 160
  %129 = load ptr, ptr %128, align 8
  call void %129(ptr noundef nonnull align 8 dereferenceable(49) %34, ptr noundef nonnull align 8 dereferenceable(49) %60, float noundef 1.000000e+00, float noundef %99)
  %130 = load ptr, ptr %60, align 8, !tbaa !14
  %131 = getelementptr inbounds i8, ptr %130, i64 232
  %132 = load ptr, ptr %131, align 8
  call void %132(ptr noundef nonnull align 8 dereferenceable(49) %60, float noundef 0.000000e+00)
  %133 = call noundef ptr @_ZNK12ElementsData11get_KlocalsEv(ptr noundef nonnull align 8 dereferenceable(336) %45)
  %134 = load ptr, ptr %59, align 8, !tbaa !14
  %135 = getelementptr inbounds i8, ptr %134, i64 24
  %136 = load ptr, ptr %135, align 8
  call void %136(ptr noundef nonnull align 8 dereferenceable(49) %59, ptr noundef nonnull align 8 dereferenceable(49) %33, i64 noundef 1, i64 noundef %32, i1 noundef zeroext false, ptr noundef nonnull align 8 dereferenceable(49) %133, i64 noundef %32, i1 noundef zeroext false, i64 noundef %25, float noundef 1.000000e+00)
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %12) #7
  call void @_ZNK10dataKeeper16getWaveletParamsEv(ptr dead_on_unwind nonnull writable sret(%struct.WaveletParams) align 8 %12, ptr noundef nonnull align 8 dereferenceable(3168) %1)
  %137 = load ptr, ptr %45, align 8, !tbaa !14
  %138 = getelementptr inbounds i8, ptr %137, i64 112
  %139 = load ptr, ptr %138, align 8
  invoke void %139(ptr noundef nonnull align 8 dereferenceable(336) %45, float noundef %107, ptr noundef nonnull align 8 dereferenceable(44) %12)
          to label %140 unwind label %145

140:                                              ; preds = %120
  call void @_ZN13WaveletParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(44) %12) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %12) #7
  %141 = call noundef ptr @_ZNK12ElementsData11get_FlocalsEv(ptr noundef nonnull align 8 dereferenceable(336) %45)
  %142 = load ptr, ptr %59, align 8, !tbaa !14
  %143 = getelementptr inbounds i8, ptr %142, i64 160
  %144 = load ptr, ptr %143, align 8
  call void %144(ptr noundef nonnull align 8 dereferenceable(49) %59, ptr noundef nonnull align 8 dereferenceable(49) %141, float noundef -1.000000e+00, float noundef 1.000000e+00)
  br i1 %27, label %.thread, label %154

145:                                              ; preds = %120
  %146 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN13WaveletParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(44) %12) #7
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %12) #7
  br label %215

.thread:                                          ; preds = %140
  %147 = call noundef ptr @_ZNK12ElementsData11get_MlocalsEv(ptr noundef nonnull align 8 dereferenceable(336) %45)
  %148 = load ptr, ptr %45, align 8, !tbaa !14
  %149 = getelementptr inbounds i8, ptr %148, i64 200
  %150 = load ptr, ptr %149, align 8
  call void %150(ptr noundef nonnull align 8 dereferenceable(336) %45, ptr noundef nonnull align 8 dereferenceable(49) %147, ptr noundef nonnull align 8 dereferenceable(49) %59, ptr noundef nonnull align 8 dereferenceable(49) %60, i1 noundef zeroext false)
  %151 = load ptr, ptr %34, align 8, !tbaa !14
  %152 = getelementptr inbounds i8, ptr %151, i64 160
  %153 = load ptr, ptr %152, align 8
  call void %153(ptr noundef nonnull align 8 dereferenceable(49) %34, ptr noundef nonnull align 8 dereferenceable(49) %60, float noundef 1.000000e+00, float noundef %100)
  br label %161

154:                                              ; preds = %140
  call void @_Z14gpuPCG_EbE_vecR6Matrix11DEVICE_NAMER10dataKeeperR12ElementsDatabfb(ptr noundef nonnull align 8 dereferenceable(49) %60, i32 noundef %0, ptr noundef nonnull align 8 dereferenceable(3168) %1, ptr noundef nonnull align 8 dereferenceable(336) %45, i1 noundef zeroext false, float noundef 0x3F1A36E2E0000000, i1 noundef zeroext %2)
  %155 = load ptr, ptr %34, align 8, !tbaa !14
  %156 = getelementptr inbounds i8, ptr %155, i64 160
  %157 = load ptr, ptr %156, align 8
  call void %157(ptr noundef nonnull align 8 dereferenceable(49) %34, ptr noundef nonnull align 8 dereferenceable(49) %60, float noundef 1.000000e+00, float noundef %100)
  %158 = load ptr, ptr %33, align 8, !tbaa !14
  %159 = getelementptr inbounds i8, ptr %158, i64 160
  %160 = load ptr, ptr %159, align 8
  call void %160(ptr noundef nonnull align 8 dereferenceable(49) %33, ptr noundef nonnull align 8 dereferenceable(49) %60, float noundef 1.000000e+00, float noundef %103)
  br label %161

161:                                              ; preds = %.thread, %154
  %162 = add nuw nsw i32 %.0177, 1
  br i1 %83, label %163, label %172

163:                                              ; preds = %161
  br i1 %2, label %164, label %171

164:                                              ; preds = %163
  %165 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.17)
  %166 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %165, float noundef 0.000000e+00)
  %167 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %166, ptr noundef nonnull @.str.18)
  %168 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEf(ptr noundef nonnull align 8 dereferenceable(8) %167, float noundef 0.000000e+00)
  %169 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %168, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %170 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %171

171:                                              ; preds = %164, %163
  br i1 %104, label %176, label %.backedge

.backedge:                                        ; preds = %171, %175
  br label %105

172:                                              ; preds = %161
  br i1 %2, label %173, label %175

173:                                              ; preds = %172
  %174 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %175

175:                                              ; preds = %173, %172
  %.not = icmp slt i32 %.0177, %.0178
  br i1 %.not, label %.backedge, label %176

176:                                              ; preds = %171, %175
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %14) #7
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #7
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull @.str.19, ptr noundef nonnull align 1 dereferenceable(1) %14)
          to label %177 unwind label %210

177:                                              ; preds = %176
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #7
  %178 = invoke noundef i32 @_ZNK12ElementsData10get_deviceEv(ptr noundef nonnull align 8 dereferenceable(336) %45)
          to label %179 unwind label %212

179:                                              ; preds = %177
  %180 = call noundef i64 @_ZNK10dataKeeper14get_nodesCountEv(ptr noundef nonnull align 8 dereferenceable(3168) %1)
  %181 = invoke noundef ptr @_ZN6Matrix9setMatrixE11DEVICE_NAMEmm(i32 noundef %178, i64 noundef %180, i64 noundef %26)
          to label %182 unwind label %212

182:                                              ; preds = %179
  %183 = load ptr, ptr %45, align 8, !tbaa !14
  %184 = getelementptr inbounds i8, ptr %183, i64 32
  %185 = load ptr, ptr %184, align 8
  invoke void %185(ptr noundef nonnull align 8 dereferenceable(336) %45, ptr noundef nonnull align 8 dereferenceable(49) %33, ptr noundef nonnull align 8 dereferenceable(49) %181)
          to label %186 unwind label %212

186:                                              ; preds = %182
  %187 = invoke noundef ptr @_ZNK12ElementsData15get_adjElementsEv(ptr noundef nonnull align 8 dereferenceable(336) %45)
          to label %188 unwind label %212

188:                                              ; preds = %186
  %189 = load ptr, ptr %181, align 8, !tbaa !14
  %190 = getelementptr inbounds i8, ptr %189, i64 40
  %191 = load ptr, ptr %190, align 8
  invoke void %191(ptr noundef nonnull align 8 dereferenceable(49) %181, ptr noundef nonnull align 8 dereferenceable(49) %187, ptr noundef nonnull align 8 dereferenceable(49) %181)
          to label %192 unwind label %212

192:                                              ; preds = %188
  %193 = call noundef ptr @_ZNK10dataKeeper17get_displacementsEv(ptr noundef nonnull align 8 dereferenceable(3168) %1)
  invoke void @_ZNK6Matrix4copyERS_(ptr noundef nonnull align 8 dereferenceable(49) %181, ptr noundef nonnull align 8 dereferenceable(49) %193)
          to label %194 unwind label %212

194:                                              ; preds = %192
  %195 = load ptr, ptr %181, align 8, !tbaa !14
  %196 = getelementptr inbounds i8, ptr %195, i64 8
  %197 = load ptr, ptr %196, align 8
  call void %197(ptr noundef nonnull align 8 dereferenceable(49) %181) #7
  %198 = load ptr, ptr %45, align 8, !tbaa !14
  %199 = getelementptr inbounds i8, ptr %198, i64 8
  %200 = load ptr, ptr %199, align 8
  call void %200(ptr noundef nonnull align 8 dereferenceable(336) %45) #7
  %201 = load ptr, ptr %33, align 8, !tbaa !14
  %202 = getelementptr inbounds i8, ptr %201, i64 8
  %203 = load ptr, ptr %202, align 8
  call void %203(ptr noundef nonnull align 8 dereferenceable(49) %33) #7
  %204 = load ptr, ptr %34, align 8, !tbaa !14
  %205 = getelementptr inbounds i8, ptr %204, i64 8
  %206 = load ptr, ptr %205, align 8
  call void %206(ptr noundef nonnull align 8 dereferenceable(49) %34) #7
  %207 = load ptr, ptr %35, align 8, !tbaa !14
  %208 = getelementptr inbounds i8, ptr %207, i64 8
  %209 = load ptr, ptr %208, align 8
  call void %209(ptr noundef nonnull align 8 dereferenceable(49) %35) #7
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #7
  ret void

210:                                              ; preds = %176
  %211 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #7
  br label %214

212:                                              ; preds = %192, %188, %186, %182, %179, %177
  %213 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #7
  br label %214

214:                                              ; preds = %212, %210
  %.pn = phi { ptr, i32 } [ %213, %212 ], [ %211, %210 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #7
  br label %215

215:                                              ; preds = %145, %214, %61
  %.pn.pn.pn = phi { ptr, i32 } [ %62, %61 ], [ %.pn, %214 ], [ %146, %145 ]
  resume { ptr, i32 } %.pn.pn.pn
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNK10dataKeeper13getMechParamsEv(ptr dead_on_unwind noalias writable sret(%struct.MechanicalParams) align 4, ptr noundef nonnull align 8 dereferenceable(3168)) local_unnamed_addr #2 align 2

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

declare noundef ptr @_ZNK12ElementsData11get_MlocalsEv(ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #1

declare noundef ptr @_ZNK12ElementsData9get_diagMEv(ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #1

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 #3 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 #5 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind }
attributes #8 = { noreturn nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 28}
!6 = !{!"_ZTS16MechanicalParams", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32}
!7 = !{!"float", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!6, !7, i64 32}
!11 = !{!6, !7, i64 16}
!12 = !{!6, !7, i64 20}
!13 = !{!6, !7, i64 24}
!14 = !{!15, !15, i64 0}
!15 = !{!"vtable pointer", !9, i64 0}


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