From 4778c2298c8e32de030656efe9a51d5dd810b3cd Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 26 Jun 2007 11:06:08 +0000 Subject: merge -r125727:126008 svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_1-branch git-svn-id: https://gcc.gnu.org/svn/gcc/branches/redhat/gcc-4_1-branch@126017 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 34 +++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/calls.c | 14 +++++++- gcc/config/i386/i386.c | 7 ++-- gcc/config/i386/i386.h | 3 +- gcc/config/i386/i386.md | 6 ++-- gcc/cp/ChangeLog | 15 +++++++++ gcc/cp/decl.c | 10 +++++- gcc/gimplify.c | 13 ++++++++ gcc/reload.c | 5 +-- gcc/testsuite/ChangeLog | 37 +++++++++++++++++++++ gcc/testsuite/g++.dg/ext/asm10.C | 14 ++++++++ gcc/testsuite/g++.dg/opt/nrv13.C | 42 ++++++++++++++++++++++++ gcc/testsuite/g++.dg/opt/static5.C | 29 ++++++++++++++++ gcc/testsuite/g++.dg/opt/static6.C | 35 ++++++++++++++++++++ gcc/testsuite/gcc.c-torture/execute/20070614-1.c | 33 +++++++++++++++++++ gcc/testsuite/gcc.target/i386/pr32389.c | 10 ++++++ gcc/testsuite/gcc.target/sparc/align.c | 3 +- gcc/testsuite/gcc.target/sparc/combined-2.c | 4 +-- gcc/testsuite/gcc.target/sparc/fexpand.c | 2 +- gcc/testsuite/gcc.target/sparc/fnot.c | 8 ++--- gcc/testsuite/gcc.target/sparc/fpack16.c | 2 +- gcc/testsuite/gcc.target/sparc/fpmerge.c | 4 +-- gcc/testsuite/gcc.target/sparc/fpmul.c | 4 +-- gcc/testsuite/gcc.target/sparc/noresult.c | 1 - gcc/testsuite/gcc.target/sparc/pdist.c | 3 +- gcc/tree-ssa-structalias.c | 3 +- gcc/version.c | 2 +- 28 files changed, 315 insertions(+), 30 deletions(-) create mode 100644 gcc/testsuite/g++.dg/ext/asm10.C create mode 100644 gcc/testsuite/g++.dg/opt/nrv13.C create mode 100644 gcc/testsuite/g++.dg/opt/static5.C create mode 100644 gcc/testsuite/g++.dg/opt/static6.C create mode 100644 gcc/testsuite/gcc.c-torture/execute/20070614-1.c create mode 100644 gcc/testsuite/gcc.target/i386/pr32389.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5112fc450ae..d56d7c2163d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,37 @@ +2007-06-21 Uros Bizjak + + PR target/32389 + * config/i386/i386.h (enum ix86_stack_slot): Add SLOT_VIRTUAL. + * config/i386/i386.c (assign_386_stack_local): Assert that + SLOT_VIRTUAL is valid only before virtual regs are instantiated. + (ix86_expand_builtin) [IX86_BUILTIN_LDMXCSR, IX86_BUILTIN_STMXCSR]: + Use SLOT_VIRTUAL stack slot instead of SLOT_TEMP. + * config/i386/i386.md (truncdfsf2, truncxfsf2, truncxfdf2): Ditto. + +2007-06-20 Jakub Jelinek + + PR inline-asm/32109 + * gimplify.c (gimplify_asm_expr): Issue error if type is addressable + and !allows_mem. + + PR middle-end/32285 + * calls.c (precompute_arguments): Also precompute CALL_EXPR arguments + if ACCUMULATE_OUTGOING_ARGS. + +2007-06-20 Kaz Kojima + + PR rtl-optimization/28011 + Backport from mainline. + * reload.c (push_reload): Set dont_share if IN appears in OUT + also when IN is a PLUS rtx. + (reg_overlap_mentioned_for_reload_p): Return true if X and IN + are same PLUS rtx. + +2007-06-19 Jakub Jelinek + + PR tree-optimization/32353 + * tree-ssa-structalias.c (set_uids_in_ptset): Also handle RESULT_DECL. + 2007-05-04 Ulrich Drepper Jakub Jelinek diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index ecefe77896b..77bb8ae07a0 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20070615 +20070626 diff --git a/gcc/calls.c b/gcc/calls.c index df6699a29bd..45001c08ee7 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -1239,13 +1239,25 @@ precompute_arguments (int flags, int num_actuals, struct arg_data *args) /* If this is a libcall, then precompute all arguments so that we do not get extraneous instructions emitted as part of the libcall sequence. */ - if ((flags & ECF_LIBCALL_BLOCK) == 0) + + /* If we preallocated the stack space, and some arguments must be passed + on the stack, then we must precompute any parameter which contains a + function call which will store arguments on the stack. + Otherwise, evaluating the parameter may clobber previous parameters + which have already been stored into the stack. (we have code to avoid + such case by saving the outgoing stack arguments, but it results in + worse code) */ + if ((flags & ECF_LIBCALL_BLOCK) == 0 && !ACCUMULATE_OUTGOING_ARGS) return; for (i = 0; i < num_actuals; i++) { enum machine_mode mode; + if ((flags & ECF_LIBCALL_BLOCK) == 0 + && TREE_CODE (args[i].tree_value) != CALL_EXPR) + continue; + /* If this is an addressable type, we cannot pre-evaluate it. */ gcc_assert (!TREE_ADDRESSABLE (TREE_TYPE (args[i].tree_value))); diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 94d2f11fefc..c54ffee84f6 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -13267,6 +13267,9 @@ assign_386_stack_local (enum machine_mode mode, enum ix86_stack_slot n) gcc_assert (n < MAX_386_STACK_LOCALS); + /* Virtual slot is valid only before vregs are instantiated. */ + gcc_assert ((n == SLOT_VIRTUAL) == !virtuals_instantiated); + for (s = ix86_stack_locals; s; s = s->next) if (s->mode == mode && s->n == n) return s->rtl; @@ -16035,13 +16038,13 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED, case IX86_BUILTIN_LDMXCSR: op0 = expand_expr (TREE_VALUE (arglist), NULL_RTX, VOIDmode, 0); - target = assign_386_stack_local (SImode, SLOT_TEMP); + target = assign_386_stack_local (SImode, SLOT_VIRTUAL); emit_move_insn (target, op0); emit_insn (gen_sse_ldmxcsr (target)); return 0; case IX86_BUILTIN_STMXCSR: - target = assign_386_stack_local (SImode, SLOT_TEMP); + target = assign_386_stack_local (SImode, SLOT_VIRTUAL); emit_insn (gen_sse_stmxcsr (target)); return copy_to_mode_reg (SImode, target); diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index a7ed29ee88f..93f38e5410e 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -2243,7 +2243,8 @@ enum ix86_entity enum ix86_stack_slot { - SLOT_TEMP = 0, + SLOT_VIRTUAL = 0, + SLOT_TEMP, SLOT_CW_STORED, SLOT_CW_TRUNC, SLOT_CW_FLOOR, diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 78f74ee344c..0c464276597 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -3694,7 +3694,7 @@ ; else { - rtx temp = assign_386_stack_local (SFmode, SLOT_TEMP); + rtx temp = assign_386_stack_local (SFmode, SLOT_VIRTUAL); emit_insn (gen_truncdfsf2_with_temp (operands[0], operands[1], temp)); DONE; } @@ -3846,7 +3846,7 @@ DONE; } else - operands[2] = assign_386_stack_local (SFmode, SLOT_TEMP); + operands[2] = assign_386_stack_local (SFmode, SLOT_VIRTUAL); }) (define_insn "*truncxfsf2_mixed" @@ -3944,7 +3944,7 @@ DONE; } else - operands[2] = assign_386_stack_local (DFmode, SLOT_TEMP); + operands[2] = assign_386_stack_local (DFmode, SLOT_VIRTUAL); }) (define_insn "*truncxfdf2_mixed" diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c8142be5660..4505e8ed5aa 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,18 @@ +2007-06-20 Dirk Mueller + + PR c++/31809 + PR c++/31806 + Backport from mainline: + 2007-05-31 Jakub Jelinek + + * decl.c (cp_finish_decl): Also clear was_readonly if a static var + needs runtime initialization. + + 2007-05-30 Jakub Jelinek + + * decl.c (cp_finish_decl): Clear TREE_READONLY flag on TREE_STATIC + variables that need runtime initialization. + 2007-06-08 Jakub Jelinek PR c++/32177 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 0c8826f6f63..393f48be44c 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -5384,7 +5384,15 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p, initializer. It is not legal to redeclare a static data member, so this issue does not arise in that case. */ if (var_definition_p && TREE_STATIC (decl)) - expand_static_init (decl, init); + { + if (init) + { + if (TREE_READONLY (decl)) + TREE_READONLY (decl) = 0; + was_readonly = 0; + } + expand_static_init (decl, init); + } } } diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 61d5770dcdd..c99ef2edd63 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -3901,6 +3901,19 @@ gimplify_asm_expr (tree *expr_p, tree *pre_p, tree *post_p) parse_input_constraint (&constraint, 0, 0, noutputs, 0, oconstraints, &allows_mem, &allows_reg); + /* If we can't make copies, we can only accept memory. */ + if (TREE_ADDRESSABLE (TREE_TYPE (TREE_VALUE (link)))) + { + if (allows_mem) + allows_reg = 0; + else + { + error ("impossible constraint in %"); + error ("non-memory input %d must stay in memory", i); + return GS_ERROR; + } + } + /* If the operand is a memory input, it should be an lvalue. */ if (!allows_reg && allows_mem) { diff --git a/gcc/reload.c b/gcc/reload.c index d775259d6c1..eea9cc738a1 100644 --- a/gcc/reload.c +++ b/gcc/reload.c @@ -1210,7 +1210,7 @@ push_reload (rtx in, rtx out, rtx *inloc, rtx *outloc, /* If IN appears in OUT, we can't share any input-only reload for IN. */ if (in != 0 && out != 0 && MEM_P (out) - && (REG_P (in) || MEM_P (in)) + && (REG_P (in) || MEM_P (in) || GET_CODE (in) == PLUS) && reg_overlap_mentioned_for_reload_p (in, XEXP (out, 0))) dont_share = 1; @@ -6464,7 +6464,8 @@ reg_overlap_mentioned_for_reload_p (rtx x, rtx in) if (REG_P (in)) return 0; else if (GET_CODE (in) == PLUS) - return (reg_overlap_mentioned_for_reload_p (x, XEXP (in, 0)) + return (rtx_equal_p (x, in) + || reg_overlap_mentioned_for_reload_p (x, XEXP (in, 0)) || reg_overlap_mentioned_for_reload_p (x, XEXP (in, 1))); else return (reg_overlap_mentioned_for_reload_p (XEXP (x, 0), in) || reg_overlap_mentioned_for_reload_p (XEXP (x, 1), in)); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 280920dc01e..34bae8e25d7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,40 @@ +2007-06-21 Uros Bizjak + + PR target/32389 + * gcc.target/i386/pr32389.c New test. + +2007-06-20 Dirk Mueller + + PR c++/31806 + PR c++/31809 + * g++.dg/opt/static5.C: New test. + * g++.dg/opt/static6.C: New test. + +2007-06-20 Jakub Jelinek + + PR inline-asm/32109 + * g++.dg/ext/asm10.C: New test. + + PR middle-end/32285 + * gcc.c-torture/execute/20070614-1.c: New test. + +2007-06-19 Jakub Jelinek + + PR tree-optimization/32353 + * g++.dg/opt/nrv13.C: New test. + +2007-06-17 Eric Botcazou + + * gcc.target/sparc/align.c: Use 'unsigned char' as element type. + * gcc.target/sparc/combined-2.c: Likewise. + * gcc.target/sparc/fexpand.c : Likewise. + * gcc.target/sparc/fnot.c: Likewise. Fix a couple of prototypes. + * gcc.target/sparc/fpack16.c : Likewise. + * gcc.target/sparc/fpmerge.c : Likewise. + * gcc.target/sparc/fpmul.c : Likewise. + * gcc.target/sparc/noresult.c : Likewise. + * gcc.target/sparc/pdist.c: Likewise. + 2007-06-08 Jakub Jelinek PR c++/32177 diff --git a/gcc/testsuite/g++.dg/ext/asm10.C b/gcc/testsuite/g++.dg/ext/asm10.C new file mode 100644 index 00000000000..b95027c8cac --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/asm10.C @@ -0,0 +1,14 @@ +// PR inline-asm/32109 +// { dg-do compile } +// { dg-options "-O2" } + +struct A { int i[3]; ~A (); }; +struct A a; +struct B { struct A c; int i; B (); } b; + +B::B () +{ + __asm ("" : : "r" (a)); // { dg-error "impossible constraint|non-memory input" } + __asm ("" : : "r" (b.c)); // { dg-error "impossible constraint|non-memory input" } + __asm ("" : : "r" (c)); // { dg-error "impossible constraint|non-memory input" } +} diff --git a/gcc/testsuite/g++.dg/opt/nrv13.C b/gcc/testsuite/g++.dg/opt/nrv13.C new file mode 100644 index 00000000000..bb49a3a6e4f --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/nrv13.C @@ -0,0 +1,42 @@ +// PR tree-optimization/32353 +// { dg-do run } +// { dg-options "-O2" } + +extern "C" void abort (); + +struct A +{ + int f; + A (int x) : f (x) {} +}; + +A +foo (const A &x, const A &y) +{ + A r (0); + r = x.f == -111 ? y : (y.f == -111 || x.f > y.f) ? x : y; + A s (0); + r = r.f == -111 ? s : (r.f > s.f) ? r : s; + return r; +} + +int +main () +{ + if (foo (A (0), A (1)).f != 1) + abort (); + if (foo (A (1), A (9)).f != 9) + abort (); + if (foo (A (9), A (1)).f != 9) + abort (); + if (foo (A (-4), A (-5)).f != 0) + abort (); + if (foo (A (-111), A (-111)).f != 0) + abort (); + if (foo (A (2), A (-111)).f != 2) + abort (); + if (foo (A (-111), A (6)).f != 6) + abort (); + if (foo (A (-111), A (-4)).f != 0) + abort (); +} diff --git a/gcc/testsuite/g++.dg/opt/static5.C b/gcc/testsuite/g++.dg/opt/static5.C new file mode 100644 index 00000000000..1daca6d7194 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/static5.C @@ -0,0 +1,29 @@ +// PR c++/31809 +// { dg-do run } +// { dg-options "-O2" } + +struct S +{ + unsigned v; + static inline S f (unsigned a); +}; + +inline S +S::f (unsigned a) +{ + static S t = { a }; + return t; +} + +const static S s = S::f (26); + +extern "C" void abort (void); + +int +main () +{ + S t = s; + if (t.v != 26) + abort (); + return 0; +} diff --git a/gcc/testsuite/g++.dg/opt/static6.C b/gcc/testsuite/g++.dg/opt/static6.C new file mode 100644 index 00000000000..00e76fb7350 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/static6.C @@ -0,0 +1,35 @@ +// PR c++/31806 +// { dg-do run } +// { dg-options "-O2 -fno-inline -fno-threadsafe-statics" } + +extern "C" void abort(void); + +struct A +{ + void *d; +}; + +static const A& staticA() +{ + static A s_static; + return s_static; +} + +void assert_failed() +{ + abort(); +} + +A testMethod() +{ + static const A& s = staticA( ); + if (&s == 0) + assert_failed(); + return s; +} + +int main() +{ + testMethod(); + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/execute/20070614-1.c b/gcc/testsuite/gcc.c-torture/execute/20070614-1.c new file mode 100644 index 00000000000..fa44f7fa3ec --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/20070614-1.c @@ -0,0 +1,33 @@ +extern void abort (void); + +_Complex v = 3.0 + 1.0iF; + +void +foo (_Complex z, int *x) +{ + if (z != v) + abort (); +} + +_Complex bar (_Complex z) __attribute__ ((pure)); +_Complex +bar (_Complex z) +{ + return v; +} + +int +baz (void) +{ + int a, i; + for (i = 0; i < 6; i++) + foo (bar (1.0iF * i), &a); + return 0; +} + +int +main () +{ + baz (); + return 0; +} diff --git a/gcc/testsuite/gcc.target/i386/pr32389.c b/gcc/testsuite/gcc.target/i386/pr32389.c new file mode 100644 index 00000000000..3f4cb3e6228 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr32389.c @@ -0,0 +1,10 @@ +/* Testcase by Mike Frysinger */ + +/* { dg-do compile { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */ +/* { dg-options "-msse" } */ + +double f1(); +int f2() { + __builtin_ia32_stmxcsr(); + return f1(); +} diff --git a/gcc/testsuite/gcc.target/sparc/align.c b/gcc/testsuite/gcc.target/sparc/align.c index d9cc162e828..804ca9397f3 100644 --- a/gcc/testsuite/gcc.target/sparc/align.c +++ b/gcc/testsuite/gcc.target/sparc/align.c @@ -1,10 +1,9 @@ /* { dg-do compile } */ /* { dg-options "-mcpu=ultrasparc -mvis" } */ - typedef long long int64_t; typedef int vec32 __attribute__((vector_size(8))); typedef short vec16 __attribute__((vector_size(8))); -typedef char vec8 __attribute__((vector_size(8))); +typedef unsigned char vec8 __attribute__((vector_size(8))); vec16 foo1 (vec16 a, vec16 b) { return __builtin_vis_faligndatav4hi (a, b); diff --git a/gcc/testsuite/gcc.target/sparc/combined-2.c b/gcc/testsuite/gcc.target/sparc/combined-2.c index 016e4fa6a6c..c4b70a55a2d 100644 --- a/gcc/testsuite/gcc.target/sparc/combined-2.c +++ b/gcc/testsuite/gcc.target/sparc/combined-2.c @@ -1,7 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -mcpu=ultrasparc -mvis" } */ -typedef char pixel __attribute__((vector_size(4))); -typedef char vec8 __attribute__((vector_size(8))); +typedef unsigned char pixel __attribute__((vector_size(4))); +typedef unsigned char vec8 __attribute__((vector_size(8))); typedef short vec16 __attribute__((vector_size(8))); vec16 foo (pixel a, pixel b) { diff --git a/gcc/testsuite/gcc.target/sparc/fexpand.c b/gcc/testsuite/gcc.target/sparc/fexpand.c index 2483f4f7235..21aeafff0b1 100644 --- a/gcc/testsuite/gcc.target/sparc/fexpand.c +++ b/gcc/testsuite/gcc.target/sparc/fexpand.c @@ -1,7 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-mcpu=ultrasparc -mvis" } */ typedef short vec16 __attribute__((vector_size(8))); -typedef char vec8 __attribute__((vector_size(4))); +typedef unsigned char vec8 __attribute__((vector_size(4))); vec16 foo (vec8 a) { return __builtin_vis_fexpand (a); diff --git a/gcc/testsuite/gcc.target/sparc/fnot.c b/gcc/testsuite/gcc.target/sparc/fnot.c index e6f98d412a6..dceee52f7da 100644 --- a/gcc/testsuite/gcc.target/sparc/fnot.c +++ b/gcc/testsuite/gcc.target/sparc/fnot.c @@ -1,8 +1,8 @@ /* { dg-do compile } */ /* { dg-options "-O -mcpu=ultrasparc -mvis" } */ -typedef char vec8 __attribute__((vector_size(8))); +typedef unsigned char vec8 __attribute__((vector_size(8))); typedef short vec16 __attribute__((vector_size(8))); -typedef int vec32 __attribute__((vector_size(8))); +typedef int vec32 __attribute__((vector_size(8))); extern vec8 foo1_8(void); extern void foo2_8(vec8); @@ -21,7 +21,7 @@ vec8 fun8_2(vec8 a) #endif extern vec16 foo1_16(void); -extern void foo2_16(vec8); +extern void foo2_16(vec16); vec16 fun16(void) @@ -38,7 +38,7 @@ vec16 fun16_2(vec16 a) #endif extern vec32 foo1_32(void); -extern void foo2_32(vec8); +extern void foo2_32(vec32); vec32 fun32(void) { diff --git a/gcc/testsuite/gcc.target/sparc/fpack16.c b/gcc/testsuite/gcc.target/sparc/fpack16.c index 2f7aac56171..79e0c4c1577 100644 --- a/gcc/testsuite/gcc.target/sparc/fpack16.c +++ b/gcc/testsuite/gcc.target/sparc/fpack16.c @@ -1,7 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-mcpu=ultrasparc -mvis" } */ typedef short vec16 __attribute__((vector_size(8))); -typedef char vec8 __attribute__((vector_size(4))); +typedef unsigned char vec8 __attribute__((vector_size(4))); vec8 foo (vec16 a) { return __builtin_vis_fpack16 (a); diff --git a/gcc/testsuite/gcc.target/sparc/fpmerge.c b/gcc/testsuite/gcc.target/sparc/fpmerge.c index 013795cc6d7..4d6a9c02382 100644 --- a/gcc/testsuite/gcc.target/sparc/fpmerge.c +++ b/gcc/testsuite/gcc.target/sparc/fpmerge.c @@ -1,7 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-mcpu=ultrasparc -mvis" } */ -typedef char pixel __attribute__((vector_size(8))); -typedef char vec8 __attribute__((vector_size(4))); +typedef unsigned char pixel __attribute__((vector_size(8))); +typedef unsigned char vec8 __attribute__((vector_size(4))); pixel foo (vec8 a, vec8 b) { return __builtin_vis_fpmerge (a, b); diff --git a/gcc/testsuite/gcc.target/sparc/fpmul.c b/gcc/testsuite/gcc.target/sparc/fpmul.c index 991cc75d661..71b3b17ac57 100644 --- a/gcc/testsuite/gcc.target/sparc/fpmul.c +++ b/gcc/testsuite/gcc.target/sparc/fpmul.c @@ -2,9 +2,9 @@ /* { dg-options "-mcpu=ultrasparc -mvis" } */ typedef int vec32 __attribute__((vector_size(8))); typedef short vec16 __attribute__((vector_size(8))); -typedef char pixel __attribute__((vector_size(4))); +typedef unsigned char pixel __attribute__((vector_size(4))); typedef short pixel16 __attribute__((vector_size(4))); -typedef char vec8 __attribute__((vector_size(8))); +typedef unsigned char vec8 __attribute__((vector_size(8))); vec16 foo1 (pixel a, vec16 b) { return __builtin_vis_fmul8x16 (a, b); diff --git a/gcc/testsuite/gcc.target/sparc/noresult.c b/gcc/testsuite/gcc.target/sparc/noresult.c index f32805d3547..1be7458d2be 100644 --- a/gcc/testsuite/gcc.target/sparc/noresult.c +++ b/gcc/testsuite/gcc.target/sparc/noresult.c @@ -1,7 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-mcpu=ultrasparc -mvis" } */ typedef short vec16 __attribute__((vector_size(8))); -typedef char vec8 __attribute__((vector_size(4))); void foo (vec16 a) { __builtin_vis_fpack16 (a); diff --git a/gcc/testsuite/gcc.target/sparc/pdist.c b/gcc/testsuite/gcc.target/sparc/pdist.c index 48ca0dbf139..6ecc20aa178 100644 --- a/gcc/testsuite/gcc.target/sparc/pdist.c +++ b/gcc/testsuite/gcc.target/sparc/pdist.c @@ -1,8 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-mcpu=ultrasparc -mvis" } */ - typedef long long int64_t; -typedef char vec8 __attribute__((vector_size(8))); +typedef unsigned char vec8 __attribute__((vector_size(8))); int64_t foo (vec8 a, vec8 b) { int64_t d = 0; diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c index 0bc5ecaabc6..bcc1dac3e0e 100644 --- a/gcc/tree-ssa-structalias.c +++ b/gcc/tree-ssa-structalias.c @@ -3405,7 +3405,8 @@ set_uids_in_ptset (bitmap into, bitmap from) bitmap_set_bit (into, DECL_UID (sv->var)); } else if (TREE_CODE (vi->decl) == VAR_DECL - || TREE_CODE (vi->decl) == PARM_DECL) + || TREE_CODE (vi->decl) == PARM_DECL + || TREE_CODE (vi->decl) == RESULT_DECL) { if (found_anyoffset && var_can_have_subvars (vi->decl) diff --git a/gcc/version.c b/gcc/version.c index 7992300629f..726d7fc3f9a 100644 --- a/gcc/version.c +++ b/gcc/version.c @@ -8,7 +8,7 @@ in parentheses. You may also wish to include a number indicating the revision of your modified compiler. */ -#define VERSUFFIX " (Red Hat 4.1.2-13)" +#define VERSUFFIX " (Red Hat 4.1.2-14)" /* This is the location of the online document giving instructions for reporting bugs. If you distribute a modified version of GCC, -- cgit v1.2.3