https://gcc.gnu.org/g:d94bffb9e7c4cff4c58a8fdcfb11a23a5aaca9f0

commit r17-1988-gd94bffb9e7c4cff4c58a8fdcfb11a23a5aaca9f0
Author: Oleg Endo <[email protected]>
Date:   Tue Jun 30 10:20:45 2026 +0900

    SH: Add another related test case for PR55212 c#464
    
    This case was not posted in the PR but it's related since it's
    triggered by fsca insn and v2sf usage.
    
    gcc/testsuite/ChangeLog:
    
            PR target/55212
            * gcc.target/sh/torture/pr55212-c464-3.c: New.

Diff:
---
 .../gcc.target/sh/torture/pr55212-c464-3.c         | 54 ++++++++++++++++++++++
 1 file changed, 54 insertions(+)

diff --git a/gcc/testsuite/gcc.target/sh/torture/pr55212-c464-3.c 
b/gcc/testsuite/gcc.target/sh/torture/pr55212-c464-3.c
new file mode 100644
index 000000000000..ecc241ece38d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/sh/torture/pr55212-c464-3.c
@@ -0,0 +1,54 @@
+/* { dg-additional-options "-std=c23 -m4 -mfsca -ffast-math" }  */
+/* { dg-do compile }  */
+
+/* N.B. This case was not posted in the PR but it's related since
+        it's triggered by fsca insn and v2sf usage.  */
+
+typedef float vec4[4];
+float glm_euler_by_order_angles_2, glm_euler_by_order_angles_1,
+    glm_euler_by_order_angles_0, glm_euler_by_order_dest_2_2,
+    glm_euler_by_order_dest_2_1, glm_euler_by_order_dest_2_0,
+    glm_euler_by_order_dest_0_2, glm_euler_by_order_dest_0_1,
+    glm_euler_by_order_sy, glm_euler_by_order_sz, glm_euler_by_order_cysz,
+    glm_euler_by_order_cysx, glm_euler_by_order_cxcy, glm_euler_by_order_cx,
+    glm_euler_by_order_cy, glm_euler_by_order_cz, glm_euler_by_order_cycz;
+vec4 *glm_euler_by_order_dest;
+
+typedef enum {
+  GLM_EULER_XZY = 2 << 4,
+  GLM_EULER_ZXY = 4,
+  GLM_EULER_ZYX
+} glm_euler_seq;
+glm_euler_seq glm_euler_by_order_ord;
+
+void glm_euler_by_order()
+{
+  float czsy, sysz;
+  glm_euler_by_order_cx = __builtin_cosf (glm_euler_by_order_angles_0);
+  glm_euler_by_order_sy = __builtin_cosf (glm_euler_by_order_angles_1);
+  glm_euler_by_order_sz = __builtin_cosf (glm_euler_by_order_angles_2);
+  glm_euler_by_order_cycz = glm_euler_by_order_cy * glm_euler_by_order_cz;
+  glm_euler_by_order_cysz = glm_euler_by_order_cy * glm_euler_by_order_sz;
+  glm_euler_by_order_cysx = glm_euler_by_order_cy * 
glm_euler_by_order_angles_0;
+  glm_euler_by_order_cxcy = glm_euler_by_order_cx * glm_euler_by_order_cy;
+  czsy = glm_euler_by_order_cz * glm_euler_by_order_sy;
+
+  switch (glm_euler_by_order_ord)
+  {
+  case GLM_EULER_XZY:
+    glm_euler_by_order_dest_0_1 =
+        glm_euler_by_order_cx * glm_euler_by_order_cysz;
+    break;
+  case GLM_EULER_ZXY:
+    glm_euler_by_order_dest[0][0] =
+        glm_euler_by_order_cycz - glm_euler_by_order_angles_0 * sysz;
+    glm_euler_by_order_dest_0_2 = glm_euler_by_order_cx * 
glm_euler_by_order_sy;
+    glm_euler_by_order_dest_2_0 =
+        czsy + glm_euler_by_order_cysx * glm_euler_by_order_sz;
+    glm_euler_by_order_dest_2_1 =
+        -glm_euler_by_order_cycz * glm_euler_by_order_angles_0 + sysz;
+    glm_euler_by_order_dest_2_2 = glm_euler_by_order_cxcy;
+  case GLM_EULER_ZYX:
+    glm_euler_by_order_dest[0][0] = glm_euler_by_order_cycz;
+  }
+}
\ No newline at end of file

Reply via email to