Fix target/38697

2010-01-19  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>

       PR target/38697
       * config/arm/neon-testgen.m (emit_automatics): New parameter
	features. Adjust for Fixed_return_reg feature.
	(test_intrinsic): Call emit_automatics with new feature.
       * config/arm/neon.ml: Update copyright years.
	(features): New Fixed_return_reg feature.
	(ops): Update feature for Vget_low.

2010-01-19  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>

	PR target/38697.
	* gcc.target/arm/neon/vget_lowf32.c: Regenerate.
	* gcc.target/arm/neon/vget_lowp16.c: Likewise.
	* gcc.target/arm/neon/vget_lowp8.c:  Likewise.
	* gcc.target/arm/neon/vget_lows16.c: Likewise.
	* gcc.target/arm/neon/vget_lows32.c: Likewise.
	* gcc.target/arm/neon/vget_lows64.c: Likewise.
	* gcc.target/arm/neon/vget_lows8.c: Likewise.
	* gcc.target/arm/neon/vget_lowu16.c: Likewise.
	* gcc.target/arm/neon/vget_lowu32.c: Likewise.
	* gcc.target/arm/neon/vget_lowu64.c: Likewise.
	* gcc.target/arm/neon/vget_lowu8.c: Likewise.

From-SVN: r156042
This commit is contained in:
Ramana Radhakrishnan 2010-01-19 14:21:14 +00:00 committed by Ramana Radhakrishnan
parent f89cc1a337
commit b3d7e1910f
15 changed files with 56 additions and 22 deletions

View file

@ -1,3 +1,13 @@
2010-01-19 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
PR target/38697
* config/arm/neon-testgen.m (emit_automatics): New parameter
features. Adjust for Fixed_return_reg feature.
(test_intrinsic): Call emit_automatics with new feature.
* config/arm/neon.ml: Update copyright years.
(features): New Fixed_return_reg feature.
(ops): Update feature for Vget_low.
2010-01-19 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/42719

View file

@ -1,5 +1,5 @@
(* Auto-generate ARM Neon intrinsics tests.
Copyright (C) 2006, 2007 Free Software Foundation, Inc.
Copyright (C) 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
Contributed by CodeSourcery.
This file is part of GCC.
@ -58,7 +58,7 @@ let emit_prologue chan test_name =
(* Emit declarations of local variables that are going to be passed
to an intrinsic, together with one to take a returned value if needed. *)
let emit_automatics chan c_types =
let emit_automatics chan c_types features =
let emit () =
ignore (
List.fold_left (fun arg_number -> fun (flags, ty) ->
@ -75,11 +75,17 @@ let emit_automatics chan c_types =
in
match c_types with
(_, return_ty) :: tys ->
if return_ty <> "void" then
(* The intrinsic returns a value. *)
(Printf.fprintf chan " %s out_%s;\n" return_ty return_ty;
emit ())
else
if return_ty <> "void" then begin
(* The intrinsic returns a value. We need to do explict register
allocation for vget_low tests or they fail because of copy
elimination. *)
((if List.mem Fixed_return_reg features then
Printf.fprintf chan " register %s out_%s asm (\"d18\");\n"
return_ty return_ty
else
Printf.fprintf chan " %s out_%s;\n" return_ty return_ty);
emit ())
end else
(* The intrinsic does not return a value. *)
emit ()
| _ -> assert false
@ -257,7 +263,7 @@ let test_intrinsic dir opcode features shape name munge elt_ty =
(* Emit file and function prologues. *)
emit_prologue chan test_name;
(* Emit local variable declarations. *)
emit_automatics chan c_types;
emit_automatics chan c_types features;
Printf.fprintf chan "\n";
(* Emit the call to the intrinsic. *)
emit_call chan const_valuator c_types name elt_ty;

View file

@ -1,7 +1,7 @@
(* Common code for ARM NEON header file, documentation and test case
generators.
Copyright (C) 2006, 2007 Free Software Foundation, Inc.
Copyright (C) 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
Contributed by CodeSourcery.
This file is part of GCC.
@ -234,6 +234,7 @@ type features =
cases. The function supplied must return the integer to be written
into the testcase for the argument number (0-based) supplied to it. *)
| Const_valuator of (int -> int)
| Fixed_return_reg
exception MixedMode of elts * elts
@ -1089,9 +1090,13 @@ let ops =
Use_operands [| Dreg; Qreg |], "vget_high",
notype_1, pf_su_8_64;
Vget_low, [Instruction_name ["vmov"];
Disassembles_as [Use_operands [| Dreg; Dreg |]]],
Disassembles_as [Use_operands [| Dreg; Dreg |]];
Fixed_return_reg],
Use_operands [| Dreg; Qreg |], "vget_low",
notype_1, pf_su_8_64;
notype_1, pf_su_8_32;
Vget_low, [No_op],
Use_operands [| Dreg; Qreg |], "vget_low",
notype_1, [S64; U64];
(* Conversions. *)
Vcvt, [InfoWord], All (2, Dreg), "vcvt", conv_1,

View file

@ -1,3 +1,18 @@
2010-01-19 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
PR target/38697.
* gcc.target/arm/neon/vget_lowf32.c: Regenerate.
* gcc.target/arm/neon/vget_lowp16.c: Likewise.
* gcc.target/arm/neon/vget_lowp8.c: Likewise.
* gcc.target/arm/neon/vget_lows16.c: Likewise.
* gcc.target/arm/neon/vget_lows32.c: Likewise.
* gcc.target/arm/neon/vget_lows64.c: Likewise.
* gcc.target/arm/neon/vget_lows8.c: Likewise.
* gcc.target/arm/neon/vget_lowu16.c: Likewise.
* gcc.target/arm/neon/vget_lowu32.c: Likewise.
* gcc.target/arm/neon/vget_lowu64.c: Likewise.
* gcc.target/arm/neon/vget_lowu8.c: Likewise.
2010-01-19 Janus Weil <janus@gcc.gnu.org>
PR fortran/42545

View file

@ -9,7 +9,7 @@
void test_vget_lowf32 (void)
{
float32x2_t out_float32x2_t;
register float32x2_t out_float32x2_t asm ("d18");
float32x4_t arg0_float32x4_t;
out_float32x2_t = vget_low_f32 (arg0_float32x4_t);

View file

@ -9,7 +9,7 @@
void test_vget_lowp16 (void)
{
poly16x4_t out_poly16x4_t;
register poly16x4_t out_poly16x4_t asm ("d18");
poly16x8_t arg0_poly16x8_t;
out_poly16x4_t = vget_low_p16 (arg0_poly16x8_t);

View file

@ -9,7 +9,7 @@
void test_vget_lowp8 (void)
{
poly8x8_t out_poly8x8_t;
register poly8x8_t out_poly8x8_t asm ("d18");
poly8x16_t arg0_poly8x16_t;
out_poly8x8_t = vget_low_p8 (arg0_poly8x16_t);

View file

@ -9,7 +9,7 @@
void test_vget_lows16 (void)
{
int16x4_t out_int16x4_t;
register int16x4_t out_int16x4_t asm ("d18");
int16x8_t arg0_int16x8_t;
out_int16x4_t = vget_low_s16 (arg0_int16x8_t);

View file

@ -9,7 +9,7 @@
void test_vget_lows32 (void)
{
int32x2_t out_int32x2_t;
register int32x2_t out_int32x2_t asm ("d18");
int32x4_t arg0_int32x4_t;
out_int32x2_t = vget_low_s32 (arg0_int32x4_t);

View file

@ -15,5 +15,4 @@ void test_vget_lows64 (void)
out_int64x1_t = vget_low_s64 (arg0_int64x2_t);
}
/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */

View file

@ -9,7 +9,7 @@
void test_vget_lows8 (void)
{
int8x8_t out_int8x8_t;
register int8x8_t out_int8x8_t asm ("d18");
int8x16_t arg0_int8x16_t;
out_int8x8_t = vget_low_s8 (arg0_int8x16_t);

View file

@ -9,7 +9,7 @@
void test_vget_lowu16 (void)
{
uint16x4_t out_uint16x4_t;
register uint16x4_t out_uint16x4_t asm ("d18");
uint16x8_t arg0_uint16x8_t;
out_uint16x4_t = vget_low_u16 (arg0_uint16x8_t);

View file

@ -9,7 +9,7 @@
void test_vget_lowu32 (void)
{
uint32x2_t out_uint32x2_t;
register uint32x2_t out_uint32x2_t asm ("d18");
uint32x4_t arg0_uint32x4_t;
out_uint32x2_t = vget_low_u32 (arg0_uint32x4_t);

View file

@ -15,5 +15,4 @@ void test_vget_lowu64 (void)
out_uint64x1_t = vget_low_u64 (arg0_uint64x2_t);
}
/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
/* { dg-final { cleanup-saved-temps } } */

View file

@ -9,7 +9,7 @@
void test_vget_lowu8 (void)
{
uint8x8_t out_uint8x8_t;
register uint8x8_t out_uint8x8_t asm ("d18");
uint8x16_t arg0_uint8x16_t;
out_uint8x8_t = vget_low_u8 (arg0_uint8x16_t);