This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[AArch64] Fold max and min reduction builtins to tree.
- From: James Greenhalgh <james dot greenhalgh at arm dot com>
- To: gcc-patches at gcc dot gnu dot org
- Cc: marcus dot shawcroft at arm dot com
- Date: Tue, 30 Apr 2013 16:21:17 +0100
- Subject: [AArch64] Fold max and min reduction builtins to tree.
Hi,
This patch folds the signed versions of min and max reduction
builtins to tree form. We can't safely fold the unsigned
versions as they do not currently have the correct type.
We must use TARGET_GIMPLE_FOLD_BUILTIN as REDUC_MIN_EXPR
is not a valid GENERIC code.
Regression tested on aarch64-none-elf with no regressions.
Thanks,
James
---
gcc/
2013-04-30 James Greenhalgh <james.greenhalgh@arm.com>
* config/aarch64/aarch64-builtins
(aarch64_gimple_fold_builtin): Fold reduc_<su><maxmin>_ builtins.
diff --git a/gcc/config/aarch64/aarch64-builtins.c b/gcc/config/aarch64/aarch64-builtins.c
index 3016f25..8eb32c6 100644
--- a/gcc/config/aarch64/aarch64-builtins.c
+++ b/gcc/config/aarch64/aarch64-builtins.c
@@ -1372,6 +1372,21 @@ aarch64_gimple_fold_builtin (gimple_stmt_iterator *gsi)
args[0],
NULL_TREE);
break;
+ BUILTIN_VDQIF (UNOP, reduc_smax_, 10)
+ new_stmt = gimple_build_assign_with_ops (
+ REDUC_MAX_EXPR,
+ gimple_call_lhs (stmt),
+ args[0],
+ NULL_TREE);
+ break;
+ BUILTIN_VDQIF (UNOP, reduc_smin_, 10)
+ new_stmt = gimple_build_assign_with_ops (
+ REDUC_MIN_EXPR,
+ gimple_call_lhs (stmt),
+ args[0],
+ NULL_TREE);
+ break;
+
default:
break;
}