; LLVM IR from InsightSoftwareConsortium/ITK :: Modules/ThirdParty/MINC/src/libminc/nifti (nifti1_io)

; 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.mat44 = type { [4 x [4 x float]] }
%struct.mat33 = type { [3 x [3 x float]] }

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

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

; Function Attrs: nounwind uwtable
define dso_local void @nifti_mat44_to_orientation(ptr noundef byval(%struct.mat44) align 8 %0, ptr noundef %1, ptr noundef %2, ptr noundef %3) #1 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca float, align 4
  %9 = alloca float, align 4
  %10 = alloca float, align 4
  %11 = alloca float, align 4
  %12 = alloca float, align 4
  %13 = alloca float, align 4
  %14 = alloca float, align 4
  %15 = alloca float, align 4
  %16 = alloca float, align 4
  %17 = alloca float, align 4
  %18 = alloca float, align 4
  %19 = alloca float, align 4
  %20 = alloca %struct.mat33, align 8
  %21 = alloca %struct.mat33, align 8
  %22 = alloca %struct.mat33, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca float, align 4
  %36 = alloca i32, align 4
  %37 = alloca %struct.mat33, align 4
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  store ptr %3, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 36, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 36, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 36, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #5
  store i32 0, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #5
  %38 = load ptr, ptr %5, align 8, !tbaa !5
  %39 = icmp eq ptr %38, null
  br i1 %39, label %46, label %40

40:                                               ; preds = %4
  %41 = load ptr, ptr %6, align 8, !tbaa !5
  %42 = icmp eq ptr %41, null
  br i1 %42, label %46, label %43

43:                                               ; preds = %40
  %44 = load ptr, ptr %7, align 8, !tbaa !5
  %45 = icmp eq ptr %44, null
  br i1 %45, label %46, label %47

46:                                               ; preds = %43, %40, %4
  store i32 1, ptr %36, align 4
  br label %580

47:                                               ; preds = %43
  %48 = load ptr, ptr %7, align 8, !tbaa !5
  store i32 0, ptr %48, align 4, !tbaa !9
  %49 = load ptr, ptr %6, align 8, !tbaa !5
  store i32 0, ptr %49, align 4, !tbaa !9
  %50 = load ptr, ptr %5, align 8, !tbaa !5
  store i32 0, ptr %50, align 4, !tbaa !9
  %51 = getelementptr inbounds %struct.mat44, ptr %0, i32 0, i32 0
  %52 = getelementptr inbounds [4 x [4 x float]], ptr %51, i64 0, i64 0
  %53 = getelementptr inbounds [4 x float], ptr %52, i64 0, i64 0
  %54 = load float, ptr %53, align 8, !tbaa !11
  store float %54, ptr %8, align 4, !tbaa !11
  %55 = getelementptr inbounds %struct.mat44, ptr %0, i32 0, i32 0
  %56 = getelementptr inbounds [4 x [4 x float]], ptr %55, i64 0, i64 0
  %57 = getelementptr inbounds [4 x float], ptr %56, i64 0, i64 1
  %58 = load float, ptr %57, align 4, !tbaa !11
  store float %58, ptr %9, align 4, !tbaa !11
  %59 = getelementptr inbounds %struct.mat44, ptr %0, i32 0, i32 0
  %60 = getelementptr inbounds [4 x [4 x float]], ptr %59, i64 0, i64 0
  %61 = getelementptr inbounds [4 x float], ptr %60, i64 0, i64 2
  %62 = load float, ptr %61, align 8, !tbaa !11
  store float %62, ptr %10, align 4, !tbaa !11
  %63 = getelementptr inbounds %struct.mat44, ptr %0, i32 0, i32 0
  %64 = getelementptr inbounds [4 x [4 x float]], ptr %63, i64 0, i64 1
  %65 = getelementptr inbounds [4 x float], ptr %64, i64 0, i64 0
  %66 = load float, ptr %65, align 8, !tbaa !11
  store float %66, ptr %11, align 4, !tbaa !11
  %67 = getelementptr inbounds %struct.mat44, ptr %0, i32 0, i32 0
  %68 = getelementptr inbounds [4 x [4 x float]], ptr %67, i64 0, i64 1
  %69 = getelementptr inbounds [4 x float], ptr %68, i64 0, i64 1
  %70 = load float, ptr %69, align 4, !tbaa !11
  store float %70, ptr %12, align 4, !tbaa !11
  %71 = getelementptr inbounds %struct.mat44, ptr %0, i32 0, i32 0
  %72 = getelementptr inbounds [4 x [4 x float]], ptr %71, i64 0, i64 1
  %73 = getelementptr inbounds [4 x float], ptr %72, i64 0, i64 2
  %74 = load float, ptr %73, align 8, !tbaa !11
  store float %74, ptr %13, align 4, !tbaa !11
  %75 = getelementptr inbounds %struct.mat44, ptr %0, i32 0, i32 0
  %76 = getelementptr inbounds [4 x [4 x float]], ptr %75, i64 0, i64 2
  %77 = getelementptr inbounds [4 x float], ptr %76, i64 0, i64 0
  %78 = load float, ptr %77, align 8, !tbaa !11
  store float %78, ptr %14, align 4, !tbaa !11
  %79 = getelementptr inbounds %struct.mat44, ptr %0, i32 0, i32 0
  %80 = getelementptr inbounds [4 x [4 x float]], ptr %79, i64 0, i64 2
  %81 = getelementptr inbounds [4 x float], ptr %80, i64 0, i64 1
  %82 = load float, ptr %81, align 4, !tbaa !11
  store float %82, ptr %15, align 4, !tbaa !11
  %83 = getelementptr inbounds %struct.mat44, ptr %0, i32 0, i32 0
  %84 = getelementptr inbounds [4 x [4 x float]], ptr %83, i64 0, i64 2
  %85 = getelementptr inbounds [4 x float], ptr %84, i64 0, i64 2
  %86 = load float, ptr %85, align 8, !tbaa !11
  store float %86, ptr %16, align 4, !tbaa !11
  %87 = load float, ptr %8, align 4, !tbaa !11
  %88 = load float, ptr %8, align 4, !tbaa !11
  %89 = load float, ptr %11, align 4, !tbaa !11
  %90 = load float, ptr %11, align 4, !tbaa !11
  %91 = fmul float %89, %90
  %92 = call float @llvm.fmuladd.f32(float %87, float %88, float %91)
  %93 = load float, ptr %14, align 4, !tbaa !11
  %94 = load float, ptr %14, align 4, !tbaa !11
  %95 = call float @llvm.fmuladd.f32(float %93, float %94, float %92)
  %96 = fpext float %95 to double
  %97 = call double @sqrt(double noundef %96) #5
  %98 = fptrunc double %97 to float
  store float %98, ptr %17, align 4, !tbaa !11
  %99 = load float, ptr %17, align 4, !tbaa !11
  %100 = fpext float %99 to double
  %101 = fcmp oeq double %100, 0.000000e+00
  br i1 %101, label %102, label %103

102:                                              ; preds = %47
  store i32 1, ptr %36, align 4
  br label %580

103:                                              ; preds = %47
  %104 = load float, ptr %17, align 4, !tbaa !11
  %105 = load float, ptr %8, align 4, !tbaa !11
  %106 = fdiv float %105, %104
  store float %106, ptr %8, align 4, !tbaa !11
  %107 = load float, ptr %17, align 4, !tbaa !11
  %108 = load float, ptr %11, align 4, !tbaa !11
  %109 = fdiv float %108, %107
  store float %109, ptr %11, align 4, !tbaa !11
  %110 = load float, ptr %17, align 4, !tbaa !11
  %111 = load float, ptr %14, align 4, !tbaa !11
  %112 = fdiv float %111, %110
  store float %112, ptr %14, align 4, !tbaa !11
  %113 = load float, ptr %9, align 4, !tbaa !11
  %114 = load float, ptr %9, align 4, !tbaa !11
  %115 = load float, ptr %12, align 4, !tbaa !11
  %116 = load float, ptr %12, align 4, !tbaa !11
  %117 = fmul float %115, %116
  %118 = call float @llvm.fmuladd.f32(float %113, float %114, float %117)
  %119 = load float, ptr %15, align 4, !tbaa !11
  %120 = load float, ptr %15, align 4, !tbaa !11
  %121 = call float @llvm.fmuladd.f32(float %119, float %120, float %118)
  %122 = fpext float %121 to double
  %123 = call double @sqrt(double noundef %122) #5
  %124 = fptrunc double %123 to float
  store float %124, ptr %17, align 4, !tbaa !11
  %125 = load float, ptr %17, align 4, !tbaa !11
  %126 = fpext float %125 to double
  %127 = fcmp oeq double %126, 0.000000e+00
  br i1 %127, label %128, label %129

128:                                              ; preds = %103
  store i32 1, ptr %36, align 4
  br label %580

129:                                              ; preds = %103
  %130 = load float, ptr %17, align 4, !tbaa !11
  %131 = load float, ptr %9, align 4, !tbaa !11
  %132 = fdiv float %131, %130
  store float %132, ptr %9, align 4, !tbaa !11
  %133 = load float, ptr %17, align 4, !tbaa !11
  %134 = load float, ptr %12, align 4, !tbaa !11
  %135 = fdiv float %134, %133
  store float %135, ptr %12, align 4, !tbaa !11
  %136 = load float, ptr %17, align 4, !tbaa !11
  %137 = load float, ptr %15, align 4, !tbaa !11
  %138 = fdiv float %137, %136
  store float %138, ptr %15, align 4, !tbaa !11
  %139 = load float, ptr %8, align 4, !tbaa !11
  %140 = load float, ptr %9, align 4, !tbaa !11
  %141 = load float, ptr %11, align 4, !tbaa !11
  %142 = load float, ptr %12, align 4, !tbaa !11
  %143 = fmul float %141, %142
  %144 = call float @llvm.fmuladd.f32(float %139, float %140, float %143)
  %145 = load float, ptr %14, align 4, !tbaa !11
  %146 = load float, ptr %15, align 4, !tbaa !11
  %147 = call float @llvm.fmuladd.f32(float %145, float %146, float %144)
  store float %147, ptr %17, align 4, !tbaa !11
  %148 = load float, ptr %17, align 4, !tbaa !11
  %149 = fpext float %148 to double
  %150 = call double @llvm.fabs.f64(double %149)
  %151 = fcmp ogt double %150, 1.000000e-04
  br i1 %151, label %152, label %194

152:                                              ; preds = %129
  %153 = load float, ptr %17, align 4, !tbaa !11
  %154 = load float, ptr %8, align 4, !tbaa !11
  %155 = load float, ptr %9, align 4, !tbaa !11
  %156 = fneg float %153
  %157 = call float @llvm.fmuladd.f32(float %156, float %154, float %155)
  store float %157, ptr %9, align 4, !tbaa !11
  %158 = load float, ptr %17, align 4, !tbaa !11
  %159 = load float, ptr %11, align 4, !tbaa !11
  %160 = load float, ptr %12, align 4, !tbaa !11
  %161 = fneg float %158
  %162 = call float @llvm.fmuladd.f32(float %161, float %159, float %160)
  store float %162, ptr %12, align 4, !tbaa !11
  %163 = load float, ptr %17, align 4, !tbaa !11
  %164 = load float, ptr %14, align 4, !tbaa !11
  %165 = load float, ptr %15, align 4, !tbaa !11
  %166 = fneg float %163
  %167 = call float @llvm.fmuladd.f32(float %166, float %164, float %165)
  store float %167, ptr %15, align 4, !tbaa !11
  %168 = load float, ptr %9, align 4, !tbaa !11
  %169 = load float, ptr %9, align 4, !tbaa !11
  %170 = load float, ptr %12, align 4, !tbaa !11
  %171 = load float, ptr %12, align 4, !tbaa !11
  %172 = fmul float %170, %171
  %173 = call float @llvm.fmuladd.f32(float %168, float %169, float %172)
  %174 = load float, ptr %15, align 4, !tbaa !11
  %175 = load float, ptr %15, align 4, !tbaa !11
  %176 = call float @llvm.fmuladd.f32(float %174, float %175, float %173)
  %177 = fpext float %176 to double
  %178 = call double @sqrt(double noundef %177) #5
  %179 = fptrunc double %178 to float
  store float %179, ptr %17, align 4, !tbaa !11
  %180 = load float, ptr %17, align 4, !tbaa !11
  %181 = fpext float %180 to double
  %182 = fcmp oeq double %181, 0.000000e+00
  br i1 %182, label %183, label %184

183:                                              ; preds = %152
  store i32 1, ptr %36, align 4
  br label %580

184:                                              ; preds = %152
  %185 = load float, ptr %17, align 4, !tbaa !11
  %186 = load float, ptr %9, align 4, !tbaa !11
  %187 = fdiv float %186, %185
  store float %187, ptr %9, align 4, !tbaa !11
  %188 = load float, ptr %17, align 4, !tbaa !11
  %189 = load float, ptr %12, align 4, !tbaa !11
  %190 = fdiv float %189, %188
  store float %190, ptr %12, align 4, !tbaa !11
  %191 = load float, ptr %17, align 4, !tbaa !11
  %192 = load float, ptr %15, align 4, !tbaa !11
  %193 = fdiv float %192, %191
  store float %193, ptr %15, align 4, !tbaa !11
  br label %194

194:                                              ; preds = %184, %129
  %195 = load float, ptr %10, align 4, !tbaa !11
  %196 = load float, ptr %10, align 4, !tbaa !11
  %197 = load float, ptr %13, align 4, !tbaa !11
  %198 = load float, ptr %13, align 4, !tbaa !11
  %199 = fmul float %197, %198
  %200 = call float @llvm.fmuladd.f32(float %195, float %196, float %199)
  %201 = load float, ptr %16, align 4, !tbaa !11
  %202 = load float, ptr %16, align 4, !tbaa !11
  %203 = call float @llvm.fmuladd.f32(float %201, float %202, float %200)
  %204 = fpext float %203 to double
  %205 = call double @sqrt(double noundef %204) #5
  %206 = fptrunc double %205 to float
  store float %206, ptr %17, align 4, !tbaa !11
  %207 = load float, ptr %17, align 4, !tbaa !11
  %208 = fpext float %207 to double
  %209 = fcmp oeq double %208, 0.000000e+00
  br i1 %209, label %210, label %232

210:                                              ; preds = %194
  %211 = load float, ptr %11, align 4, !tbaa !11
  %212 = load float, ptr %15, align 4, !tbaa !11
  %213 = load float, ptr %14, align 4, !tbaa !11
  %214 = load float, ptr %12, align 4, !tbaa !11
  %215 = fmul float %213, %214
  %216 = fneg float %215
  %217 = call float @llvm.fmuladd.f32(float %211, float %212, float %216)
  store float %217, ptr %10, align 4, !tbaa !11
  %218 = load float, ptr %14, align 4, !tbaa !11
  %219 = load float, ptr %9, align 4, !tbaa !11
  %220 = load float, ptr %15, align 4, !tbaa !11
  %221 = load float, ptr %8, align 4, !tbaa !11
  %222 = fmul float %220, %221
  %223 = fneg float %222
  %224 = call float @llvm.fmuladd.f32(float %218, float %219, float %223)
  store float %224, ptr %13, align 4, !tbaa !11
  %225 = load float, ptr %8, align 4, !tbaa !11
  %226 = load float, ptr %12, align 4, !tbaa !11
  %227 = load float, ptr %11, align 4, !tbaa !11
  %228 = load float, ptr %9, align 4, !tbaa !11
  %229 = fmul float %227, %228
  %230 = fneg float %229
  %231 = call float @llvm.fmuladd.f32(float %225, float %226, float %230)
  store float %231, ptr %16, align 4, !tbaa !11
  br label %242

232:                                              ; preds = %194
  %233 = load float, ptr %17, align 4, !tbaa !11
  %234 = load float, ptr %10, align 4, !tbaa !11
  %235 = fdiv float %234, %233
  store float %235, ptr %10, align 4, !tbaa !11
  %236 = load float, ptr %17, align 4, !tbaa !11
  %237 = load float, ptr %13, align 4, !tbaa !11
  %238 = fdiv float %237, %236
  store float %238, ptr %13, align 4, !tbaa !11
  %239 = load float, ptr %17, align 4, !tbaa !11
  %240 = load float, ptr %16, align 4, !tbaa !11
  %241 = fdiv float %240, %239
  store float %241, ptr %16, align 4, !tbaa !11
  br label %242

242:                                              ; preds = %232, %210
  %243 = load float, ptr %8, align 4, !tbaa !11
  %244 = load float, ptr %10, align 4, !tbaa !11
  %245 = load float, ptr %11, align 4, !tbaa !11
  %246 = load float, ptr %13, align 4, !tbaa !11
  %247 = fmul float %245, %246
  %248 = call float @llvm.fmuladd.f32(float %243, float %244, float %247)
  %249 = load float, ptr %14, align 4, !tbaa !11
  %250 = load float, ptr %16, align 4, !tbaa !11
  %251 = call float @llvm.fmuladd.f32(float %249, float %250, float %248)
  store float %251, ptr %17, align 4, !tbaa !11
  %252 = load float, ptr %17, align 4, !tbaa !11
  %253 = fpext float %252 to double
  %254 = call double @llvm.fabs.f64(double %253)
  %255 = fcmp ogt double %254, 1.000000e-04
  br i1 %255, label %256, label %298

256:                                              ; preds = %242
  %257 = load float, ptr %17, align 4, !tbaa !11
  %258 = load float, ptr %8, align 4, !tbaa !11
  %259 = load float, ptr %10, align 4, !tbaa !11
  %260 = fneg float %257
  %261 = call float @llvm.fmuladd.f32(float %260, float %258, float %259)
  store float %261, ptr %10, align 4, !tbaa !11
  %262 = load float, ptr %17, align 4, !tbaa !11
  %263 = load float, ptr %11, align 4, !tbaa !11
  %264 = load float, ptr %13, align 4, !tbaa !11
  %265 = fneg float %262
  %266 = call float @llvm.fmuladd.f32(float %265, float %263, float %264)
  store float %266, ptr %13, align 4, !tbaa !11
  %267 = load float, ptr %17, align 4, !tbaa !11
  %268 = load float, ptr %14, align 4, !tbaa !11
  %269 = load float, ptr %16, align 4, !tbaa !11
  %270 = fneg float %267
  %271 = call float @llvm.fmuladd.f32(float %270, float %268, float %269)
  store float %271, ptr %16, align 4, !tbaa !11
  %272 = load float, ptr %10, align 4, !tbaa !11
  %273 = load float, ptr %10, align 4, !tbaa !11
  %274 = load float, ptr %13, align 4, !tbaa !11
  %275 = load float, ptr %13, align 4, !tbaa !11
  %276 = fmul float %274, %275
  %277 = call float @llvm.fmuladd.f32(float %272, float %273, float %276)
  %278 = load float, ptr %16, align 4, !tbaa !11
  %279 = load float, ptr %16, align 4, !tbaa !11
  %280 = call float @llvm.fmuladd.f32(float %278, float %279, float %277)
  %281 = fpext float %280 to double
  %282 = call double @sqrt(double noundef %281) #5
  %283 = fptrunc double %282 to float
  store float %283, ptr %17, align 4, !tbaa !11
  %284 = load float, ptr %17, align 4, !tbaa !11
  %285 = fpext float %284 to double
  %286 = fcmp oeq double %285, 0.000000e+00
  br i1 %286, label %287, label %288

287:                                              ; preds = %256
  store i32 1, ptr %36, align 4
  br label %580

288:                                              ; preds = %256
  %289 = load float, ptr %17, align 4, !tbaa !11
  %290 = load float, ptr %10, align 4, !tbaa !11
  %291 = fdiv float %290, %289
  store float %291, ptr %10, align 4, !tbaa !11
  %292 = load float, ptr %17, align 4, !tbaa !11
  %293 = load float, ptr %13, align 4, !tbaa !11
  %294 = fdiv float %293, %292
  store float %294, ptr %13, align 4, !tbaa !11
  %295 = load float, ptr %17, align 4, !tbaa !11
  %296 = load float, ptr %16, align 4, !tbaa !11
  %297 = fdiv float %296, %295
  store float %297, ptr %16, align 4, !tbaa !11
  br label %298

298:                                              ; preds = %288, %242
  %299 = load float, ptr %9, align 4, !tbaa !11
  %300 = load float, ptr %10, align 4, !tbaa !11
  %301 = load float, ptr %12, align 4, !tbaa !11
  %302 = load float, ptr %13, align 4, !tbaa !11
  %303 = fmul float %301, %302
  %304 = call float @llvm.fmuladd.f32(float %299, float %300, float %303)
  %305 = load float, ptr %15, align 4, !tbaa !11
  %306 = load float, ptr %16, align 4, !tbaa !11
  %307 = call float @llvm.fmuladd.f32(float %305, float %306, float %304)
  store float %307, ptr %17, align 4, !tbaa !11
  %308 = load float, ptr %17, align 4, !tbaa !11
  %309 = fpext float %308 to double
  %310 = call double @llvm.fabs.f64(double %309)
  %311 = fcmp ogt double %310, 1.000000e-04
  br i1 %311, label %312, label %354

312:                                              ; preds = %298
  %313 = load float, ptr %17, align 4, !tbaa !11
  %314 = load float, ptr %9, align 4, !tbaa !11
  %315 = load float, ptr %10, align 4, !tbaa !11
  %316 = fneg float %313
  %317 = call float @llvm.fmuladd.f32(float %316, float %314, float %315)
  store float %317, ptr %10, align 4, !tbaa !11
  %318 = load float, ptr %17, align 4, !tbaa !11
  %319 = load float, ptr %12, align 4, !tbaa !11
  %320 = load float, ptr %13, align 4, !tbaa !11
  %321 = fneg float %318
  %322 = call float @llvm.fmuladd.f32(float %321, float %319, float %320)
  store float %322, ptr %13, align 4, !tbaa !11
  %323 = load float, ptr %17, align 4, !tbaa !11
  %324 = load float, ptr %15, align 4, !tbaa !11
  %325 = load float, ptr %16, align 4, !tbaa !11
  %326 = fneg float %323
  %327 = call float @llvm.fmuladd.f32(float %326, float %324, float %325)
  store float %327, ptr %16, align 4, !tbaa !11
  %328 = load float, ptr %10, align 4, !tbaa !11
  %329 = load float, ptr %10, align 4, !tbaa !11
  %330 = load float, ptr %13, align 4, !tbaa !11
  %331 = load float, ptr %13, align 4, !tbaa !11
  %332 = fmul float %330, %331
  %333 = call float @llvm.fmuladd.f32(float %328, float %329, float %332)
  %334 = load float, ptr %16, align 4, !tbaa !11
  %335 = load float, ptr %16, align 4, !tbaa !11
  %336 = call float @llvm.fmuladd.f32(float %334, float %335, float %333)
  %337 = fpext float %336 to double
  %338 = call double @sqrt(double noundef %337) #5
  %339 = fptrunc double %338 to float
  store float %339, ptr %17, align 4, !tbaa !11
  %340 = load float, ptr %17, align 4, !tbaa !11
  %341 = fpext float %340 to double
  %342 = fcmp oeq double %341, 0.000000e+00
  br i1 %342, label %343, label %344

343:                                              ; preds = %312
  store i32 1, ptr %36, align 4
  br label %580

344:                                              ; preds = %312
  %345 = load float, ptr %17, align 4, !tbaa !11
  %346 = load float, ptr %10, align 4, !tbaa !11
  %347 = fdiv float %346, %345
  store float %347, ptr %10, align 4, !tbaa !11
  %348 = load float, ptr %17, align 4, !tbaa !11
  %349 = load float, ptr %13, align 4, !tbaa !11
  %350 = fdiv float %349, %348
  store float %350, ptr %13, align 4, !tbaa !11
  %351 = load float, ptr %17, align 4, !tbaa !11
  %352 = load float, ptr %16, align 4, !tbaa !11
  %353 = fdiv float %352, %351
  store float %353, ptr %16, align 4, !tbaa !11
  br label %354

354:                                              ; preds = %344, %298
  %355 = load float, ptr %8, align 4, !tbaa !11
  %356 = getelementptr inbounds %struct.mat33, ptr %21, i32 0, i32 0
  %357 = getelementptr inbounds [3 x [3 x float]], ptr %356, i64 0, i64 0
  %358 = getelementptr inbounds [3 x float], ptr %357, i64 0, i64 0
  store float %355, ptr %358, align 4, !tbaa !11
  %359 = load float, ptr %9, align 4, !tbaa !11
  %360 = getelementptr inbounds %struct.mat33, ptr %21, i32 0, i32 0
  %361 = getelementptr inbounds [3 x [3 x float]], ptr %360, i64 0, i64 0
  %362 = getelementptr inbounds [3 x float], ptr %361, i64 0, i64 1
  store float %359, ptr %362, align 4, !tbaa !11
  %363 = load float, ptr %10, align 4, !tbaa !11
  %364 = getelementptr inbounds %struct.mat33, ptr %21, i32 0, i32 0
  %365 = getelementptr inbounds [3 x [3 x float]], ptr %364, i64 0, i64 0
  %366 = getelementptr inbounds [3 x float], ptr %365, i64 0, i64 2
  store float %363, ptr %366, align 4, !tbaa !11
  %367 = load float, ptr %11, align 4, !tbaa !11
  %368 = getelementptr inbounds %struct.mat33, ptr %21, i32 0, i32 0
  %369 = getelementptr inbounds [3 x [3 x float]], ptr %368, i64 0, i64 1
  %370 = getelementptr inbounds [3 x float], ptr %369, i64 0, i64 0
  store float %367, ptr %370, align 4, !tbaa !11
  %371 = load float, ptr %12, align 4, !tbaa !11
  %372 = getelementptr inbounds %struct.mat33, ptr %21, i32 0, i32 0
  %373 = getelementptr inbounds [3 x [3 x float]], ptr %372, i64 0, i64 1
  %374 = getelementptr inbounds [3 x float], ptr %373, i64 0, i64 1
  store float %371, ptr %374, align 4, !tbaa !11
  %375 = load float, ptr %13, align 4, !tbaa !11
  %376 = getelementptr inbounds %struct.mat33, ptr %21, i32 0, i32 0
  %377 = getelementptr inbounds [3 x [3 x float]], ptr %376, i64 0, i64 1
  %378 = getelementptr inbounds [3 x float], ptr %377, i64 0, i64 2
  store float %375, ptr %378, align 4, !tbaa !11
  %379 = load float, ptr %14, align 4, !tbaa !11
  %380 = getelementptr inbounds %struct.mat33, ptr %21, i32 0, i32 0
  %381 = getelementptr inbounds [3 x [3 x float]], ptr %380, i64 0, i64 2
  %382 = getelementptr inbounds [3 x float], ptr %381, i64 0, i64 0
  store float %379, ptr %382, align 4, !tbaa !11
  %383 = load float, ptr %15, align 4, !tbaa !11
  %384 = getelementptr inbounds %struct.mat33, ptr %21, i32 0, i32 0
  %385 = getelementptr inbounds [3 x [3 x float]], ptr %384, i64 0, i64 2
  %386 = getelementptr inbounds [3 x float], ptr %385, i64 0, i64 1
  store float %383, ptr %386, align 4, !tbaa !11
  %387 = load float, ptr %16, align 4, !tbaa !11
  %388 = getelementptr inbounds %struct.mat33, ptr %21, i32 0, i32 0
  %389 = getelementptr inbounds [3 x [3 x float]], ptr %388, i64 0, i64 2
  %390 = getelementptr inbounds [3 x float], ptr %389, i64 0, i64 2
  store float %387, ptr %390, align 4, !tbaa !11
  %391 = call float @nifti_mat33_determ(ptr noundef byval(%struct.mat33) align 8 %21)
  store float %391, ptr %18, align 4, !tbaa !11
  %392 = load float, ptr %18, align 4, !tbaa !11
  %393 = fpext float %392 to double
  %394 = fcmp oeq double %393, 0.000000e+00
  br i1 %394, label %395, label %396

395:                                              ; preds = %354
  store i32 1, ptr %36, align 4
  br label %580

396:                                              ; preds = %354
  store float -6.660000e+02, ptr %35, align 4, !tbaa !11
  store i32 1, ptr %34, align 4, !tbaa !9
  store i32 1, ptr %33, align 4, !tbaa !9
  store i32 1, ptr %32, align 4, !tbaa !9
  store i32 1, ptr %29, align 4, !tbaa !9
  store i32 2, ptr %30, align 4, !tbaa !9
  store i32 3, ptr %31, align 4, !tbaa !9
  store i32 1, ptr %23, align 4, !tbaa !9
  br label %397

397:                                              ; preds = %540, %396
  %398 = load i32, ptr %23, align 4, !tbaa !9
  %399 = icmp sle i32 %398, 3
  br i1 %399, label %400, label %543

400:                                              ; preds = %397
  store i32 1, ptr %24, align 4, !tbaa !9
  br label %401

401:                                              ; preds = %536, %400
  %402 = load i32, ptr %24, align 4, !tbaa !9
  %403 = icmp sle i32 %402, 3
  br i1 %403, label %404, label %539

404:                                              ; preds = %401
  %405 = load i32, ptr %23, align 4, !tbaa !9
  %406 = load i32, ptr %24, align 4, !tbaa !9
  %407 = icmp eq i32 %405, %406
  br i1 %407, label %408, label %409

408:                                              ; preds = %404
  br label %536

409:                                              ; preds = %404
  store i32 1, ptr %25, align 4, !tbaa !9
  br label %410

410:                                              ; preds = %532, %409
  %411 = load i32, ptr %25, align 4, !tbaa !9
  %412 = icmp sle i32 %411, 3
  br i1 %412, label %413, label %535

413:                                              ; preds = %410
  %414 = load i32, ptr %23, align 4, !tbaa !9
  %415 = load i32, ptr %25, align 4, !tbaa !9
  %416 = icmp eq i32 %414, %415
  br i1 %416, label %421, label %417

417:                                              ; preds = %413
  %418 = load i32, ptr %24, align 4, !tbaa !9
  %419 = load i32, ptr %25, align 4, !tbaa !9
  %420 = icmp eq i32 %418, %419
  br i1 %420, label %421, label %422

421:                                              ; preds = %417, %413
  br label %532

422:                                              ; preds = %417
  %423 = getelementptr inbounds %struct.mat33, ptr %20, i32 0, i32 0
  %424 = getelementptr inbounds [3 x [3 x float]], ptr %423, i64 0, i64 2
  %425 = getelementptr inbounds [3 x float], ptr %424, i64 0, i64 2
  store float 0.000000e+00, ptr %425, align 4, !tbaa !11
  %426 = getelementptr inbounds %struct.mat33, ptr %20, i32 0, i32 0
  %427 = getelementptr inbounds [3 x [3 x float]], ptr %426, i64 0, i64 2
  %428 = getelementptr inbounds [3 x float], ptr %427, i64 0, i64 1
  store float 0.000000e+00, ptr %428, align 4, !tbaa !11
  %429 = getelementptr inbounds %struct.mat33, ptr %20, i32 0, i32 0
  %430 = getelementptr inbounds [3 x [3 x float]], ptr %429, i64 0, i64 2
  %431 = getelementptr inbounds [3 x float], ptr %430, i64 0, i64 0
  store float 0.000000e+00, ptr %431, align 4, !tbaa !11
  %432 = getelementptr inbounds %struct.mat33, ptr %20, i32 0, i32 0
  %433 = getelementptr inbounds [3 x [3 x float]], ptr %432, i64 0, i64 1
  %434 = getelementptr inbounds [3 x float], ptr %433, i64 0, i64 2
  store float 0.000000e+00, ptr %434, align 4, !tbaa !11
  %435 = getelementptr inbounds %struct.mat33, ptr %20, i32 0, i32 0
  %436 = getelementptr inbounds [3 x [3 x float]], ptr %435, i64 0, i64 1
  %437 = getelementptr inbounds [3 x float], ptr %436, i64 0, i64 1
  store float 0.000000e+00, ptr %437, align 4, !tbaa !11
  %438 = getelementptr inbounds %struct.mat33, ptr %20, i32 0, i32 0
  %439 = getelementptr inbounds [3 x [3 x float]], ptr %438, i64 0, i64 1
  %440 = getelementptr inbounds [3 x float], ptr %439, i64 0, i64 0
  store float 0.000000e+00, ptr %440, align 4, !tbaa !11
  %441 = getelementptr inbounds %struct.mat33, ptr %20, i32 0, i32 0
  %442 = getelementptr inbounds [3 x [3 x float]], ptr %441, i64 0, i64 0
  %443 = getelementptr inbounds [3 x float], ptr %442, i64 0, i64 2
  store float 0.000000e+00, ptr %443, align 4, !tbaa !11
  %444 = getelementptr inbounds %struct.mat33, ptr %20, i32 0, i32 0
  %445 = getelementptr inbounds [3 x [3 x float]], ptr %444, i64 0, i64 0
  %446 = getelementptr inbounds [3 x float], ptr %445, i64 0, i64 1
  store float 0.000000e+00, ptr %446, align 4, !tbaa !11
  %447 = getelementptr inbounds %struct.mat33, ptr %20, i32 0, i32 0
  %448 = getelementptr inbounds [3 x [3 x float]], ptr %447, i64 0, i64 0
  %449 = getelementptr inbounds [3 x float], ptr %448, i64 0, i64 0
  store float 0.000000e+00, ptr %449, align 4, !tbaa !11
  store i32 -1, ptr %26, align 4, !tbaa !9
  br label %450

450:                                              ; preds = %528, %422
  %451 = load i32, ptr %26, align 4, !tbaa !9
  %452 = icmp sle i32 %451, 1
  br i1 %452, label %453, label %531

453:                                              ; preds = %450
  store i32 -1, ptr %27, align 4, !tbaa !9
  br label %454

454:                                              ; preds = %524, %453
  %455 = load i32, ptr %27, align 4, !tbaa !9
  %456 = icmp sle i32 %455, 1
  br i1 %456, label %457, label %527

457:                                              ; preds = %454
  store i32 -1, ptr %28, align 4, !tbaa !9
  br label %458

458:                                              ; preds = %520, %457
  %459 = load i32, ptr %28, align 4, !tbaa !9
  %460 = icmp sle i32 %459, 1
  br i1 %460, label %461, label %523

461:                                              ; preds = %458
  %462 = load i32, ptr %26, align 4, !tbaa !9
  %463 = sitofp i32 %462 to float
  %464 = getelementptr inbounds %struct.mat33, ptr %20, i32 0, i32 0
  %465 = getelementptr inbounds [3 x [3 x float]], ptr %464, i64 0, i64 0
  %466 = load i32, ptr %23, align 4, !tbaa !9
  %467 = sub nsw i32 %466, 1
  %468 = sext i32 %467 to i64
  %469 = getelementptr inbounds [3 x float], ptr %465, i64 0, i64 %468
  store float %463, ptr %469, align 4, !tbaa !11
  %470 = load i32, ptr %27, align 4, !tbaa !9
  %471 = sitofp i32 %470 to float
  %472 = getelementptr inbounds %struct.mat33, ptr %20, i32 0, i32 0
  %473 = getelementptr inbounds [3 x [3 x float]], ptr %472, i64 0, i64 1
  %474 = load i32, ptr %24, align 4, !tbaa !9
  %475 = sub nsw i32 %474, 1
  %476 = sext i32 %475 to i64
  %477 = getelementptr inbounds [3 x float], ptr %473, i64 0, i64 %476
  store float %471, ptr %477, align 4, !tbaa !11
  %478 = load i32, ptr %28, align 4, !tbaa !9
  %479 = sitofp i32 %478 to float
  %480 = getelementptr inbounds %struct.mat33, ptr %20, i32 0, i32 0
  %481 = getelementptr inbounds [3 x [3 x float]], ptr %480, i64 0, i64 2
  %482 = load i32, ptr %25, align 4, !tbaa !9
  %483 = sub nsw i32 %482, 1
  %484 = sext i32 %483 to i64
  %485 = getelementptr inbounds [3 x float], ptr %481, i64 0, i64 %484
  store float %479, ptr %485, align 4, !tbaa !11
  %486 = call float @nifti_mat33_determ(ptr noundef byval(%struct.mat33) align 8 %20)
  store float %486, ptr %19, align 4, !tbaa !11
  %487 = load float, ptr %19, align 4, !tbaa !11
  %488 = load float, ptr %18, align 4, !tbaa !11
  %489 = fmul float %487, %488
  %490 = fpext float %489 to double
  %491 = fcmp ole double %490, 0.000000e+00
  br i1 %491, label %492, label %493

492:                                              ; preds = %461
  br label %520

493:                                              ; preds = %461
  call void @llvm.lifetime.start.p0(i64 36, ptr %37) #5
  call void @nifti_mat33_mul(ptr dead_on_unwind writable sret(%struct.mat33) align 4 %37, ptr noundef byval(%struct.mat33) align 8 %20, ptr noundef byval(%struct.mat33) align 8 %21)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %22, ptr align 4 %37, i64 36, i1 false), !tbaa.struct !13
  call void @llvm.lifetime.end.p0(i64 36, ptr %37) #5
  %494 = getelementptr inbounds %struct.mat33, ptr %22, i32 0, i32 0
  %495 = getelementptr inbounds [3 x [3 x float]], ptr %494, i64 0, i64 0
  %496 = getelementptr inbounds [3 x float], ptr %495, i64 0, i64 0
  %497 = load float, ptr %496, align 4, !tbaa !11
  %498 = getelementptr inbounds %struct.mat33, ptr %22, i32 0, i32 0
  %499 = getelementptr inbounds [3 x [3 x float]], ptr %498, i64 0, i64 1
  %500 = getelementptr inbounds [3 x float], ptr %499, i64 0, i64 1
  %501 = load float, ptr %500, align 4, !tbaa !11
  %502 = fadd float %497, %501
  %503 = getelementptr inbounds %struct.mat33, ptr %22, i32 0, i32 0
  %504 = getelementptr inbounds [3 x [3 x float]], ptr %503, i64 0, i64 2
  %505 = getelementptr inbounds [3 x float], ptr %504, i64 0, i64 2
  %506 = load float, ptr %505, align 4, !tbaa !11
  %507 = fadd float %502, %506
  store float %507, ptr %17, align 4, !tbaa !11
  %508 = load float, ptr %17, align 4, !tbaa !11
  %509 = load float, ptr %35, align 4, !tbaa !11
  %510 = fcmp ogt float %508, %509
  br i1 %510, label %511, label %519

511:                                              ; preds = %493
  %512 = load float, ptr %17, align 4, !tbaa !11
  store float %512, ptr %35, align 4, !tbaa !11
  %513 = load i32, ptr %23, align 4, !tbaa !9
  store i32 %513, ptr %29, align 4, !tbaa !9
  %514 = load i32, ptr %24, align 4, !tbaa !9
  store i32 %514, ptr %30, align 4, !tbaa !9
  %515 = load i32, ptr %25, align 4, !tbaa !9
  store i32 %515, ptr %31, align 4, !tbaa !9
  %516 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %516, ptr %32, align 4, !tbaa !9
  %517 = load i32, ptr %27, align 4, !tbaa !9
  store i32 %517, ptr %33, align 4, !tbaa !9
  %518 = load i32, ptr %28, align 4, !tbaa !9
  store i32 %518, ptr %34, align 4, !tbaa !9
  br label %519

519:                                              ; preds = %511, %493
  br label %520

520:                                              ; preds = %519, %492
  %521 = load i32, ptr %28, align 4, !tbaa !9
  %522 = add nsw i32 %521, 2
  store i32 %522, ptr %28, align 4, !tbaa !9
  br label %458, !llvm.loop !15

523:                                              ; preds = %458
  br label %524

524:                                              ; preds = %523
  %525 = load i32, ptr %27, align 4, !tbaa !9
  %526 = add nsw i32 %525, 2
  store i32 %526, ptr %27, align 4, !tbaa !9
  br label %454, !llvm.loop !17

527:                                              ; preds = %454
  br label %528

528:                                              ; preds = %527
  %529 = load i32, ptr %26, align 4, !tbaa !9
  %530 = add nsw i32 %529, 2
  store i32 %530, ptr %26, align 4, !tbaa !9
  br label %450, !llvm.loop !18

531:                                              ; preds = %450
  br label %532

532:                                              ; preds = %531, %421
  %533 = load i32, ptr %25, align 4, !tbaa !9
  %534 = add nsw i32 %533, 1
  store i32 %534, ptr %25, align 4, !tbaa !9
  br label %410, !llvm.loop !19

535:                                              ; preds = %410
  br label %536

536:                                              ; preds = %535, %408
  %537 = load i32, ptr %24, align 4, !tbaa !9
  %538 = add nsw i32 %537, 1
  store i32 %538, ptr %24, align 4, !tbaa !9
  br label %401, !llvm.loop !20

539:                                              ; preds = %401
  br label %540

540:                                              ; preds = %539
  %541 = load i32, ptr %23, align 4, !tbaa !9
  %542 = add nsw i32 %541, 1
  store i32 %542, ptr %23, align 4, !tbaa !9
  br label %397, !llvm.loop !21

543:                                              ; preds = %397
  %544 = load i32, ptr %29, align 4, !tbaa !9
  %545 = load i32, ptr %32, align 4, !tbaa !9
  %546 = mul nsw i32 %544, %545
  switch i32 %546, label %553 [
    i32 1, label %547
    i32 -1, label %548
    i32 2, label %549
    i32 -2, label %550
    i32 3, label %551
    i32 -3, label %552
  ]

547:                                              ; preds = %543
  store i32 1, ptr %23, align 4, !tbaa !9
  br label %553

548:                                              ; preds = %543
  store i32 2, ptr %23, align 4, !tbaa !9
  br label %553

549:                                              ; preds = %543
  store i32 3, ptr %23, align 4, !tbaa !9
  br label %553

550:                                              ; preds = %543
  store i32 4, ptr %23, align 4, !tbaa !9
  br label %553

551:                                              ; preds = %543
  store i32 5, ptr %23, align 4, !tbaa !9
  br label %553

552:                                              ; preds = %543
  store i32 6, ptr %23, align 4, !tbaa !9
  br label %553

553:                                              ; preds = %552, %551, %550, %549, %548, %547, %543
  %554 = load i32, ptr %30, align 4, !tbaa !9
  %555 = load i32, ptr %33, align 4, !tbaa !9
  %556 = mul nsw i32 %554, %555
  switch i32 %556, label %563 [
    i32 1, label %557
    i32 -1, label %558
    i32 2, label %559
    i32 -2, label %560
    i32 3, label %561
    i32 -3, label %562
  ]

557:                                              ; preds = %553
  store i32 1, ptr %24, align 4, !tbaa !9
  br label %563

558:                                              ; preds = %553
  store i32 2, ptr %24, align 4, !tbaa !9
  br label %563

559:                                              ; preds = %553
  store i32 3, ptr %24, align 4, !tbaa !9
  br label %563

560:                                              ; preds = %553
  store i32 4, ptr %24, align 4, !tbaa !9
  br label %563

561:                                              ; preds = %553
  store i32 5, ptr %24, align 4, !tbaa !9
  br label %563

562:                                              ; preds = %553
  store i32 6, ptr %24, align 4, !tbaa !9
  br label %563

563:                                              ; preds = %562, %561, %560, %559, %558, %557, %553
  %564 = load i32, ptr %31, align 4, !tbaa !9
  %565 = load i32, ptr %34, align 4, !tbaa !9
  %566 = mul nsw i32 %564, %565
  switch i32 %566, label %573 [
    i32 1, label %567
    i32 -1, label %568
    i32 2, label %569
    i32 -2, label %570
    i32 3, label %571
    i32 -3, label %572
  ]

567:                                              ; preds = %563
  store i32 1, ptr %25, align 4, !tbaa !9
  br label %573

568:                                              ; preds = %563
  store i32 2, ptr %25, align 4, !tbaa !9
  br label %573

569:                                              ; preds = %563
  store i32 3, ptr %25, align 4, !tbaa !9
  br label %573

570:                                              ; preds = %563
  store i32 4, ptr %25, align 4, !tbaa !9
  br label %573

571:                                              ; preds = %563
  store i32 5, ptr %25, align 4, !tbaa !9
  br label %573

572:                                              ; preds = %563
  store i32 6, ptr %25, align 4, !tbaa !9
  br label %573

573:                                              ; preds = %572, %571, %570, %569, %568, %567, %563
  %574 = load i32, ptr %23, align 4, !tbaa !9
  %575 = load ptr, ptr %5, align 8, !tbaa !5
  store i32 %574, ptr %575, align 4, !tbaa !9
  %576 = load i32, ptr %24, align 4, !tbaa !9
  %577 = load ptr, ptr %6, align 8, !tbaa !5
  store i32 %576, ptr %577, align 4, !tbaa !9
  %578 = load i32, ptr %25, align 4, !tbaa !9
  %579 = load ptr, ptr %7, align 8, !tbaa !5
  store i32 %578, ptr %579, align 4, !tbaa !9
  store i32 1, ptr %36, align 4
  br label %580

580:                                              ; preds = %573, %395, %343, %287, %183, %128, %102, %46
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 36, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 36, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 36, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #5
  ret void
}

; Function Attrs: nounwind
declare double @sqrt(double noundef) #2

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

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

; Function Attrs: nounwind uwtable
declare dso_local float @nifti_mat33_determ(ptr noundef byval(%struct.mat33) align 8) #1

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

; Function Attrs: nounwind uwtable
declare dso_local void @nifti_mat33_mul(ptr dead_on_unwind noalias writable sret(%struct.mat33) align 4, ptr noundef byval(%struct.mat33) align 8, ptr noundef byval(%struct.mat33) align 8) #1

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 #3 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{i64 0, i64 36, !14}
!14 = !{!7, !7, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}
!18 = distinct !{!18, !16}
!19 = distinct !{!19, !16}
!20 = distinct !{!20, !16}
!21 = distinct !{!21, !16}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.mat44 = type { [4 x [4 x float]] }
%struct.mat33 = type { [3 x [3 x float]] }

@switch.table.nifti_mat44_to_orientation.1 = private unnamed_addr constant [7 x i32] [i32 6, i32 4, i32 2, i32 4, i32 1, i32 3, i32 5], align 4
@switch.table.nifti_mat44_to_orientation.2 = private unnamed_addr constant [7 x i32] [i32 6, i32 4, i32 2, i32 1, i32 1, i32 3, i32 5], align 4

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

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

; Function Attrs: nounwind uwtable
define dso_local void @nifti_mat44_to_orientation(ptr nocapture noundef readonly byval(%struct.mat44) align 8 %0, ptr noundef writeonly %1, ptr noundef writeonly %2, ptr noundef writeonly %3) local_unnamed_addr #1 {
  %5 = alloca %struct.mat33, align 8
  %6 = alloca %struct.mat33, align 8
  %7 = alloca %struct.mat33, align 4
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %5) #5
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %6) #5
  %8 = icmp eq ptr %1, null
  %9 = icmp eq ptr %2, null
  %or.cond = or i1 %8, %9
  %10 = icmp eq ptr %3, null
  %or.cond3 = or i1 %or.cond, %10
  br i1 %or.cond3, label %265, label %11

11:                                               ; preds = %4
  store i32 0, ptr %3, align 4, !tbaa !5
  store i32 0, ptr %2, align 4, !tbaa !5
  store i32 0, ptr %1, align 4, !tbaa !5
  %12 = load float, ptr %0, align 8, !tbaa !9
  %13 = getelementptr inbounds i8, ptr %0, i64 4
  %14 = load float, ptr %13, align 4, !tbaa !9
  %15 = getelementptr inbounds i8, ptr %0, i64 8
  %16 = load float, ptr %15, align 8, !tbaa !9
  %17 = getelementptr inbounds i8, ptr %0, i64 16
  %18 = load float, ptr %17, align 8, !tbaa !9
  %19 = getelementptr inbounds i8, ptr %0, i64 20
  %20 = load float, ptr %19, align 4, !tbaa !9
  %21 = getelementptr inbounds i8, ptr %0, i64 24
  %22 = load float, ptr %21, align 8, !tbaa !9
  %23 = getelementptr inbounds i8, ptr %0, i64 32
  %24 = load float, ptr %23, align 8, !tbaa !9
  %25 = getelementptr inbounds i8, ptr %0, i64 36
  %26 = load float, ptr %25, align 4, !tbaa !9
  %27 = getelementptr inbounds i8, ptr %0, i64 40
  %28 = load float, ptr %27, align 8, !tbaa !9
  %29 = fmul float %18, %18
  %30 = tail call float @llvm.fmuladd.f32(float %12, float %12, float %29)
  %31 = tail call float @llvm.fmuladd.f32(float %24, float %24, float %30)
  %sqrt = tail call float @llvm.sqrt.f32(float %31)
  %32 = fcmp oeq float %sqrt, 0.000000e+00
  br i1 %32, label %265, label %33

33:                                               ; preds = %11
  %34 = insertelement <2 x float> poison, float %12, i64 0
  %35 = insertelement <2 x float> %34, float %18, i64 1
  %36 = insertelement <2 x float> poison, float %sqrt, i64 0
  %37 = shufflevector <2 x float> %36, <2 x float> poison, <2 x i32> zeroinitializer
  %38 = fdiv <2 x float> %35, %37
  %39 = insertelement <2 x float> poison, float %18, i64 0
  %40 = insertelement <2 x float> %39, float %24, i64 1
  %41 = fdiv <2 x float> %40, %37
  %42 = fmul float %20, %20
  %43 = tail call float @llvm.fmuladd.f32(float %14, float %14, float %42)
  %44 = tail call float @llvm.fmuladd.f32(float %26, float %26, float %43)
  %sqrt294 = tail call float @llvm.sqrt.f32(float %44)
  %45 = fcmp oeq float %sqrt294, 0.000000e+00
  br i1 %45, label %265, label %46

46:                                               ; preds = %33
  %47 = fdiv float %14, %sqrt294
  %48 = insertelement <2 x float> poison, float %20, i64 0
  %49 = insertelement <2 x float> %48, float %26, i64 1
  %50 = insertelement <2 x float> poison, float %sqrt294, i64 0
  %51 = shufflevector <2 x float> %50, <2 x float> poison, <2 x i32> zeroinitializer
  %52 = fdiv <2 x float> %49, %51
  %53 = extractelement <2 x float> %38, i64 1
  %54 = extractelement <2 x float> %52, i64 0
  %55 = fmul float %53, %54
  %56 = extractelement <2 x float> %38, i64 0
  %57 = tail call float @llvm.fmuladd.f32(float %56, float %47, float %55)
  %58 = extractelement <2 x float> %41, i64 1
  %59 = extractelement <2 x float> %52, i64 1
  %60 = tail call float @llvm.fmuladd.f32(float %58, float %59, float %57)
  %61 = tail call float @llvm.fabs.f32(float %60)
  %62 = fpext float %61 to double
  %63 = fcmp ogt double %62, 1.000000e-04
  br i1 %63, label %64, label %81

64:                                               ; preds = %46
  %65 = fneg float %60
  %66 = tail call float @llvm.fmuladd.f32(float %65, float %56, float %47)
  %67 = insertelement <2 x float> poison, float %65, i64 0
  %68 = shufflevector <2 x float> %67, <2 x float> poison, <2 x i32> zeroinitializer
  %69 = tail call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %68, <2 x float> %41, <2 x float> %52)
  %70 = fmul <2 x float> %69, %69
  %71 = extractelement <2 x float> %70, i64 0
  %72 = tail call float @llvm.fmuladd.f32(float %66, float %66, float %71)
  %73 = extractelement <2 x float> %69, i64 1
  %74 = tail call float @llvm.fmuladd.f32(float %73, float %73, float %72)
  %sqrt295 = tail call float @llvm.sqrt.f32(float %74)
  %75 = fcmp oeq float %sqrt295, 0.000000e+00
  br i1 %75, label %265, label %76

76:                                               ; preds = %64
  %77 = fdiv float %66, %sqrt295
  %78 = insertelement <2 x float> poison, float %sqrt295, i64 0
  %79 = shufflevector <2 x float> %78, <2 x float> poison, <2 x i32> zeroinitializer
  %80 = fdiv <2 x float> %69, %79
  br label %81

81:                                               ; preds = %76, %46
  %.0272 = phi float [ %77, %76 ], [ %47, %46 ]
  %82 = phi <2 x float> [ %80, %76 ], [ %52, %46 ]
  %83 = fmul float %22, %22
  %84 = tail call float @llvm.fmuladd.f32(float %16, float %16, float %83)
  %85 = tail call float @llvm.fmuladd.f32(float %28, float %28, float %84)
  %sqrt296 = tail call float @llvm.sqrt.f32(float %85)
  %86 = fcmp oeq float %sqrt296, 0.000000e+00
  br i1 %86, label %87, label %97

87:                                               ; preds = %81
  %88 = fneg <2 x float> %41
  %89 = extractelement <2 x float> %82, i64 1
  %90 = fneg float %89
  %91 = fmul float %56, %90
  %92 = tail call float @llvm.fmuladd.f32(float %58, float %.0272, float %91)
  %93 = shufflevector <2 x float> %82, <2 x float> poison, <2 x i32> <i32 poison, i32 0>
  %94 = insertelement <2 x float> %93, float %.0272, i64 0
  %95 = fmul <2 x float> %94, %88
  %96 = tail call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %38, <2 x float> %82, <2 x float> %95)
  br label %104

97:                                               ; preds = %81
  %98 = fdiv float %22, %sqrt296
  %99 = insertelement <2 x float> poison, float %28, i64 0
  %100 = insertelement <2 x float> %99, float %16, i64 1
  %101 = insertelement <2 x float> poison, float %sqrt296, i64 0
  %102 = shufflevector <2 x float> %101, <2 x float> poison, <2 x i32> zeroinitializer
  %103 = fdiv <2 x float> %100, %102
  br label %104

104:                                              ; preds = %97, %87
  %.0281 = phi float [ %92, %87 ], [ %98, %97 ]
  %105 = phi <2 x float> [ %96, %87 ], [ %103, %97 ]
  %106 = fmul float %53, %.0281
  %107 = extractelement <2 x float> %105, i64 1
  %108 = tail call float @llvm.fmuladd.f32(float %56, float %107, float %106)
  %109 = extractelement <2 x float> %105, i64 0
  %110 = tail call float @llvm.fmuladd.f32(float %58, float %109, float %108)
  %111 = tail call float @llvm.fabs.f32(float %110)
  %112 = fpext float %111 to double
  %113 = fcmp ogt double %112, 1.000000e-04
  br i1 %113, label %114, label %127

114:                                              ; preds = %104
  %115 = fneg float %110
  %116 = tail call float @llvm.fmuladd.f32(float %115, float %56, float %107)
  %117 = tail call float @llvm.fmuladd.f32(float %115, float %53, float %.0281)
  %118 = tail call float @llvm.fmuladd.f32(float %115, float %58, float %109)
  %119 = fmul float %117, %117
  %120 = tail call float @llvm.fmuladd.f32(float %116, float %116, float %119)
  %121 = tail call float @llvm.fmuladd.f32(float %118, float %118, float %120)
  %sqrt297 = tail call float @llvm.sqrt.f32(float %121)
  %122 = fcmp oeq float %sqrt297, 0.000000e+00
  br i1 %122, label %265, label %123

123:                                              ; preds = %114
  %124 = fdiv float %116, %sqrt297
  %125 = fdiv float %117, %sqrt297
  %126 = fdiv float %118, %sqrt297
  br label %127

127:                                              ; preds = %123, %104
  %.1282 = phi float [ %125, %123 ], [ %.0281, %104 ]
  %.1278 = phi float [ %126, %123 ], [ %109, %104 ]
  %.1274 = phi float [ %124, %123 ], [ %107, %104 ]
  %128 = extractelement <2 x float> %82, i64 0
  %129 = fmul float %128, %.1282
  %130 = tail call float @llvm.fmuladd.f32(float %.0272, float %.1274, float %129)
  %131 = extractelement <2 x float> %82, i64 1
  %132 = tail call float @llvm.fmuladd.f32(float %131, float %.1278, float %130)
  %133 = tail call float @llvm.fabs.f32(float %132)
  %134 = fpext float %133 to double
  %135 = fcmp ogt double %134, 1.000000e-04
  br i1 %135, label %136, label %149

136:                                              ; preds = %127
  %137 = fneg float %132
  %138 = tail call float @llvm.fmuladd.f32(float %137, float %.0272, float %.1274)
  %139 = tail call float @llvm.fmuladd.f32(float %137, float %128, float %.1282)
  %140 = tail call float @llvm.fmuladd.f32(float %137, float %131, float %.1278)
  %141 = fmul float %139, %139
  %142 = tail call float @llvm.fmuladd.f32(float %138, float %138, float %141)
  %143 = tail call float @llvm.fmuladd.f32(float %140, float %140, float %142)
  %sqrt298 = tail call float @llvm.sqrt.f32(float %143)
  %144 = fcmp oeq float %sqrt298, 0.000000e+00
  br i1 %144, label %265, label %145

145:                                              ; preds = %136
  %146 = fdiv float %138, %sqrt298
  %147 = fdiv float %139, %sqrt298
  %148 = fdiv float %140, %sqrt298
  br label %149

149:                                              ; preds = %145, %127
  %.2283 = phi float [ %147, %145 ], [ %.1282, %127 ]
  %.2279 = phi float [ %148, %145 ], [ %.1278, %127 ]
  %.2275 = phi float [ %146, %145 ], [ %.1274, %127 ]
  store float %56, ptr %6, align 8, !tbaa !9
  %150 = getelementptr inbounds i8, ptr %6, i64 4
  store float %.0272, ptr %150, align 4, !tbaa !9
  %151 = getelementptr inbounds i8, ptr %6, i64 8
  store float %.2275, ptr %151, align 8, !tbaa !9
  %152 = getelementptr inbounds i8, ptr %6, i64 12
  store float %53, ptr %152, align 4, !tbaa !9
  %153 = getelementptr inbounds i8, ptr %6, i64 16
  store float %128, ptr %153, align 8, !tbaa !9
  %154 = getelementptr inbounds i8, ptr %6, i64 20
  store float %.2283, ptr %154, align 4, !tbaa !9
  %155 = getelementptr inbounds i8, ptr %6, i64 24
  store float %58, ptr %155, align 8, !tbaa !9
  %156 = getelementptr inbounds i8, ptr %6, i64 28
  store float %131, ptr %156, align 4, !tbaa !9
  %157 = getelementptr inbounds i8, ptr %6, i64 32
  store float %.2279, ptr %157, align 8, !tbaa !9
  %158 = tail call float @nifti_mat33_determ(ptr noundef nonnull byval(%struct.mat33) align 8 %6)
  %159 = fcmp oeq float %158, 0.000000e+00
  br i1 %159, label %265, label %.preheader303

.preheader303:                                    ; preds = %149
  %160 = getelementptr inbounds i8, ptr %5, i64 24
  %161 = getelementptr inbounds i8, ptr %5, i64 12
  %.sroa.442.0..sroa_idx = getelementptr inbounds i8, ptr %7, i64 16
  %.sroa.543.0..sroa_idx = getelementptr inbounds i8, ptr %7, i64 32
  br label %.preheader302

.preheader302:                                    ; preds = %.preheader303, %251
  %indvars.iv392 = phi i64 [ 1, %.preheader303 ], [ %indvars.iv.next393, %251 ]
  %.0353 = phi float [ -6.660000e+02, %.preheader303 ], [ %.8, %251 ]
  %.0205352 = phi i32 [ 1, %.preheader303 ], [ %.8213, %251 ]
  %.0214351 = phi i32 [ 1, %.preheader303 ], [ %.8222, %251 ]
  %.0223350 = phi i32 [ 1, %.preheader303 ], [ %.8231, %251 ]
  %.0232349 = phi i32 [ 3, %.preheader303 ], [ %.8240, %251 ]
  %.0241348 = phi i32 [ 2, %.preheader303 ], [ %.8249, %251 ]
  %.0250347 = phi i32 [ 1, %.preheader303 ], [ %.8258, %251 ]
  %.0262346 = phi i32 [ 0, %.preheader303 ], [ %.3265, %251 ]
  %162 = add nsw i64 %indvars.iv392, -1
  %163 = getelementptr inbounds [3 x float], ptr %5, i64 0, i64 %162
  %164 = trunc nuw nsw i64 %indvars.iv392 to i32
  br label %165

165:                                              ; preds = %.preheader302, %.loopexit301
  %indvars.iv388 = phi i64 [ 1, %.preheader302 ], [ %indvars.iv.next389, %.loopexit301 ]
  %.1344 = phi float [ %.0353, %.preheader302 ], [ %.8, %.loopexit301 ]
  %.1206343 = phi i32 [ %.0205352, %.preheader302 ], [ %.8213, %.loopexit301 ]
  %.1215342 = phi i32 [ %.0214351, %.preheader302 ], [ %.8222, %.loopexit301 ]
  %.1224341 = phi i32 [ %.0223350, %.preheader302 ], [ %.8231, %.loopexit301 ]
  %.1233340 = phi i32 [ %.0232349, %.preheader302 ], [ %.8240, %.loopexit301 ]
  %.1242339 = phi i32 [ %.0241348, %.preheader302 ], [ %.8249, %.loopexit301 ]
  %.1251338 = phi i32 [ %.0250347, %.preheader302 ], [ %.8258, %.loopexit301 ]
  %.1263337 = phi i32 [ %.0262346, %.preheader302 ], [ %.3265, %.loopexit301 ]
  %166 = icmp eq i64 %indvars.iv392, %indvars.iv388
  br i1 %166, label %.loopexit301, label %.preheader300

.preheader300:                                    ; preds = %165
  %167 = add nsw i64 %indvars.iv388, -1
  %168 = getelementptr inbounds [3 x float], ptr %161, i64 0, i64 %167
  %169 = trunc nuw nsw i64 %indvars.iv388 to i32
  br label %170

170:                                              ; preds = %.preheader300, %.loopexit
  %indvars.iv = phi i64 [ 1, %.preheader300 ], [ %indvars.iv.next, %.loopexit ]
  %.2335 = phi float [ %.1344, %.preheader300 ], [ %.7, %.loopexit ]
  %.2207334 = phi i32 [ %.1206343, %.preheader300 ], [ %.7212, %.loopexit ]
  %.2216333 = phi i32 [ %.1215342, %.preheader300 ], [ %.7221, %.loopexit ]
  %.2225332 = phi i32 [ %.1224341, %.preheader300 ], [ %.7230, %.loopexit ]
  %.2234331 = phi i32 [ %.1233340, %.preheader300 ], [ %.7239, %.loopexit ]
  %.2243330 = phi i32 [ %.1242339, %.preheader300 ], [ %.7248, %.loopexit ]
  %.2252329 = phi i32 [ %.1251338, %.preheader300 ], [ %.7257, %.loopexit ]
  %171 = icmp eq i64 %indvars.iv392, %indvars.iv
  %172 = icmp eq i64 %indvars.iv388, %indvars.iv
  %or.cond293 = or i1 %171, %172
  br i1 %or.cond293, label %.loopexit, label %.preheader299

.preheader299:                                    ; preds = %170
  %173 = add nsw i64 %indvars.iv, -1
  %174 = getelementptr inbounds [3 x float], ptr %160, i64 0, i64 %173
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(36) %5, i8 0, i64 36, i1 false)
  store float -1.000000e+00, ptr %163, align 4, !tbaa !9
  store float -1.000000e+00, ptr %168, align 4, !tbaa !9
  store float -1.000000e+00, ptr %174, align 4, !tbaa !9
  %175 = call float @nifti_mat33_determ(ptr noundef nonnull byval(%struct.mat33) align 8 %5)
  %176 = fmul float %158, %175
  %177 = fcmp ugt float %176, 0.000000e+00
  br i1 %177, label %178, label %184

178:                                              ; preds = %.preheader299
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %7) #5
  call void @nifti_mat33_mul(ptr dead_on_unwind nonnull writable sret(%struct.mat33) align 4 %7, ptr noundef nonnull byval(%struct.mat33) align 8 %5, ptr noundef nonnull byval(%struct.mat33) align 8 %6)
  %.sroa.0.0.copyload = load float, ptr %7, align 4
  %.sroa.442.0.copyload = load float, ptr %.sroa.442.0..sroa_idx, align 4
  %.sroa.543.0.copyload = load float, ptr %.sroa.543.0..sroa_idx, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %7) #5
  %179 = fadd float %.sroa.0.0.copyload, %.sroa.442.0.copyload
  %180 = fadd float %179, %.sroa.543.0.copyload
  %181 = fcmp ogt float %180, %.2335
  br i1 %181, label %182, label %184

182:                                              ; preds = %178
  %183 = trunc nuw nsw i64 %indvars.iv to i32
  br label %184

184:                                              ; preds = %178, %182, %.preheader299
  %.6256 = phi i32 [ %.2252329, %.preheader299 ], [ %164, %182 ], [ %.2252329, %178 ]
  %.6247 = phi i32 [ %.2243330, %.preheader299 ], [ %169, %182 ], [ %.2243330, %178 ]
  %.6238 = phi i32 [ %.2234331, %.preheader299 ], [ %183, %182 ], [ %.2234331, %178 ]
  %.6229 = phi i32 [ %.2225332, %.preheader299 ], [ -1, %182 ], [ %.2225332, %178 ]
  %.6220 = phi i32 [ %.2216333, %.preheader299 ], [ -1, %182 ], [ %.2216333, %178 ]
  %.6211 = phi i32 [ %.2207334, %.preheader299 ], [ -1, %182 ], [ %.2207334, %178 ]
  %.6 = phi float [ %.2335, %.preheader299 ], [ %180, %182 ], [ %.2335, %178 ]
  store float -1.000000e+00, ptr %163, align 4, !tbaa !9
  store float -1.000000e+00, ptr %168, align 4, !tbaa !9
  store float 1.000000e+00, ptr %174, align 4, !tbaa !9
  %185 = call float @nifti_mat33_determ(ptr noundef nonnull byval(%struct.mat33) align 8 %5)
  %186 = fmul float %158, %185
  %187 = fcmp ugt float %186, 0.000000e+00
  br i1 %187, label %188, label %.preheader.1

188:                                              ; preds = %184
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %7) #5
  call void @nifti_mat33_mul(ptr dead_on_unwind nonnull writable sret(%struct.mat33) align 4 %7, ptr noundef nonnull byval(%struct.mat33) align 8 %5, ptr noundef nonnull byval(%struct.mat33) align 8 %6)
  %.sroa.0.0.copyload.1 = load float, ptr %7, align 4
  %.sroa.442.0.copyload.1 = load float, ptr %.sroa.442.0..sroa_idx, align 4
  %.sroa.543.0.copyload.1 = load float, ptr %.sroa.543.0..sroa_idx, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %7) #5
  %189 = fadd float %.sroa.0.0.copyload.1, %.sroa.442.0.copyload.1
  %190 = fadd float %189, %.sroa.543.0.copyload.1
  %191 = fcmp ogt float %190, %.6
  br i1 %191, label %192, label %.preheader.1

192:                                              ; preds = %188
  %193 = trunc nuw nsw i64 %indvars.iv to i32
  br label %.preheader.1

.preheader.1:                                     ; preds = %192, %188, %184
  %.6256.1 = phi i32 [ %.6256, %184 ], [ %164, %192 ], [ %.6256, %188 ]
  %.6247.1 = phi i32 [ %.6247, %184 ], [ %169, %192 ], [ %.6247, %188 ]
  %.6238.1 = phi i32 [ %.6238, %184 ], [ %193, %192 ], [ %.6238, %188 ]
  %.6229.1 = phi i32 [ %.6229, %184 ], [ -1, %192 ], [ %.6229, %188 ]
  %.6220.1 = phi i32 [ %.6220, %184 ], [ -1, %192 ], [ %.6220, %188 ]
  %.6211.1 = phi i32 [ %.6211, %184 ], [ 1, %192 ], [ %.6211, %188 ]
  %.6.1 = phi float [ %.6, %184 ], [ %190, %192 ], [ %.6, %188 ]
  store float -1.000000e+00, ptr %163, align 4, !tbaa !9
  store float 1.000000e+00, ptr %168, align 4, !tbaa !9
  store float -1.000000e+00, ptr %174, align 4, !tbaa !9
  %194 = call float @nifti_mat33_determ(ptr noundef nonnull byval(%struct.mat33) align 8 %5)
  %195 = fmul float %158, %194
  %196 = fcmp ugt float %195, 0.000000e+00
  br i1 %196, label %197, label %203

197:                                              ; preds = %.preheader.1
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %7) #5
  call void @nifti_mat33_mul(ptr dead_on_unwind nonnull writable sret(%struct.mat33) align 4 %7, ptr noundef nonnull byval(%struct.mat33) align 8 %5, ptr noundef nonnull byval(%struct.mat33) align 8 %6)
  %.sroa.0.0.copyload.1356 = load float, ptr %7, align 4
  %.sroa.442.0.copyload.1357 = load float, ptr %.sroa.442.0..sroa_idx, align 4
  %.sroa.543.0.copyload.1358 = load float, ptr %.sroa.543.0..sroa_idx, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %7) #5
  %198 = fadd float %.sroa.0.0.copyload.1356, %.sroa.442.0.copyload.1357
  %199 = fadd float %198, %.sroa.543.0.copyload.1358
  %200 = fcmp ogt float %199, %.6.1
  br i1 %200, label %201, label %203

201:                                              ; preds = %197
  %202 = trunc nuw nsw i64 %indvars.iv to i32
  br label %203

203:                                              ; preds = %201, %197, %.preheader.1
  %.6256.1359 = phi i32 [ %.6256.1, %.preheader.1 ], [ %164, %201 ], [ %.6256.1, %197 ]
  %.6247.1360 = phi i32 [ %.6247.1, %.preheader.1 ], [ %169, %201 ], [ %.6247.1, %197 ]
  %.6238.1361 = phi i32 [ %.6238.1, %.preheader.1 ], [ %202, %201 ], [ %.6238.1, %197 ]
  %.6229.1362 = phi i32 [ %.6229.1, %.preheader.1 ], [ -1, %201 ], [ %.6229.1, %197 ]
  %.6220.1363 = phi i32 [ %.6220.1, %.preheader.1 ], [ 1, %201 ], [ %.6220.1, %197 ]
  %.6211.1364 = phi i32 [ %.6211.1, %.preheader.1 ], [ -1, %201 ], [ %.6211.1, %197 ]
  %.6.1365 = phi float [ %.6.1, %.preheader.1 ], [ %199, %201 ], [ %.6.1, %197 ]
  store float -1.000000e+00, ptr %163, align 4, !tbaa !9
  store float 1.000000e+00, ptr %168, align 4, !tbaa !9
  store float 1.000000e+00, ptr %174, align 4, !tbaa !9
  %204 = call float @nifti_mat33_determ(ptr noundef nonnull byval(%struct.mat33) align 8 %5)
  %205 = fmul float %158, %204
  %206 = fcmp ugt float %205, 0.000000e+00
  br i1 %206, label %207, label %.preheader299.1

207:                                              ; preds = %203
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %7) #5
  call void @nifti_mat33_mul(ptr dead_on_unwind nonnull writable sret(%struct.mat33) align 4 %7, ptr noundef nonnull byval(%struct.mat33) align 8 %5, ptr noundef nonnull byval(%struct.mat33) align 8 %6)
  %.sroa.0.0.copyload.1.1 = load float, ptr %7, align 4
  %.sroa.442.0.copyload.1.1 = load float, ptr %.sroa.442.0..sroa_idx, align 4
  %.sroa.543.0.copyload.1.1 = load float, ptr %.sroa.543.0..sroa_idx, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %7) #5
  %208 = fadd float %.sroa.0.0.copyload.1.1, %.sroa.442.0.copyload.1.1
  %209 = fadd float %208, %.sroa.543.0.copyload.1.1
  %210 = fcmp ogt float %209, %.6.1365
  br i1 %210, label %211, label %.preheader299.1

211:                                              ; preds = %207
  %212 = trunc nuw nsw i64 %indvars.iv to i32
  br label %.preheader299.1

.preheader299.1:                                  ; preds = %211, %207, %203
  %.6256.1.1 = phi i32 [ %.6256.1359, %203 ], [ %164, %211 ], [ %.6256.1359, %207 ]
  %.6247.1.1 = phi i32 [ %.6247.1360, %203 ], [ %169, %211 ], [ %.6247.1360, %207 ]
  %.6238.1.1 = phi i32 [ %.6238.1361, %203 ], [ %212, %211 ], [ %.6238.1361, %207 ]
  %.6229.1.1 = phi i32 [ %.6229.1362, %203 ], [ -1, %211 ], [ %.6229.1362, %207 ]
  %.6220.1.1 = phi i32 [ %.6220.1363, %203 ], [ 1, %211 ], [ %.6220.1363, %207 ]
  %.6211.1.1 = phi i32 [ %.6211.1364, %203 ], [ 1, %211 ], [ %.6211.1364, %207 ]
  %.6.1.1 = phi float [ %.6.1365, %203 ], [ %209, %211 ], [ %.6.1365, %207 ]
  store float 1.000000e+00, ptr %163, align 4, !tbaa !9
  store float -1.000000e+00, ptr %168, align 4, !tbaa !9
  store float -1.000000e+00, ptr %174, align 4, !tbaa !9
  %213 = call float @nifti_mat33_determ(ptr noundef nonnull byval(%struct.mat33) align 8 %5)
  %214 = fmul float %158, %213
  %215 = fcmp ugt float %214, 0.000000e+00
  br i1 %215, label %216, label %222

216:                                              ; preds = %.preheader299.1
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %7) #5
  call void @nifti_mat33_mul(ptr dead_on_unwind nonnull writable sret(%struct.mat33) align 4 %7, ptr noundef nonnull byval(%struct.mat33) align 8 %5, ptr noundef nonnull byval(%struct.mat33) align 8 %6)
  %.sroa.0.0.copyload.1367 = load float, ptr %7, align 4
  %.sroa.442.0.copyload.1368 = load float, ptr %.sroa.442.0..sroa_idx, align 4
  %.sroa.543.0.copyload.1369 = load float, ptr %.sroa.543.0..sroa_idx, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %7) #5
  %217 = fadd float %.sroa.0.0.copyload.1367, %.sroa.442.0.copyload.1368
  %218 = fadd float %217, %.sroa.543.0.copyload.1369
  %219 = fcmp ogt float %218, %.6.1.1
  br i1 %219, label %220, label %222

220:                                              ; preds = %216
  %221 = trunc nuw nsw i64 %indvars.iv to i32
  br label %222

222:                                              ; preds = %220, %216, %.preheader299.1
  %.6256.1370 = phi i32 [ %.6256.1.1, %.preheader299.1 ], [ %164, %220 ], [ %.6256.1.1, %216 ]
  %.6247.1371 = phi i32 [ %.6247.1.1, %.preheader299.1 ], [ %169, %220 ], [ %.6247.1.1, %216 ]
  %.6238.1372 = phi i32 [ %.6238.1.1, %.preheader299.1 ], [ %221, %220 ], [ %.6238.1.1, %216 ]
  %.6229.1373 = phi i32 [ %.6229.1.1, %.preheader299.1 ], [ 1, %220 ], [ %.6229.1.1, %216 ]
  %.6220.1374 = phi i32 [ %.6220.1.1, %.preheader299.1 ], [ -1, %220 ], [ %.6220.1.1, %216 ]
  %.6211.1375 = phi i32 [ %.6211.1.1, %.preheader299.1 ], [ -1, %220 ], [ %.6211.1.1, %216 ]
  %.6.1376 = phi float [ %.6.1.1, %.preheader299.1 ], [ %218, %220 ], [ %.6.1.1, %216 ]
  store float 1.000000e+00, ptr %163, align 4, !tbaa !9
  store float -1.000000e+00, ptr %168, align 4, !tbaa !9
  store float 1.000000e+00, ptr %174, align 4, !tbaa !9
  %223 = call float @nifti_mat33_determ(ptr noundef nonnull byval(%struct.mat33) align 8 %5)
  %224 = fmul float %158, %223
  %225 = fcmp ugt float %224, 0.000000e+00
  br i1 %225, label %226, label %.preheader.1.1

226:                                              ; preds = %222
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %7) #5
  call void @nifti_mat33_mul(ptr dead_on_unwind nonnull writable sret(%struct.mat33) align 4 %7, ptr noundef nonnull byval(%struct.mat33) align 8 %5, ptr noundef nonnull byval(%struct.mat33) align 8 %6)
  %.sroa.0.0.copyload.1.1377 = load float, ptr %7, align 4
  %.sroa.442.0.copyload.1.1378 = load float, ptr %.sroa.442.0..sroa_idx, align 4
  %.sroa.543.0.copyload.1.1379 = load float, ptr %.sroa.543.0..sroa_idx, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %7) #5
  %227 = fadd float %.sroa.0.0.copyload.1.1377, %.sroa.442.0.copyload.1.1378
  %228 = fadd float %227, %.sroa.543.0.copyload.1.1379
  %229 = fcmp ogt float %228, %.6.1376
  br i1 %229, label %230, label %.preheader.1.1

230:                                              ; preds = %226
  %231 = trunc nuw nsw i64 %indvars.iv to i32
  br label %.preheader.1.1

.preheader.1.1:                                   ; preds = %230, %226, %222
  %.6256.1.1380 = phi i32 [ %.6256.1370, %222 ], [ %164, %230 ], [ %.6256.1370, %226 ]
  %.6247.1.1381 = phi i32 [ %.6247.1371, %222 ], [ %169, %230 ], [ %.6247.1371, %226 ]
  %.6238.1.1382 = phi i32 [ %.6238.1372, %222 ], [ %231, %230 ], [ %.6238.1372, %226 ]
  %.6229.1.1383 = phi i32 [ %.6229.1373, %222 ], [ 1, %230 ], [ %.6229.1373, %226 ]
  %.6220.1.1384 = phi i32 [ %.6220.1374, %222 ], [ -1, %230 ], [ %.6220.1374, %226 ]
  %.6211.1.1385 = phi i32 [ %.6211.1375, %222 ], [ 1, %230 ], [ %.6211.1375, %226 ]
  %.6.1.1386 = phi float [ %.6.1376, %222 ], [ %228, %230 ], [ %.6.1376, %226 ]
  store float 1.000000e+00, ptr %163, align 4, !tbaa !9
  store float 1.000000e+00, ptr %168, align 4, !tbaa !9
  store float -1.000000e+00, ptr %174, align 4, !tbaa !9
  %232 = call float @nifti_mat33_determ(ptr noundef nonnull byval(%struct.mat33) align 8 %5)
  %233 = fmul float %158, %232
  %234 = fcmp ugt float %233, 0.000000e+00
  br i1 %234, label %235, label %241

235:                                              ; preds = %.preheader.1.1
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %7) #5
  call void @nifti_mat33_mul(ptr dead_on_unwind nonnull writable sret(%struct.mat33) align 4 %7, ptr noundef nonnull byval(%struct.mat33) align 8 %5, ptr noundef nonnull byval(%struct.mat33) align 8 %6)
  %.sroa.0.0.copyload.1356.1 = load float, ptr %7, align 4
  %.sroa.442.0.copyload.1357.1 = load float, ptr %.sroa.442.0..sroa_idx, align 4
  %.sroa.543.0.copyload.1358.1 = load float, ptr %.sroa.543.0..sroa_idx, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %7) #5
  %236 = fadd float %.sroa.0.0.copyload.1356.1, %.sroa.442.0.copyload.1357.1
  %237 = fadd float %236, %.sroa.543.0.copyload.1358.1
  %238 = fcmp ogt float %237, %.6.1.1386
  br i1 %238, label %239, label %241

239:                                              ; preds = %235
  %240 = trunc nuw nsw i64 %indvars.iv to i32
  br label %241

241:                                              ; preds = %239, %235, %.preheader.1.1
  %.6256.1359.1 = phi i32 [ %.6256.1.1380, %.preheader.1.1 ], [ %164, %239 ], [ %.6256.1.1380, %235 ]
  %.6247.1360.1 = phi i32 [ %.6247.1.1381, %.preheader.1.1 ], [ %169, %239 ], [ %.6247.1.1381, %235 ]
  %.6238.1361.1 = phi i32 [ %.6238.1.1382, %.preheader.1.1 ], [ %240, %239 ], [ %.6238.1.1382, %235 ]
  %.6229.1362.1 = phi i32 [ %.6229.1.1383, %.preheader.1.1 ], [ 1, %239 ], [ %.6229.1.1383, %235 ]
  %.6220.1363.1 = phi i32 [ %.6220.1.1384, %.preheader.1.1 ], [ 1, %239 ], [ %.6220.1.1384, %235 ]
  %.6211.1364.1 = phi i32 [ %.6211.1.1385, %.preheader.1.1 ], [ -1, %239 ], [ %.6211.1.1385, %235 ]
  %.6.1365.1 = phi float [ %.6.1.1386, %.preheader.1.1 ], [ %237, %239 ], [ %.6.1.1386, %235 ]
  store float 1.000000e+00, ptr %163, align 4, !tbaa !9
  store float 1.000000e+00, ptr %168, align 4, !tbaa !9
  store float 1.000000e+00, ptr %174, align 4, !tbaa !9
  %242 = call float @nifti_mat33_determ(ptr noundef nonnull byval(%struct.mat33) align 8 %5)
  %243 = fmul float %158, %242
  %244 = fcmp ugt float %243, 0.000000e+00
  br i1 %244, label %245, label %.loopexit

245:                                              ; preds = %241
  call void @llvm.lifetime.start.p0(i64 36, ptr nonnull %7) #5
  call void @nifti_mat33_mul(ptr dead_on_unwind nonnull writable sret(%struct.mat33) align 4 %7, ptr noundef nonnull byval(%struct.mat33) align 8 %5, ptr noundef nonnull byval(%struct.mat33) align 8 %6)
  %.sroa.0.0.copyload.1.1.1 = load float, ptr %7, align 4
  %.sroa.442.0.copyload.1.1.1 = load float, ptr %.sroa.442.0..sroa_idx, align 4
  %.sroa.543.0.copyload.1.1.1 = load float, ptr %.sroa.543.0..sroa_idx, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %7) #5
  %246 = fadd float %.sroa.0.0.copyload.1.1.1, %.sroa.442.0.copyload.1.1.1
  %247 = fadd float %246, %.sroa.543.0.copyload.1.1.1
  %248 = fcmp ogt float %247, %.6.1365.1
  br i1 %248, label %249, label %.loopexit

249:                                              ; preds = %245
  %250 = trunc nuw nsw i64 %indvars.iv to i32
  br label %.loopexit

.loopexit:                                        ; preds = %241, %245, %249, %170
  %.7257 = phi i32 [ %.2252329, %170 ], [ %.6256.1359.1, %241 ], [ %164, %249 ], [ %.6256.1359.1, %245 ]
  %.7248 = phi i32 [ %.2243330, %170 ], [ %.6247.1360.1, %241 ], [ %169, %249 ], [ %.6247.1360.1, %245 ]
  %.7239 = phi i32 [ %.2234331, %170 ], [ %.6238.1361.1, %241 ], [ %250, %249 ], [ %.6238.1361.1, %245 ]
  %.7230 = phi i32 [ %.2225332, %170 ], [ %.6229.1362.1, %241 ], [ 1, %249 ], [ %.6229.1362.1, %245 ]
  %.7221 = phi i32 [ %.2216333, %170 ], [ %.6220.1363.1, %241 ], [ 1, %249 ], [ %.6220.1363.1, %245 ]
  %.7212 = phi i32 [ %.2207334, %170 ], [ %.6211.1364.1, %241 ], [ 1, %249 ], [ %.6211.1364.1, %245 ]
  %.7 = phi float [ %.2335, %170 ], [ %.6.1365.1, %241 ], [ %247, %249 ], [ %.6.1365.1, %245 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, 4
  br i1 %exitcond.not, label %.loopexit301, label %170, !llvm.loop !12

.loopexit301:                                     ; preds = %.loopexit, %165
  %.3265 = phi i32 [ %.1263337, %165 ], [ 4, %.loopexit ]
  %.8258 = phi i32 [ %.1251338, %165 ], [ %.7257, %.loopexit ]
  %.8249 = phi i32 [ %.1242339, %165 ], [ %.7248, %.loopexit ]
  %.8240 = phi i32 [ %.1233340, %165 ], [ %.7239, %.loopexit ]
  %.8231 = phi i32 [ %.1224341, %165 ], [ %.7230, %.loopexit ]
  %.8222 = phi i32 [ %.1215342, %165 ], [ %.7221, %.loopexit ]
  %.8213 = phi i32 [ %.1206343, %165 ], [ %.7212, %.loopexit ]
  %.8 = phi float [ %.1344, %165 ], [ %.7, %.loopexit ]
  %indvars.iv.next389 = add nuw nsw i64 %indvars.iv388, 1
  %exitcond391.not = icmp eq i64 %indvars.iv.next389, 4
  br i1 %exitcond391.not, label %251, label %165, !llvm.loop !14

251:                                              ; preds = %.loopexit301
  %indvars.iv.next393 = add nuw nsw i64 %indvars.iv392, 1
  %exitcond395.not = icmp eq i64 %indvars.iv.next393, 4
  br i1 %exitcond395.not, label %252, label %.preheader302, !llvm.loop !15

252:                                              ; preds = %251
  %253 = mul nsw i32 %.8231, %.8258
  %switch.tableidx = add i32 %253, 3
  %254 = icmp ult i32 %switch.tableidx, 7
  br i1 %254, label %switch.lookup, label %256

switch.lookup:                                    ; preds = %252
  %255 = zext nneg i32 %switch.tableidx to i64
  %switch.gep = getelementptr inbounds [7 x i32], ptr @switch.table.nifti_mat44_to_orientation.1, i64 0, i64 %255
  %switch.load = load i32, ptr %switch.gep, align 4
  br label %256

256:                                              ; preds = %switch.lookup, %252
  %.1271 = phi i32 [ 4, %252 ], [ %switch.load, %switch.lookup ]
  %257 = mul nsw i32 %.8222, %.8249
  %switch.tableidx397 = add i32 %257, 3
  %258 = icmp ult i32 %switch.tableidx397, 7
  br i1 %258, label %switch.lookup396, label %260

switch.lookup396:                                 ; preds = %256
  %259 = zext nneg i32 %switch.tableidx397 to i64
  %switch.gep398 = getelementptr inbounds [7 x i32], ptr @switch.table.nifti_mat44_to_orientation.1, i64 0, i64 %259
  %switch.load399 = load i32, ptr %switch.gep398, align 4
  br label %260

260:                                              ; preds = %switch.lookup396, %256
  %.2269 = phi i32 [ 4, %256 ], [ %switch.load399, %switch.lookup396 ]
  %261 = mul nsw i32 %.8213, %.8240
  %switch.tableidx401 = add i32 %261, 3
  %262 = icmp ult i32 %switch.tableidx401, 7
  br i1 %262, label %switch.hole_check, label %264

switch.hole_check:                                ; preds = %260
  %switch.maskindex = trunc nuw i32 %switch.tableidx401 to i8
  %switch.shifted = lshr i8 119, %switch.maskindex
  %switch.lobit = trunc i8 %switch.shifted to i1
  br i1 %switch.lobit, label %switch.lookup402, label %264

switch.lookup402:                                 ; preds = %switch.hole_check
  %263 = zext nneg i32 %switch.tableidx401 to i64
  %switch.gep403 = getelementptr inbounds [7 x i32], ptr @switch.table.nifti_mat44_to_orientation.2, i64 0, i64 %263
  %switch.load404 = load i32, ptr %switch.gep403, align 4
  br label %264

264:                                              ; preds = %switch.lookup402, %switch.hole_check, %260
  %.4266 = phi i32 [ %.3265, %260 ], [ %.3265, %switch.hole_check ], [ %switch.load404, %switch.lookup402 ]
  store i32 %.1271, ptr %1, align 4, !tbaa !5
  store i32 %.2269, ptr %2, align 4, !tbaa !5
  store i32 %.4266, ptr %3, align 4, !tbaa !5
  br label %265

265:                                              ; preds = %149, %136, %114, %64, %33, %11, %4, %264
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %6) #5
  call void @llvm.lifetime.end.p0(i64 36, ptr nonnull %5) #5
  ret void
}

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

; Function Attrs: nounwind uwtable
declare dso_local float @nifti_mat33_determ(ptr noundef byval(%struct.mat33) align 8) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local void @nifti_mat33_mul(ptr dead_on_unwind noalias writable sret(%struct.mat33) align 4, ptr noundef byval(%struct.mat33) align 8, ptr noundef byval(%struct.mat33) align 8) local_unnamed_addr #1

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #4

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: write) }
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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"float", !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = distinct !{!14, !13}
!15 = distinct !{!15, !13}


; Effective O3 passes: AggressiveInstCombinePass,ConstantMergePass,EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,MemCpyOptPass,PostOrderFunctionAttrsPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass,VectorCombinePass