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
