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.
From d94bffb9e7c4cff4c58a8fdcfb11a23a5aaca9f0 Mon Sep 17 00:00:00 2001
From: Oleg Endo <[email protected]>
Date: Tue, 30 Jun 2026 10:20:45 +0900
Subject: [PATCH] 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.
---
 gcc/testsuite/gcc.target/sh/torture/pr55212-c464-3.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 54 insertions(+)
 create mode 100644 gcc/testsuite/gcc.target/sh/torture/pr55212-c464-3.c

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 0000000..ecc241e
--- /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
--
libgit2 1.9.1

Reply via email to