; LLVM IR from aap/librw :: src/base.ll (ZN2rw9RawMatrix4multEPS0_S1_S1_)

; 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.rw::RawMatrix" = type { %"struct.rw::V3d", float, %"struct.rw::V3d", float, %"struct.rw::V3d", float, %"struct.rw::V3d", float }
%"struct.rw::V3d" = type { float, float, float }

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

; Function Attrs: mustprogress nounwind uwtable
define dso_local void @_ZN2rw9RawMatrix4multEPS0_S1_S1_(ptr noundef %0, ptr noundef %1, ptr noundef %2) #1 align 2 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  %7 = load ptr, ptr %5, align 8, !tbaa !5
  %8 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %7, i32 0, i32 0
  %9 = getelementptr inbounds %"struct.rw::V3d", ptr %8, i32 0, i32 0
  %10 = load float, ptr %9, align 4, !tbaa !9
  %11 = load ptr, ptr %6, align 8, !tbaa !5
  %12 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %11, i32 0, i32 0
  %13 = getelementptr inbounds %"struct.rw::V3d", ptr %12, i32 0, i32 0
  %14 = load float, ptr %13, align 4, !tbaa !9
  %15 = load ptr, ptr %5, align 8, !tbaa !5
  %16 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %15, i32 0, i32 0
  %17 = getelementptr inbounds %"struct.rw::V3d", ptr %16, i32 0, i32 1
  %18 = load float, ptr %17, align 4, !tbaa !13
  %19 = load ptr, ptr %6, align 8, !tbaa !5
  %20 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %19, i32 0, i32 2
  %21 = getelementptr inbounds %"struct.rw::V3d", ptr %20, i32 0, i32 0
  %22 = load float, ptr %21, align 4, !tbaa !14
  %23 = fmul float %18, %22
  %24 = call float @llvm.fmuladd.f32(float %10, float %14, float %23)
  %25 = load ptr, ptr %5, align 8, !tbaa !5
  %26 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %25, i32 0, i32 0
  %27 = getelementptr inbounds %"struct.rw::V3d", ptr %26, i32 0, i32 2
  %28 = load float, ptr %27, align 4, !tbaa !15
  %29 = load ptr, ptr %6, align 8, !tbaa !5
  %30 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %29, i32 0, i32 4
  %31 = getelementptr inbounds %"struct.rw::V3d", ptr %30, i32 0, i32 0
  %32 = load float, ptr %31, align 4, !tbaa !16
  %33 = call float @llvm.fmuladd.f32(float %28, float %32, float %24)
  %34 = load ptr, ptr %5, align 8, !tbaa !5
  %35 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %34, i32 0, i32 1
  %36 = load float, ptr %35, align 4, !tbaa !17
  %37 = load ptr, ptr %6, align 8, !tbaa !5
  %38 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %37, i32 0, i32 6
  %39 = getelementptr inbounds %"struct.rw::V3d", ptr %38, i32 0, i32 0
  %40 = load float, ptr %39, align 4, !tbaa !18
  %41 = call float @llvm.fmuladd.f32(float %36, float %40, float %33)
  %42 = load ptr, ptr %4, align 8, !tbaa !5
  %43 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %42, i32 0, i32 0
  %44 = getelementptr inbounds %"struct.rw::V3d", ptr %43, i32 0, i32 0
  store float %41, ptr %44, align 4, !tbaa !9
  %45 = load ptr, ptr %5, align 8, !tbaa !5
  %46 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %45, i32 0, i32 0
  %47 = getelementptr inbounds %"struct.rw::V3d", ptr %46, i32 0, i32 0
  %48 = load float, ptr %47, align 4, !tbaa !9
  %49 = load ptr, ptr %6, align 8, !tbaa !5
  %50 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %49, i32 0, i32 0
  %51 = getelementptr inbounds %"struct.rw::V3d", ptr %50, i32 0, i32 1
  %52 = load float, ptr %51, align 4, !tbaa !13
  %53 = load ptr, ptr %5, align 8, !tbaa !5
  %54 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %53, i32 0, i32 0
  %55 = getelementptr inbounds %"struct.rw::V3d", ptr %54, i32 0, i32 1
  %56 = load float, ptr %55, align 4, !tbaa !13
  %57 = load ptr, ptr %6, align 8, !tbaa !5
  %58 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %57, i32 0, i32 2
  %59 = getelementptr inbounds %"struct.rw::V3d", ptr %58, i32 0, i32 1
  %60 = load float, ptr %59, align 4, !tbaa !19
  %61 = fmul float %56, %60
  %62 = call float @llvm.fmuladd.f32(float %48, float %52, float %61)
  %63 = load ptr, ptr %5, align 8, !tbaa !5
  %64 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %63, i32 0, i32 0
  %65 = getelementptr inbounds %"struct.rw::V3d", ptr %64, i32 0, i32 2
  %66 = load float, ptr %65, align 4, !tbaa !15
  %67 = load ptr, ptr %6, align 8, !tbaa !5
  %68 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %67, i32 0, i32 4
  %69 = getelementptr inbounds %"struct.rw::V3d", ptr %68, i32 0, i32 1
  %70 = load float, ptr %69, align 4, !tbaa !20
  %71 = call float @llvm.fmuladd.f32(float %66, float %70, float %62)
  %72 = load ptr, ptr %5, align 8, !tbaa !5
  %73 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %72, i32 0, i32 1
  %74 = load float, ptr %73, align 4, !tbaa !17
  %75 = load ptr, ptr %6, align 8, !tbaa !5
  %76 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %75, i32 0, i32 6
  %77 = getelementptr inbounds %"struct.rw::V3d", ptr %76, i32 0, i32 1
  %78 = load float, ptr %77, align 4, !tbaa !21
  %79 = call float @llvm.fmuladd.f32(float %74, float %78, float %71)
  %80 = load ptr, ptr %4, align 8, !tbaa !5
  %81 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %80, i32 0, i32 0
  %82 = getelementptr inbounds %"struct.rw::V3d", ptr %81, i32 0, i32 1
  store float %79, ptr %82, align 4, !tbaa !13
  %83 = load ptr, ptr %5, align 8, !tbaa !5
  %84 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %83, i32 0, i32 0
  %85 = getelementptr inbounds %"struct.rw::V3d", ptr %84, i32 0, i32 0
  %86 = load float, ptr %85, align 4, !tbaa !9
  %87 = load ptr, ptr %6, align 8, !tbaa !5
  %88 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %87, i32 0, i32 0
  %89 = getelementptr inbounds %"struct.rw::V3d", ptr %88, i32 0, i32 2
  %90 = load float, ptr %89, align 4, !tbaa !15
  %91 = load ptr, ptr %5, align 8, !tbaa !5
  %92 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %91, i32 0, i32 0
  %93 = getelementptr inbounds %"struct.rw::V3d", ptr %92, i32 0, i32 1
  %94 = load float, ptr %93, align 4, !tbaa !13
  %95 = load ptr, ptr %6, align 8, !tbaa !5
  %96 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %95, i32 0, i32 2
  %97 = getelementptr inbounds %"struct.rw::V3d", ptr %96, i32 0, i32 2
  %98 = load float, ptr %97, align 4, !tbaa !22
  %99 = fmul float %94, %98
  %100 = call float @llvm.fmuladd.f32(float %86, float %90, float %99)
  %101 = load ptr, ptr %5, align 8, !tbaa !5
  %102 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %101, i32 0, i32 0
  %103 = getelementptr inbounds %"struct.rw::V3d", ptr %102, i32 0, i32 2
  %104 = load float, ptr %103, align 4, !tbaa !15
  %105 = load ptr, ptr %6, align 8, !tbaa !5
  %106 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %105, i32 0, i32 4
  %107 = getelementptr inbounds %"struct.rw::V3d", ptr %106, i32 0, i32 2
  %108 = load float, ptr %107, align 4, !tbaa !23
  %109 = call float @llvm.fmuladd.f32(float %104, float %108, float %100)
  %110 = load ptr, ptr %5, align 8, !tbaa !5
  %111 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %110, i32 0, i32 1
  %112 = load float, ptr %111, align 4, !tbaa !17
  %113 = load ptr, ptr %6, align 8, !tbaa !5
  %114 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %113, i32 0, i32 6
  %115 = getelementptr inbounds %"struct.rw::V3d", ptr %114, i32 0, i32 2
  %116 = load float, ptr %115, align 4, !tbaa !24
  %117 = call float @llvm.fmuladd.f32(float %112, float %116, float %109)
  %118 = load ptr, ptr %4, align 8, !tbaa !5
  %119 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %118, i32 0, i32 0
  %120 = getelementptr inbounds %"struct.rw::V3d", ptr %119, i32 0, i32 2
  store float %117, ptr %120, align 4, !tbaa !15
  %121 = load ptr, ptr %5, align 8, !tbaa !5
  %122 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %121, i32 0, i32 0
  %123 = getelementptr inbounds %"struct.rw::V3d", ptr %122, i32 0, i32 0
  %124 = load float, ptr %123, align 4, !tbaa !9
  %125 = load ptr, ptr %6, align 8, !tbaa !5
  %126 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %125, i32 0, i32 1
  %127 = load float, ptr %126, align 4, !tbaa !17
  %128 = load ptr, ptr %5, align 8, !tbaa !5
  %129 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %128, i32 0, i32 0
  %130 = getelementptr inbounds %"struct.rw::V3d", ptr %129, i32 0, i32 1
  %131 = load float, ptr %130, align 4, !tbaa !13
  %132 = load ptr, ptr %6, align 8, !tbaa !5
  %133 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %132, i32 0, i32 3
  %134 = load float, ptr %133, align 4, !tbaa !25
  %135 = fmul float %131, %134
  %136 = call float @llvm.fmuladd.f32(float %124, float %127, float %135)
  %137 = load ptr, ptr %5, align 8, !tbaa !5
  %138 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %137, i32 0, i32 0
  %139 = getelementptr inbounds %"struct.rw::V3d", ptr %138, i32 0, i32 2
  %140 = load float, ptr %139, align 4, !tbaa !15
  %141 = load ptr, ptr %6, align 8, !tbaa !5
  %142 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %141, i32 0, i32 5
  %143 = load float, ptr %142, align 4, !tbaa !26
  %144 = call float @llvm.fmuladd.f32(float %140, float %143, float %136)
  %145 = load ptr, ptr %5, align 8, !tbaa !5
  %146 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %145, i32 0, i32 1
  %147 = load float, ptr %146, align 4, !tbaa !17
  %148 = load ptr, ptr %6, align 8, !tbaa !5
  %149 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %148, i32 0, i32 7
  %150 = load float, ptr %149, align 4, !tbaa !27
  %151 = call float @llvm.fmuladd.f32(float %147, float %150, float %144)
  %152 = load ptr, ptr %4, align 8, !tbaa !5
  %153 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %152, i32 0, i32 1
  store float %151, ptr %153, align 4, !tbaa !17
  %154 = load ptr, ptr %5, align 8, !tbaa !5
  %155 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %154, i32 0, i32 2
  %156 = getelementptr inbounds %"struct.rw::V3d", ptr %155, i32 0, i32 0
  %157 = load float, ptr %156, align 4, !tbaa !14
  %158 = load ptr, ptr %6, align 8, !tbaa !5
  %159 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %158, i32 0, i32 0
  %160 = getelementptr inbounds %"struct.rw::V3d", ptr %159, i32 0, i32 0
  %161 = load float, ptr %160, align 4, !tbaa !9
  %162 = load ptr, ptr %5, align 8, !tbaa !5
  %163 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %162, i32 0, i32 2
  %164 = getelementptr inbounds %"struct.rw::V3d", ptr %163, i32 0, i32 1
  %165 = load float, ptr %164, align 4, !tbaa !19
  %166 = load ptr, ptr %6, align 8, !tbaa !5
  %167 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %166, i32 0, i32 2
  %168 = getelementptr inbounds %"struct.rw::V3d", ptr %167, i32 0, i32 0
  %169 = load float, ptr %168, align 4, !tbaa !14
  %170 = fmul float %165, %169
  %171 = call float @llvm.fmuladd.f32(float %157, float %161, float %170)
  %172 = load ptr, ptr %5, align 8, !tbaa !5
  %173 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %172, i32 0, i32 2
  %174 = getelementptr inbounds %"struct.rw::V3d", ptr %173, i32 0, i32 2
  %175 = load float, ptr %174, align 4, !tbaa !22
  %176 = load ptr, ptr %6, align 8, !tbaa !5
  %177 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %176, i32 0, i32 4
  %178 = getelementptr inbounds %"struct.rw::V3d", ptr %177, i32 0, i32 0
  %179 = load float, ptr %178, align 4, !tbaa !16
  %180 = call float @llvm.fmuladd.f32(float %175, float %179, float %171)
  %181 = load ptr, ptr %5, align 8, !tbaa !5
  %182 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %181, i32 0, i32 3
  %183 = load float, ptr %182, align 4, !tbaa !25
  %184 = load ptr, ptr %6, align 8, !tbaa !5
  %185 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %184, i32 0, i32 6
  %186 = getelementptr inbounds %"struct.rw::V3d", ptr %185, i32 0, i32 0
  %187 = load float, ptr %186, align 4, !tbaa !18
  %188 = call float @llvm.fmuladd.f32(float %183, float %187, float %180)
  %189 = load ptr, ptr %4, align 8, !tbaa !5
  %190 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %189, i32 0, i32 2
  %191 = getelementptr inbounds %"struct.rw::V3d", ptr %190, i32 0, i32 0
  store float %188, ptr %191, align 4, !tbaa !14
  %192 = load ptr, ptr %5, align 8, !tbaa !5
  %193 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %192, i32 0, i32 2
  %194 = getelementptr inbounds %"struct.rw::V3d", ptr %193, i32 0, i32 0
  %195 = load float, ptr %194, align 4, !tbaa !14
  %196 = load ptr, ptr %6, align 8, !tbaa !5
  %197 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %196, i32 0, i32 0
  %198 = getelementptr inbounds %"struct.rw::V3d", ptr %197, i32 0, i32 1
  %199 = load float, ptr %198, align 4, !tbaa !13
  %200 = load ptr, ptr %5, align 8, !tbaa !5
  %201 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %200, i32 0, i32 2
  %202 = getelementptr inbounds %"struct.rw::V3d", ptr %201, i32 0, i32 1
  %203 = load float, ptr %202, align 4, !tbaa !19
  %204 = load ptr, ptr %6, align 8, !tbaa !5
  %205 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %204, i32 0, i32 2
  %206 = getelementptr inbounds %"struct.rw::V3d", ptr %205, i32 0, i32 1
  %207 = load float, ptr %206, align 4, !tbaa !19
  %208 = fmul float %203, %207
  %209 = call float @llvm.fmuladd.f32(float %195, float %199, float %208)
  %210 = load ptr, ptr %5, align 8, !tbaa !5
  %211 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %210, i32 0, i32 2
  %212 = getelementptr inbounds %"struct.rw::V3d", ptr %211, i32 0, i32 2
  %213 = load float, ptr %212, align 4, !tbaa !22
  %214 = load ptr, ptr %6, align 8, !tbaa !5
  %215 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %214, i32 0, i32 4
  %216 = getelementptr inbounds %"struct.rw::V3d", ptr %215, i32 0, i32 1
  %217 = load float, ptr %216, align 4, !tbaa !20
  %218 = call float @llvm.fmuladd.f32(float %213, float %217, float %209)
  %219 = load ptr, ptr %5, align 8, !tbaa !5
  %220 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %219, i32 0, i32 3
  %221 = load float, ptr %220, align 4, !tbaa !25
  %222 = load ptr, ptr %6, align 8, !tbaa !5
  %223 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %222, i32 0, i32 6
  %224 = getelementptr inbounds %"struct.rw::V3d", ptr %223, i32 0, i32 1
  %225 = load float, ptr %224, align 4, !tbaa !21
  %226 = call float @llvm.fmuladd.f32(float %221, float %225, float %218)
  %227 = load ptr, ptr %4, align 8, !tbaa !5
  %228 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %227, i32 0, i32 2
  %229 = getelementptr inbounds %"struct.rw::V3d", ptr %228, i32 0, i32 1
  store float %226, ptr %229, align 4, !tbaa !19
  %230 = load ptr, ptr %5, align 8, !tbaa !5
  %231 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %230, i32 0, i32 2
  %232 = getelementptr inbounds %"struct.rw::V3d", ptr %231, i32 0, i32 0
  %233 = load float, ptr %232, align 4, !tbaa !14
  %234 = load ptr, ptr %6, align 8, !tbaa !5
  %235 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %234, i32 0, i32 0
  %236 = getelementptr inbounds %"struct.rw::V3d", ptr %235, i32 0, i32 2
  %237 = load float, ptr %236, align 4, !tbaa !15
  %238 = load ptr, ptr %5, align 8, !tbaa !5
  %239 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %238, i32 0, i32 2
  %240 = getelementptr inbounds %"struct.rw::V3d", ptr %239, i32 0, i32 1
  %241 = load float, ptr %240, align 4, !tbaa !19
  %242 = load ptr, ptr %6, align 8, !tbaa !5
  %243 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %242, i32 0, i32 2
  %244 = getelementptr inbounds %"struct.rw::V3d", ptr %243, i32 0, i32 2
  %245 = load float, ptr %244, align 4, !tbaa !22
  %246 = fmul float %241, %245
  %247 = call float @llvm.fmuladd.f32(float %233, float %237, float %246)
  %248 = load ptr, ptr %5, align 8, !tbaa !5
  %249 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %248, i32 0, i32 2
  %250 = getelementptr inbounds %"struct.rw::V3d", ptr %249, i32 0, i32 2
  %251 = load float, ptr %250, align 4, !tbaa !22
  %252 = load ptr, ptr %6, align 8, !tbaa !5
  %253 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %252, i32 0, i32 4
  %254 = getelementptr inbounds %"struct.rw::V3d", ptr %253, i32 0, i32 2
  %255 = load float, ptr %254, align 4, !tbaa !23
  %256 = call float @llvm.fmuladd.f32(float %251, float %255, float %247)
  %257 = load ptr, ptr %5, align 8, !tbaa !5
  %258 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %257, i32 0, i32 3
  %259 = load float, ptr %258, align 4, !tbaa !25
  %260 = load ptr, ptr %6, align 8, !tbaa !5
  %261 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %260, i32 0, i32 6
  %262 = getelementptr inbounds %"struct.rw::V3d", ptr %261, i32 0, i32 2
  %263 = load float, ptr %262, align 4, !tbaa !24
  %264 = call float @llvm.fmuladd.f32(float %259, float %263, float %256)
  %265 = load ptr, ptr %4, align 8, !tbaa !5
  %266 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %265, i32 0, i32 2
  %267 = getelementptr inbounds %"struct.rw::V3d", ptr %266, i32 0, i32 2
  store float %264, ptr %267, align 4, !tbaa !22
  %268 = load ptr, ptr %5, align 8, !tbaa !5
  %269 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %268, i32 0, i32 2
  %270 = getelementptr inbounds %"struct.rw::V3d", ptr %269, i32 0, i32 0
  %271 = load float, ptr %270, align 4, !tbaa !14
  %272 = load ptr, ptr %6, align 8, !tbaa !5
  %273 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %272, i32 0, i32 1
  %274 = load float, ptr %273, align 4, !tbaa !17
  %275 = load ptr, ptr %5, align 8, !tbaa !5
  %276 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %275, i32 0, i32 2
  %277 = getelementptr inbounds %"struct.rw::V3d", ptr %276, i32 0, i32 1
  %278 = load float, ptr %277, align 4, !tbaa !19
  %279 = load ptr, ptr %6, align 8, !tbaa !5
  %280 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %279, i32 0, i32 3
  %281 = load float, ptr %280, align 4, !tbaa !25
  %282 = fmul float %278, %281
  %283 = call float @llvm.fmuladd.f32(float %271, float %274, float %282)
  %284 = load ptr, ptr %5, align 8, !tbaa !5
  %285 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %284, i32 0, i32 2
  %286 = getelementptr inbounds %"struct.rw::V3d", ptr %285, i32 0, i32 2
  %287 = load float, ptr %286, align 4, !tbaa !22
  %288 = load ptr, ptr %6, align 8, !tbaa !5
  %289 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %288, i32 0, i32 5
  %290 = load float, ptr %289, align 4, !tbaa !26
  %291 = call float @llvm.fmuladd.f32(float %287, float %290, float %283)
  %292 = load ptr, ptr %5, align 8, !tbaa !5
  %293 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %292, i32 0, i32 3
  %294 = load float, ptr %293, align 4, !tbaa !25
  %295 = load ptr, ptr %6, align 8, !tbaa !5
  %296 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %295, i32 0, i32 7
  %297 = load float, ptr %296, align 4, !tbaa !27
  %298 = call float @llvm.fmuladd.f32(float %294, float %297, float %291)
  %299 = load ptr, ptr %4, align 8, !tbaa !5
  %300 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %299, i32 0, i32 3
  store float %298, ptr %300, align 4, !tbaa !25
  %301 = load ptr, ptr %5, align 8, !tbaa !5
  %302 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %301, i32 0, i32 4
  %303 = getelementptr inbounds %"struct.rw::V3d", ptr %302, i32 0, i32 0
  %304 = load float, ptr %303, align 4, !tbaa !16
  %305 = load ptr, ptr %6, align 8, !tbaa !5
  %306 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %305, i32 0, i32 0
  %307 = getelementptr inbounds %"struct.rw::V3d", ptr %306, i32 0, i32 0
  %308 = load float, ptr %307, align 4, !tbaa !9
  %309 = load ptr, ptr %5, align 8, !tbaa !5
  %310 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %309, i32 0, i32 4
  %311 = getelementptr inbounds %"struct.rw::V3d", ptr %310, i32 0, i32 1
  %312 = load float, ptr %311, align 4, !tbaa !20
  %313 = load ptr, ptr %6, align 8, !tbaa !5
  %314 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %313, i32 0, i32 2
  %315 = getelementptr inbounds %"struct.rw::V3d", ptr %314, i32 0, i32 0
  %316 = load float, ptr %315, align 4, !tbaa !14
  %317 = fmul float %312, %316
  %318 = call float @llvm.fmuladd.f32(float %304, float %308, float %317)
  %319 = load ptr, ptr %5, align 8, !tbaa !5
  %320 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %319, i32 0, i32 4
  %321 = getelementptr inbounds %"struct.rw::V3d", ptr %320, i32 0, i32 2
  %322 = load float, ptr %321, align 4, !tbaa !23
  %323 = load ptr, ptr %6, align 8, !tbaa !5
  %324 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %323, i32 0, i32 4
  %325 = getelementptr inbounds %"struct.rw::V3d", ptr %324, i32 0, i32 0
  %326 = load float, ptr %325, align 4, !tbaa !16
  %327 = call float @llvm.fmuladd.f32(float %322, float %326, float %318)
  %328 = load ptr, ptr %5, align 8, !tbaa !5
  %329 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %328, i32 0, i32 5
  %330 = load float, ptr %329, align 4, !tbaa !26
  %331 = load ptr, ptr %6, align 8, !tbaa !5
  %332 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %331, i32 0, i32 6
  %333 = getelementptr inbounds %"struct.rw::V3d", ptr %332, i32 0, i32 0
  %334 = load float, ptr %333, align 4, !tbaa !18
  %335 = call float @llvm.fmuladd.f32(float %330, float %334, float %327)
  %336 = load ptr, ptr %4, align 8, !tbaa !5
  %337 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %336, i32 0, i32 4
  %338 = getelementptr inbounds %"struct.rw::V3d", ptr %337, i32 0, i32 0
  store float %335, ptr %338, align 4, !tbaa !16
  %339 = load ptr, ptr %5, align 8, !tbaa !5
  %340 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %339, i32 0, i32 4
  %341 = getelementptr inbounds %"struct.rw::V3d", ptr %340, i32 0, i32 0
  %342 = load float, ptr %341, align 4, !tbaa !16
  %343 = load ptr, ptr %6, align 8, !tbaa !5
  %344 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %343, i32 0, i32 0
  %345 = getelementptr inbounds %"struct.rw::V3d", ptr %344, i32 0, i32 1
  %346 = load float, ptr %345, align 4, !tbaa !13
  %347 = load ptr, ptr %5, align 8, !tbaa !5
  %348 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %347, i32 0, i32 4
  %349 = getelementptr inbounds %"struct.rw::V3d", ptr %348, i32 0, i32 1
  %350 = load float, ptr %349, align 4, !tbaa !20
  %351 = load ptr, ptr %6, align 8, !tbaa !5
  %352 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %351, i32 0, i32 2
  %353 = getelementptr inbounds %"struct.rw::V3d", ptr %352, i32 0, i32 1
  %354 = load float, ptr %353, align 4, !tbaa !19
  %355 = fmul float %350, %354
  %356 = call float @llvm.fmuladd.f32(float %342, float %346, float %355)
  %357 = load ptr, ptr %5, align 8, !tbaa !5
  %358 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %357, i32 0, i32 4
  %359 = getelementptr inbounds %"struct.rw::V3d", ptr %358, i32 0, i32 2
  %360 = load float, ptr %359, align 4, !tbaa !23
  %361 = load ptr, ptr %6, align 8, !tbaa !5
  %362 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %361, i32 0, i32 4
  %363 = getelementptr inbounds %"struct.rw::V3d", ptr %362, i32 0, i32 1
  %364 = load float, ptr %363, align 4, !tbaa !20
  %365 = call float @llvm.fmuladd.f32(float %360, float %364, float %356)
  %366 = load ptr, ptr %5, align 8, !tbaa !5
  %367 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %366, i32 0, i32 5
  %368 = load float, ptr %367, align 4, !tbaa !26
  %369 = load ptr, ptr %6, align 8, !tbaa !5
  %370 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %369, i32 0, i32 6
  %371 = getelementptr inbounds %"struct.rw::V3d", ptr %370, i32 0, i32 1
  %372 = load float, ptr %371, align 4, !tbaa !21
  %373 = call float @llvm.fmuladd.f32(float %368, float %372, float %365)
  %374 = load ptr, ptr %4, align 8, !tbaa !5
  %375 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %374, i32 0, i32 4
  %376 = getelementptr inbounds %"struct.rw::V3d", ptr %375, i32 0, i32 1
  store float %373, ptr %376, align 4, !tbaa !20
  %377 = load ptr, ptr %5, align 8, !tbaa !5
  %378 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %377, i32 0, i32 4
  %379 = getelementptr inbounds %"struct.rw::V3d", ptr %378, i32 0, i32 0
  %380 = load float, ptr %379, align 4, !tbaa !16
  %381 = load ptr, ptr %6, align 8, !tbaa !5
  %382 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %381, i32 0, i32 0
  %383 = getelementptr inbounds %"struct.rw::V3d", ptr %382, i32 0, i32 2
  %384 = load float, ptr %383, align 4, !tbaa !15
  %385 = load ptr, ptr %5, align 8, !tbaa !5
  %386 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %385, i32 0, i32 4
  %387 = getelementptr inbounds %"struct.rw::V3d", ptr %386, i32 0, i32 1
  %388 = load float, ptr %387, align 4, !tbaa !20
  %389 = load ptr, ptr %6, align 8, !tbaa !5
  %390 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %389, i32 0, i32 2
  %391 = getelementptr inbounds %"struct.rw::V3d", ptr %390, i32 0, i32 2
  %392 = load float, ptr %391, align 4, !tbaa !22
  %393 = fmul float %388, %392
  %394 = call float @llvm.fmuladd.f32(float %380, float %384, float %393)
  %395 = load ptr, ptr %5, align 8, !tbaa !5
  %396 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %395, i32 0, i32 4
  %397 = getelementptr inbounds %"struct.rw::V3d", ptr %396, i32 0, i32 2
  %398 = load float, ptr %397, align 4, !tbaa !23
  %399 = load ptr, ptr %6, align 8, !tbaa !5
  %400 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %399, i32 0, i32 4
  %401 = getelementptr inbounds %"struct.rw::V3d", ptr %400, i32 0, i32 2
  %402 = load float, ptr %401, align 4, !tbaa !23
  %403 = call float @llvm.fmuladd.f32(float %398, float %402, float %394)
  %404 = load ptr, ptr %5, align 8, !tbaa !5
  %405 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %404, i32 0, i32 5
  %406 = load float, ptr %405, align 4, !tbaa !26
  %407 = load ptr, ptr %6, align 8, !tbaa !5
  %408 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %407, i32 0, i32 6
  %409 = getelementptr inbounds %"struct.rw::V3d", ptr %408, i32 0, i32 2
  %410 = load float, ptr %409, align 4, !tbaa !24
  %411 = call float @llvm.fmuladd.f32(float %406, float %410, float %403)
  %412 = load ptr, ptr %4, align 8, !tbaa !5
  %413 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %412, i32 0, i32 4
  %414 = getelementptr inbounds %"struct.rw::V3d", ptr %413, i32 0, i32 2
  store float %411, ptr %414, align 4, !tbaa !23
  %415 = load ptr, ptr %5, align 8, !tbaa !5
  %416 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %415, i32 0, i32 4
  %417 = getelementptr inbounds %"struct.rw::V3d", ptr %416, i32 0, i32 0
  %418 = load float, ptr %417, align 4, !tbaa !16
  %419 = load ptr, ptr %6, align 8, !tbaa !5
  %420 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %419, i32 0, i32 1
  %421 = load float, ptr %420, align 4, !tbaa !17
  %422 = load ptr, ptr %5, align 8, !tbaa !5
  %423 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %422, i32 0, i32 4
  %424 = getelementptr inbounds %"struct.rw::V3d", ptr %423, i32 0, i32 1
  %425 = load float, ptr %424, align 4, !tbaa !20
  %426 = load ptr, ptr %6, align 8, !tbaa !5
  %427 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %426, i32 0, i32 3
  %428 = load float, ptr %427, align 4, !tbaa !25
  %429 = fmul float %425, %428
  %430 = call float @llvm.fmuladd.f32(float %418, float %421, float %429)
  %431 = load ptr, ptr %5, align 8, !tbaa !5
  %432 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %431, i32 0, i32 4
  %433 = getelementptr inbounds %"struct.rw::V3d", ptr %432, i32 0, i32 2
  %434 = load float, ptr %433, align 4, !tbaa !23
  %435 = load ptr, ptr %6, align 8, !tbaa !5
  %436 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %435, i32 0, i32 5
  %437 = load float, ptr %436, align 4, !tbaa !26
  %438 = call float @llvm.fmuladd.f32(float %434, float %437, float %430)
  %439 = load ptr, ptr %5, align 8, !tbaa !5
  %440 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %439, i32 0, i32 5
  %441 = load float, ptr %440, align 4, !tbaa !26
  %442 = load ptr, ptr %6, align 8, !tbaa !5
  %443 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %442, i32 0, i32 7
  %444 = load float, ptr %443, align 4, !tbaa !27
  %445 = call float @llvm.fmuladd.f32(float %441, float %444, float %438)
  %446 = load ptr, ptr %4, align 8, !tbaa !5
  %447 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %446, i32 0, i32 5
  store float %445, ptr %447, align 4, !tbaa !26
  %448 = load ptr, ptr %5, align 8, !tbaa !5
  %449 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %448, i32 0, i32 6
  %450 = getelementptr inbounds %"struct.rw::V3d", ptr %449, i32 0, i32 0
  %451 = load float, ptr %450, align 4, !tbaa !18
  %452 = load ptr, ptr %6, align 8, !tbaa !5
  %453 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %452, i32 0, i32 0
  %454 = getelementptr inbounds %"struct.rw::V3d", ptr %453, i32 0, i32 0
  %455 = load float, ptr %454, align 4, !tbaa !9
  %456 = load ptr, ptr %5, align 8, !tbaa !5
  %457 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %456, i32 0, i32 6
  %458 = getelementptr inbounds %"struct.rw::V3d", ptr %457, i32 0, i32 1
  %459 = load float, ptr %458, align 4, !tbaa !21
  %460 = load ptr, ptr %6, align 8, !tbaa !5
  %461 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %460, i32 0, i32 2
  %462 = getelementptr inbounds %"struct.rw::V3d", ptr %461, i32 0, i32 0
  %463 = load float, ptr %462, align 4, !tbaa !14
  %464 = fmul float %459, %463
  %465 = call float @llvm.fmuladd.f32(float %451, float %455, float %464)
  %466 = load ptr, ptr %5, align 8, !tbaa !5
  %467 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %466, i32 0, i32 6
  %468 = getelementptr inbounds %"struct.rw::V3d", ptr %467, i32 0, i32 2
  %469 = load float, ptr %468, align 4, !tbaa !24
  %470 = load ptr, ptr %6, align 8, !tbaa !5
  %471 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %470, i32 0, i32 4
  %472 = getelementptr inbounds %"struct.rw::V3d", ptr %471, i32 0, i32 0
  %473 = load float, ptr %472, align 4, !tbaa !16
  %474 = call float @llvm.fmuladd.f32(float %469, float %473, float %465)
  %475 = load ptr, ptr %5, align 8, !tbaa !5
  %476 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %475, i32 0, i32 7
  %477 = load float, ptr %476, align 4, !tbaa !27
  %478 = load ptr, ptr %6, align 8, !tbaa !5
  %479 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %478, i32 0, i32 6
  %480 = getelementptr inbounds %"struct.rw::V3d", ptr %479, i32 0, i32 0
  %481 = load float, ptr %480, align 4, !tbaa !18
  %482 = call float @llvm.fmuladd.f32(float %477, float %481, float %474)
  %483 = load ptr, ptr %4, align 8, !tbaa !5
  %484 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %483, i32 0, i32 6
  %485 = getelementptr inbounds %"struct.rw::V3d", ptr %484, i32 0, i32 0
  store float %482, ptr %485, align 4, !tbaa !18
  %486 = load ptr, ptr %5, align 8, !tbaa !5
  %487 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %486, i32 0, i32 6
  %488 = getelementptr inbounds %"struct.rw::V3d", ptr %487, i32 0, i32 0
  %489 = load float, ptr %488, align 4, !tbaa !18
  %490 = load ptr, ptr %6, align 8, !tbaa !5
  %491 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %490, i32 0, i32 0
  %492 = getelementptr inbounds %"struct.rw::V3d", ptr %491, i32 0, i32 1
  %493 = load float, ptr %492, align 4, !tbaa !13
  %494 = load ptr, ptr %5, align 8, !tbaa !5
  %495 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %494, i32 0, i32 6
  %496 = getelementptr inbounds %"struct.rw::V3d", ptr %495, i32 0, i32 1
  %497 = load float, ptr %496, align 4, !tbaa !21
  %498 = load ptr, ptr %6, align 8, !tbaa !5
  %499 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %498, i32 0, i32 2
  %500 = getelementptr inbounds %"struct.rw::V3d", ptr %499, i32 0, i32 1
  %501 = load float, ptr %500, align 4, !tbaa !19
  %502 = fmul float %497, %501
  %503 = call float @llvm.fmuladd.f32(float %489, float %493, float %502)
  %504 = load ptr, ptr %5, align 8, !tbaa !5
  %505 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %504, i32 0, i32 6
  %506 = getelementptr inbounds %"struct.rw::V3d", ptr %505, i32 0, i32 2
  %507 = load float, ptr %506, align 4, !tbaa !24
  %508 = load ptr, ptr %6, align 8, !tbaa !5
  %509 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %508, i32 0, i32 4
  %510 = getelementptr inbounds %"struct.rw::V3d", ptr %509, i32 0, i32 1
  %511 = load float, ptr %510, align 4, !tbaa !20
  %512 = call float @llvm.fmuladd.f32(float %507, float %511, float %503)
  %513 = load ptr, ptr %5, align 8, !tbaa !5
  %514 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %513, i32 0, i32 7
  %515 = load float, ptr %514, align 4, !tbaa !27
  %516 = load ptr, ptr %6, align 8, !tbaa !5
  %517 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %516, i32 0, i32 6
  %518 = getelementptr inbounds %"struct.rw::V3d", ptr %517, i32 0, i32 1
  %519 = load float, ptr %518, align 4, !tbaa !21
  %520 = call float @llvm.fmuladd.f32(float %515, float %519, float %512)
  %521 = load ptr, ptr %4, align 8, !tbaa !5
  %522 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %521, i32 0, i32 6
  %523 = getelementptr inbounds %"struct.rw::V3d", ptr %522, i32 0, i32 1
  store float %520, ptr %523, align 4, !tbaa !21
  %524 = load ptr, ptr %5, align 8, !tbaa !5
  %525 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %524, i32 0, i32 6
  %526 = getelementptr inbounds %"struct.rw::V3d", ptr %525, i32 0, i32 0
  %527 = load float, ptr %526, align 4, !tbaa !18
  %528 = load ptr, ptr %6, align 8, !tbaa !5
  %529 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %528, i32 0, i32 0
  %530 = getelementptr inbounds %"struct.rw::V3d", ptr %529, i32 0, i32 2
  %531 = load float, ptr %530, align 4, !tbaa !15
  %532 = load ptr, ptr %5, align 8, !tbaa !5
  %533 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %532, i32 0, i32 6
  %534 = getelementptr inbounds %"struct.rw::V3d", ptr %533, i32 0, i32 1
  %535 = load float, ptr %534, align 4, !tbaa !21
  %536 = load ptr, ptr %6, align 8, !tbaa !5
  %537 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %536, i32 0, i32 2
  %538 = getelementptr inbounds %"struct.rw::V3d", ptr %537, i32 0, i32 2
  %539 = load float, ptr %538, align 4, !tbaa !22
  %540 = fmul float %535, %539
  %541 = call float @llvm.fmuladd.f32(float %527, float %531, float %540)
  %542 = load ptr, ptr %5, align 8, !tbaa !5
  %543 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %542, i32 0, i32 6
  %544 = getelementptr inbounds %"struct.rw::V3d", ptr %543, i32 0, i32 2
  %545 = load float, ptr %544, align 4, !tbaa !24
  %546 = load ptr, ptr %6, align 8, !tbaa !5
  %547 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %546, i32 0, i32 4
  %548 = getelementptr inbounds %"struct.rw::V3d", ptr %547, i32 0, i32 2
  %549 = load float, ptr %548, align 4, !tbaa !23
  %550 = call float @llvm.fmuladd.f32(float %545, float %549, float %541)
  %551 = load ptr, ptr %5, align 8, !tbaa !5
  %552 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %551, i32 0, i32 7
  %553 = load float, ptr %552, align 4, !tbaa !27
  %554 = load ptr, ptr %6, align 8, !tbaa !5
  %555 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %554, i32 0, i32 6
  %556 = getelementptr inbounds %"struct.rw::V3d", ptr %555, i32 0, i32 2
  %557 = load float, ptr %556, align 4, !tbaa !24
  %558 = call float @llvm.fmuladd.f32(float %553, float %557, float %550)
  %559 = load ptr, ptr %4, align 8, !tbaa !5
  %560 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %559, i32 0, i32 6
  %561 = getelementptr inbounds %"struct.rw::V3d", ptr %560, i32 0, i32 2
  store float %558, ptr %561, align 4, !tbaa !24
  %562 = load ptr, ptr %5, align 8, !tbaa !5
  %563 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %562, i32 0, i32 6
  %564 = getelementptr inbounds %"struct.rw::V3d", ptr %563, i32 0, i32 0
  %565 = load float, ptr %564, align 4, !tbaa !18
  %566 = load ptr, ptr %6, align 8, !tbaa !5
  %567 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %566, i32 0, i32 1
  %568 = load float, ptr %567, align 4, !tbaa !17
  %569 = load ptr, ptr %5, align 8, !tbaa !5
  %570 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %569, i32 0, i32 6
  %571 = getelementptr inbounds %"struct.rw::V3d", ptr %570, i32 0, i32 1
  %572 = load float, ptr %571, align 4, !tbaa !21
  %573 = load ptr, ptr %6, align 8, !tbaa !5
  %574 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %573, i32 0, i32 3
  %575 = load float, ptr %574, align 4, !tbaa !25
  %576 = fmul float %572, %575
  %577 = call float @llvm.fmuladd.f32(float %565, float %568, float %576)
  %578 = load ptr, ptr %5, align 8, !tbaa !5
  %579 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %578, i32 0, i32 6
  %580 = getelementptr inbounds %"struct.rw::V3d", ptr %579, i32 0, i32 2
  %581 = load float, ptr %580, align 4, !tbaa !24
  %582 = load ptr, ptr %6, align 8, !tbaa !5
  %583 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %582, i32 0, i32 5
  %584 = load float, ptr %583, align 4, !tbaa !26
  %585 = call float @llvm.fmuladd.f32(float %581, float %584, float %577)
  %586 = load ptr, ptr %5, align 8, !tbaa !5
  %587 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %586, i32 0, i32 7
  %588 = load float, ptr %587, align 4, !tbaa !27
  %589 = load ptr, ptr %6, align 8, !tbaa !5
  %590 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %589, i32 0, i32 7
  %591 = load float, ptr %590, align 4, !tbaa !27
  %592 = call float @llvm.fmuladd.f32(float %588, float %591, float %585)
  %593 = load ptr, ptr %4, align 8, !tbaa !5
  %594 = getelementptr inbounds %"struct.rw::RawMatrix", ptr %593, i32 0, i32 7
  store float %592, ptr %594, align 4, !tbaa !27
  ret void
}

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !12, i64 0}
!10 = !{!"_ZTSN2rw9RawMatrixE", !11, i64 0, !12, i64 12, !11, i64 16, !12, i64 28, !11, i64 32, !12, i64 44, !11, i64 48, !12, i64 60}
!11 = !{!"_ZTSN2rw3V3dE", !12, i64 0, !12, i64 4, !12, i64 8}
!12 = !{!"float", !7, i64 0}
!13 = !{!10, !12, i64 4}
!14 = !{!10, !12, i64 16}
!15 = !{!10, !12, i64 8}
!16 = !{!10, !12, i64 32}
!17 = !{!10, !12, i64 12}
!18 = !{!10, !12, i64 48}
!19 = !{!10, !12, i64 20}
!20 = !{!10, !12, i64 36}
!21 = !{!10, !12, i64 52}
!22 = !{!10, !12, i64 24}
!23 = !{!10, !12, i64 40}
!24 = !{!10, !12, i64 56}
!25 = !{!10, !12, i64 28}
!26 = !{!10, !12, i64 44}
!27 = !{!10, !12, i64 60}


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

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

; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: readwrite) uwtable
define dso_local void @_ZN2rw9RawMatrix4multEPS0_S1_S1_(ptr nocapture noundef writeonly %0, ptr nocapture noundef readonly %1, ptr nocapture noundef readonly %2) local_unnamed_addr #1 align 2 {
  %4 = load float, ptr %1, align 4, !tbaa !5
  %5 = load float, ptr %2, align 4, !tbaa !5
  %6 = getelementptr inbounds i8, ptr %1, i64 4
  %7 = load float, ptr %6, align 4, !tbaa !11
  %8 = getelementptr inbounds i8, ptr %2, i64 16
  %9 = load float, ptr %8, align 4, !tbaa !12
  %10 = fmul float %7, %9
  %11 = tail call float @llvm.fmuladd.f32(float %4, float %5, float %10)
  %12 = getelementptr inbounds i8, ptr %1, i64 8
  %13 = load float, ptr %12, align 4, !tbaa !13
  %14 = getelementptr inbounds i8, ptr %2, i64 32
  %15 = load float, ptr %14, align 4, !tbaa !14
  %16 = tail call float @llvm.fmuladd.f32(float %13, float %15, float %11)
  %17 = getelementptr inbounds i8, ptr %1, i64 12
  %18 = load float, ptr %17, align 4, !tbaa !15
  %19 = getelementptr inbounds i8, ptr %2, i64 48
  %20 = load float, ptr %19, align 4, !tbaa !16
  %21 = tail call float @llvm.fmuladd.f32(float %18, float %20, float %16)
  store float %21, ptr %0, align 4, !tbaa !5
  %22 = load float, ptr %1, align 4, !tbaa !5
  %23 = getelementptr inbounds i8, ptr %2, i64 4
  %24 = load float, ptr %23, align 4, !tbaa !11
  %25 = getelementptr inbounds i8, ptr %2, i64 20
  %26 = load float, ptr %25, align 4, !tbaa !17
  %27 = fmul float %7, %26
  %28 = tail call float @llvm.fmuladd.f32(float %22, float %24, float %27)
  %29 = getelementptr inbounds i8, ptr %2, i64 36
  %30 = load float, ptr %29, align 4, !tbaa !18
  %31 = tail call float @llvm.fmuladd.f32(float %13, float %30, float %28)
  %32 = getelementptr inbounds i8, ptr %2, i64 52
  %33 = load float, ptr %32, align 4, !tbaa !19
  %34 = tail call float @llvm.fmuladd.f32(float %18, float %33, float %31)
  %35 = getelementptr inbounds i8, ptr %0, i64 4
  store float %34, ptr %35, align 4, !tbaa !11
  %36 = getelementptr inbounds i8, ptr %2, i64 8
  %37 = load float, ptr %36, align 4, !tbaa !13
  %38 = load float, ptr %6, align 4, !tbaa !11
  %39 = getelementptr inbounds i8, ptr %2, i64 24
  %40 = load float, ptr %39, align 4, !tbaa !20
  %41 = fmul float %38, %40
  %42 = tail call float @llvm.fmuladd.f32(float %22, float %37, float %41)
  %43 = getelementptr inbounds i8, ptr %2, i64 40
  %44 = load float, ptr %43, align 4, !tbaa !21
  %45 = tail call float @llvm.fmuladd.f32(float %13, float %44, float %42)
  %46 = getelementptr inbounds i8, ptr %2, i64 56
  %47 = load float, ptr %46, align 4, !tbaa !22
  %48 = tail call float @llvm.fmuladd.f32(float %18, float %47, float %45)
  %49 = getelementptr inbounds i8, ptr %0, i64 8
  store float %48, ptr %49, align 4, !tbaa !13
  %50 = getelementptr inbounds i8, ptr %2, i64 12
  %51 = load float, ptr %50, align 4, !tbaa !15
  %52 = getelementptr inbounds i8, ptr %2, i64 28
  %53 = load float, ptr %52, align 4, !tbaa !23
  %54 = load float, ptr %12, align 4, !tbaa !13
  %55 = getelementptr inbounds i8, ptr %2, i64 44
  %56 = load float, ptr %55, align 4, !tbaa !24
  %57 = getelementptr inbounds i8, ptr %2, i64 60
  %58 = load float, ptr %57, align 4, !tbaa !25
  %59 = getelementptr inbounds i8, ptr %0, i64 12
  %60 = getelementptr inbounds i8, ptr %1, i64 16
  %61 = load float, ptr %60, align 4, !tbaa !12
  %62 = load float, ptr %2, align 4, !tbaa !5
  %63 = getelementptr inbounds i8, ptr %1, i64 20
  %64 = load float, ptr %63, align 4, !tbaa !17
  %65 = getelementptr inbounds i8, ptr %1, i64 24
  %66 = load float, ptr %65, align 4, !tbaa !20
  %67 = getelementptr inbounds i8, ptr %1, i64 28
  %68 = load float, ptr %67, align 4, !tbaa !23
  %69 = insertelement <2 x float> poison, float %53, i64 0
  %70 = insertelement <2 x float> %69, float %9, i64 1
  %71 = insertelement <2 x float> poison, float %38, i64 0
  %72 = insertelement <2 x float> %71, float %64, i64 1
  %73 = fmul <2 x float> %70, %72
  %74 = insertelement <2 x float> poison, float %22, i64 0
  %75 = insertelement <2 x float> %74, float %61, i64 1
  %76 = insertelement <2 x float> poison, float %51, i64 0
  %77 = insertelement <2 x float> %76, float %62, i64 1
  %78 = tail call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %75, <2 x float> %77, <2 x float> %73)
  %79 = insertelement <2 x float> poison, float %54, i64 0
  %80 = insertelement <2 x float> %79, float %66, i64 1
  %81 = insertelement <2 x float> poison, float %56, i64 0
  %82 = insertelement <2 x float> %81, float %15, i64 1
  %83 = tail call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %80, <2 x float> %82, <2 x float> %78)
  %84 = insertelement <2 x float> poison, float %18, i64 0
  %85 = insertelement <2 x float> %84, float %68, i64 1
  %86 = insertelement <2 x float> poison, float %58, i64 0
  %87 = insertelement <2 x float> %86, float %20, i64 1
  %88 = tail call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %85, <2 x float> %87, <2 x float> %83)
  store <2 x float> %88, ptr %59, align 4, !tbaa !26
  %89 = load float, ptr %60, align 4, !tbaa !12
  %90 = load float, ptr %23, align 4, !tbaa !11
  %91 = fmul float %26, %64
  %92 = tail call float @llvm.fmuladd.f32(float %89, float %90, float %91)
  %93 = tail call float @llvm.fmuladd.f32(float %66, float %30, float %92)
  %94 = tail call float @llvm.fmuladd.f32(float %68, float %33, float %93)
  %95 = getelementptr inbounds i8, ptr %0, i64 20
  store float %94, ptr %95, align 4, !tbaa !17
  %96 = load float, ptr %36, align 4, !tbaa !13
  %97 = load float, ptr %63, align 4, !tbaa !17
  %98 = fmul float %40, %97
  %99 = tail call float @llvm.fmuladd.f32(float %89, float %96, float %98)
  %100 = tail call float @llvm.fmuladd.f32(float %66, float %44, float %99)
  %101 = tail call float @llvm.fmuladd.f32(float %68, float %47, float %100)
  %102 = getelementptr inbounds i8, ptr %0, i64 24
  store float %101, ptr %102, align 4, !tbaa !20
  %103 = load float, ptr %50, align 4, !tbaa !15
  %104 = load float, ptr %65, align 4, !tbaa !20
  %105 = getelementptr inbounds i8, ptr %0, i64 28
  %106 = getelementptr inbounds i8, ptr %1, i64 32
  %107 = load float, ptr %106, align 4, !tbaa !14
  %108 = getelementptr inbounds i8, ptr %1, i64 36
  %109 = load float, ptr %108, align 4, !tbaa !18
  %110 = load float, ptr %8, align 4, !tbaa !12
  %111 = getelementptr inbounds i8, ptr %1, i64 40
  %112 = load float, ptr %111, align 4, !tbaa !21
  %113 = getelementptr inbounds i8, ptr %1, i64 44
  %114 = load float, ptr %113, align 4, !tbaa !24
  %115 = insertelement <2 x float> poison, float %97, i64 0
  %116 = insertelement <2 x float> %115, float %109, i64 1
  %117 = insertelement <2 x float> %69, float %110, i64 1
  %118 = fmul <2 x float> %116, %117
  %119 = insertelement <2 x float> poison, float %89, i64 0
  %120 = insertelement <2 x float> %119, float %107, i64 1
  %121 = insertelement <2 x float> poison, float %103, i64 0
  %122 = insertelement <2 x float> %121, float %62, i64 1
  %123 = tail call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %120, <2 x float> %122, <2 x float> %118)
  %124 = insertelement <2 x float> poison, float %104, i64 0
  %125 = insertelement <2 x float> %124, float %112, i64 1
  %126 = tail call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %125, <2 x float> %82, <2 x float> %123)
  %127 = insertelement <2 x float> poison, float %68, i64 0
  %128 = insertelement <2 x float> %127, float %114, i64 1
  %129 = tail call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %128, <2 x float> %87, <2 x float> %126)
  store <2 x float> %129, ptr %105, align 4, !tbaa !26
  %130 = load float, ptr %106, align 4, !tbaa !14
  %131 = load float, ptr %25, align 4, !tbaa !17
  %132 = fmul float %109, %131
  %133 = tail call float @llvm.fmuladd.f32(float %130, float %90, float %132)
  %134 = tail call float @llvm.fmuladd.f32(float %112, float %30, float %133)
  %135 = tail call float @llvm.fmuladd.f32(float %114, float %33, float %134)
  %136 = getelementptr inbounds i8, ptr %0, i64 36
  store float %135, ptr %136, align 4, !tbaa !18
  %137 = load float, ptr %108, align 4, !tbaa !18
  %138 = load float, ptr %39, align 4, !tbaa !20
  %139 = fmul float %137, %138
  %140 = tail call float @llvm.fmuladd.f32(float %130, float %96, float %139)
  %141 = tail call float @llvm.fmuladd.f32(float %112, float %44, float %140)
  %142 = tail call float @llvm.fmuladd.f32(float %114, float %47, float %141)
  %143 = getelementptr inbounds i8, ptr %0, i64 40
  store float %142, ptr %143, align 4, !tbaa !21
  %144 = load float, ptr %52, align 4, !tbaa !23
  %145 = load float, ptr %111, align 4, !tbaa !21
  %146 = getelementptr inbounds i8, ptr %0, i64 44
  %147 = getelementptr inbounds i8, ptr %1, i64 48
  %148 = load float, ptr %147, align 4, !tbaa !16
  %149 = getelementptr inbounds i8, ptr %1, i64 52
  %150 = load float, ptr %149, align 4, !tbaa !19
  %151 = getelementptr inbounds i8, ptr %1, i64 56
  %152 = load float, ptr %151, align 4, !tbaa !22
  %153 = load float, ptr %14, align 4, !tbaa !14
  %154 = getelementptr inbounds i8, ptr %1, i64 60
  %155 = load float, ptr %154, align 4, !tbaa !25
  %156 = insertelement <2 x float> poison, float %144, i64 0
  %157 = insertelement <2 x float> %156, float %110, i64 1
  %158 = insertelement <2 x float> poison, float %137, i64 0
  %159 = insertelement <2 x float> %158, float %150, i64 1
  %160 = fmul <2 x float> %157, %159
  %161 = insertelement <2 x float> poison, float %130, i64 0
  %162 = insertelement <2 x float> %161, float %148, i64 1
  %163 = tail call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %162, <2 x float> %122, <2 x float> %160)
  %164 = insertelement <2 x float> poison, float %145, i64 0
  %165 = insertelement <2 x float> %164, float %152, i64 1
  %166 = insertelement <2 x float> %81, float %153, i64 1
  %167 = tail call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %165, <2 x float> %166, <2 x float> %163)
  %168 = insertelement <2 x float> poison, float %114, i64 0
  %169 = insertelement <2 x float> %168, float %155, i64 1
  %170 = tail call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %169, <2 x float> %87, <2 x float> %167)
  store <2 x float> %170, ptr %146, align 4, !tbaa !26
  %171 = load float, ptr %147, align 4, !tbaa !16
  %172 = fmul float %131, %150
  %173 = tail call float @llvm.fmuladd.f32(float %171, float %90, float %172)
  %174 = load float, ptr %29, align 4, !tbaa !18
  %175 = tail call float @llvm.fmuladd.f32(float %152, float %174, float %173)
  %176 = tail call float @llvm.fmuladd.f32(float %155, float %33, float %175)
  %177 = getelementptr inbounds i8, ptr %0, i64 52
  store float %176, ptr %177, align 4, !tbaa !19
  %178 = load float, ptr %149, align 4, !tbaa !19
  %179 = fmul float %138, %178
  %180 = tail call float @llvm.fmuladd.f32(float %171, float %96, float %179)
  %181 = load float, ptr %43, align 4, !tbaa !21
  %182 = tail call float @llvm.fmuladd.f32(float %152, float %181, float %180)
  %183 = tail call float @llvm.fmuladd.f32(float %155, float %47, float %182)
  %184 = getelementptr inbounds i8, ptr %0, i64 56
  store float %183, ptr %184, align 4, !tbaa !22
  %185 = fmul float %144, %178
  %186 = tail call float @llvm.fmuladd.f32(float %171, float %103, float %185)
  %187 = load float, ptr %151, align 4, !tbaa !22
  %188 = load float, ptr %55, align 4, !tbaa !24
  %189 = tail call float @llvm.fmuladd.f32(float %187, float %188, float %186)
  %190 = tail call float @llvm.fmuladd.f32(float %155, float %58, float %189)
  %191 = getelementptr inbounds i8, ptr %0, i64 60
  store float %190, ptr %191, align 4, !tbaa !25
  ret void
}

; 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>) #2

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

!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, !8, i64 0}
!6 = !{!"_ZTSN2rw9RawMatrixE", !7, i64 0, !8, i64 12, !7, i64 16, !8, i64 28, !7, i64 32, !8, i64 44, !7, i64 48, !8, i64 60}
!7 = !{!"_ZTSN2rw3V3dE", !8, i64 0, !8, i64 4, !8, i64 8}
!8 = !{!"float", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C++ TBAA"}
!11 = !{!6, !8, i64 4}
!12 = !{!6, !8, i64 16}
!13 = !{!6, !8, i64 8}
!14 = !{!6, !8, i64 32}
!15 = !{!6, !8, i64 12}
!16 = !{!6, !8, i64 48}
!17 = !{!6, !8, i64 20}
!18 = !{!6, !8, i64 36}
!19 = !{!6, !8, i64 52}
!20 = !{!6, !8, i64 24}
!21 = !{!6, !8, i64 40}
!22 = !{!6, !8, i64 56}
!23 = !{!6, !8, i64 28}
!24 = !{!6, !8, i64 44}
!25 = !{!6, !8, i64 60}
!26 = !{!8, !8, i64 0}


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