diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2020-02-20 15:04:19 +0000 |
---|---|---|
committer | Richard Sandiford <richard.sandiford@arm.com> | 2020-02-21 10:17:28 +0000 |
commit | 0df28e68fd126d9c3356a3d314be383a877b74a7 (patch) | |
tree | c34f82a0c9311ff9fbffcbcbff73c610182135a2 /gcc | |
parent | 902d28bd838c4d3f9d28832d387812da2232e1ec (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/aarch64/aarch64.c | 17 |
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); |