From 8f905d691e15b560e9b64d26c2e5ab281c1fb6fd Mon Sep 17 00:00:00 2001 From: Alan Lawrence Date: Tue, 9 Dec 2014 19:19:54 +0000 Subject: [PATCH] vabs_intrinsic_2.c: New test. gcc/testsuite/: * gcc.target/aarch64/vabs_intrinsic_2.c: New test. From-SVN: r218530 --- gcc/ChangeLog | 9 +++++++++ gcc/config/aarch64/aarch64-builtins.c | 6 ++---- gcc/config/aarch64/aarch64.md | 9 ++++----- gcc/testsuite/ChangeLog | 4 ++++ .../gcc.target/aarch64/vabs_intrinsic_2.c | 17 +++++++++++++++++ 5 files changed, 36 insertions(+), 9 deletions(-) create mode 100644 gcc/testsuite/gcc.target/aarch64/vabs_intrinsic_2.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7002a151e0b..c5a3718ffbc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2014-12-09 Alan Lawrence + + * config/aarch64/aarch64.md (absdi2): Remove scratch operand by + earlyclobbering result operand. + + * config/aarch64/aarch64-builtins.c (aarch64_types_unop_qualifiers): + Remove final qualifier_internal. + (aarch64_fold_builtin): Stop folding abs builtins, except on floats. + 2014-12-09 Wilco Dijkstra * gcc/config/aarch64/aarch64-protos.h (tune-params): Add reasociation diff --git a/gcc/config/aarch64/aarch64-builtins.c b/gcc/config/aarch64/aarch64-builtins.c index aac7269337c..6df42fde8e8 100644 --- a/gcc/config/aarch64/aarch64-builtins.c +++ b/gcc/config/aarch64/aarch64-builtins.c @@ -128,11 +128,9 @@ typedef struct enum aarch64_type_qualifiers *qualifiers; } aarch64_simd_builtin_datum; -/* The qualifier_internal allows generation of a unary builtin from - a pattern with a third pseudo-operand such as a match_scratch. */ static enum aarch64_type_qualifiers aarch64_types_unop_qualifiers[SIMD_MAX_BUILTIN_ARGS] - = { qualifier_none, qualifier_none, qualifier_internal }; + = { qualifier_none, qualifier_none }; #define TYPES_UNOP (aarch64_types_unop_qualifiers) static enum aarch64_type_qualifiers aarch64_types_unopu_qualifiers[SIMD_MAX_BUILTIN_ARGS] @@ -1282,7 +1280,7 @@ aarch64_fold_builtin (tree fndecl, int n_args ATTRIBUTE_UNUSED, tree *args, switch (fcode) { - BUILTIN_VALLDI (UNOP, abs, 2) + BUILTIN_VDQF (UNOP, abs, 2) return fold_build1 (ABS_EXPR, type, args[0]); break; VAR1 (UNOP, floatv2si, 2, v2sf) diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md index 1bbcc7bd567..97d7009c20f 100644 --- a/gcc/config/aarch64/aarch64.md +++ b/gcc/config/aarch64/aarch64.md @@ -2154,9 +2154,8 @@ ) (define_insn_and_split "absdi2" - [(set (match_operand:DI 0 "register_operand" "=r,w") - (abs:DI (match_operand:DI 1 "register_operand" "r,w"))) - (clobber (match_scratch:DI 2 "=&r,X"))] + [(set (match_operand:DI 0 "register_operand" "=&r,w") + (abs:DI (match_operand:DI 1 "register_operand" "r,w")))] "" "@ # @@ -2166,7 +2165,7 @@ && GP_REGNUM_P (REGNO (operands[1]))" [(const_int 0)] { - emit_insn (gen_rtx_SET (VOIDmode, operands[2], + emit_insn (gen_rtx_SET (VOIDmode, operands[0], gen_rtx_XOR (DImode, gen_rtx_ASHIFTRT (DImode, operands[1], @@ -2175,7 +2174,7 @@ emit_insn (gen_rtx_SET (VOIDmode, operands[0], gen_rtx_MINUS (DImode, - operands[2], + operands[0], gen_rtx_ASHIFTRT (DImode, operands[1], GEN_INT (63))))); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 177fe2443a0..e7a3e48787c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2014-12-09 Alan Lawrence + + * gcc.target/aarch64/vabs_intrinsic_2.c: New test. + 2014-12-09 David Malcolm PR jit/64166 diff --git a/gcc/testsuite/gcc.target/aarch64/vabs_intrinsic_2.c b/gcc/testsuite/gcc.target/aarch64/vabs_intrinsic_2.c new file mode 100644 index 00000000000..12fdd813bc3 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/vabs_intrinsic_2.c @@ -0,0 +1,17 @@ +/* { dg-do run } */ +/* { dg-options "-O2" } */ + +#include + +extern void abort (void); + +int +main (int argc, char **argv) +{ + int8x8_t a = vabs_s8 (vdup_n_s8 (-128)); /* Should all be -128. */ + uint8x8_t b = vcltz_s8 (a); /* Should all be true i.e. -1. */ + if (vget_lane_u8 (b, 1)) + return 0; + abort (); +} + -- 2.30.2