diff options
author | Wilco Dijkstra <wilco@gcc.gnu.org> | 2016-07-28 14:34:41 +0000 |
---|---|---|
committer | Wilco Dijkstra <wilco@gcc.gnu.org> | 2016-07-28 14:34:41 +0000 |
commit | 63715e5e78532916b334027d72fb59931798a5f7 (patch) | |
tree | b4e6979e9b9496ff2dcd879e250d4ca26ddc2176 /gcc/config/aarch64/iterators.md | |
parent | dde23f43f9b80286ebed873431d7707a800f9043 (diff) | |
download | gcc-63715e5e78532916b334027d72fb59931798a5f7.zip gcc-63715e5e78532916b334027d72fb59931798a5f7.tar.gz gcc-63715e5e78532916b334027d72fb59931798a5f7.tar.bz2 |
On AArch64 the UXTB and UXTH instructions are aliases of UBFM,
which does a shift as part of its operation. An AND immediate is a
simpler operation, and might be faster on some implementations, so
it is better to emit this this instead of UBFM.
Benchmarking showed no difference on implementations where UBFM has
the same performance as AND, and minor speedups across several
benchmarks on an implementation where UBFM is slower than AND.
Bootstrapped and tested on aarch64-none-elf.
gcc/
* config/aarch64/aarch64.md
(zero_extend<SHORT:mode><GPI:mode>2_aarch64): Change output
statement and type.
(<optab>qihi2_aarch64): Likewise, and split into two.
(extendqihi2_aarch64): New.
(zero_extendqihi2_aarch64): New.
* config/aarch64/iterators.md (ldrxt): Remove.
* config/aarch64/aarch64.c (aarch64_rtx_costs): Change cost of
uxtb/uxth.
From-SVN: r238821
Diffstat (limited to 'gcc/config/aarch64/iterators.md')
-rw-r--r-- | gcc/config/aarch64/iterators.md | 3 |
1 files changed, 0 insertions, 3 deletions
diff --git a/gcc/config/aarch64/iterators.md b/gcc/config/aarch64/iterators.md index 91e2e64..5e8b0ad 100644 --- a/gcc/config/aarch64/iterators.md +++ b/gcc/config/aarch64/iterators.md @@ -942,9 +942,6 @@ ;; Similar, but when not(op) (define_code_attr nlogical [(and "bic") (ior "orn") (xor "eon")]) -;; Sign- or zero-extending load -(define_code_attr ldrxt [(sign_extend "ldrs") (zero_extend "ldr")]) - ;; Sign- or zero-extending data-op (define_code_attr su [(sign_extend "s") (zero_extend "u") (sign_extract "s") (zero_extract "u") |