blob: c56405d1ef0aad294dcce6ca86fb38b6fc5fe621 [file] [log] [blame]
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:64:128-a0:0:64-n32-S64"
target triple = "armv7-none-linux-gnueabi"
%struct.rs_matrix4x4 = type { [16 x float] }
%struct.rs_matrix3x3 = type { [9 x float] }
%struct.rs_matrix2x2 = type { [4 x float] }
define internal <4 x float> @smear_f(float %in) nounwind readnone alwaysinline {
%1 = insertelement <4 x float> undef, float %in, i32 0
%2 = insertelement <4 x float> %1, float %in, i32 1
%3 = insertelement <4 x float> %2, float %in, i32 2
%4 = insertelement <4 x float> %3, float %in, i32 3
ret <4 x float> %4
}
define <3 x float> @_Z16rsMatrixMultiplyPK12rs_matrix3x3Dv3_f(%struct.rs_matrix3x3* nocapture %m, <3 x float> %in) nounwind readonly {
%x0 = extractelement <3 x float> %in, i32 0
%x = tail call <4 x float> @smear_f(float %x0) nounwind readnone
%y0 = extractelement <3 x float> %in, i32 1
%y = tail call <4 x float> @smear_f(float %y0) nounwind readnone
%z0 = extractelement <3 x float> %in, i32 2
%z = tail call <4 x float> @smear_f(float %z0) nounwind readnone
%px = getelementptr inbounds %struct.rs_matrix3x3* %m, i32 0, i32 0, i32 0
%px2 = bitcast float* %px to <4 x float>*
%xm = load <4 x float>* %px2, align 4
%py = getelementptr inbounds %struct.rs_matrix3x3* %m, i32 0, i32 0, i32 3
%py2 = bitcast float* %py to <4 x float>*
%ym = load <4 x float>* %py2, align 4
%pz = getelementptr inbounds %struct.rs_matrix3x3* %m, i32 0, i32 0, i32 6
%pz2 = bitcast float* %pz to <3 x float>*
%zm2 = load <3 x float>* %pz2, align 4
%zm = shufflevector <3 x float> %zm2, <3 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
%a1 = fmul <4 x float> %x, %xm
%a2 = fmul <4 x float> %y, %ym
%a3 = fadd <4 x float> %a1, %a2
%a4 = fmul <4 x float> %z, %zm
%a5 = fadd <4 x float> %a4, %a3
%a6 = shufflevector <4 x float> %a5, <4 x float> undef, <3 x i32> <i32 0, i32 1, i32 2>
ret <3 x float> %a6
}
define <3 x float> @_Z16rsMatrixMultiplyP12rs_matrix3x3Dv3_f(%struct.rs_matrix3x3* nocapture %m, <3 x float> %in) nounwind readonly {
%r = tail call <3 x float> @_Z16rsMatrixMultiplyPK12rs_matrix3x3Dv3_f(%struct.rs_matrix3x3* nocapture %m, <3 x float> %in) nounwind
ret <3 x float> %r
}
define <3 x float> @_Z16rsMatrixMultiplyPK12rs_matrix3x3Dv2_f(%struct.rs_matrix3x3* nocapture %m, <2 x float> %in) nounwind readonly {
%x0 = extractelement <2 x float> %in, i32 0
%x = tail call <4 x float> @smear_f(float %x0) nounwind readnone
%y0 = extractelement <2 x float> %in, i32 1
%y = tail call <4 x float> @smear_f(float %y0) nounwind readnone
%px = getelementptr inbounds %struct.rs_matrix3x3* %m, i32 0, i32 0, i32 0
%px2 = bitcast float* %px to <4 x float>*
%xm = load <4 x float>* %px2, align 4
%py = getelementptr inbounds %struct.rs_matrix3x3* %m, i32 0, i32 0, i32 3
%py2 = bitcast float* %py to <4 x float>*
%ym = load <4 x float>* %py2, align 4
%a1 = fmul <4 x float> %x, %xm
%a2 = fmul <4 x float> %y, %ym
%a3 = fadd <4 x float> %a1, %a2
%a4 = shufflevector <4 x float> %a3, <4 x float> undef, <3 x i32> <i32 0, i32 1, i32 2>
ret <3 x float> %a4
}
define <3 x float> @_Z16rsMatrixMultiplyP12rs_matrix3x3Dv2_f(%struct.rs_matrix3x3* nocapture %m, <2 x float> %in) nounwind readonly {
%r = tail call <3 x float> @_Z16rsMatrixMultiplyPK12rs_matrix3x3Dv2_f(%struct.rs_matrix3x3* nocapture %m, <2 x float> %in) nounwind
ret <3 x float> %r
}
define <4 x float> @_Z16rsMatrixMultiplyPK12rs_matrix4x4Dv4_f(%struct.rs_matrix4x4* nocapture %m, <4 x float> %in) nounwind readonly {
%x0 = extractelement <4 x float> %in, i32 0
%x = tail call <4 x float> @smear_f(float %x0) nounwind readnone
%y0 = extractelement <4 x float> %in, i32 1
%y = tail call <4 x float> @smear_f(float %y0) nounwind readnone
%z0 = extractelement <4 x float> %in, i32 2
%z = tail call <4 x float> @smear_f(float %z0) nounwind readnone
%w0 = extractelement <4 x float> %in, i32 3
%w = tail call <4 x float> @smear_f(float %w0) nounwind readnone
%px = getelementptr inbounds %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 0
%px2 = bitcast float* %px to <4 x float>*
%xm = load <4 x float>* %px2, align 4
%py = getelementptr inbounds %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 4
%py2 = bitcast float* %py to <4 x float>*
%ym = load <4 x float>* %py2, align 4
%pz = getelementptr inbounds %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 8
%pz2 = bitcast float* %pz to <4 x float>*
%zm = load <4 x float>* %pz2, align 4
%pw = getelementptr inbounds %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 12
%pw2 = bitcast float* %pw to <4 x float>*
%wm = load <4 x float>* %pw2, align 4
%a1 = fmul <4 x float> %x, %xm
%a2 = fmul <4 x float> %y, %ym
%a3 = fadd <4 x float> %a1, %a2
%a4 = fmul <4 x float> %z, %zm
%a5 = fadd <4 x float> %a3, %a4
%a6 = fmul <4 x float> %w, %wm
%a7 = fadd <4 x float> %a5, %a6
ret <4 x float> %a7
}
define <4 x float> @_Z16rsMatrixMultiplyP12rs_matrix4x4Dv4_f(%struct.rs_matrix4x4* nocapture %m, <4 x float> %in) nounwind readonly {
%r = tail call <4 x float> @_Z16rsMatrixMultiplyPK12rs_matrix4x4Dv4_f(%struct.rs_matrix4x4* nocapture %m, <4 x float> %in) nounwind
ret <4 x float> %r
}
define <4 x float> @_Z16rsMatrixMultiplyPK12rs_matrix4x4Dv3_f(%struct.rs_matrix4x4* nocapture %m, <3 x float> %in) nounwind readonly {
%x0 = extractelement <3 x float> %in, i32 0
%x = tail call <4 x float> @smear_f(float %x0) nounwind readnone
%y0 = extractelement <3 x float> %in, i32 1
%y = tail call <4 x float> @smear_f(float %y0) nounwind readnone
%z0 = extractelement <3 x float> %in, i32 2
%z = tail call <4 x float> @smear_f(float %z0) nounwind readnone
%px = getelementptr inbounds %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 0
%px2 = bitcast float* %px to <4 x float>*
%xm = load <4 x float>* %px2, align 4
%py = getelementptr inbounds %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 4
%py2 = bitcast float* %py to <4 x float>*
%ym = load <4 x float>* %py2, align 4
%pz = getelementptr inbounds %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 8
%pz2 = bitcast float* %pz to <4 x float>*
%zm = load <4 x float>* %pz2, align 4
%pw = getelementptr inbounds %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 12
%pw2 = bitcast float* %pw to <4 x float>*
%wm = load <4 x float>* %pw2, align 4
%a1 = fmul <4 x float> %x, %xm
%a2 = fadd <4 x float> %wm, %a1
%a3 = fmul <4 x float> %y, %ym
%a4 = fadd <4 x float> %a2, %a3
%a5 = fmul <4 x float> %z, %zm
%a6 = fadd <4 x float> %a4, %a5
ret <4 x float> %a6
}
define <4 x float> @_Z16rsMatrixMultiplyP12rs_matrix4x4Dv3_f(%struct.rs_matrix4x4* nocapture %m, <3 x float> %in) nounwind readonly {
%r = tail call <4 x float> @_Z16rsMatrixMultiplyPK12rs_matrix4x4Dv3_f(%struct.rs_matrix4x4* nocapture %m, <3 x float> %in) nounwind
ret <4 x float> %r
}
define <4 x float> @_Z16rsMatrixMultiplyPK12rs_matrix4x4Dv2_f(%struct.rs_matrix4x4* nocapture %m, <2 x float> %in) nounwind readonly {
%x0 = extractelement <2 x float> %in, i32 0
%x = tail call <4 x float> @smear_f(float %x0) nounwind readnone
%y0 = extractelement <2 x float> %in, i32 1
%y = tail call <4 x float> @smear_f(float %y0) nounwind readnone
%px = getelementptr inbounds %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 0
%px2 = bitcast float* %px to <4 x float>*
%xm = load <4 x float>* %px2, align 4
%py = getelementptr inbounds %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 4
%py2 = bitcast float* %py to <4 x float>*
%ym = load <4 x float>* %py2, align 4
%pw = getelementptr inbounds %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 12
%pw2 = bitcast float* %pw to <4 x float>*
%wm = load <4 x float>* %pw2, align 4
%a1 = fmul <4 x float> %x, %xm
%a2 = fadd <4 x float> %wm, %a1
%a3 = fmul <4 x float> %y, %ym
%a4 = fadd <4 x float> %a2, %a3
ret <4 x float> %a4
}
define <4 x float> @_Z16rsMatrixMultiplyP12rs_matrix4x4Dv2_f(%struct.rs_matrix4x4* nocapture %m, <2 x float> %in) nounwind readonly {
%r = tail call <4 x float> @_Z16rsMatrixMultiplyPK12rs_matrix4x4Dv2_f(%struct.rs_matrix4x4* nocapture %m, <2 x float> %in) nounwind
ret <4 x float> %r
}