aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTamar Christina <tamar.christina@arm.com>2024-10-18 09:44:15 +0100
committerTamar Christina <tamar.christina@arm.com>2024-10-18 09:44:15 +0100
commit453d3d90c374d3bb329f1431b7dfb8d0510a88b9 (patch)
tree7b379a103a7dfeedc84162a45245d23db2683563
parent87dc6b1992e7ee02e7a4a81c568754198c0f61f5 (diff)
downloadgcc-453d3d90c374d3bb329f1431b7dfb8d0510a88b9.zip
gcc-453d3d90c374d3bb329f1431b7dfb8d0510a88b9.tar.gz
gcc-453d3d90c374d3bb329f1431b7dfb8d0510a88b9.tar.bz2
AArch64: use movi d0, #0 to clear SVE registers instead of mov z0.d, #0
This patch changes SVE to use Adv. SIMD movi 0 to clear SVE registers when not in SVE streaming mode. As the Neoverse Software Optimization guides indicate SVE mov #0 is not a zero cost move. When In streaming mode we continue to use SVE's mov to clear the registers. Tests have already been updated. gcc/ChangeLog: * config/aarch64/aarch64.cc (aarch64_output_sve_mov_immediate): Use fmov for SVE zeros.
-rw-r--r--gcc/config/aarch64/aarch64.cc7
1 files changed, 5 insertions, 2 deletions
diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
index e65b24e..3ab550a 100644
--- a/gcc/config/aarch64/aarch64.cc
+++ b/gcc/config/aarch64/aarch64.cc
@@ -25516,8 +25516,11 @@ aarch64_output_sve_mov_immediate (rtx const_vector)
}
}
- snprintf (templ, sizeof (templ), "mov\t%%0.%c, #" HOST_WIDE_INT_PRINT_DEC,
- element_char, INTVAL (info.u.mov.value));
+ if (info.u.mov.value == const0_rtx && TARGET_NON_STREAMING)
+ snprintf (templ, sizeof (templ), "movi\t%%d0, #0");
+ else
+ snprintf (templ, sizeof (templ), "mov\t%%0.%c, #" HOST_WIDE_INT_PRINT_DEC,
+ element_char, INTVAL (info.u.mov.value));
return templ;
}