--- /dev/null
+/* { dg-do compile } */
+/* { dg-additional-options "-O3" } */
+
+typedef float MushMeshVector[4];
+struct MushMeshQuaternionPair {
+ void VectorRotate(MushMeshVector &);
+ MushMeshVector m_first;
+ MushMeshVector m_second;
+};
+void
+MushMeshQuaternionPair::
+VectorRotate(MushMeshVector &ioVec) {
+ ioVec[2] = (2 - m_first[1] + m_first[3] * 0);
+ ioVec[3] = (m_first[3] + m_first[1] - m_first[2] * 0);
+ float c = ioVec[2], d = ioVec[3];
+ ioVec[2] = (0 - d * m_second[1]);
+ ioVec[3] = (2 - c * m_second[1]);
+}
+
auto childs = SLP_TREE_CHILDREN (nodes[0]);
auto l0node = SLP_TREE_CHILDREN (childs[0]);
- auto l1node = SLP_TREE_CHILDREN (childs[1]);
/* Now operand2+4 may lead to another expression. */
auto_vec<slp_tree> left_op, right_op;
left_op.safe_splice (SLP_TREE_CHILDREN (l0node[1]));
right_op.safe_splice (SLP_TREE_CHILDREN (nodes[1]));
+ /* If these nodes don't have any children then they're
+ not ones we're interested in. */
+ if (left_op.length () != 2 || right_op.length () != 2)
+ return IFN_LAST;
+
bool is_neg = vect_normalize_conj_loc (left_op);
bool conj_first_operand = false;