; LLVM IR from HRI-EU/Rcs :: src/RcsCore (Rcs_shape)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct._RcsShape = type { i32, %struct.HTr, [3 x double], double, i8, i8, ptr, ptr, ptr, ptr, ptr }
%struct.HTr = type { [3 x double], [3 x [3 x double]] }

@RCS_GLOBAL_RLOG_CB = external global ptr, align 8
@RcsLogLevel = external global i32, align 4
@stderr = external global ptr, align 8
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [68 x i8], align 1
@__func__.RcsShape_computeVolume = external hidden unnamed_addr constant [23 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [22 x i8], align 1

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

; Function Attrs: nounwind uwtable
declare dso_local double @Rcs_getOctreeVolume(ptr noundef) #1

; Function Attrs: nounwind uwtable
define dso_local double @RcsShape_computeVolume(ptr noundef %0) #1 {
  %2 = alloca ptr, align 8
  %3 = alloca double, align 8
  %4 = alloca double, align 8
  %5 = alloca double, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #6
  store double 0.000000e+00, ptr %3, align 8, !tbaa !9
  %6 = load ptr, ptr %2, align 8, !tbaa !5
  %7 = getelementptr inbounds %struct._RcsShape, ptr %6, i32 0, i32 0
  %8 = load i32, ptr %7, align 8, !tbaa !11
  switch i32 %8, label %164 [
    i32 0, label %9
    i32 6, label %9
    i32 12, label %9
    i32 13, label %9
    i32 1, label %10
    i32 2, label %33
    i32 3, label %75
    i32 4, label %80
    i32 5, label %95
    i32 7, label %107
    i32 8, label %114
    i32 9, label %126
    i32 10, label %145
    i32 11, label %159
  ]

9:                                                ; preds = %1, %1, %1, %1
  br label %177

10:                                               ; preds = %1
  %11 = load ptr, ptr %2, align 8, !tbaa !5
  %12 = getelementptr inbounds %struct._RcsShape, ptr %11, i32 0, i32 2
  %13 = getelementptr inbounds [3 x double], ptr %12, i64 0, i64 0
  %14 = load double, ptr %13, align 8, !tbaa !9
  %15 = fmul double 0x400921FB54442D18, %14
  %16 = load ptr, ptr %2, align 8, !tbaa !5
  %17 = getelementptr inbounds %struct._RcsShape, ptr %16, i32 0, i32 2
  %18 = getelementptr inbounds [3 x double], ptr %17, i64 0, i64 0
  %19 = load double, ptr %18, align 8, !tbaa !9
  %20 = fmul double %15, %19
  %21 = load ptr, ptr %2, align 8, !tbaa !5
  %22 = getelementptr inbounds %struct._RcsShape, ptr %21, i32 0, i32 2
  %23 = getelementptr inbounds [3 x double], ptr %22, i64 0, i64 2
  %24 = load double, ptr %23, align 8, !tbaa !9
  %25 = fmul double %20, %24
  store double %25, ptr %3, align 8, !tbaa !9
  %26 = load ptr, ptr %2, align 8, !tbaa !5
  %27 = getelementptr inbounds %struct._RcsShape, ptr %26, i32 0, i32 2
  %28 = getelementptr inbounds [3 x double], ptr %27, i64 0, i64 0
  %29 = load double, ptr %28, align 8, !tbaa !9
  %30 = call double @pow(double noundef %29, double noundef 3.000000e+00) #6
  %31 = load double, ptr %3, align 8, !tbaa !9
  %32 = call double @llvm.fmuladd.f64(double 0x4010C152382D7365, double %30, double %31)
  store double %32, ptr %3, align 8, !tbaa !9
  br label %177

33:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #6
  %34 = load ptr, ptr %2, align 8, !tbaa !5
  %35 = getelementptr inbounds %struct._RcsShape, ptr %34, i32 0, i32 2
  %36 = getelementptr inbounds [3 x double], ptr %35, i64 0, i64 2
  %37 = load double, ptr %36, align 8, !tbaa !9
  %38 = fmul double 5.000000e-01, %37
  store double %38, ptr %4, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #6
  %39 = load double, ptr %4, align 8, !tbaa !9
  %40 = fmul double 0x400921FB54442D18, %39
  %41 = load double, ptr %4, align 8, !tbaa !9
  %42 = fmul double %40, %41
  store double %42, ptr %5, align 8, !tbaa !9
  %43 = load ptr, ptr %2, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct._RcsShape, ptr %43, i32 0, i32 2
  %45 = getelementptr inbounds [3 x double], ptr %44, i64 0, i64 0
  %46 = load double, ptr %45, align 8, !tbaa !9
  %47 = load ptr, ptr %2, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct._RcsShape, ptr %47, i32 0, i32 2
  %49 = getelementptr inbounds [3 x double], ptr %48, i64 0, i64 1
  %50 = load double, ptr %49, align 8, !tbaa !9
  %51 = fmul double %46, %50
  %52 = load ptr, ptr %2, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct._RcsShape, ptr %52, i32 0, i32 2
  %54 = getelementptr inbounds [3 x double], ptr %53, i64 0, i64 2
  %55 = load double, ptr %54, align 8, !tbaa !9
  %56 = fmul double %51, %55
  store double %56, ptr %3, align 8, !tbaa !9
  %57 = load double, ptr %5, align 8, !tbaa !9
  %58 = load ptr, ptr %2, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct._RcsShape, ptr %58, i32 0, i32 2
  %60 = getelementptr inbounds [3 x double], ptr %59, i64 0, i64 0
  %61 = load double, ptr %60, align 8, !tbaa !9
  %62 = load double, ptr %3, align 8, !tbaa !9
  %63 = call double @llvm.fmuladd.f64(double %57, double %61, double %62)
  store double %63, ptr %3, align 8, !tbaa !9
  %64 = load double, ptr %5, align 8, !tbaa !9
  %65 = load ptr, ptr %2, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct._RcsShape, ptr %65, i32 0, i32 2
  %67 = getelementptr inbounds [3 x double], ptr %66, i64 0, i64 1
  %68 = load double, ptr %67, align 8, !tbaa !9
  %69 = load double, ptr %3, align 8, !tbaa !9
  %70 = call double @llvm.fmuladd.f64(double %64, double %68, double %69)
  store double %70, ptr %3, align 8, !tbaa !9
  %71 = load double, ptr %4, align 8, !tbaa !9
  %72 = call double @pow(double noundef %71, double noundef 3.000000e+00) #6
  %73 = load double, ptr %3, align 8, !tbaa !9
  %74 = call double @llvm.fmuladd.f64(double 0x4002D97C7F3321D2, double %72, double %73)
  store double %74, ptr %3, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #6
  br label %177

75:                                               ; preds = %1
  %76 = load ptr, ptr %2, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct._RcsShape, ptr %76, i32 0, i32 10
  %78 = load ptr, ptr %77, align 8, !tbaa !16
  %79 = call double @RcsMesh_computeVolume(ptr noundef %78)
  store double %79, ptr %3, align 8, !tbaa !9
  br label %177

80:                                               ; preds = %1
  %81 = load ptr, ptr %2, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct._RcsShape, ptr %81, i32 0, i32 2
  %83 = getelementptr inbounds [3 x double], ptr %82, i64 0, i64 0
  %84 = load double, ptr %83, align 8, !tbaa !9
  %85 = load ptr, ptr %2, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct._RcsShape, ptr %85, i32 0, i32 2
  %87 = getelementptr inbounds [3 x double], ptr %86, i64 0, i64 1
  %88 = load double, ptr %87, align 8, !tbaa !9
  %89 = fmul double %84, %88
  %90 = load ptr, ptr %2, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct._RcsShape, ptr %90, i32 0, i32 2
  %92 = getelementptr inbounds [3 x double], ptr %91, i64 0, i64 2
  %93 = load double, ptr %92, align 8, !tbaa !9
  %94 = fmul double %89, %93
  store double %94, ptr %3, align 8, !tbaa !9
  br label %177

95:                                               ; preds = %1
  %96 = load ptr, ptr %2, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct._RcsShape, ptr %96, i32 0, i32 2
  %98 = getelementptr inbounds [3 x double], ptr %97, i64 0, i64 0
  %99 = load double, ptr %98, align 8, !tbaa !9
  %100 = call double @pow(double noundef %99, double noundef 2.000000e+00) #6
  %101 = fmul double 0x400921FB54442D18, %100
  %102 = load ptr, ptr %2, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct._RcsShape, ptr %102, i32 0, i32 2
  %104 = getelementptr inbounds [3 x double], ptr %103, i64 0, i64 2
  %105 = load double, ptr %104, align 8, !tbaa !9
  %106 = fmul double %101, %105
  store double %106, ptr %3, align 8, !tbaa !9
  br label %177

107:                                              ; preds = %1
  %108 = load ptr, ptr %2, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct._RcsShape, ptr %108, i32 0, i32 2
  %110 = getelementptr inbounds [3 x double], ptr %109, i64 0, i64 0
  %111 = load double, ptr %110, align 8, !tbaa !9
  %112 = call double @pow(double noundef %111, double noundef 3.000000e+00) #6
  %113 = fmul double 0x4010C152382D7365, %112
  store double %113, ptr %3, align 8, !tbaa !9
  br label %177

114:                                              ; preds = %1
  %115 = load ptr, ptr %2, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct._RcsShape, ptr %115, i32 0, i32 2
  %117 = getelementptr inbounds [3 x double], ptr %116, i64 0, i64 0
  %118 = load double, ptr %117, align 8, !tbaa !9
  %119 = call double @pow(double noundef %118, double noundef 2.000000e+00) #6
  %120 = fmul double 0x3FF0C152382D7365, %119
  %121 = load ptr, ptr %2, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct._RcsShape, ptr %121, i32 0, i32 2
  %123 = getelementptr inbounds [3 x double], ptr %122, i64 0, i64 2
  %124 = load double, ptr %123, align 8, !tbaa !9
  %125 = fmul double %120, %124
  store double %125, ptr %3, align 8, !tbaa !9
  br label %177

126:                                              ; preds = %1
  br label %127

127:                                              ; preds = %126
  %128 = load ptr, ptr @RCS_GLOBAL_RLOG_CB, align 8, !tbaa !5
  %129 = icmp ne ptr %128, null
  br i1 %129, label %130, label %132

130:                                              ; preds = %127
  %131 = load ptr, ptr @RCS_GLOBAL_RLOG_CB, align 8, !tbaa !5
  call void (i32, ptr, ptr, i32, ptr, ...) %131(i32 noundef 5, ptr noundef @.str.7, ptr noundef @__func__.RcsShape_computeVolume, i32 noundef 140, ptr noundef @.str.8)
  br label %132

132:                                              ; preds = %130, %127
  %133 = load i32, ptr @RcsLogLevel, align 4, !tbaa !17
  %134 = icmp sle i32 5, %133
  br i1 %134, label %135, label %142

135:                                              ; preds = %132
  %136 = load ptr, ptr @stderr, align 8, !tbaa !5
  %137 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %136, ptr noundef @.str.9, ptr noundef @.str.7, ptr noundef @__func__.RcsShape_computeVolume, i32 noundef 140) #6
  %138 = load ptr, ptr @stderr, align 8, !tbaa !5
  %139 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %138, ptr noundef @.str.8) #6
  %140 = load ptr, ptr @stderr, align 8, !tbaa !5
  %141 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %140, ptr noundef @.str.3) #6
  br label %142

142:                                              ; preds = %135, %132
  br label %143

143:                                              ; preds = %142
  br label %144

144:                                              ; preds = %143
  br label %177

145:                                              ; preds = %1
  %146 = load ptr, ptr %2, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct._RcsShape, ptr %146, i32 0, i32 2
  %148 = getelementptr inbounds [3 x double], ptr %147, i64 0, i64 2
  %149 = load double, ptr %148, align 8, !tbaa !9
  %150 = fdiv double %149, 2.000000e+00
  %151 = call double @pow(double noundef %150, double noundef 2.000000e+00) #6
  %152 = fmul double 0x400921FB54442D18, %151
  %153 = load ptr, ptr %2, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct._RcsShape, ptr %153, i32 0, i32 2
  %155 = getelementptr inbounds [3 x double], ptr %154, i64 0, i64 0
  %156 = load double, ptr %155, align 8, !tbaa !9
  %157 = fmul double 0x401921FB54442D18, %156
  %158 = fmul double %152, %157
  store double %158, ptr %3, align 8, !tbaa !9
  br label %177

159:                                              ; preds = %1
  %160 = load ptr, ptr %2, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct._RcsShape, ptr %160, i32 0, i32 10
  %162 = load ptr, ptr %161, align 8, !tbaa !16
  %163 = call double @Rcs_getOctreeVolume(ptr noundef %162)
  store double %163, ptr %3, align 8, !tbaa !9
  br label %177

164:                                              ; preds = %1
  br label %165

165:                                              ; preds = %164
  %166 = load ptr, ptr @stderr, align 8, !tbaa !5
  %167 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %166, ptr noundef @.str.10, ptr noundef @.str.7, ptr noundef @__func__.RcsShape_computeVolume, i32 noundef 155) #6
  %168 = load ptr, ptr @stderr, align 8, !tbaa !5
  %169 = load ptr, ptr %2, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct._RcsShape, ptr %169, i32 0, i32 0
  %171 = load i32, ptr %170, align 8, !tbaa !11
  %172 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %168, ptr noundef @.str.11, i32 noundef %171) #6
  %173 = load ptr, ptr @stderr, align 8, !tbaa !5
  %174 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %173, ptr noundef @.str.3) #6
  call void @print_trace()
  call void @exit(i32 noundef 1) #7
  unreachable

175:                                              ; No predecessors!
  br label %176

176:                                              ; preds = %175
  br label %177

177:                                              ; preds = %176, %159, %145, %144, %114, %107, %95, %80, %75, %33, %10, %9
  %178 = load double, ptr %3, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #6
  ret double %178
}

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

; Function Attrs: nounwind
declare double @pow(double noundef, double noundef) #0

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #3

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

declare double @RcsMesh_computeVolume(ptr noundef) #4

declare void @print_trace() #4

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) #5

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = !{!12, !13, i64 0}
!12 = !{!"_RcsShape", !13, i64 0, !14, i64 8, !7, i64 104, !10, i64 128, !15, i64 136, !7, i64 137, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176}
!13 = !{!"int", !7, i64 0}
!14 = !{!"", !7, i64 0, !7, i64 24}
!15 = !{!"_Bool", !7, i64 0}
!16 = !{!12, !6, i64 176}
!17 = !{!13, !13, i64 0}


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

@RCS_GLOBAL_RLOG_CB = external local_unnamed_addr global ptr, align 8
@RcsLogLevel = external local_unnamed_addr global i32, align 4
@stderr = external local_unnamed_addr global ptr, align 8
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [68 x i8], align 1
@__func__.RcsShape_computeVolume = external hidden unnamed_addr constant [23 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [22 x i8], align 1

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

; Function Attrs: nounwind uwtable
declare dso_local double @Rcs_getOctreeVolume(ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local double @RcsShape_computeVolume(ptr nocapture noundef readonly %0) local_unnamed_addr #1 {
  %2 = load i32, ptr %0, align 8, !tbaa !5
  switch i32 %2, label %87 [
    i32 0, label %95
    i32 6, label %95
    i32 12, label %95
    i32 13, label %95
    i32 1, label %3
    i32 2, label %13
    i32 3, label %29
    i32 4, label %33
    i32 5, label %42
    i32 7, label %49
    i32 8, label %54
    i32 9, label %61
    i32 10, label %74
    i32 11, label %83
  ]

3:                                                ; preds = %1
  %4 = getelementptr inbounds i8, ptr %0, i64 104
  %5 = load double, ptr %4, align 8, !tbaa !14
  %6 = fmul double %5, 0x400921FB54442D18
  %7 = fmul double %5, %6
  %8 = getelementptr inbounds i8, ptr %0, i64 120
  %9 = load double, ptr %8, align 8, !tbaa !14
  %10 = fmul double %9, %7
  %11 = tail call double @pow(double noundef %5, double noundef 3.000000e+00) #6
  %12 = tail call double @llvm.fmuladd.f64(double %11, double 0x4010C152382D7365, double %10)
  br label %95

13:                                               ; preds = %1
  %14 = getelementptr inbounds i8, ptr %0, i64 104
  %15 = getelementptr inbounds i8, ptr %0, i64 120
  %16 = load double, ptr %15, align 8, !tbaa !14
  %17 = fmul double %16, 5.000000e-01
  %18 = fmul double %17, 0x400921FB54442D18
  %19 = fmul double %17, %18
  %20 = load double, ptr %14, align 8, !tbaa !14
  %21 = getelementptr inbounds i8, ptr %0, i64 112
  %22 = load double, ptr %21, align 8, !tbaa !14
  %23 = fmul double %20, %22
  %24 = fmul double %16, %23
  %25 = tail call double @llvm.fmuladd.f64(double %19, double %20, double %24)
  %26 = tail call double @llvm.fmuladd.f64(double %19, double %22, double %25)
  %27 = tail call double @pow(double noundef %17, double noundef 3.000000e+00) #6
  %28 = tail call double @llvm.fmuladd.f64(double %27, double 0x4002D97C7F3321D2, double %26)
  br label %95

29:                                               ; preds = %1
  %30 = getelementptr inbounds i8, ptr %0, i64 176
  %31 = load ptr, ptr %30, align 8, !tbaa !15
  %32 = tail call double @RcsMesh_computeVolume(ptr noundef %31) #6
  br label %95

33:                                               ; preds = %1
  %34 = getelementptr inbounds i8, ptr %0, i64 104
  %35 = load double, ptr %34, align 8, !tbaa !14
  %36 = getelementptr inbounds i8, ptr %0, i64 112
  %37 = load double, ptr %36, align 8, !tbaa !14
  %38 = fmul double %35, %37
  %39 = getelementptr inbounds i8, ptr %0, i64 120
  %40 = load double, ptr %39, align 8, !tbaa !14
  %41 = fmul double %38, %40
  br label %95

42:                                               ; preds = %1
  %43 = getelementptr inbounds i8, ptr %0, i64 104
  %44 = load double, ptr %43, align 8, !tbaa !14
  %square36 = fmul double %44, %44
  %45 = fmul double %square36, 0x400921FB54442D18
  %46 = getelementptr inbounds i8, ptr %0, i64 120
  %47 = load double, ptr %46, align 8, !tbaa !14
  %48 = fmul double %47, %45
  br label %95

49:                                               ; preds = %1
  %50 = getelementptr inbounds i8, ptr %0, i64 104
  %51 = load double, ptr %50, align 8, !tbaa !14
  %52 = tail call double @pow(double noundef %51, double noundef 3.000000e+00) #6
  %53 = fmul double %52, 0x4010C152382D7365
  br label %95

54:                                               ; preds = %1
  %55 = getelementptr inbounds i8, ptr %0, i64 104
  %56 = load double, ptr %55, align 8, !tbaa !14
  %square35 = fmul double %56, %56
  %57 = fmul double %square35, 0x3FF0C152382D7365
  %58 = getelementptr inbounds i8, ptr %0, i64 120
  %59 = load double, ptr %58, align 8, !tbaa !14
  %60 = fmul double %59, %57
  br label %95

61:                                               ; preds = %1
  %62 = load ptr, ptr @RCS_GLOBAL_RLOG_CB, align 8, !tbaa !16
  %.not = icmp eq ptr %62, null
  br i1 %.not, label %64, label %63

63:                                               ; preds = %61
  tail call void (i32, ptr, ptr, i32, ptr, ...) %62(i32 noundef 5, ptr noundef nonnull @.str.7, ptr noundef nonnull @__func__.RcsShape_computeVolume, i32 noundef 140, ptr noundef nonnull @.str.8) #6
  br label %64

64:                                               ; preds = %63, %61
  %65 = load i32, ptr @RcsLogLevel, align 4, !tbaa !17
  %66 = icmp sgt i32 %65, 4
  br i1 %66, label %67, label %95

67:                                               ; preds = %64
  %68 = load ptr, ptr @stderr, align 8, !tbaa !16
  %69 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %68, ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.7, ptr noundef nonnull @__func__.RcsShape_computeVolume, i32 noundef 140) #7
  %70 = load ptr, ptr @stderr, align 8, !tbaa !16
  %71 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %70, ptr noundef nonnull @.str.8) #7
  %72 = load ptr, ptr @stderr, align 8, !tbaa !16
  %73 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %72, ptr noundef nonnull @.str.3) #7
  br label %95

74:                                               ; preds = %1
  %75 = getelementptr inbounds i8, ptr %0, i64 104
  %76 = getelementptr inbounds i8, ptr %0, i64 120
  %77 = load double, ptr %76, align 8, !tbaa !14
  %78 = fmul double %77, 5.000000e-01
  %square = fmul double %78, %78
  %79 = fmul double %square, 0x400921FB54442D18
  %80 = load double, ptr %75, align 8, !tbaa !14
  %81 = fmul double %80, 0x401921FB54442D18
  %82 = fmul double %81, %79
  br label %95

83:                                               ; preds = %1
  %84 = getelementptr inbounds i8, ptr %0, i64 176
  %85 = load ptr, ptr %84, align 8, !tbaa !15
  %86 = tail call double @Rcs_getOctreeVolume(ptr noundef %85)
  br label %95

87:                                               ; preds = %1
  %88 = load ptr, ptr @stderr, align 8, !tbaa !16
  %89 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %88, ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.7, ptr noundef nonnull @__func__.RcsShape_computeVolume, i32 noundef 155) #7
  %90 = load ptr, ptr @stderr, align 8, !tbaa !16
  %91 = load i32, ptr %0, align 8, !tbaa !5
  %92 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %90, ptr noundef nonnull @.str.11, i32 noundef %91) #7
  %93 = load ptr, ptr @stderr, align 8, !tbaa !16
  %94 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %93, ptr noundef nonnull @.str.3) #7
  tail call void @print_trace() #6
  tail call void @exit(i32 noundef 1) #8
  unreachable

95:                                               ; preds = %64, %67, %1, %1, %1, %1, %83, %74, %54, %49, %42, %33, %29, %13, %3
  %.0 = phi double [ %86, %83 ], [ %82, %74 ], [ 0.000000e+00, %67 ], [ 0.000000e+00, %64 ], [ %60, %54 ], [ %53, %49 ], [ %48, %42 ], [ %41, %33 ], [ %32, %29 ], [ %28, %13 ], [ %12, %3 ], [ 0.000000e+00, %1 ], [ 0.000000e+00, %1 ], [ 0.000000e+00, %1 ], [ 0.000000e+00, %1 ]
  ret double %.0
}

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @pow(double noundef, double noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #3

declare double @RcsMesh_computeVolume(ptr noundef) local_unnamed_addr #4

declare void @print_trace() local_unnamed_addr #4

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) local_unnamed_addr #5

attributes #0 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { 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 #2 = { mustprogress nofree nounwind willreturn memory(write) "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 nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nounwind }
attributes #7 = { cold 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 0}
!6 = !{!"_RcsShape", !7, i64 0, !10, i64 8, !8, i64 104, !11, i64 128, !12, i64 136, !8, i64 137, !13, i64 144, !13, i64 152, !13, i64 160, !13, i64 168, !13, i64 176}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"", !8, i64 0, !8, i64 24}
!11 = !{!"double", !8, i64 0}
!12 = !{!"_Bool", !8, i64 0}
!13 = !{!"any pointer", !8, i64 0}
!14 = !{!11, !11, i64 0}
!15 = !{!6, !13, i64 176}
!16 = !{!13, !13, i64 0}
!17 = !{!7, !7, i64 0}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass