aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJing Yu <jingyu@google.com>2011-01-07 16:44:25 -0800
committerJing Yu <jingyu@google.com>2011-01-07 16:44:25 -0800
commit88e20bebc10f931336868b211ff40e3001f0664b (patch)
treeff620939cbcf363c13b0ae18f5c6b5c2f78e58b0
parent10341f1e9597f24ea360971c9b3aac4f9047bbd1 (diff)
downloadtoolchain_gcc-88e20bebc10f931336868b211ff40e3001f0664b.tar.gz
toolchain_gcc-88e20bebc10f931336868b211ff40e3001f0664b.tar.bz2
toolchain_gcc-88e20bebc10f931336868b211ff40e3001f0664b.zip
Back port 2 upstream fixes for broken dejagnu tests.
upstream r156042 and r148110 Change-Id: Ic35d4be0fc74a4ae2b8c57a54affef975b79ed88
-rw-r--r--gcc-4.4.3/README.google18
-rw-r--r--gcc-4.4.3/gcc/config/arm/neon-testgen.ml22
-rw-r--r--gcc-4.4.3/gcc/config/arm/neon.ml11
-rw-r--r--gcc-4.4.3/gcc/testsuite/g++.dg/init/ref15.C4
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowf32.c2
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowp16.c2
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowp8.c2
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lows16.c2
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lows32.c2
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lows64.c1
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lows8.c2
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowu16.c2
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowu32.c2
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowu64.c1
-rw-r--r--gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowu8.c2
15 files changed, 52 insertions, 23 deletions
diff --git a/gcc-4.4.3/README.google b/gcc-4.4.3/README.google
index f2a16f1e8..c6b3587b2 100644
--- a/gcc-4.4.3/README.google
+++ b/gcc-4.4.3/README.google
@@ -2093,3 +2093,21 @@ gcc/config/arm/arm.md
port.
Owner: dougkwan
Status: local.
+
+gcc/config/arm/neon-testgen.ml
+gcc/config/arm/neon.ml
+gcc/testsuite/gcc.target/arm/neon/vget_lowf32.c
+gcc/testsuite/gcc.target/arm/neon/vget_lowp16.c
+gcc/testsuite/gcc.target/arm/neon/vget_lowp8.c
+gcc/testsuite/gcc.target/arm/neon/vget_lows16.c
+gcc/testsuite/gcc.target/arm/neon/vget_lows32.c
+gcc/testsuite/gcc.target/arm/neon/vget_lows64.c
+gcc/testsuite/gcc.target/arm/neon/vget_lows8.c
+gcc/testsuite/gcc.target/arm/neon/vget_lowu16.c
+gcc/testsuite/gcc.target/arm/neon/vget_lowu32.c
+gcc/testsuite/gcc.target/arm/neon/vget_lowu64.c
+gcc/testsuite/gcc.target/arm/neon/vget_lowu8.c
+gcc/testsuite/g++.dg/init/ref15.C
+ Back port upstream fixes r156042 and r148110 to fix broken tests.
+ Owner: dougkwan
+ Status: in upstream.
diff --git a/gcc-4.4.3/gcc/config/arm/neon-testgen.ml b/gcc-4.4.3/gcc/config/arm/neon-testgen.ml
index 00a8e5332..3be139742 100644
--- a/gcc-4.4.3/gcc/config/arm/neon-testgen.ml
+++ b/gcc-4.4.3/gcc/config/arm/neon-testgen.ml
@@ -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
@@ -256,7 +262,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;
diff --git a/gcc-4.4.3/gcc/config/arm/neon.ml b/gcc-4.4.3/gcc/config/arm/neon.ml
index 10393b33e..80cc4f149 100644
--- a/gcc-4.4.3/gcc/config/arm/neon.ml
+++ b/gcc-4.4.3/gcc/config/arm/neon.ml
@@ -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.
@@ -233,6 +233,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
@@ -1076,9 +1077,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,
diff --git a/gcc-4.4.3/gcc/testsuite/g++.dg/init/ref15.C b/gcc-4.4.3/gcc/testsuite/g++.dg/init/ref15.C
index d3a94227f..bc9c01dc2 100644
--- a/gcc-4.4.3/gcc/testsuite/g++.dg/init/ref15.C
+++ b/gcc-4.4.3/gcc/testsuite/g++.dg/init/ref15.C
@@ -1,6 +1,8 @@
// PR c++/20416. We correctly constructed the temporary S in foo(),
// but incorrectly destroyed it every time foo() was called.
-// { dg-do run }
+// When using a wrapped target, there is no way to override the exit
+// code after returning from main.
+// { dg-do run { target unwrapped } }
extern "C" void abort (void);
extern "C" void _exit (int);
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowf32.c b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowf32.c
index ae63430f7..a14a57636 100644
--- a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowf32.c
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowf32.c
@@ -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);
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowp16.c b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowp16.c
index c24ac0cf1..5c130f0b4 100644
--- a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowp16.c
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowp16.c
@@ -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);
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowp8.c b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowp8.c
index 45d65bcaf..4b4f599fc 100644
--- a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowp8.c
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowp8.c
@@ -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);
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lows16.c b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lows16.c
index 8e6c29aa7..ee6e9904b 100644
--- a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lows16.c
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lows16.c
@@ -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);
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lows32.c b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lows32.c
index e018afd7f..08315286d 100644
--- a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lows32.c
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lows32.c
@@ -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);
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lows64.c b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lows64.c
index e2e2bd66f..9c1440ceb 100644
--- a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lows64.c
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lows64.c
@@ -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 } } */
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lows8.c b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lows8.c
index 0be24de35..7d324f337 100644
--- a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lows8.c
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lows8.c
@@ -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);
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowu16.c b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowu16.c
index 67bcd5090..b0c438453 100644
--- a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowu16.c
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowu16.c
@@ -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);
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowu32.c b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowu32.c
index d21d97acd..fdd8e79e9 100644
--- a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowu32.c
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowu32.c
@@ -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);
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowu64.c b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowu64.c
index 79cf1c53d..e6f7627cb 100644
--- a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowu64.c
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowu64.c
@@ -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 } } */
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowu8.c b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowu8.c
index 03996493c..d4e3c714d 100644
--- a/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowu8.c
+++ b/gcc-4.4.3/gcc/testsuite/gcc.target/arm/neon/vget_lowu8.c
@@ -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);