[APX] i386: Use setzucc by default when APX-ZU enabled

When APX-ZU enabled, all legacy setcc can directly use zu sematic to
avoid potential partial-dependency.

gcc/ChangeLog:

	* config/i386/i386.md (*setcc_qi): Force output setzucc for
	reg operand[0].
	(*setcc_qi_slp): Likewise.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/apx-zu-3.c: New test.
This commit is contained in:
Hongyu Wang
2025-05-21 09:45:03 +08:00
parent c93e74a838
commit cac032367d
2 changed files with 21 additions and 2 deletions

View File

@@ -19880,7 +19880,13 @@
(match_operator:QI 1 "ix86_comparison_operator"
[(reg FLAGS_REG) (const_int 0)]))]
""
"set%C1\t%0"
{
if (REG_P (operands[0])
&& TARGET_APX_ZU)
return "setzu%C1\t%0";
else
return "set%C1\t%0";
}
[(set_attr "type" "setcc")
(set_attr "mode" "QI")])
@@ -19889,7 +19895,12 @@
(match_operator:QI 1 "ix86_comparison_operator"
[(reg FLAGS_REG) (const_int 0)]))]
""
"set%C1\t%0"
{
if (TARGET_APX_ZU)
return "setzu%C1\t%0";
else
return "set%C1\t%0";
}
[(set_attr "type" "setcc")
(set_attr "mode" "QI")])

View File

@@ -0,0 +1,8 @@
/* { dg-do compile { target { ! ia32 } } } */
/* { dg-options "-mapxf -march=x86-64 -O2" } */
/* { dg-final { scan-assembler-times "setzune" 1} } */
char foo0 (int a)
{
return a == 0 ? 0 : 1;
}