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

; 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.Rcs::ViaPointSequence" = type { ptr, ptr, ptr, ptr, ptr, ptr, i8, i32, %"class.std::vector", %"class.std::vector.0" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl" = type { %"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" }
%"struct.std::_Vector_base<double, std::allocator<double>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct._MatNd = type { ptr, i32, i32, i32, i8 }
%"class.Rcs::ViaPointSequencePlotter" = type { ptr, ptr, i8, [3 x double], [3 x double], double, double }

@stderr = external global ptr, align 8
@.str.2 = external hidden unnamed_addr constant [77 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@RCS_GLOBAL_RLOG_CB = external global ptr, align 8
@RcsLogLevel = external global i32, align 4
@.str.42 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [14 x i8], align 1
@__func__._ZN3Rcs23ViaPointSequencePlotter4plotERKNS_16ViaPointSequenceEdddi = external hidden unnamed_addr constant [5 x i8], align 1
@__const._ZN3Rcs23ViaPointSequencePlotter4plotERKNS_16ViaPointSequenceEdddi.trajFile = external hidden unnamed_addr constant [64 x i8], align 16
@__const._ZN3Rcs23ViaPointSequencePlotter4plotERKNS_16ViaPointSequenceEdddi.viaPosFile = external hidden unnamed_addr constant [64 x i8], align 16
@__const._ZN3Rcs23ViaPointSequencePlotter4plotERKNS_16ViaPointSequenceEdddi.viaVelFile = external hidden unnamed_addr constant [64 x i8], align 16
@__const._ZN3Rcs23ViaPointSequencePlotter4plotERKNS_16ViaPointSequenceEdddi.viaAccFile = external hidden unnamed_addr constant [64 x i8], align 16
@.str.92 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.93 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.94 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.95 = external hidden unnamed_addr constant [236 x i8], align 1
@.str.96 = external hidden unnamed_addr constant [82 x i8], align 1
@.str.97 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.98 = external hidden unnamed_addr constant [93 x i8], align 1

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

; Function Attrs: nounwind
declare i64 @lround(double noundef) #1

declare double @MatNd_get(ptr noundef, i32 noundef, i32 noundef) #2

declare zeroext i1 @Math_isBitSet(i32 noundef, i32 noundef) #2

declare void @MatNd_set(ptr noundef, i32 noundef, i32 noundef, double noundef) #2

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

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

declare void @MatNd_destroy(ptr noundef) #2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i64 @_ZN3Rcs16ViaPointSequence26computeNumberOfConstraintsEPK6_MatNd(ptr noundef) #3 align 2

declare i32 @fflush(ptr noundef) #2

declare ptr @MatNd_create(i32 noundef, i32 noundef) #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3Rcs16ViaPointSequence17computeTrajectoryEP6_MatNdddd(ptr noundef nonnull align 8 dereferenceable(104), ptr noundef, double noundef, double noundef, double noundef) #3 align 2

declare void @MatNd_transposeSelf(ptr noundef) #2

declare zeroext i1 @MatNd_toFile(ptr noundef, ptr noundef) #2

declare void @MatNd_reshape(ptr noundef, i32 noundef, i32 noundef) #2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3Rcs23ViaPointSequencePlotter4plotERKNS_16ViaPointSequenceEdddi(ptr noundef nonnull align 8 dereferenceable(88) %0, ptr noundef nonnull align 8 dereferenceable(104) %1, double noundef %2, double noundef %3, double noundef %4, i32 noundef %5) unnamed_addr #3 align 2 {
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca double, align 8
  %10 = alloca double, align 8
  %11 = alloca double, align 8
  %12 = alloca i32, align 4
  %13 = alloca [64 x i8], align 16
  %14 = alloca ptr, align 8
  %15 = alloca i64, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i64, align 8
  %20 = alloca i32, align 4
  %21 = alloca double, align 8
  %22 = alloca [64 x i8], align 16
  %23 = alloca [64 x i8], align 16
  %24 = alloca [64 x i8], align 16
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  store ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store double %2, ptr %9, align 8, !tbaa !9
  store double %3, ptr %10, align 8, !tbaa !9
  store double %4, ptr %11, align 8, !tbaa !9
  store i32 %5, ptr %12, align 4, !tbaa !11
  %27 = load ptr, ptr %7, align 8
  %28 = load double, ptr %10, align 8, !tbaa !9
  %29 = load double, ptr %9, align 8, !tbaa !9
  %30 = fcmp ole double %28, %29
  br i1 %30, label %31, label %53

31:                                               ; preds = %6
  br label %32

32:                                               ; preds = %31
  %33 = load ptr, ptr @RCS_GLOBAL_RLOG_CB, align 8, !tbaa !5
  %34 = icmp ne ptr %33, null
  br i1 %34, label %35, label %39

35:                                               ; preds = %32
  %36 = load ptr, ptr @RCS_GLOBAL_RLOG_CB, align 8, !tbaa !5
  %37 = load double, ptr %10, align 8, !tbaa !9
  %38 = load double, ptr %9, align 8, !tbaa !9
  call void (i32, ptr, ptr, i32, ptr, ...) %36(i32 noundef 1, ptr noundef @.str.2, ptr noundef @__func__._ZN3Rcs23ViaPointSequencePlotter4plotERKNS_16ViaPointSequenceEdddi, i32 noundef 2308, ptr noundef @.str.48, double noundef %37, double noundef %38)
  br label %39

39:                                               ; preds = %35, %32
  %40 = load i32, ptr @RcsLogLevel, align 4, !tbaa !11
  %41 = icmp sle i32 1, %40
  br i1 %41, label %42, label %51

42:                                               ; preds = %39
  %43 = load ptr, ptr @stderr, align 8, !tbaa !5
  %44 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %43, ptr noundef @.str.42, ptr noundef @.str.2, ptr noundef @__func__._ZN3Rcs23ViaPointSequencePlotter4plotERKNS_16ViaPointSequenceEdddi, i32 noundef 2308) #5
  %45 = load ptr, ptr @stderr, align 8, !tbaa !5
  %46 = load double, ptr %10, align 8, !tbaa !9
  %47 = load double, ptr %9, align 8, !tbaa !9
  %48 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %45, ptr noundef @.str.48, double noundef %46, double noundef %47) #5
  %49 = load ptr, ptr @stderr, align 8, !tbaa !5
  %50 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %49, ptr noundef @.str.4) #5
  br label %51

51:                                               ; preds = %42, %39
  br label %52

52:                                               ; preds = %51
  br label %372

53:                                               ; preds = %6
  %54 = load double, ptr %11, align 8, !tbaa !9
  %55 = fcmp ole double %54, 0.000000e+00
  br i1 %55, label %56, label %76

56:                                               ; preds = %53
  br label %57

57:                                               ; preds = %56
  %58 = load ptr, ptr @RCS_GLOBAL_RLOG_CB, align 8, !tbaa !5
  %59 = icmp ne ptr %58, null
  br i1 %59, label %60, label %63

60:                                               ; preds = %57
  %61 = load ptr, ptr @RCS_GLOBAL_RLOG_CB, align 8, !tbaa !5
  %62 = load double, ptr %11, align 8, !tbaa !9
  call void (i32, ptr, ptr, i32, ptr, ...) %61(i32 noundef 1, ptr noundef @.str.2, ptr noundef @__func__._ZN3Rcs23ViaPointSequencePlotter4plotERKNS_16ViaPointSequenceEdddi, i32 noundef 2314, ptr noundef @.str.49, double noundef %62)
  br label %63

63:                                               ; preds = %60, %57
  %64 = load i32, ptr @RcsLogLevel, align 4, !tbaa !11
  %65 = icmp sle i32 1, %64
  br i1 %65, label %66, label %74

66:                                               ; preds = %63
  %67 = load ptr, ptr @stderr, align 8, !tbaa !5
  %68 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %67, ptr noundef @.str.42, ptr noundef @.str.2, ptr noundef @__func__._ZN3Rcs23ViaPointSequencePlotter4plotERKNS_16ViaPointSequenceEdddi, i32 noundef 2314) #5
  %69 = load ptr, ptr @stderr, align 8, !tbaa !5
  %70 = load double, ptr %11, align 8, !tbaa !9
  %71 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %69, ptr noundef @.str.49, double noundef %70) #5
  %72 = load ptr, ptr @stderr, align 8, !tbaa !5
  %73 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %72, ptr noundef @.str.4) #5
  br label %74

74:                                               ; preds = %66, %63
  br label %75

75:                                               ; preds = %74
  br label %372

76:                                               ; preds = %53
  call void @llvm.lifetime.start.p0(i64 64, ptr %13) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %13, ptr align 16 @__const._ZN3Rcs23ViaPointSequencePlotter4plotERKNS_16ViaPointSequenceEdddi.trajFile, i64 64, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  %77 = load double, ptr %10, align 8, !tbaa !9
  %78 = load double, ptr %9, align 8, !tbaa !9
  %79 = fsub double %77, %78
  %80 = load double, ptr %11, align 8, !tbaa !9
  %81 = fdiv double %79, %80
  %82 = call i64 @lround(double noundef %81) #5
  %83 = mul nsw i64 4, %82
  %84 = trunc i64 %83 to i32
  %85 = call ptr @MatNd_create(i32 noundef 3, i32 noundef %84)
  store ptr %85, ptr %14, align 8, !tbaa !5
  %86 = load ptr, ptr %8, align 8, !tbaa !5
  %87 = load ptr, ptr %14, align 8, !tbaa !5
  %88 = load double, ptr %9, align 8, !tbaa !9
  %89 = load double, ptr %10, align 8, !tbaa !9
  %90 = load double, ptr %11, align 8, !tbaa !9
  call void @_ZNK3Rcs16ViaPointSequence17computeTrajectoryEP6_MatNdddd(ptr noundef nonnull align 8 dereferenceable(104) %86, ptr noundef %87, double noundef %88, double noundef %89, double noundef %90)
  %91 = load ptr, ptr %14, align 8, !tbaa !5
  call void @MatNd_transposeSelf(ptr noundef %91)
  %92 = load ptr, ptr %14, align 8, !tbaa !5
  %93 = getelementptr inbounds [64 x i8], ptr %13, i64 0, i64 0
  %94 = call zeroext i1 @MatNd_toFile(ptr noundef %92, ptr noundef %93)
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  %95 = load ptr, ptr %8, align 8, !tbaa !5
  %96 = getelementptr inbounds %"class.Rcs::ViaPointSequence", ptr %95, i32 0, i32 1
  %97 = load ptr, ptr %96, align 8, !tbaa !13
  %98 = call noundef i64 @_ZN3Rcs16ViaPointSequence26computeNumberOfConstraintsEPK6_MatNd(ptr noundef %97)
  store i64 %98, ptr %15, align 8, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  %99 = load i64, ptr %15, align 8, !tbaa !25
  %100 = trunc i64 %99 to i32
  %101 = call ptr @MatNd_create(i32 noundef %100, i32 noundef 2)
  store ptr %101, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  %102 = load i64, ptr %15, align 8, !tbaa !25
  %103 = trunc i64 %102 to i32
  %104 = call ptr @MatNd_create(i32 noundef %103, i32 noundef 2)
  store ptr %104, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  %105 = load i64, ptr %15, align 8, !tbaa !25
  %106 = trunc i64 %105 to i32
  %107 = call ptr @MatNd_create(i32 noundef %106, i32 noundef 2)
  store ptr %107, ptr %18, align 8, !tbaa !5
  %108 = load ptr, ptr %16, align 8, !tbaa !5
  call void @MatNd_reshape(ptr noundef %108, i32 noundef 0, i32 noundef 2)
  %109 = load ptr, ptr %17, align 8, !tbaa !5
  call void @MatNd_reshape(ptr noundef %109, i32 noundef 0, i32 noundef 2)
  %110 = load ptr, ptr %18, align 8, !tbaa !5
  call void @MatNd_reshape(ptr noundef %110, i32 noundef 0, i32 noundef 2)
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  store i64 0, ptr %19, align 8, !tbaa !25
  br label %111

111:                                              ; preds = %211, %76
  %112 = load i64, ptr %19, align 8, !tbaa !25
  %113 = load ptr, ptr %8, align 8, !tbaa !5
  %114 = getelementptr inbounds %"class.Rcs::ViaPointSequence", ptr %113, i32 0, i32 1
  %115 = load ptr, ptr %114, align 8, !tbaa !13
  %116 = getelementptr inbounds %struct._MatNd, ptr %115, i32 0, i32 1
  %117 = load i32, ptr %116, align 8, !tbaa !27
  %118 = zext i32 %117 to i64
  %119 = icmp ult i64 %112, %118
  br i1 %119, label %121, label %120

120:                                              ; preds = %111
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  br label %214

121:                                              ; preds = %111
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  %122 = load ptr, ptr %8, align 8, !tbaa !5
  %123 = getelementptr inbounds %"class.Rcs::ViaPointSequence", ptr %122, i32 0, i32 1
  %124 = load ptr, ptr %123, align 8, !tbaa !13
  %125 = load i64, ptr %19, align 8, !tbaa !25
  %126 = trunc i64 %125 to i32
  %127 = call double @MatNd_get(ptr noundef %124, i32 noundef %126, i32 noundef 4)
  %128 = call i64 @lround(double noundef %127) #5
  %129 = trunc i64 %128 to i32
  store i32 %129, ptr %20, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  %130 = load ptr, ptr %8, align 8, !tbaa !5
  %131 = getelementptr inbounds %"class.Rcs::ViaPointSequence", ptr %130, i32 0, i32 1
  %132 = load ptr, ptr %131, align 8, !tbaa !13
  %133 = load i64, ptr %19, align 8, !tbaa !25
  %134 = trunc i64 %133 to i32
  %135 = call double @MatNd_get(ptr noundef %132, i32 noundef %134, i32 noundef 0)
  store double %135, ptr %21, align 8, !tbaa !9
  %136 = load i32, ptr %20, align 4, !tbaa !11
  %137 = call zeroext i1 @Math_isBitSet(i32 noundef %136, i32 noundef 0)
  br i1 %137, label %138, label %160

138:                                              ; preds = %121
  %139 = load ptr, ptr %16, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct._MatNd, ptr %139, i32 0, i32 1
  %141 = load i32, ptr %140, align 8, !tbaa !27
  %142 = add i32 %141, 1
  store i32 %142, ptr %140, align 8, !tbaa !27
  %143 = load ptr, ptr %16, align 8, !tbaa !5
  %144 = load ptr, ptr %16, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct._MatNd, ptr %144, i32 0, i32 1
  %146 = load i32, ptr %145, align 8, !tbaa !27
  %147 = sub i32 %146, 1
  %148 = load double, ptr %21, align 8, !tbaa !9
  call void @MatNd_set(ptr noundef %143, i32 noundef %147, i32 noundef 0, double noundef %148)
  %149 = load ptr, ptr %16, align 8, !tbaa !5
  %150 = load ptr, ptr %16, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct._MatNd, ptr %150, i32 0, i32 1
  %152 = load i32, ptr %151, align 8, !tbaa !27
  %153 = sub i32 %152, 1
  %154 = load ptr, ptr %8, align 8, !tbaa !5
  %155 = getelementptr inbounds %"class.Rcs::ViaPointSequence", ptr %154, i32 0, i32 1
  %156 = load ptr, ptr %155, align 8, !tbaa !13
  %157 = load i64, ptr %19, align 8, !tbaa !25
  %158 = trunc i64 %157 to i32
  %159 = call double @MatNd_get(ptr noundef %156, i32 noundef %158, i32 noundef 1)
  call void @MatNd_set(ptr noundef %149, i32 noundef %153, i32 noundef 1, double noundef %159)
  br label %160

160:                                              ; preds = %138, %121
  %161 = load i32, ptr %20, align 4, !tbaa !11
  %162 = call zeroext i1 @Math_isBitSet(i32 noundef %161, i32 noundef 1)
  br i1 %162, label %163, label %185

163:                                              ; preds = %160
  %164 = load ptr, ptr %17, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct._MatNd, ptr %164, i32 0, i32 1
  %166 = load i32, ptr %165, align 8, !tbaa !27
  %167 = add i32 %166, 1
  store i32 %167, ptr %165, align 8, !tbaa !27
  %168 = load ptr, ptr %17, align 8, !tbaa !5
  %169 = load ptr, ptr %17, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct._MatNd, ptr %169, i32 0, i32 1
  %171 = load i32, ptr %170, align 8, !tbaa !27
  %172 = sub i32 %171, 1
  %173 = load double, ptr %21, align 8, !tbaa !9
  call void @MatNd_set(ptr noundef %168, i32 noundef %172, i32 noundef 0, double noundef %173)
  %174 = load ptr, ptr %17, align 8, !tbaa !5
  %175 = load ptr, ptr %17, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct._MatNd, ptr %175, i32 0, i32 1
  %177 = load i32, ptr %176, align 8, !tbaa !27
  %178 = sub i32 %177, 1
  %179 = load ptr, ptr %8, align 8, !tbaa !5
  %180 = getelementptr inbounds %"class.Rcs::ViaPointSequence", ptr %179, i32 0, i32 1
  %181 = load ptr, ptr %180, align 8, !tbaa !13
  %182 = load i64, ptr %19, align 8, !tbaa !25
  %183 = trunc i64 %182 to i32
  %184 = call double @MatNd_get(ptr noundef %181, i32 noundef %183, i32 noundef 2)
  call void @MatNd_set(ptr noundef %174, i32 noundef %178, i32 noundef 1, double noundef %184)
  br label %185

185:                                              ; preds = %163, %160
  %186 = load i32, ptr %20, align 4, !tbaa !11
  %187 = call zeroext i1 @Math_isBitSet(i32 noundef %186, i32 noundef 2)
  br i1 %187, label %188, label %210

188:                                              ; preds = %185
  %189 = load ptr, ptr %18, align 8, !tbaa !5
  %190 = getelementptr inbounds %struct._MatNd, ptr %189, i32 0, i32 1
  %191 = load i32, ptr %190, align 8, !tbaa !27
  %192 = add i32 %191, 1
  store i32 %192, ptr %190, align 8, !tbaa !27
  %193 = load ptr, ptr %18, align 8, !tbaa !5
  %194 = load ptr, ptr %18, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct._MatNd, ptr %194, i32 0, i32 1
  %196 = load i32, ptr %195, align 8, !tbaa !27
  %197 = sub i32 %196, 1
  %198 = load double, ptr %21, align 8, !tbaa !9
  call void @MatNd_set(ptr noundef %193, i32 noundef %197, i32 noundef 0, double noundef %198)
  %199 = load ptr, ptr %18, align 8, !tbaa !5
  %200 = load ptr, ptr %18, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct._MatNd, ptr %200, i32 0, i32 1
  %202 = load i32, ptr %201, align 8, !tbaa !27
  %203 = sub i32 %202, 1
  %204 = load ptr, ptr %8, align 8, !tbaa !5
  %205 = getelementptr inbounds %"class.Rcs::ViaPointSequence", ptr %204, i32 0, i32 1
  %206 = load ptr, ptr %205, align 8, !tbaa !13
  %207 = load i64, ptr %19, align 8, !tbaa !25
  %208 = trunc i64 %207 to i32
  %209 = call double @MatNd_get(ptr noundef %206, i32 noundef %208, i32 noundef 3)
  call void @MatNd_set(ptr noundef %199, i32 noundef %203, i32 noundef 1, double noundef %209)
  br label %210

210:                                              ; preds = %188, %185
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  br label %211

211:                                              ; preds = %210
  %212 = load i64, ptr %19, align 8, !tbaa !25
  %213 = add i64 %212, 1
  store i64 %213, ptr %19, align 8, !tbaa !25
  br label %111, !llvm.loop !29

214:                                              ; preds = %120
  call void @llvm.lifetime.start.p0(i64 64, ptr %22) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %22, ptr align 16 @__const._ZN3Rcs23ViaPointSequencePlotter4plotERKNS_16ViaPointSequenceEdddi.viaPosFile, i64 64, i1 false)
  call void @llvm.lifetime.start.p0(i64 64, ptr %23) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %23, ptr align 16 @__const._ZN3Rcs23ViaPointSequencePlotter4plotERKNS_16ViaPointSequenceEdddi.viaVelFile, i64 64, i1 false)
  call void @llvm.lifetime.start.p0(i64 64, ptr %24) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %24, ptr align 16 @__const._ZN3Rcs23ViaPointSequencePlotter4plotERKNS_16ViaPointSequenceEdddi.viaAccFile, i64 64, i1 false)
  %215 = load ptr, ptr %16, align 8, !tbaa !5
  %216 = getelementptr inbounds [64 x i8], ptr %22, i64 0, i64 0
  %217 = call zeroext i1 @MatNd_toFile(ptr noundef %215, ptr noundef %216)
  %218 = load ptr, ptr %17, align 8, !tbaa !5
  %219 = getelementptr inbounds [64 x i8], ptr %23, i64 0, i64 0
  %220 = call zeroext i1 @MatNd_toFile(ptr noundef %218, ptr noundef %219)
  %221 = load ptr, ptr %18, align 8, !tbaa !5
  %222 = getelementptr inbounds [64 x i8], ptr %24, i64 0, i64 0
  %223 = call zeroext i1 @MatNd_toFile(ptr noundef %221, ptr noundef %222)
  %224 = load ptr, ptr %16, align 8, !tbaa !5
  call void @MatNd_destroy(ptr noundef %224)
  %225 = load ptr, ptr %17, align 8, !tbaa !5
  call void @MatNd_destroy(ptr noundef %225)
  %226 = load ptr, ptr %18, align 8, !tbaa !5
  call void @MatNd_destroy(ptr noundef %226)
  %227 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 2
  %228 = load i8, ptr %227, align 8, !tbaa !31, !range !33, !noundef !34
  %229 = trunc i8 %228 to i1
  %230 = zext i1 %229 to i32
  %231 = icmp eq i32 %230, 1
  br i1 %231, label %232, label %240

232:                                              ; preds = %214
  %233 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 1
  %234 = load ptr, ptr %233, align 8, !tbaa !35
  %235 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 5
  %236 = load double, ptr %235, align 8, !tbaa !36
  %237 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 6
  %238 = load double, ptr %237, align 8, !tbaa !37
  %239 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %234, ptr noundef @.str.92, double noundef %236, double noundef %238) #5
  br label %244

240:                                              ; preds = %214
  %241 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 1
  %242 = load ptr, ptr %241, align 8, !tbaa !35
  %243 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %242, ptr noundef @.str.93) #5
  br label %244

244:                                              ; preds = %240, %232
  %245 = load i32, ptr %12, align 4, !tbaa !11
  %246 = icmp eq i32 %245, 7
  br i1 %246, label %247, label %289

247:                                              ; preds = %244
  %248 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 2
  %249 = load i8, ptr %248, align 8, !tbaa !31, !range !33, !noundef !34
  %250 = trunc i8 %249 to i1
  %251 = zext i1 %250 to i32
  %252 = icmp eq i32 %251, 1
  br i1 %252, label %253, label %279

253:                                              ; preds = %247
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  %254 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 3
  %255 = getelementptr inbounds [3 x double], ptr %254, i64 0, i64 0
  %256 = load double, ptr %255, align 8, !tbaa !9
  %257 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 3
  %258 = getelementptr inbounds [3 x double], ptr %257, i64 0, i64 1
  %259 = load double, ptr %258, align 8, !tbaa !9
  %260 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 3
  %261 = getelementptr inbounds [3 x double], ptr %260, i64 0, i64 2
  %262 = load double, ptr %261, align 8, !tbaa !9
  %263 = call double @Math_fmin3(double noundef %256, double noundef %259, double noundef %262)
  store double %263, ptr %25, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  %264 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 4
  %265 = getelementptr inbounds [3 x double], ptr %264, i64 0, i64 0
  %266 = load double, ptr %265, align 8, !tbaa !9
  %267 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 4
  %268 = getelementptr inbounds [3 x double], ptr %267, i64 0, i64 1
  %269 = load double, ptr %268, align 8, !tbaa !9
  %270 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 4
  %271 = getelementptr inbounds [3 x double], ptr %270, i64 0, i64 2
  %272 = load double, ptr %271, align 8, !tbaa !9
  %273 = call double @Math_fmax3(double noundef %266, double noundef %269, double noundef %272)
  store double %273, ptr %26, align 8, !tbaa !9
  %274 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 1
  %275 = load ptr, ptr %274, align 8, !tbaa !35
  %276 = load double, ptr %25, align 8, !tbaa !9
  %277 = load double, ptr %26, align 8, !tbaa !9
  %278 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %275, ptr noundef @.str.94, double noundef %276, double noundef %277) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  br label %279

279:                                              ; preds = %253, %247
  %280 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 1
  %281 = load ptr, ptr %280, align 8, !tbaa !35
  %282 = getelementptr inbounds [64 x i8], ptr %13, i64 0, i64 0
  %283 = getelementptr inbounds [64 x i8], ptr %13, i64 0, i64 0
  %284 = getelementptr inbounds [64 x i8], ptr %13, i64 0, i64 0
  %285 = getelementptr inbounds [64 x i8], ptr %22, i64 0, i64 0
  %286 = getelementptr inbounds [64 x i8], ptr %23, i64 0, i64 0
  %287 = getelementptr inbounds [64 x i8], ptr %24, i64 0, i64 0
  %288 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %281, ptr noundef @.str.95, ptr noundef %282, ptr noundef %283, ptr noundef %284, ptr noundef %285, ptr noundef %286, ptr noundef %287) #5
  br label %365

289:                                              ; preds = %244
  %290 = load i32, ptr %12, align 4, !tbaa !11
  %291 = call zeroext i1 @Math_isBitSet(i32 noundef %290, i32 noundef 0)
  br i1 %291, label %292, label %314

292:                                              ; preds = %289
  %293 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 2
  %294 = load i8, ptr %293, align 8, !tbaa !31, !range !33, !noundef !34
  %295 = trunc i8 %294 to i1
  %296 = zext i1 %295 to i32
  %297 = icmp eq i32 %296, 1
  br i1 %297, label %298, label %308

298:                                              ; preds = %292
  %299 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 1
  %300 = load ptr, ptr %299, align 8, !tbaa !35
  %301 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 3
  %302 = getelementptr inbounds [3 x double], ptr %301, i64 0, i64 0
  %303 = load double, ptr %302, align 8, !tbaa !9
  %304 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 4
  %305 = getelementptr inbounds [3 x double], ptr %304, i64 0, i64 0
  %306 = load double, ptr %305, align 8, !tbaa !9
  %307 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %300, ptr noundef @.str.94, double noundef %303, double noundef %306) #5
  br label %308

308:                                              ; preds = %298, %292
  %309 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 1
  %310 = load ptr, ptr %309, align 8, !tbaa !35
  %311 = getelementptr inbounds [64 x i8], ptr %13, i64 0, i64 0
  %312 = getelementptr inbounds [64 x i8], ptr %22, i64 0, i64 0
  %313 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %310, ptr noundef @.str.96, ptr noundef %311, ptr noundef %312) #5
  br label %314

314:                                              ; preds = %308, %289
  %315 = load i32, ptr %12, align 4, !tbaa !11
  %316 = call zeroext i1 @Math_isBitSet(i32 noundef %315, i32 noundef 1)
  br i1 %316, label %317, label %339

317:                                              ; preds = %314
  %318 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 2
  %319 = load i8, ptr %318, align 8, !tbaa !31, !range !33, !noundef !34
  %320 = trunc i8 %319 to i1
  %321 = zext i1 %320 to i32
  %322 = icmp eq i32 %321, 1
  br i1 %322, label %323, label %333

323:                                              ; preds = %317
  %324 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 1
  %325 = load ptr, ptr %324, align 8, !tbaa !35
  %326 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 3
  %327 = getelementptr inbounds [3 x double], ptr %326, i64 0, i64 1
  %328 = load double, ptr %327, align 8, !tbaa !9
  %329 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 4
  %330 = getelementptr inbounds [3 x double], ptr %329, i64 0, i64 1
  %331 = load double, ptr %330, align 8, !tbaa !9
  %332 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %325, ptr noundef @.str.94, double noundef %328, double noundef %331) #5
  br label %333

333:                                              ; preds = %323, %317
  %334 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 1
  %335 = load ptr, ptr %334, align 8, !tbaa !35
  %336 = getelementptr inbounds [64 x i8], ptr %13, i64 0, i64 0
  %337 = getelementptr inbounds [64 x i8], ptr %23, i64 0, i64 0
  %338 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %335, ptr noundef @.str.97, ptr noundef %336, ptr noundef %337) #5
  br label %339

339:                                              ; preds = %333, %314
  %340 = load i32, ptr %12, align 4, !tbaa !11
  %341 = call zeroext i1 @Math_isBitSet(i32 noundef %340, i32 noundef 2)
  br i1 %341, label %342, label %364

342:                                              ; preds = %339
  %343 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 2
  %344 = load i8, ptr %343, align 8, !tbaa !31, !range !33, !noundef !34
  %345 = trunc i8 %344 to i1
  %346 = zext i1 %345 to i32
  %347 = icmp eq i32 %346, 1
  br i1 %347, label %348, label %358

348:                                              ; preds = %342
  %349 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 1
  %350 = load ptr, ptr %349, align 8, !tbaa !35
  %351 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 3
  %352 = getelementptr inbounds [3 x double], ptr %351, i64 0, i64 2
  %353 = load double, ptr %352, align 8, !tbaa !9
  %354 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 4
  %355 = getelementptr inbounds [3 x double], ptr %354, i64 0, i64 2
  %356 = load double, ptr %355, align 8, !tbaa !9
  %357 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %350, ptr noundef @.str.94, double noundef %353, double noundef %356) #5
  br label %358

358:                                              ; preds = %348, %342
  %359 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 1
  %360 = load ptr, ptr %359, align 8, !tbaa !35
  %361 = getelementptr inbounds [64 x i8], ptr %13, i64 0, i64 0
  %362 = getelementptr inbounds [64 x i8], ptr %24, i64 0, i64 0
  %363 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %360, ptr noundef @.str.98, ptr noundef %361, ptr noundef %362) #5
  br label %364

364:                                              ; preds = %358, %339
  br label %365

365:                                              ; preds = %364, %279
  %366 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 1
  %367 = load ptr, ptr %366, align 8, !tbaa !35
  %368 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %367, ptr noundef @.str.4) #5
  %369 = getelementptr inbounds %"class.Rcs::ViaPointSequencePlotter", ptr %27, i32 0, i32 1
  %370 = load ptr, ptr %369, align 8, !tbaa !35
  %371 = call i32 @fflush(ptr noundef %370)
  call void @llvm.lifetime.end.p0(i64 64, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr %13) #5
  br label %372

372:                                              ; preds = %365, %75, %52
  ret void
}

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

declare double @Math_fmin3(double noundef, double noundef, double noundef) #2

declare double @Math_fmax3(double noundef, double noundef, double noundef) #2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !6, i64 8}
!14 = !{!"_ZTSN3Rcs16ViaPointSequenceE", !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !15, i64 48, !16, i64 52, !17, i64 56, !21, i64 80}
!15 = !{!"bool", !7, i64 0}
!16 = !{!"_ZTSN3Rcs16ViaPointSequence12ViaPointTypeE", !7, i64 0}
!17 = !{!"_ZTSSt6vectorIiSaIiEE", !18, i64 0}
!18 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!21 = !{!"_ZTSSt6vectorIdSaIdEE", !22, i64 0}
!22 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!25 = !{!26, !26, i64 0}
!26 = !{!"long", !7, i64 0}
!27 = !{!28, !12, i64 8}
!28 = !{!"_ZTS6_MatNd", !6, i64 0, !12, i64 8, !12, i64 12, !12, i64 16, !15, i64 20}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = !{!32, !15, i64 16}
!32 = !{!"_ZTSN3Rcs23ViaPointSequencePlotterE", !6, i64 8, !15, i64 16, !7, i64 24, !7, i64 48, !10, i64 72, !10, i64 80}
!33 = !{i8 0, i8 2}
!34 = !{}
!35 = !{!32, !6, i64 8}
!36 = !{!32, !10, i64 72}
!37 = !{!32, !10, i64 80}


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

@stderr = external local_unnamed_addr global ptr, align 8
@.str.2 = external hidden unnamed_addr constant [77 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@RCS_GLOBAL_RLOG_CB = external local_unnamed_addr global ptr, align 8
@RcsLogLevel = external local_unnamed_addr global i32, align 4
@.str.42 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [14 x i8], align 1
@__func__._ZN3Rcs23ViaPointSequencePlotter4plotERKNS_16ViaPointSequenceEdddi = external hidden unnamed_addr constant [5 x i8], align 1
@__const._ZN3Rcs23ViaPointSequencePlotter4plotERKNS_16ViaPointSequenceEdddi.trajFile = external hidden unnamed_addr constant [64 x i8], align 16
@__const._ZN3Rcs23ViaPointSequencePlotter4plotERKNS_16ViaPointSequenceEdddi.viaPosFile = external hidden unnamed_addr constant [64 x i8], align 16
@__const._ZN3Rcs23ViaPointSequencePlotter4plotERKNS_16ViaPointSequenceEdddi.viaVelFile = external hidden unnamed_addr constant [64 x i8], align 16
@__const._ZN3Rcs23ViaPointSequencePlotter4plotERKNS_16ViaPointSequenceEdddi.viaAccFile = external hidden unnamed_addr constant [64 x i8], align 16
@.str.92 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.93 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.94 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.95 = external hidden unnamed_addr constant [236 x i8], align 1
@.str.96 = external hidden unnamed_addr constant [82 x i8], align 1
@.str.97 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.98 = external hidden unnamed_addr constant [93 x i8], align 1

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

; Function Attrs: nounwind
declare i64 @lround(double noundef) local_unnamed_addr #1

declare double @MatNd_get(ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

declare zeroext i1 @Math_isBitSet(i32 noundef, i32 noundef) local_unnamed_addr #2

declare void @MatNd_set(ptr noundef, i32 noundef, i32 noundef, double noundef) local_unnamed_addr #2

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

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

declare void @MatNd_destroy(ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i64 @_ZN3Rcs16ViaPointSequence26computeNumberOfConstraintsEPK6_MatNd(ptr noundef) local_unnamed_addr #4 align 2

; Function Attrs: nofree nounwind
declare noundef i32 @fflush(ptr nocapture noundef) local_unnamed_addr #3

declare ptr @MatNd_create(i32 noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3Rcs16ViaPointSequence17computeTrajectoryEP6_MatNdddd(ptr noundef nonnull align 8 dereferenceable(104), ptr noundef, double noundef, double noundef, double noundef) local_unnamed_addr #4 align 2

declare void @MatNd_transposeSelf(ptr noundef) local_unnamed_addr #2

declare zeroext i1 @MatNd_toFile(ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @MatNd_reshape(ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3Rcs23ViaPointSequencePlotter4plotERKNS_16ViaPointSequenceEdddi(ptr nocapture noundef nonnull readonly align 8 dereferenceable(88) %0, ptr noundef nonnull align 8 dereferenceable(104) %1, double noundef %2, double noundef %3, double noundef %4, i32 noundef %5) unnamed_addr #4 align 2 {
  %7 = alloca [64 x i8], align 16
  %8 = alloca [64 x i8], align 16
  %9 = alloca [64 x i8], align 16
  %10 = alloca [64 x i8], align 16
  %11 = fcmp ugt double %3, %2
  br i1 %11, label %25, label %12

12:                                               ; preds = %6
  %13 = load ptr, ptr @RCS_GLOBAL_RLOG_CB, align 8, !tbaa !5
  %.not80 = icmp eq ptr %13, null
  br i1 %.not80, label %15, label %14

14:                                               ; preds = %12
  tail call void (i32, ptr, ptr, i32, ptr, ...) %13(i32 noundef 1, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__._ZN3Rcs23ViaPointSequencePlotter4plotERKNS_16ViaPointSequenceEdddi, i32 noundef 2308, ptr noundef nonnull @.str.48, double noundef %3, double noundef %2)
  br label %15

15:                                               ; preds = %14, %12
  %16 = load i32, ptr @RcsLogLevel, align 4, !tbaa !9
  %17 = icmp sgt i32 %16, 0
  br i1 %17, label %18, label %201

18:                                               ; preds = %15
  %19 = load ptr, ptr @stderr, align 8, !tbaa !5
  %20 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %19, ptr noundef nonnull @.str.42, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__._ZN3Rcs23ViaPointSequencePlotter4plotERKNS_16ViaPointSequenceEdddi, i32 noundef 2308) #6
  %21 = load ptr, ptr @stderr, align 8, !tbaa !5
  %22 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %21, ptr noundef nonnull @.str.48, double noundef %3, double noundef %2) #6
  %23 = load ptr, ptr @stderr, align 8, !tbaa !5
  %24 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %23, ptr noundef nonnull @.str.4) #6
  br label %201

25:                                               ; preds = %6
  %26 = fcmp ugt double %4, 0.000000e+00
  br i1 %26, label %40, label %27

27:                                               ; preds = %25
  %28 = load ptr, ptr @RCS_GLOBAL_RLOG_CB, align 8, !tbaa !5
  %.not = icmp eq ptr %28, null
  br i1 %.not, label %30, label %29

29:                                               ; preds = %27
  tail call void (i32, ptr, ptr, i32, ptr, ...) %28(i32 noundef 1, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__._ZN3Rcs23ViaPointSequencePlotter4plotERKNS_16ViaPointSequenceEdddi, i32 noundef 2314, ptr noundef nonnull @.str.49, double noundef %4)
  br label %30

30:                                               ; preds = %29, %27
  %31 = load i32, ptr @RcsLogLevel, align 4, !tbaa !9
  %32 = icmp sgt i32 %31, 0
  br i1 %32, label %33, label %201

33:                                               ; preds = %30
  %34 = load ptr, ptr @stderr, align 8, !tbaa !5
  %35 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %34, ptr noundef nonnull @.str.42, ptr noundef nonnull @.str.2, ptr noundef nonnull @__func__._ZN3Rcs23ViaPointSequencePlotter4plotERKNS_16ViaPointSequenceEdddi, i32 noundef 2314) #6
  %36 = load ptr, ptr @stderr, align 8, !tbaa !5
  %37 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %36, ptr noundef nonnull @.str.49, double noundef %4) #6
  %38 = load ptr, ptr @stderr, align 8, !tbaa !5
  %39 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %38, ptr noundef nonnull @.str.4) #6
  br label %201

40:                                               ; preds = %25
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %7) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(64) %7, ptr noundef nonnull align 16 dereferenceable(64) @__const._ZN3Rcs23ViaPointSequencePlotter4plotERKNS_16ViaPointSequenceEdddi.trajFile, i64 64, i1 false)
  %41 = fsub double %3, %2
  %42 = fdiv double %41, %4
  %43 = tail call i64 @lround(double noundef %42) #7
  %.tr = trunc i64 %43 to i32
  %44 = shl i32 %.tr, 2
  %45 = tail call ptr @MatNd_create(i32 noundef 3, i32 noundef %44)
  tail call void @_ZNK3Rcs16ViaPointSequence17computeTrajectoryEP6_MatNdddd(ptr noundef nonnull align 8 dereferenceable(104) %1, ptr noundef %45, double noundef %2, double noundef %3, double noundef %4)
  tail call void @MatNd_transposeSelf(ptr noundef %45)
  %46 = call zeroext i1 @MatNd_toFile(ptr noundef %45, ptr noundef nonnull %7)
  %47 = getelementptr inbounds i8, ptr %1, i64 8
  %48 = load ptr, ptr %47, align 8, !tbaa !11
  %49 = call noundef i64 @_ZN3Rcs16ViaPointSequence26computeNumberOfConstraintsEPK6_MatNd(ptr noundef %48)
  %50 = trunc i64 %49 to i32
  %51 = call ptr @MatNd_create(i32 noundef %50, i32 noundef 2)
  %52 = call ptr @MatNd_create(i32 noundef %50, i32 noundef 2)
  %53 = call ptr @MatNd_create(i32 noundef %50, i32 noundef 2)
  call void @MatNd_reshape(ptr noundef %51, i32 noundef 0, i32 noundef 2)
  call void @MatNd_reshape(ptr noundef %52, i32 noundef 0, i32 noundef 2)
  call void @MatNd_reshape(ptr noundef %53, i32 noundef 0, i32 noundef 2)
  %54 = load ptr, ptr %47, align 8, !tbaa !11
  %55 = getelementptr inbounds i8, ptr %54, i64 8
  %56 = load i32, ptr %55, align 8, !tbaa !23
  %.not82 = icmp eq i32 %56, 0
  br i1 %.not82, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %40
  %57 = getelementptr inbounds i8, ptr %51, i64 8
  %58 = getelementptr inbounds i8, ptr %52, i64 8
  %59 = getelementptr inbounds i8, ptr %53, i64 8
  br label %68

._crit_edge:                                      ; preds = %102, %40
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %8) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(64) %8, ptr noundef nonnull align 16 dereferenceable(64) @__const._ZN3Rcs23ViaPointSequencePlotter4plotERKNS_16ViaPointSequenceEdddi.viaPosFile, i64 64, i1 false)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %9) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(64) %9, ptr noundef nonnull align 16 dereferenceable(64) @__const._ZN3Rcs23ViaPointSequencePlotter4plotERKNS_16ViaPointSequenceEdddi.viaVelFile, i64 64, i1 false)
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %10) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(64) %10, ptr noundef nonnull align 16 dereferenceable(64) @__const._ZN3Rcs23ViaPointSequencePlotter4plotERKNS_16ViaPointSequenceEdddi.viaAccFile, i64 64, i1 false)
  %60 = call zeroext i1 @MatNd_toFile(ptr noundef %51, ptr noundef nonnull %8)
  %61 = call zeroext i1 @MatNd_toFile(ptr noundef %52, ptr noundef nonnull %9)
  %62 = call zeroext i1 @MatNd_toFile(ptr noundef %53, ptr noundef nonnull %10)
  call void @MatNd_destroy(ptr noundef %51)
  call void @MatNd_destroy(ptr noundef %52)
  call void @MatNd_destroy(ptr noundef %53)
  %63 = getelementptr inbounds i8, ptr %0, i64 16
  %64 = load i8, ptr %63, align 8, !tbaa !25, !range !28, !noundef !29
  %65 = trunc nuw i8 %64 to i1
  %66 = getelementptr inbounds i8, ptr %0, i64 8
  %67 = load ptr, ptr %66, align 8, !tbaa !30
  br i1 %65, label %109, label %115

68:                                               ; preds = %.lr.ph, %102
  %69 = phi ptr [ %54, %.lr.ph ], [ %104, %102 ]
  %.081 = phi i64 [ 0, %.lr.ph ], [ %103, %102 ]
  %70 = trunc nuw i64 %.081 to i32
  %71 = call double @MatNd_get(ptr noundef nonnull %69, i32 noundef %70, i32 noundef 4)
  %72 = call i64 @lround(double noundef %71) #7
  %73 = trunc i64 %72 to i32
  %74 = load ptr, ptr %47, align 8, !tbaa !11
  %75 = call double @MatNd_get(ptr noundef %74, i32 noundef %70, i32 noundef 0)
  %76 = call zeroext i1 @Math_isBitSet(i32 noundef %73, i32 noundef 0)
  br i1 %76, label %77, label %84

77:                                               ; preds = %68
  %78 = load i32, ptr %57, align 8, !tbaa !23
  %79 = add i32 %78, 1
  store i32 %79, ptr %57, align 8, !tbaa !23
  call void @MatNd_set(ptr noundef %51, i32 noundef %78, i32 noundef 0, double noundef %75)
  %80 = load i32, ptr %57, align 8, !tbaa !23
  %81 = add i32 %80, -1
  %82 = load ptr, ptr %47, align 8, !tbaa !11
  %83 = call double @MatNd_get(ptr noundef %82, i32 noundef %70, i32 noundef 1)
  call void @MatNd_set(ptr noundef %51, i32 noundef %81, i32 noundef 1, double noundef %83)
  br label %84

84:                                               ; preds = %77, %68
  %85 = call zeroext i1 @Math_isBitSet(i32 noundef %73, i32 noundef 1)
  br i1 %85, label %86, label %93

86:                                               ; preds = %84
  %87 = load i32, ptr %58, align 8, !tbaa !23
  %88 = add i32 %87, 1
  store i32 %88, ptr %58, align 8, !tbaa !23
  call void @MatNd_set(ptr noundef %52, i32 noundef %87, i32 noundef 0, double noundef %75)
  %89 = load i32, ptr %58, align 8, !tbaa !23
  %90 = add i32 %89, -1
  %91 = load ptr, ptr %47, align 8, !tbaa !11
  %92 = call double @MatNd_get(ptr noundef %91, i32 noundef %70, i32 noundef 2)
  call void @MatNd_set(ptr noundef %52, i32 noundef %90, i32 noundef 1, double noundef %92)
  br label %93

93:                                               ; preds = %86, %84
  %94 = call zeroext i1 @Math_isBitSet(i32 noundef %73, i32 noundef 2)
  br i1 %94, label %95, label %102

95:                                               ; preds = %93
  %96 = load i32, ptr %59, align 8, !tbaa !23
  %97 = add i32 %96, 1
  store i32 %97, ptr %59, align 8, !tbaa !23
  call void @MatNd_set(ptr noundef %53, i32 noundef %96, i32 noundef 0, double noundef %75)
  %98 = load i32, ptr %59, align 8, !tbaa !23
  %99 = add i32 %98, -1
  %100 = load ptr, ptr %47, align 8, !tbaa !11
  %101 = call double @MatNd_get(ptr noundef %100, i32 noundef %70, i32 noundef 3)
  call void @MatNd_set(ptr noundef %53, i32 noundef %99, i32 noundef 1, double noundef %101)
  br label %102

102:                                              ; preds = %95, %93
  %103 = add nuw nsw i64 %.081, 1
  %104 = load ptr, ptr %47, align 8, !tbaa !11
  %105 = getelementptr inbounds i8, ptr %104, i64 8
  %106 = load i32, ptr %105, align 8, !tbaa !23
  %107 = zext i32 %106 to i64
  %108 = icmp ult i64 %103, %107
  br i1 %108, label %68, label %._crit_edge, !llvm.loop !31

109:                                              ; preds = %._crit_edge
  %110 = getelementptr inbounds i8, ptr %0, i64 72
  %111 = load double, ptr %110, align 8, !tbaa !33
  %112 = getelementptr inbounds i8, ptr %0, i64 80
  %113 = load double, ptr %112, align 8, !tbaa !34
  %114 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %67, ptr noundef nonnull @.str.92, double noundef %111, double noundef %113) #7
  br label %117

115:                                              ; preds = %._crit_edge
  %116 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %67, ptr noundef nonnull @.str.93) #7
  br label %117

117:                                              ; preds = %115, %109
  %118 = icmp eq i32 %5, 7
  br i1 %118, label %119, label %144

119:                                              ; preds = %117
  %120 = load i8, ptr %63, align 8, !tbaa !25, !range !28, !noundef !29
  %121 = trunc nuw i8 %120 to i1
  br i1 %121, label %122, label %140

122:                                              ; preds = %119
  %123 = getelementptr inbounds i8, ptr %0, i64 24
  %124 = load double, ptr %123, align 8, !tbaa !35
  %125 = getelementptr inbounds i8, ptr %0, i64 32
  %126 = load double, ptr %125, align 8, !tbaa !35
  %127 = getelementptr inbounds i8, ptr %0, i64 40
  %128 = load double, ptr %127, align 8, !tbaa !35
  %129 = call double @Math_fmin3(double noundef %124, double noundef %126, double noundef %128)
  %130 = getelementptr inbounds i8, ptr %0, i64 48
  %131 = load double, ptr %130, align 8, !tbaa !35
  %132 = getelementptr inbounds i8, ptr %0, i64 56
  %133 = load double, ptr %132, align 8, !tbaa !35
  %134 = getelementptr inbounds i8, ptr %0, i64 64
  %135 = load double, ptr %134, align 8, !tbaa !35
  %136 = call double @Math_fmax3(double noundef %131, double noundef %133, double noundef %135)
  %137 = getelementptr inbounds i8, ptr %0, i64 8
  %138 = load ptr, ptr %137, align 8, !tbaa !30
  %139 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %138, ptr noundef nonnull @.str.94, double noundef %129, double noundef %136) #7
  br label %140

140:                                              ; preds = %122, %119
  %141 = getelementptr inbounds i8, ptr %0, i64 8
  %142 = load ptr, ptr %141, align 8, !tbaa !30
  %143 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %142, ptr noundef nonnull @.str.95, ptr noundef nonnull %7, ptr noundef nonnull %7, ptr noundef nonnull %7, ptr noundef nonnull %8, ptr noundef nonnull %9, ptr noundef nonnull %10) #7
  br label %195

144:                                              ; preds = %117
  %145 = call zeroext i1 @Math_isBitSet(i32 noundef %5, i32 noundef 0)
  br i1 %145, label %146, label %161

146:                                              ; preds = %144
  %147 = load i8, ptr %63, align 8, !tbaa !25, !range !28, !noundef !29
  %148 = trunc nuw i8 %147 to i1
  br i1 %148, label %149, label %157

149:                                              ; preds = %146
  %150 = getelementptr inbounds i8, ptr %0, i64 8
  %151 = load ptr, ptr %150, align 8, !tbaa !30
  %152 = getelementptr inbounds i8, ptr %0, i64 24
  %153 = load double, ptr %152, align 8, !tbaa !35
  %154 = getelementptr inbounds i8, ptr %0, i64 48
  %155 = load double, ptr %154, align 8, !tbaa !35
  %156 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %151, ptr noundef nonnull @.str.94, double noundef %153, double noundef %155) #7
  br label %157

157:                                              ; preds = %149, %146
  %158 = getelementptr inbounds i8, ptr %0, i64 8
  %159 = load ptr, ptr %158, align 8, !tbaa !30
  %160 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %159, ptr noundef nonnull @.str.96, ptr noundef nonnull %7, ptr noundef nonnull %8) #7
  br label %161

161:                                              ; preds = %157, %144
  %162 = call zeroext i1 @Math_isBitSet(i32 noundef %5, i32 noundef 1)
  br i1 %162, label %163, label %178

163:                                              ; preds = %161
  %164 = load i8, ptr %63, align 8, !tbaa !25, !range !28, !noundef !29
  %165 = trunc nuw i8 %164 to i1
  br i1 %165, label %166, label %174

166:                                              ; preds = %163
  %167 = getelementptr inbounds i8, ptr %0, i64 8
  %168 = load ptr, ptr %167, align 8, !tbaa !30
  %169 = getelementptr inbounds i8, ptr %0, i64 32
  %170 = load double, ptr %169, align 8, !tbaa !35
  %171 = getelementptr inbounds i8, ptr %0, i64 56
  %172 = load double, ptr %171, align 8, !tbaa !35
  %173 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %168, ptr noundef nonnull @.str.94, double noundef %170, double noundef %172) #7
  br label %174

174:                                              ; preds = %166, %163
  %175 = getelementptr inbounds i8, ptr %0, i64 8
  %176 = load ptr, ptr %175, align 8, !tbaa !30
  %177 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %176, ptr noundef nonnull @.str.97, ptr noundef nonnull %7, ptr noundef nonnull %9) #7
  br label %178

178:                                              ; preds = %174, %161
  %179 = call zeroext i1 @Math_isBitSet(i32 noundef %5, i32 noundef 2)
  br i1 %179, label %180, label %195

180:                                              ; preds = %178
  %181 = load i8, ptr %63, align 8, !tbaa !25, !range !28, !noundef !29
  %182 = trunc nuw i8 %181 to i1
  br i1 %182, label %183, label %191

183:                                              ; preds = %180
  %184 = getelementptr inbounds i8, ptr %0, i64 8
  %185 = load ptr, ptr %184, align 8, !tbaa !30
  %186 = getelementptr inbounds i8, ptr %0, i64 40
  %187 = load double, ptr %186, align 8, !tbaa !35
  %188 = getelementptr inbounds i8, ptr %0, i64 64
  %189 = load double, ptr %188, align 8, !tbaa !35
  %190 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %185, ptr noundef nonnull @.str.94, double noundef %187, double noundef %189) #7
  br label %191

191:                                              ; preds = %183, %180
  %192 = getelementptr inbounds i8, ptr %0, i64 8
  %193 = load ptr, ptr %192, align 8, !tbaa !30
  %194 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %193, ptr noundef nonnull @.str.98, ptr noundef nonnull %7, ptr noundef nonnull %10) #7
  br label %195

195:                                              ; preds = %178, %191, %140
  %196 = getelementptr inbounds i8, ptr %0, i64 8
  %197 = load ptr, ptr %196, align 8, !tbaa !30
  %198 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %197, ptr noundef nonnull @.str.4) #7
  %199 = load ptr, ptr %196, align 8, !tbaa !30
  %200 = call i32 @fflush(ptr noundef %199)
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %8) #7
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %7) #7
  br label %201

201:                                              ; preds = %33, %30, %18, %15, %195
  ret void
}

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

declare double @Math_fmin3(double noundef, double noundef, double noundef) local_unnamed_addr #2

declare double @Math_fmax3(double noundef, double noundef, double noundef) local_unnamed_addr #2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !6, i64 8}
!12 = !{!"_ZTSN3Rcs16ViaPointSequenceE", !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !13, i64 48, !14, i64 52, !15, i64 56, !19, i64 80}
!13 = !{!"bool", !7, i64 0}
!14 = !{!"_ZTSN3Rcs16ViaPointSequence12ViaPointTypeE", !7, i64 0}
!15 = !{!"_ZTSSt6vectorIiSaIiEE", !16, i64 0}
!16 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!19 = !{!"_ZTSSt6vectorIdSaIdEE", !20, i64 0}
!20 = !{!"_ZTSSt12_Vector_baseIdSaIdEE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE12_Vector_implE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIdSaIdEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!23 = !{!24, !10, i64 8}
!24 = !{!"_ZTS6_MatNd", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !13, i64 20}
!25 = !{!26, !13, i64 16}
!26 = !{!"_ZTSN3Rcs23ViaPointSequencePlotterE", !6, i64 8, !13, i64 16, !7, i64 24, !7, i64 48, !27, i64 72, !27, i64 80}
!27 = !{!"double", !7, i64 0}
!28 = !{i8 0, i8 2}
!29 = !{}
!30 = !{!26, !6, i64 8}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}
!33 = !{!26, !27, i64 72}
!34 = !{!26, !27, i64 80}
!35 = !{!27, !27, i64 0}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass,TailCallElimPass