aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJames Greenhalgh <james.greenhalgh@arm.com>2013-05-01 10:46:00 +0000
committerJames Greenhalgh <jgreenhalgh@gcc.gnu.org>2013-05-01 10:46:00 +0000
commit75dd5aceb27fb1f07bfacff3aa5968b273cc13eb (patch)
treeefa0bf873bbaafe0d059f33a9de352bcf67ad506 /gcc
parentad755ff16d3dae0788c1cde3fe0e960b00103cf6 (diff)
downloadgcc-75dd5aceb27fb1f07bfacff3aa5968b273cc13eb.zip
gcc-75dd5aceb27fb1f07bfacff3aa5968b273cc13eb.tar.gz
gcc-75dd5aceb27fb1f07bfacff3aa5968b273cc13eb.tar.bz2
[AArch64] Add combiner patterns for FAC instructions
gcc/ * config/aarch64/aarch64-simd.md (*aarch64_fac<optab><mode>): New. * config/aarch64/iterators.md (FAC_COMPARISONS): New. From-SVN: r198494
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/aarch64/aarch64-simd.md17
-rw-r--r--gcc/config/aarch64/iterators.md3
3 files changed, 25 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d0392c8..ccc1fc7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2013-05-01 James Greenhalgh <james.greenhalgh@arm.com>
+ * config/aarch64/aarch64-simd.md (*aarch64_fac<optab><mode>): New.
+ * config/aarch64/iterators.md (FAC_COMPARISONS): New.
+
+2013-05-01 James Greenhalgh <james.greenhalgh@arm.com>
+
* config/aarch64/aarch64-simd.md
(vcond<mode>_internal): Handle special cases for constant masks.
(vcond<mode><mode>): Allow nonmemory_operands for outcome vectors.
diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md
index dfe4acb..21c2a68 100644
--- a/gcc/config/aarch64/aarch64-simd.md
+++ b/gcc/config/aarch64/aarch64-simd.md
@@ -3400,6 +3400,23 @@
(set_attr "simd_mode" "<MODE>")]
)
+;; fac(ge|gt)
+;; Note we can also handle what would be fac(le|lt) by
+;; generating fac(ge|gt).
+
+(define_insn "*aarch64_fac<optab><mode>"
+ [(set (match_operand:<V_cmp_result> 0 "register_operand" "=w")
+ (neg:<V_cmp_result>
+ (FAC_COMPARISONS:<V_cmp_result>
+ (abs:VALLF (match_operand:VALLF 1 "register_operand" "w"))
+ (abs:VALLF (match_operand:VALLF 2 "register_operand" "w"))
+ )))]
+ "TARGET_SIMD"
+ "fac<n_optab>\t%<v>0<Vmtype>, %<v><cmp_1><Vmtype>, %<v><cmp_2><Vmtype>"
+ [(set_attr "simd_type" "simd_fcmp")
+ (set_attr "simd_mode" "<MODE>")]
+)
+
;; addp
(define_insn "aarch64_addp<mode>"
diff --git a/gcc/config/aarch64/iterators.md b/gcc/config/aarch64/iterators.md
index 0b9f9e8..00e315d 100644
--- a/gcc/config/aarch64/iterators.md
+++ b/gcc/config/aarch64/iterators.md
@@ -553,6 +553,9 @@
;; Unsigned comparison operators.
(define_code_iterator UCOMPARISONS [ltu leu geu gtu])
+;; Unsigned comparison operators.
+(define_code_iterator FAC_COMPARISONS [lt le ge gt])
+
;; -------------------------------------------------------------------
;; Code Attributes
;; -------------------------------------------------------------------