; 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]] }

@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
@.str.10 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [15 x i8], align 1
@__func__.RcsShape_fprintXML = external hidden unnamed_addr constant [19 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [86 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.71 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.73 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.74 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.75 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.76 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.77 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.79 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.80 = external hidden unnamed_addr constant [4 x i8], align 1

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

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

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

declare void @print_trace() #2

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

declare void @Vec3d_copy(ptr noundef, ptr noundef) #2

declare void @Mat3d_toEulerAngles(ptr noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
define dso_local void @RcsShape_fprintXML(ptr noundef %0, ptr noundef %1) #4 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca [256 x i8], align 16
  %6 = alloca [6 x double], align 16
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 256, ptr %5) #6
  %7 = load ptr, ptr %3, align 8, !tbaa !5
  %8 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %7, ptr noundef @.str.41) #6
  %9 = load ptr, ptr %4, align 8, !tbaa !5
  %10 = getelementptr inbounds %struct._RcsShape, ptr %9, i32 0, i32 0
  %11 = load i32, ptr %10, align 8, !tbaa !9
  switch i32 %11, label %72 [
    i32 1, label %12
    i32 2, label %15
    i32 4, label %18
    i32 5, label %21
    i32 3, label %24
    i32 6, label %27
    i32 7, label %30
    i32 8, label %33
    i32 9, label %36
    i32 10, label %39
    i32 11, label %42
    i32 12, label %45
    i32 13, label %48
  ]

12:                                               ; preds = %2
  %13 = load ptr, ptr %3, align 8, !tbaa !5
  %14 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %13, ptr noundef @.str.42) #6
  br label %85

15:                                               ; preds = %2
  %16 = load ptr, ptr %3, align 8, !tbaa !5
  %17 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %16, ptr noundef @.str.43) #6
  br label %85

18:                                               ; preds = %2
  %19 = load ptr, ptr %3, align 8, !tbaa !5
  %20 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %19, ptr noundef @.str.44) #6
  br label %85

21:                                               ; preds = %2
  %22 = load ptr, ptr %3, align 8, !tbaa !5
  %23 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %22, ptr noundef @.str.45) #6
  br label %85

24:                                               ; preds = %2
  %25 = load ptr, ptr %3, align 8, !tbaa !5
  %26 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %25, ptr noundef @.str.46) #6
  br label %85

27:                                               ; preds = %2
  %28 = load ptr, ptr %3, align 8, !tbaa !5
  %29 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %28, ptr noundef @.str.47) #6
  br label %85

30:                                               ; preds = %2
  %31 = load ptr, ptr %3, align 8, !tbaa !5
  %32 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %31, ptr noundef @.str.48) #6
  br label %85

33:                                               ; preds = %2
  %34 = load ptr, ptr %3, align 8, !tbaa !5
  %35 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %34, ptr noundef @.str.49) #6
  br label %85

36:                                               ; preds = %2
  %37 = load ptr, ptr %3, align 8, !tbaa !5
  %38 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %37, ptr noundef @.str.50) #6
  br label %85

39:                                               ; preds = %2
  %40 = load ptr, ptr %3, align 8, !tbaa !5
  %41 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %40, ptr noundef @.str.51) #6
  br label %85

42:                                               ; preds = %2
  %43 = load ptr, ptr %3, align 8, !tbaa !5
  %44 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %43, ptr noundef @.str.52) #6
  br label %85

45:                                               ; preds = %2
  %46 = load ptr, ptr %3, align 8, !tbaa !5
  %47 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %46, ptr noundef @.str.53) #6
  br label %85

48:                                               ; preds = %2
  %49 = load ptr, ptr %3, align 8, !tbaa !5
  %50 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %49, ptr noundef @.str.54) #6
  br label %51

51:                                               ; preds = %48
  %52 = load ptr, ptr %4, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct._RcsShape, ptr %52, i32 0, i32 10
  %54 = load ptr, ptr %53, align 8, !tbaa !15
  %55 = icmp ne ptr %54, null
  br i1 %55, label %63, label %56

56:                                               ; preds = %51
  %57 = load ptr, ptr @stderr, align 8, !tbaa !5
  %58 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %57, ptr noundef @.str.17, ptr noundef @.str.7, ptr noundef @__func__.RcsShape_fprintXML, i32 noundef 832, ptr noundef @.str.55) #6
  %59 = load ptr, ptr @stderr, align 8, !tbaa !5
  %60 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %59, ptr noundef @.str.56) #6
  %61 = load ptr, ptr @stderr, align 8, !tbaa !5
  %62 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %61, ptr noundef @.str.3) #6
  call void @print_trace()
  call void @exit(i32 noundef 1) #7
  unreachable

63:                                               ; preds = %51
  br label %64

64:                                               ; preds = %63
  br label %65

65:                                               ; preds = %64
  %66 = load ptr, ptr %3, align 8, !tbaa !5
  %67 = load ptr, ptr %4, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct._RcsShape, ptr %67, i32 0, i32 10
  %69 = load ptr, ptr %68, align 8, !tbaa !15
  %70 = load i32, ptr %69, align 4, !tbaa !16
  %71 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %66, ptr noundef @.str.57, i32 noundef %70) #6
  br label %85

72:                                               ; preds = %2
  br label %73

73:                                               ; preds = %72
  %74 = load ptr, ptr @stderr, align 8, !tbaa !5
  %75 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %74, ptr noundef @.str.10, ptr noundef @.str.7, ptr noundef @__func__.RcsShape_fprintXML, i32 noundef 837) #6
  %76 = load ptr, ptr @stderr, align 8, !tbaa !5
  %77 = load ptr, ptr %4, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct._RcsShape, ptr %77, i32 0, i32 0
  %79 = load i32, ptr %78, align 8, !tbaa !9
  %80 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %76, ptr noundef @.str.58, i32 noundef %79) #6
  %81 = load ptr, ptr @stderr, align 8, !tbaa !5
  %82 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %81, ptr noundef @.str.3) #6
  call void @print_trace()
  call void @exit(i32 noundef 1) #7
  unreachable

83:                                               ; No predecessors!
  br label %84

84:                                               ; preds = %83
  br label %85

85:                                               ; preds = %84, %65, %45, %42, %39, %36, %33, %30, %27, %24, %21, %18, %15, %12
  %86 = load ptr, ptr %4, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct._RcsShape, ptr %86, i32 0, i32 0
  %88 = load i32, ptr %87, align 8, !tbaa !9
  switch i32 %88, label %140 [
    i32 1, label %89
    i32 5, label %89
    i32 10, label %89
    i32 8, label %89
    i32 7, label %106
    i32 2, label %115
    i32 4, label %115
  ]

89:                                               ; preds = %85, %85, %85, %85
  %90 = load ptr, ptr %3, align 8, !tbaa !5
  %91 = getelementptr inbounds [256 x i8], ptr %5, i64 0, i64 0
  %92 = load ptr, ptr %4, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct._RcsShape, ptr %92, i32 0, i32 2
  %94 = getelementptr inbounds [3 x double], ptr %93, i64 0, i64 2
  %95 = load double, ptr %94, align 8, !tbaa !17
  %96 = call ptr @String_fromDouble(ptr noundef %91, double noundef %95, i32 noundef 6)
  %97 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %90, ptr noundef @.str.59, ptr noundef %96) #6
  %98 = load ptr, ptr %3, align 8, !tbaa !5
  %99 = getelementptr inbounds [256 x i8], ptr %5, i64 0, i64 0
  %100 = load ptr, ptr %4, align 8, !tbaa !5
  %101 = getelementptr inbounds %struct._RcsShape, ptr %100, i32 0, i32 2
  %102 = getelementptr inbounds [3 x double], ptr %101, i64 0, i64 0
  %103 = load double, ptr %102, align 8, !tbaa !17
  %104 = call ptr @String_fromDouble(ptr noundef %99, double noundef %103, i32 noundef 6)
  %105 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %98, ptr noundef @.str.60, ptr noundef %104) #6
  br label %140

106:                                              ; preds = %85
  %107 = load ptr, ptr %3, align 8, !tbaa !5
  %108 = getelementptr inbounds [256 x i8], ptr %5, i64 0, i64 0
  %109 = load ptr, ptr %4, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct._RcsShape, ptr %109, i32 0, i32 2
  %111 = getelementptr inbounds [3 x double], ptr %110, i64 0, i64 0
  %112 = load double, ptr %111, align 8, !tbaa !17
  %113 = call ptr @String_fromDouble(ptr noundef %108, double noundef %112, i32 noundef 6)
  %114 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %107, ptr noundef @.str.60, ptr noundef %113) #6
  br label %140

115:                                              ; preds = %85, %85
  %116 = load ptr, ptr %3, align 8, !tbaa !5
  %117 = getelementptr inbounds [256 x i8], ptr %5, i64 0, i64 0
  %118 = load ptr, ptr %4, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct._RcsShape, ptr %118, i32 0, i32 2
  %120 = getelementptr inbounds [3 x double], ptr %119, i64 0, i64 0
  %121 = load double, ptr %120, align 8, !tbaa !17
  %122 = call ptr @String_fromDouble(ptr noundef %117, double noundef %121, i32 noundef 6)
  %123 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %116, ptr noundef @.str.61, ptr noundef %122) #6
  %124 = load ptr, ptr %3, align 8, !tbaa !5
  %125 = getelementptr inbounds [256 x i8], ptr %5, i64 0, i64 0
  %126 = load ptr, ptr %4, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct._RcsShape, ptr %126, i32 0, i32 2
  %128 = getelementptr inbounds [3 x double], ptr %127, i64 0, i64 1
  %129 = load double, ptr %128, align 8, !tbaa !17
  %130 = call ptr @String_fromDouble(ptr noundef %125, double noundef %129, i32 noundef 6)
  %131 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %124, ptr noundef @.str.62, ptr noundef %130) #6
  %132 = load ptr, ptr %3, align 8, !tbaa !5
  %133 = getelementptr inbounds [256 x i8], ptr %5, i64 0, i64 0
  %134 = load ptr, ptr %4, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct._RcsShape, ptr %134, i32 0, i32 2
  %136 = getelementptr inbounds [3 x double], ptr %135, i64 0, i64 2
  %137 = load double, ptr %136, align 8, !tbaa !17
  %138 = call ptr @String_fromDouble(ptr noundef %133, double noundef %137, i32 noundef 6)
  %139 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %132, ptr noundef @.str.63, ptr noundef %138) #6
  br label %140

140:                                              ; preds = %115, %106, %89, %85
  %141 = load ptr, ptr %4, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct._RcsShape, ptr %141, i32 0, i32 0
  %143 = load i32, ptr %142, align 8, !tbaa !9
  %144 = icmp ne i32 %143, 6
  br i1 %144, label %145, label %185

145:                                              ; preds = %140
  %146 = load ptr, ptr %4, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct._RcsShape, ptr %146, i32 0, i32 5
  %148 = load i8, ptr %147, align 1, !tbaa !18
  %149 = sext i8 %148 to i32
  %150 = and i32 %149, 1
  %151 = icmp ne i32 %150, 0
  br i1 %151, label %152, label %155

152:                                              ; preds = %145
  %153 = load ptr, ptr %3, align 8, !tbaa !5
  %154 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %153, ptr noundef @.str.64) #6
  br label %158

155:                                              ; preds = %145
  %156 = load ptr, ptr %3, align 8, !tbaa !5
  %157 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %156, ptr noundef @.str.65) #6
  br label %158

158:                                              ; preds = %155, %152
  %159 = load ptr, ptr %4, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct._RcsShape, ptr %159, i32 0, i32 5
  %161 = load i8, ptr %160, align 1, !tbaa !18
  %162 = sext i8 %161 to i32
  %163 = and i32 %162, 2
  %164 = icmp ne i32 %163, 0
  br i1 %164, label %165, label %168

165:                                              ; preds = %158
  %166 = load ptr, ptr %3, align 8, !tbaa !5
  %167 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %166, ptr noundef @.str.66) #6
  br label %171

168:                                              ; preds = %158
  %169 = load ptr, ptr %3, align 8, !tbaa !5
  %170 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %169, ptr noundef @.str.67) #6
  br label %171

171:                                              ; preds = %168, %165
  %172 = load ptr, ptr %4, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct._RcsShape, ptr %172, i32 0, i32 5
  %174 = load i8, ptr %173, align 1, !tbaa !18
  %175 = sext i8 %174 to i32
  %176 = and i32 %175, 4
  %177 = icmp ne i32 %176, 0
  br i1 %177, label %178, label %181

178:                                              ; preds = %171
  %179 = load ptr, ptr %3, align 8, !tbaa !5
  %180 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %179, ptr noundef @.str.68) #6
  br label %184

181:                                              ; preds = %171
  %182 = load ptr, ptr %3, align 8, !tbaa !5
  %183 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %182, ptr noundef @.str.69) #6
  br label %184

184:                                              ; preds = %181, %178
  br label %185

185:                                              ; preds = %184, %140
  %186 = load ptr, ptr %4, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct._RcsShape, ptr %186, i32 0, i32 4
  %188 = load i8, ptr %187, align 8, !tbaa !19, !range !20, !noundef !21
  %189 = trunc i8 %188 to i1
  br i1 %189, label %190, label %193

190:                                              ; preds = %185
  %191 = load ptr, ptr %3, align 8, !tbaa !5
  %192 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %191, ptr noundef @.str.70) #6
  br label %193

193:                                              ; preds = %190, %185
  %194 = load ptr, ptr %4, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct._RcsShape, ptr %194, i32 0, i32 3
  %196 = load double, ptr %195, align 8, !tbaa !22
  %197 = fcmp une double %196, 1.000000e+00
  br i1 %197, label %198, label %206

198:                                              ; preds = %193
  %199 = load ptr, ptr %3, align 8, !tbaa !5
  %200 = getelementptr inbounds [256 x i8], ptr %5, i64 0, i64 0
  %201 = load ptr, ptr %4, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct._RcsShape, ptr %201, i32 0, i32 3
  %203 = load double, ptr %202, align 8, !tbaa !22
  %204 = call ptr @String_fromDouble(ptr noundef %200, double noundef %203, i32 noundef 6)
  %205 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %199, ptr noundef @.str.71, ptr noundef %204) #6
  br label %206

206:                                              ; preds = %198, %193
  call void @llvm.lifetime.start.p0(i64 48, ptr %6) #6
  %207 = getelementptr inbounds [6 x double], ptr %6, i64 0, i64 0
  %208 = load ptr, ptr %4, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct._RcsShape, ptr %208, i32 0, i32 1
  %210 = getelementptr inbounds %struct.HTr, ptr %209, i32 0, i32 0
  %211 = getelementptr inbounds [3 x double], ptr %210, i64 0, i64 0
  call void @Vec3d_copy(ptr noundef %207, ptr noundef %211)
  %212 = getelementptr inbounds [6 x double], ptr %6, i64 0, i64 3
  %213 = load ptr, ptr %4, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct._RcsShape, ptr %213, i32 0, i32 1
  %215 = getelementptr inbounds %struct.HTr, ptr %214, i32 0, i32 1
  %216 = getelementptr inbounds [3 x [3 x double]], ptr %215, i64 0, i64 0
  call void @Mat3d_toEulerAngles(ptr noundef %212, ptr noundef %216)
  %217 = getelementptr inbounds [6 x double], ptr %6, i64 0, i64 3
  call void @Vec3d_constMulSelf(ptr noundef %217, double noundef 0x404CA5DC1A63C1F8)
  %218 = getelementptr inbounds [6 x double], ptr %6, i64 0, i64 0
  %219 = call double @VecNd_maxAbsEle(ptr noundef %218, i32 noundef 6)
  %220 = fcmp ogt double %219, 1.000000e-08
  br i1 %220, label %221, label %258

221:                                              ; preds = %206
  %222 = load ptr, ptr %3, align 8, !tbaa !5
  %223 = getelementptr inbounds [256 x i8], ptr %5, i64 0, i64 0
  %224 = getelementptr inbounds [6 x double], ptr %6, i64 0, i64 0
  %225 = load double, ptr %224, align 16, !tbaa !17
  %226 = call ptr @String_fromDouble(ptr noundef %223, double noundef %225, i32 noundef 6)
  %227 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %222, ptr noundef @.str.72, ptr noundef %226) #6
  %228 = load ptr, ptr %3, align 8, !tbaa !5
  %229 = getelementptr inbounds [256 x i8], ptr %5, i64 0, i64 0
  %230 = getelementptr inbounds [6 x double], ptr %6, i64 0, i64 1
  %231 = load double, ptr %230, align 8, !tbaa !17
  %232 = call ptr @String_fromDouble(ptr noundef %229, double noundef %231, i32 noundef 6)
  %233 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %228, ptr noundef @.str.62, ptr noundef %232) #6
  %234 = load ptr, ptr %3, align 8, !tbaa !5
  %235 = getelementptr inbounds [256 x i8], ptr %5, i64 0, i64 0
  %236 = getelementptr inbounds [6 x double], ptr %6, i64 0, i64 2
  %237 = load double, ptr %236, align 16, !tbaa !17
  %238 = call ptr @String_fromDouble(ptr noundef %235, double noundef %237, i32 noundef 6)
  %239 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %234, ptr noundef @.str.62, ptr noundef %238) #6
  %240 = load ptr, ptr %3, align 8, !tbaa !5
  %241 = getelementptr inbounds [256 x i8], ptr %5, i64 0, i64 0
  %242 = getelementptr inbounds [6 x double], ptr %6, i64 0, i64 3
  %243 = load double, ptr %242, align 8, !tbaa !17
  %244 = call ptr @String_fromDouble(ptr noundef %241, double noundef %243, i32 noundef 6)
  %245 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %240, ptr noundef @.str.62, ptr noundef %244) #6
  %246 = load ptr, ptr %3, align 8, !tbaa !5
  %247 = getelementptr inbounds [256 x i8], ptr %5, i64 0, i64 0
  %248 = getelementptr inbounds [6 x double], ptr %6, i64 0, i64 4
  %249 = load double, ptr %248, align 16, !tbaa !17
  %250 = call ptr @String_fromDouble(ptr noundef %247, double noundef %249, i32 noundef 6)
  %251 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %246, ptr noundef @.str.62, ptr noundef %250) #6
  %252 = load ptr, ptr %3, align 8, !tbaa !5
  %253 = getelementptr inbounds [256 x i8], ptr %5, i64 0, i64 0
  %254 = getelementptr inbounds [6 x double], ptr %6, i64 0, i64 5
  %255 = load double, ptr %254, align 8, !tbaa !17
  %256 = call ptr @String_fromDouble(ptr noundef %253, double noundef %255, i32 noundef 6)
  %257 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %252, ptr noundef @.str.63, ptr noundef %256) #6
  br label %258

258:                                              ; preds = %221, %206
  call void @llvm.lifetime.end.p0(i64 48, ptr %6) #6
  %259 = load ptr, ptr %4, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct._RcsShape, ptr %259, i32 0, i32 6
  %261 = load ptr, ptr %260, align 8, !tbaa !23
  %262 = icmp ne ptr %261, null
  br i1 %262, label %263, label %281

263:                                              ; preds = %258
  %264 = load ptr, ptr %4, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct._RcsShape, ptr %264, i32 0, i32 0
  %266 = load i32, ptr %265, align 8, !tbaa !9
  %267 = icmp eq i32 %266, 9
  br i1 %267, label %268, label %274

268:                                              ; preds = %263
  %269 = load ptr, ptr %3, align 8, !tbaa !5
  %270 = load ptr, ptr %4, align 8, !tbaa !5
  %271 = getelementptr inbounds %struct._RcsShape, ptr %270, i32 0, i32 6
  %272 = load ptr, ptr %271, align 8, !tbaa !23
  %273 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %269, ptr noundef @.str.73, ptr noundef %272) #6
  br label %280

274:                                              ; preds = %263
  %275 = load ptr, ptr %3, align 8, !tbaa !5
  %276 = load ptr, ptr %4, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct._RcsShape, ptr %276, i32 0, i32 6
  %278 = load ptr, ptr %277, align 8, !tbaa !23
  %279 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %275, ptr noundef @.str.74, ptr noundef %278) #6
  br label %280

280:                                              ; preds = %274, %268
  br label %281

281:                                              ; preds = %280, %258
  %282 = load ptr, ptr %4, align 8, !tbaa !5
  %283 = getelementptr inbounds %struct._RcsShape, ptr %282, i32 0, i32 7
  %284 = load ptr, ptr %283, align 8, !tbaa !24
  %285 = icmp ne ptr %284, null
  br i1 %285, label %286, label %292

286:                                              ; preds = %281
  %287 = load ptr, ptr %3, align 8, !tbaa !5
  %288 = load ptr, ptr %4, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct._RcsShape, ptr %288, i32 0, i32 7
  %290 = load ptr, ptr %289, align 8, !tbaa !24
  %291 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %287, ptr noundef @.str.75, ptr noundef %290) #6
  br label %292

292:                                              ; preds = %286, %281
  %293 = load ptr, ptr %4, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct._RcsShape, ptr %293, i32 0, i32 0
  %295 = load i32, ptr %294, align 8, !tbaa !9
  %296 = icmp ne i32 %295, 6
  br i1 %296, label %297, label %314

297:                                              ; preds = %292
  %298 = load ptr, ptr %4, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct._RcsShape, ptr %298, i32 0, i32 8
  %300 = load ptr, ptr %299, align 8, !tbaa !25
  %301 = icmp ne ptr %300, null
  br i1 %301, label %302, label %314

302:                                              ; preds = %297
  %303 = load ptr, ptr %4, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct._RcsShape, ptr %303, i32 0, i32 8
  %305 = load ptr, ptr %304, align 8, !tbaa !25
  %306 = call i32 @strcmp(ptr noundef %305, ptr noundef @.str.76) #8
  %307 = icmp eq i32 %306, 0
  br i1 %307, label %314, label %308

308:                                              ; preds = %302
  %309 = load ptr, ptr %3, align 8, !tbaa !5
  %310 = load ptr, ptr %4, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct._RcsShape, ptr %310, i32 0, i32 8
  %312 = load ptr, ptr %311, align 8, !tbaa !25
  %313 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %309, ptr noundef @.str.77, ptr noundef %312) #6
  br label %314

314:                                              ; preds = %308, %302, %297, %292
  %315 = load ptr, ptr %4, align 8, !tbaa !5
  %316 = getelementptr inbounds %struct._RcsShape, ptr %315, i32 0, i32 9
  %317 = load ptr, ptr %316, align 8, !tbaa !26
  %318 = icmp ne ptr %317, null
  br i1 %318, label %319, label %331

319:                                              ; preds = %314
  %320 = load ptr, ptr %4, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct._RcsShape, ptr %320, i32 0, i32 9
  %322 = load ptr, ptr %321, align 8, !tbaa !26
  %323 = call i32 @strcmp(ptr noundef %322, ptr noundef @.str.78) #8
  %324 = icmp eq i32 %323, 0
  br i1 %324, label %331, label %325

325:                                              ; preds = %319
  %326 = load ptr, ptr %3, align 8, !tbaa !5
  %327 = load ptr, ptr %4, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct._RcsShape, ptr %327, i32 0, i32 9
  %329 = load ptr, ptr %328, align 8, !tbaa !26
  %330 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %326, ptr noundef @.str.79, ptr noundef %329) #6
  br label %331

331:                                              ; preds = %325, %319, %314
  %332 = load ptr, ptr %3, align 8, !tbaa !5
  %333 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %332, ptr noundef @.str.80) #6
  call void @llvm.lifetime.end.p0(i64 256, ptr %5) #6
  ret void
}

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

declare void @Vec3d_constMulSelf(ptr noundef, double noundef) #2

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

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strcmp(ptr noundef, ptr 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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 #4 = { 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 = { nounwind willreturn memory(read) "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 }
attributes #8 = { nounwind willreturn memory(read) }

!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, !11, i64 0}
!10 = !{!"_RcsShape", !11, i64 0, !12, i64 8, !7, i64 104, !13, i64 128, !14, i64 136, !7, i64 137, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176}
!11 = !{!"int", !7, i64 0}
!12 = !{!"", !7, i64 0, !7, i64 24}
!13 = !{!"double", !7, i64 0}
!14 = !{!"_Bool", !7, i64 0}
!15 = !{!10, !6, i64 176}
!16 = !{!11, !11, i64 0}
!17 = !{!13, !13, i64 0}
!18 = !{!10, !7, i64 137}
!19 = !{!10, !14, i64 136}
!20 = !{i8 0, i8 2}
!21 = !{}
!22 = !{!10, !13, i64 128}
!23 = !{!10, !6, i64 144}
!24 = !{!10, !6, i64 152}
!25 = !{!10, !6, i64 160}
!26 = !{!10, !6, i64 168}


; 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.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.50 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.52 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.53 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [15 x i8], align 1
@__func__.RcsShape_fprintXML = external hidden unnamed_addr constant [19 x i8], align 1
@.str.55 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.56 = external hidden unnamed_addr constant [86 x i8], align 1
@.str.57 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.58 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.62 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.63 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.64 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.65 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.67 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.68 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.70 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.71 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.73 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.74 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.75 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.76 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.77 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.79 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.80 = external hidden unnamed_addr constant [4 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: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #1

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

declare void @print_trace() local_unnamed_addr #2

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

declare void @Vec3d_copy(ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @Mat3d_toEulerAngles(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local void @RcsShape_fprintXML(ptr nocapture noundef %0, ptr noundef %1) local_unnamed_addr #4 {
  %3 = alloca [256 x i8], align 16
  %4 = alloca [6 x double], align 16
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %3) #6
  %5 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.41) #6
  %6 = load i32, ptr %1, align 8, !tbaa !5
  switch i32 %6, label %45 [
    i32 1, label %7
    i32 2, label %9
    i32 4, label %11
    i32 5, label %13
    i32 3, label %15
    i32 6, label %17
    i32 7, label %19
    i32 8, label %21
    i32 9, label %23
    i32 10, label %25
    i32 11, label %27
    i32 12, label %29
    i32 13, label %31
  ]

7:                                                ; preds = %2
  %8 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.42) #6
  br label %53

9:                                                ; preds = %2
  %10 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.43) #6
  br label %53

11:                                               ; preds = %2
  %12 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.44) #6
  br label %53

13:                                               ; preds = %2
  %14 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.45) #6
  br label %53

15:                                               ; preds = %2
  %16 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.46) #6
  br label %53

17:                                               ; preds = %2
  %18 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.47) #6
  br label %53

19:                                               ; preds = %2
  %20 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.48) #6
  br label %53

21:                                               ; preds = %2
  %22 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.49) #6
  br label %53

23:                                               ; preds = %2
  %24 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.50) #6
  br label %53

25:                                               ; preds = %2
  %26 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.51) #6
  br label %53

27:                                               ; preds = %2
  %28 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.52) #6
  br label %53

29:                                               ; preds = %2
  %30 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.53) #6
  br label %53

31:                                               ; preds = %2
  %32 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.54) #6
  %33 = getelementptr inbounds i8, ptr %1, i64 176
  %34 = load ptr, ptr %33, align 8, !tbaa !14
  %.not = icmp eq ptr %34, null
  br i1 %.not, label %35, label %42

35:                                               ; preds = %31
  %36 = load ptr, ptr @stderr, align 8, !tbaa !15
  %37 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %36, ptr noundef nonnull @.str.17, ptr noundef nonnull @.str.7, ptr noundef nonnull @__func__.RcsShape_fprintXML, i32 noundef 832, ptr noundef nonnull @.str.55) #7
  %38 = load ptr, ptr @stderr, align 8, !tbaa !15
  %39 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %38, ptr noundef nonnull @.str.56) #7
  %40 = load ptr, ptr @stderr, align 8, !tbaa !15
  %41 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %40, ptr noundef nonnull @.str.3) #7
  tail call void @print_trace() #6
  tail call void @exit(i32 noundef 1) #8
  unreachable

42:                                               ; preds = %31
  %43 = load i32, ptr %34, align 4, !tbaa !16
  %44 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.57, i32 noundef %43) #6
  br label %53

45:                                               ; preds = %2
  %46 = load ptr, ptr @stderr, align 8, !tbaa !15
  %47 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %46, ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.7, ptr noundef nonnull @__func__.RcsShape_fprintXML, i32 noundef 837) #7
  %48 = load ptr, ptr @stderr, align 8, !tbaa !15
  %49 = load i32, ptr %1, align 8, !tbaa !5
  %50 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %48, ptr noundef nonnull @.str.58, i32 noundef %49) #7
  %51 = load ptr, ptr @stderr, align 8, !tbaa !15
  %52 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %51, ptr noundef nonnull @.str.3) #7
  tail call void @print_trace() #6
  tail call void @exit(i32 noundef 1) #8
  unreachable

53:                                               ; preds = %42, %29, %27, %25, %23, %21, %19, %17, %15, %13, %11, %9, %7
  %54 = load i32, ptr %1, align 8, !tbaa !5
  switch i32 %54, label %76 [
    i32 1, label %55
    i32 5, label %55
    i32 10, label %55
    i32 8, label %55
    i32 7, label %61
    i32 2, label %63
    i32 4, label %63
  ]

55:                                               ; preds = %53, %53, %53, %53
  %56 = getelementptr inbounds i8, ptr %1, i64 104
  %57 = getelementptr inbounds i8, ptr %1, i64 120
  %58 = load double, ptr %57, align 8, !tbaa !17
  %59 = call ptr @String_fromDouble(ptr noundef nonnull %3, double noundef %58, i32 noundef 6) #6
  %60 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.59, ptr noundef %59) #6
  br label %thread-pre-split

61:                                               ; preds = %53
  %62 = getelementptr inbounds i8, ptr %1, i64 104
  br label %thread-pre-split

63:                                               ; preds = %53, %53
  %64 = getelementptr inbounds i8, ptr %1, i64 104
  %65 = load double, ptr %64, align 8, !tbaa !17
  %66 = call ptr @String_fromDouble(ptr noundef nonnull %3, double noundef %65, i32 noundef 6) #6
  %67 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.61, ptr noundef %66) #6
  %68 = getelementptr inbounds i8, ptr %1, i64 112
  %69 = load double, ptr %68, align 8, !tbaa !17
  %70 = call ptr @String_fromDouble(ptr noundef nonnull %3, double noundef %69, i32 noundef 6) #6
  %71 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.62, ptr noundef %70) #6
  %72 = getelementptr inbounds i8, ptr %1, i64 120
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %55, %61, %63
  %.sink = phi ptr [ %56, %55 ], [ %62, %61 ], [ %72, %63 ]
  %.str.60.sink = phi ptr [ @.str.60, %55 ], [ @.str.60, %61 ], [ @.str.63, %63 ]
  %73 = load double, ptr %.sink, align 8, !tbaa !17
  %74 = call ptr @String_fromDouble(ptr noundef nonnull %3, double noundef %73, i32 noundef 6) #6
  %75 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull %.str.60.sink, ptr noundef %74) #6
  %.pr = load i32, ptr %1, align 8, !tbaa !5
  br label %76

76:                                               ; preds = %thread-pre-split, %53
  %77 = phi i32 [ %.pr, %thread-pre-split ], [ %54, %53 ]
  %.not79 = icmp eq i32 %77, 6
  br i1 %.not79, label %88, label %.sink.split

.sink.split:                                      ; preds = %76
  %78 = getelementptr inbounds i8, ptr %1, i64 137
  %79 = load i8, ptr %78, align 1, !tbaa !18
  %80 = and i8 %79, 1
  %.not80 = icmp eq i8 %80, 0
  %.str.65..str.64 = select i1 %.not80, ptr @.str.65, ptr @.str.64
  %81 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull %.str.65..str.64) #6
  %82 = load i8, ptr %78, align 1, !tbaa !18
  %83 = and i8 %82, 2
  %.not81 = icmp eq i8 %83, 0
  %.str.67.sink = select i1 %.not81, ptr @.str.67, ptr @.str.66
  %84 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull %.str.67.sink) #6
  %85 = load i8, ptr %78, align 1, !tbaa !18
  %86 = and i8 %85, 4
  %.not82 = icmp eq i8 %86, 0
  %.str.68.sink = select i1 %.not82, ptr @.str.69, ptr @.str.68
  %87 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull %.str.68.sink) #6
  br label %88

88:                                               ; preds = %.sink.split, %76
  %89 = getelementptr inbounds i8, ptr %1, i64 136
  %90 = load i8, ptr %89, align 8, !tbaa !19, !range !20, !noundef !21
  %91 = trunc nuw i8 %90 to i1
  br i1 %91, label %92, label %94

92:                                               ; preds = %88
  %93 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.70) #6
  br label %94

94:                                               ; preds = %92, %88
  %95 = getelementptr inbounds i8, ptr %1, i64 128
  %96 = load double, ptr %95, align 8, !tbaa !22
  %97 = fcmp une double %96, 1.000000e+00
  br i1 %97, label %98, label %101

98:                                               ; preds = %94
  %99 = call ptr @String_fromDouble(ptr noundef nonnull %3, double noundef %96, i32 noundef 6) #6
  %100 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.71, ptr noundef %99) #6
  br label %101

101:                                              ; preds = %98, %94
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %4) #6
  %102 = getelementptr inbounds i8, ptr %1, i64 8
  call void @Vec3d_copy(ptr noundef nonnull %4, ptr noundef nonnull %102) #6
  %103 = getelementptr inbounds i8, ptr %4, i64 24
  %104 = getelementptr inbounds i8, ptr %1, i64 32
  call void @Mat3d_toEulerAngles(ptr noundef nonnull %103, ptr noundef nonnull %104) #6
  call void @Vec3d_constMulSelf(ptr noundef nonnull %103, double noundef 0x404CA5DC1A63C1F8) #6
  %105 = call double @VecNd_maxAbsEle(ptr noundef nonnull %4, i32 noundef 6) #6
  %106 = fcmp ogt double %105, 1.000000e-08
  br i1 %106, label %107, label %130

107:                                              ; preds = %101
  %108 = load double, ptr %4, align 16, !tbaa !17
  %109 = call ptr @String_fromDouble(ptr noundef nonnull %3, double noundef %108, i32 noundef 6) #6
  %110 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.72, ptr noundef %109) #6
  %111 = getelementptr inbounds i8, ptr %4, i64 8
  %112 = load double, ptr %111, align 8, !tbaa !17
  %113 = call ptr @String_fromDouble(ptr noundef nonnull %3, double noundef %112, i32 noundef 6) #6
  %114 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.62, ptr noundef %113) #6
  %115 = getelementptr inbounds i8, ptr %4, i64 16
  %116 = load double, ptr %115, align 16, !tbaa !17
  %117 = call ptr @String_fromDouble(ptr noundef nonnull %3, double noundef %116, i32 noundef 6) #6
  %118 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.62, ptr noundef %117) #6
  %119 = load double, ptr %103, align 8, !tbaa !17
  %120 = call ptr @String_fromDouble(ptr noundef nonnull %3, double noundef %119, i32 noundef 6) #6
  %121 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.62, ptr noundef %120) #6
  %122 = getelementptr inbounds i8, ptr %4, i64 32
  %123 = load double, ptr %122, align 16, !tbaa !17
  %124 = call ptr @String_fromDouble(ptr noundef nonnull %3, double noundef %123, i32 noundef 6) #6
  %125 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.62, ptr noundef %124) #6
  %126 = getelementptr inbounds i8, ptr %4, i64 40
  %127 = load double, ptr %126, align 8, !tbaa !17
  %128 = call ptr @String_fromDouble(ptr noundef nonnull %3, double noundef %127, i32 noundef 6) #6
  %129 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.63, ptr noundef %128) #6
  br label %130

130:                                              ; preds = %107, %101
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %4) #6
  %131 = getelementptr inbounds i8, ptr %1, i64 144
  %132 = load ptr, ptr %131, align 8, !tbaa !23
  %.not83 = icmp eq ptr %132, null
  br i1 %.not83, label %136, label %.sink.split89

.sink.split89:                                    ; preds = %130
  %133 = load i32, ptr %1, align 8, !tbaa !5
  %134 = icmp eq i32 %133, 9
  %.str.73..str.74 = select i1 %134, ptr @.str.73, ptr @.str.74
  %135 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull %.str.73..str.74, ptr noundef nonnull %132) #6
  br label %136

136:                                              ; preds = %.sink.split89, %130
  %137 = getelementptr inbounds i8, ptr %1, i64 152
  %138 = load ptr, ptr %137, align 8, !tbaa !24
  %.not84 = icmp eq ptr %138, null
  br i1 %.not84, label %141, label %139

139:                                              ; preds = %136
  %140 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.75, ptr noundef nonnull %138) #6
  br label %141

141:                                              ; preds = %139, %136
  %142 = load i32, ptr %1, align 8, !tbaa !5
  %.not85 = icmp eq i32 %142, 6
  br i1 %.not85, label %151, label %143

143:                                              ; preds = %141
  %144 = getelementptr inbounds i8, ptr %1, i64 160
  %145 = load ptr, ptr %144, align 8, !tbaa !25
  %.not86 = icmp eq ptr %145, null
  br i1 %.not86, label %151, label %146

146:                                              ; preds = %143
  %147 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %145, ptr noundef nonnull dereferenceable(1) @.str.76) #9
  %148 = icmp eq i32 %147, 0
  br i1 %148, label %151, label %149

149:                                              ; preds = %146
  %150 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.77, ptr noundef nonnull %145) #6
  br label %151

151:                                              ; preds = %149, %146, %143, %141
  %152 = getelementptr inbounds i8, ptr %1, i64 168
  %153 = load ptr, ptr %152, align 8, !tbaa !26
  %.not87 = icmp eq ptr %153, null
  br i1 %.not87, label %159, label %154

154:                                              ; preds = %151
  %155 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %153, ptr noundef nonnull dereferenceable(1) @.str.78) #9
  %156 = icmp eq i32 %155, 0
  br i1 %156, label %159, label %157

157:                                              ; preds = %154
  %158 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.79, ptr noundef nonnull %153) #6
  br label %159

159:                                              ; preds = %157, %154, %151
  %160 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %0, ptr noundef nonnull @.str.80) #6
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %3) #6
  ret void
}

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

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

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i32 @strcmp(ptr nocapture noundef, ptr nocapture 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 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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 #4 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nofree nounwind willreturn memory(argmem: read) "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 }
attributes #9 = { nounwind willreturn memory(read) }

!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 = !{!6, !13, i64 176}
!15 = !{!13, !13, i64 0}
!16 = !{!7, !7, i64 0}
!17 = !{!11, !11, i64 0}
!18 = !{!6, !8, i64 137}
!19 = !{!6, !12, i64 136}
!20 = !{i8 0, i8 2}
!21 = !{}
!22 = !{!6, !11, i64 128}
!23 = !{!6, !13, i64 144}
!24 = !{!6, !13, i64 152}
!25 = !{!6, !13, i64 160}
!26 = !{!6, !13, i64 168}


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