aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2020-02-20 15:04:19 +0000
committerRichard Sandiford <richard.sandiford@arm.com>2020-02-21 10:17:28 +0000
commit0df28e68fd126d9c3356a3d314be383a877b74a7 (patch)
treec34f82a0c9311ff9fbffcbcbff73c610182135a2 /gcc
parent902d28bd838c4d3f9d28832d387812da2232e1ec (diff)
downloadgcc-0df28e68fd126d9c3356a3d314be383a877b74a7.zip
gcc-0df28e68fd126d9c3356a3d314be383a877b74a7.tar.gz
gcc-0df28e68fd126d9c3356a3d314be383a877b74a7.tar.bz2
aarch64: Avoid creating an unused register
The rsqrt path of aarch64_emit_approx_sqrt created a pseudo register that it never used. 2020-02-21 Richard Sandiford <richard.sandiford@arm.com> gcc/ * config/aarch64/aarch64.c (aarch64_emit_approx_sqrt): Don't create an unused xmsk register when handling approximate rsqrt.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/aarch64/aarch64.c17
2 files changed, 15 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 16a23d0..8241af4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2020-02-21 Richard Sandiford <richard.sandiford@arm.com>
+ * config/aarch64/aarch64.c (aarch64_emit_approx_sqrt): Don't create
+ an unused xmsk register when handling approximate rsqrt.
+
+2020-02-21 Richard Sandiford <richard.sandiford@arm.com>
+
* config/aarch64/aarch64.c (aarch64_emit_approx_sqrt): Fix inverted
flag_finite_math_only condition.
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index 6fb567a..0acaa06 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -12774,14 +12774,17 @@ aarch64_emit_approx_sqrt (rtx dst, rtx src, bool recp)
machine_mode mmsk = (VECTOR_MODE_P (mode)
? related_int_vector_mode (mode).require ()
: int_mode_for_mode (mode).require ());
- rtx xmsk = gen_reg_rtx (mmsk);
+ rtx xmsk = NULL_RTX;
if (!recp)
- /* When calculating the approximate square root, compare the
- argument with 0.0 and create a mask. */
- emit_insn (gen_rtx_SET (xmsk,
- gen_rtx_NEG (mmsk,
- gen_rtx_EQ (mmsk, src,
- CONST0_RTX (mode)))));
+ {
+ /* When calculating the approximate square root, compare the
+ argument with 0.0 and create a mask. */
+ xmsk = gen_reg_rtx (mmsk);
+ emit_insn (gen_rtx_SET (xmsk,
+ gen_rtx_NEG (mmsk,
+ gen_rtx_EQ (mmsk, src,
+ CONST0_RTX (mode)))));
+ }
/* Estimate the approximate reciprocal square root. */
rtx xdst = gen_reg_rtx (mode);