summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4>2009-09-04 05:40:11 +0000
committerbstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4>2009-09-04 05:40:11 +0000
commit165d2ce0a5427c51202d3e702d20bdbdf6d625ea (patch)
treea8bc624f9bfeec35dfd20a2cacaf4168a9fa3fcd
parent549e19e97f2eb0a5843f07f08cc57a1166aba3e2 (diff)
downloadgcc-165d2ce0a5427c51202d3e702d20bdbdf6d625ea.tar.gz
2009-09-04 Basile Starynkevitch <basile@starynkevitch.net>
MELT branch merged with trunk rev 151402 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/melt-branch@151409 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--ChangeLog.MELT3
-rw-r--r--MAINTAINERS1
-rw-r--r--boehm-gc/ChangeLog5
-rw-r--r--boehm-gc/dyn_load.c12
-rw-r--r--config/ChangeLog7
-rw-r--r--contrib/ChangeLog7
-rw-r--r--gcc/ChangeLog123
-rw-r--r--gcc/DATESTAMP2
-rw-r--r--gcc/config/arm/arm.h1
-rw-r--r--gcc/config/arm/arm.md21
-rw-r--r--gcc/config/bfin/bfin.c44
-rw-r--r--gcc/config/bfin/bfin.h5
-rw-r--r--gcc/config/bfin/bfin.md41
-rw-r--r--gcc/config/bfin/linux.h3
-rw-r--r--gcc/config/bfin/sync.md178
-rw-r--r--gcc/config/bfin/uclinux.h3
-rw-r--r--gcc/config/mips/mips.c14
-rw-r--r--gcc/dwarf2out.c14
-rw-r--r--gcc/function.c29
-rw-r--r--gcc/ira.c14
-rw-r--r--gcc/po/ChangeLog4
-rw-r--r--gcc/po/fi.po182
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/autopar/parallelization-1.c4
-rw-r--r--gcc/testsuite/gcc.dg/autopar/pr39500-1.c10
-rw-r--r--gcc/testsuite/gcc.dg/autopar/reduc-1.c97
-rw-r--r--gcc/testsuite/gcc.dg/autopar/reduc-1char.c20
-rw-r--r--gcc/testsuite/gcc.dg/autopar/reduc-1short.c17
-rw-r--r--gcc/testsuite/gcc.dg/autopar/reduc-2.c31
-rw-r--r--gcc/testsuite/gcc.dg/autopar/reduc-2char.c18
-rw-r--r--gcc/testsuite/gcc.dg/autopar/reduc-2short.c18
-rw-r--r--gcc/testsuite/gcc.dg/autopar/reduc-3.c26
-rw-r--r--gcc/testsuite/gcc.dg/autopar/reduc-6.c22
-rw-r--r--gcc/testsuite/gcc.dg/autopar/reduc-7.c21
-rw-r--r--gcc/testsuite/gcc.dg/autopar/reduc-8.c20
-rw-r--r--gcc/testsuite/gcc.dg/autopar/reduc-9.c20
-rw-r--r--gcc/testsuite/gcc.target/arm/ctz.c12
-rw-r--r--gcc/testsuite/lib/target-supports.exp1
-rw-r--r--gcc/tree-parloops.c5
-rw-r--r--gcc/tree-sra.c33
-rw-r--r--gcc/var-tracking.c18
-rw-r--r--libgfortran/ChangeLog6
-rw-r--r--libgfortran/intrinsics/iso_c_binding.c4
-rw-r--r--libiberty/ChangeLog9
-rw-r--r--libiberty/config.in3
-rwxr-xr-xlibiberty/configure11
-rw-r--r--libiberty/configure.ac1
-rw-r--r--libiberty/hashtab.c2
48 files changed, 850 insertions, 297 deletions
diff --git a/ChangeLog.MELT b/ChangeLog.MELT
index 3c5b41d4859..d489dbd3066 100644
--- a/ChangeLog.MELT
+++ b/ChangeLog.MELT
@@ -1,4 +1,7 @@
+2009-09-04 Basile Starynkevitch <basile@starynkevitch.net>
+ MELT branch merged with trunk rev 151402
+
2009-09-03 Basile Starynkevitch <basile@starynkevitch.net>
MELT branch merged with trunk rev 151367
diff --git a/MAINTAINERS b/MAINTAINERS
index fcad7612e84..3a678fd6c7e 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -337,6 +337,7 @@ Jon Grimm jgrimm2@us.ibm.com
Laurent Guerby laurent@guerby.net
Xuepeng Guo xuepeng.guo@intel.com
Wei Guozhi carrot@google.com
+Daniel Gutson dgutson@codesourcery.com
Mostafa Hagog hagog@gcc.gnu.org
Olivier Hainque hainque@act-europe.fr
Stuart Hastings stuart@apple.com
diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog
index 11ee0e61b5b..8bd2012ba34 100644
--- a/boehm-gc/ChangeLog
+++ b/boehm-gc/ChangeLog
@@ -1,3 +1,8 @@
+2009-09-03 Loren J. Rittle <ljrittle@acm.org>
+
+ * dyn_load.c (HAVE_DL_ITERATE_PHDR): Break definition from use.
+ Define for FreeBSD 7.0+.
+
2009-08-24 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
* configure.ac (AC_PREREQ): Bump to 2.64.
diff --git a/boehm-gc/dyn_load.c b/boehm-gc/dyn_load.c
index f205be2823d..200abde7810 100644
--- a/boehm-gc/dyn_load.c
+++ b/boehm-gc/dyn_load.c
@@ -400,6 +400,16 @@ GC_bool GC_register_main_static_data()
/* It may still not be available in the library on the target system. */
/* Thus we also treat it as a weak symbol. */
#define HAVE_DL_ITERATE_PHDR
+#pragma weak dl_iterate_phdr
+#endif
+
+# if (defined(FREEBSD) && __FreeBSD__ >= 7)
+/* On the FreeBSD system, any target system at major version 7 shall */
+/* have dl_iterate_phdr; therefore, we need not make it weak as above. */
+#define HAVE_DL_ITERATE_PHDR
+#endif
+
+#if defined(HAVE_DL_ITERATE_PHDR)
static int GC_register_dynlib_callback(info, size, ptr)
struct dl_phdr_info * info;
@@ -441,8 +451,6 @@ static int GC_register_dynlib_callback(info, size, ptr)
/* Return TRUE if we succeed, FALSE if dl_iterate_phdr wasn't there. */
-#pragma weak dl_iterate_phdr
-
GC_bool GC_register_dynamic_libraries_dl_iterate_phdr()
{
if (dl_iterate_phdr) {
diff --git a/config/ChangeLog b/config/ChangeLog
index 031b50936c7..ba8fd0011e6 100644
--- a/config/ChangeLog
+++ b/config/ChangeLog
@@ -1,3 +1,10 @@
+2009-09-03 Alexandre Oliva <aoliva@redhat.com>
+
+ * bootstrap-debug-big.mk (STAGE2_CFLAGS): Drop -gtoggle.
+ * bootstrap-debug-lean.mk: Update comments.
+ (STAGE2_CFLAGS): Likewise.
+ (do-compare): Don't override.
+
2009-09-01 Alexandre Oliva <aoliva@redhat.com>
* bootstrap-debug.mk: Add comments.
diff --git a/contrib/ChangeLog b/contrib/ChangeLog
index d15084e0bbf..77d71700464 100644
--- a/contrib/ChangeLog
+++ b/contrib/ChangeLog
@@ -1,10 +1,3 @@
-2009-09-03 Alexandre Oliva <aoliva@redhat.com>
-
- * bootstrap-debug-big.mk (STAGE2_CFLAGS): Drop -gtoggle.
- * bootstrap-debug-lean.mk: Update comments.
- (STAGE2_CFLAGS): Likewise.
- (do-compare): Don't override.
-
2009-09-01 Alexandre Oliva <aoliva@redhat.com>
* compare-debug: Look for .gkd files and compare them.
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index fef23a8e251..a3a0f8b0ea9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,126 @@
+2009-09-03 Daniel Gutson <dgutson@codesourcery.com>
+
+ * config/arm/arm.md (UNSPEC_RBIT): New constant.
+ (rbitsi2): New insn.
+ (ctzsi2): New expand.
+ * config/arm/arm.h (CTZ_DEFINED_VALUE_AT_ZERO): New macro.
+
+ testsuite/
+ * gcc.target/arm/ctz.c: New test case.
+
+2009-09-03 Martin Jambor <mjambor@suse.cz>
+
+ * tree-sra.c (duplicate_expr_for_different_base): Removed.
+ (create_artificial_child_access): Use build_ref_for_offset instead
+ of duplicate_expr_for_different_base.
+ (propagate_subacesses_accross_link): Likewise.
+
+2009-09-03 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * config/mips/mips.c (USEFUL_INSN_P): Use NONDEBUG_INSN_P instead
+ of INSN_P.
+ (mips16e_collect_argument_saves): Skip debug instructions.
+ (mips_74k_agen_init): Use CALL_P || JUMP_P instead of !NONJUMP_INSN_P.
+ (mips16_lay_out_constants): Use USEFUL_INSN_P instead of INSN_P.
+ (r10k_insert_cache_barriers): Likewise.
+ (mips_reorg_process_insns): Likewise.
+
+2009-09-03 Vladimir Makarov <vmakarov@redhat.com>
+
+ PR bootstrap/41241
+ * ira.c (update_equiv_reg): Remove check on class likely spill.
+
+2009-09-03 Jakub Jelinek <jakub@redhat.com>
+
+ PR debug/41236
+ * dwarf2out.c (loc_descriptor): Don't use SUBREG_REG macro on
+ SIGN_EXTEND or ZERO_EXTEND. Don't assume there is a REG inside of
+ it or SUBREG.
+
+ PR debug/41238
+ * function.c (assign_parm_find_stack_rtl): Don't set mem attributes on
+ the stack slot if it is passed by invisible reference.
+ * var-tracking.c (vt_add_function_parameters): Handle arguments passed
+ by invisible reference.
+
+2009-09-03 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * config/bfin/linux.h (TARGET_SUPPORTS_SYNC_CALLS): Define to 1.
+ * config/bfin/uclinux.h (TARGET_SUPPORTS_SYNC_CALLS): Define to 1.
+ * config/bfin/bfin.h (TARGET_SUPPORTS_SYNC_CALLS): Provide default of
+ 0.
+ * config/bfin/sync.md: New file.
+ * config/bfin/bfin.md: Include it.
+ (UNSPEC_ATOMIC): New.
+ (UNSPEC_ONES): Provide a unique number.
+
+ From Jie Zhang <jie.zhang@analog.com>:
+ * config/bfin/bfin.c (ret_regs): New.
+ (must_save_fp_p): Don't return true because of frame_pointer_needed.
+ (must_save_rets_p): New.
+ (n_regs_saved_by_prologue): Use must_save_rets_p instead of
+ current_function_is_leaf.
+ (do_link): Likewise.
+ (do_unlink): Likewise.
+ (expand_interrupt_handler_prologue): Use ret_regs array.
+ (expand_interrupt_handler_epilogue): Use ret_regs array and
+ pass return register to gen_return_internal.
+ (bfin_expand_epilogue): Pass return register to
+ gen_return_internal.
+ (bfin_expand_call): Explicitly clobber RETS.
+ * config/bfin/bfin.h (FUNCTION_RETURN_REGISTERS): Define.
+ * config/bfin/bfin.md (call_symbol_fdpic, call_value_symbol_fdpic,
+ call_insn_fdpic, call_value_insn_fdpic, call_symbol,
+ call_value_symbol, call_insn, call_value_insn): Explicitly clobber
+ RETS.
+ (return_internal): Take a reg rtx rather than the register number.
+
+2009-09-03 H.J. Lu <hongjiu.lu@intel.com>
+
+ * tree-parloops.c (parallelize_loops): Cast to HOST_WIDE_INT
+ when comparing against estimated_loop_iterations_int return.
+
+2009-09-03 Richard Guenther <rguenther@suse.de>
+
+ * dwarf2out.c (dwarf2out_do_cfi_asm): Remove check of
+ eh_personality_libfunc.
+
+2009-09-03 Razya Ladelsky <razya@il.ibm.com>
+
+ * tree-parloops.c (separate_decls_in_region): Add space.
+
+2009-09-03 Razya Ladelsky <razya@il.ibm.com>
+
+ * tree-parloops.c (separate_decls_in_region): Change the condition
+ checking if there are reductions in the loop.
+
+2009-09-03 Razya Ladelsky <razya@il.ibm.com>
+
+ PR tree-optimization/38275
+
+ * tree-parloops.c (parallelize_loops): Replace profitability condition
+ for expected number of iterations.
+
+2009-09-03 Alon Dayan <alond@il.ibm.com>
+
+ PR tree-optimization/38275
+
+ * testsuite/gcc.dg/autopar/reduc-1char.c: Increase number
+ of iterations. Adjust the logic accordingly.
+ * testsuite/gcc.dg/autopar/reduc-2char.c: Ditto.
+ * testsuite/gcc.dg/autopar/reduc-1.c: Ditto.
+ * testsuite/gcc.dg/autopar/reduc-2.c: Ditto.
+ * testsuite/gcc.dg/autopar/reduc-3.c: Ditto.
+ * testsuite/gcc.dg/autopar/reduc-6.c: Ditto.
+ * testsuite/gcc.dg/autopar/reduc-7.c: Ditto.
+ * testsuite/gcc.dg/autopar/reduc-8.c: Ditto.
+ * testsuite/gcc.dg/autopar/reduc-9.c: Ditto.
+ * testsuite/gcc.dg/autopar/pr39500-1.c: Ditto.
+ * testsuite/gcc.dg/autopar/reduc-1short.c: Ditto.
+ * testsuite/gcc.dg/autopar/reduc-2short.c: Ditto.
+ * testsuite/gcc.dg/autopar/parallelization-1.c: Ditto.
+
+
2009-09-03 Alexandre Oliva <aoliva@redhat.com>
* doc/invoke.texi (BUILD_CONFIG): Document --with-build-config.
diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP
index ff037f0ee12..92230dfb66f 100644
--- a/gcc/DATESTAMP
+++ b/gcc/DATESTAMP
@@ -1 +1 @@
-20090903
+20090904
diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h
index ae32da563e1..215c9fba789 100644
--- a/gcc/config/arm/arm.h
+++ b/gcc/config/arm/arm.h
@@ -2368,6 +2368,7 @@ extern int making_const_table;
/* The arm5 clz instruction returns 32. */
#define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = 32, 1)
+#define CTZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = 32, 1)
#undef ASM_APP_OFF
#define ASM_APP_OFF (TARGET_THUMB1 ? "\t.code\t16\n" : \
diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md
index 09a1b0841e9..fd00c707df4 100644
--- a/gcc/config/arm/arm.md
+++ b/gcc/config/arm/arm.md
@@ -100,6 +100,7 @@
(UNSPEC_GOTSYM_OFF 24) ; The offset of the start of the the GOT from a
; a given symbolic address.
(UNSPEC_THUMB1_CASESI 25) ; A Thumb1 compressed dispatch-table call.
+ (UNSPEC_RBIT 26) ; rbit operation.
]
)
@@ -10955,6 +10956,26 @@
[(set_attr "predicable" "yes")
(set_attr "insn" "clz")])
+(define_insn "rbitsi2"
+ [(set (match_operand:SI 0 "s_register_operand" "=r")
+ (unspec:SI [(match_operand:SI 1 "s_register_operand" "r")] UNSPEC_RBIT))]
+ "TARGET_32BIT && arm_arch_thumb2"
+ "rbit%?\\t%0, %1"
+ [(set_attr "predicable" "yes")
+ (set_attr "insn" "clz")])
+
+(define_expand "ctzsi2"
+ [(set (match_operand:SI 0 "s_register_operand" "")
+ (ctz:SI (match_operand:SI 1 "s_register_operand" "")))]
+ "TARGET_32BIT && arm_arch_thumb2"
+ "
+ rtx tmp = gen_reg_rtx (SImode);
+ emit_insn (gen_rbitsi2 (tmp, operands[1]));
+ emit_insn (gen_clzsi2 (operands[0], tmp));
+ DONE;
+ "
+)
+
;; V5E instructions.
(define_insn "prefetch"
diff --git a/gcc/config/bfin/bfin.c b/gcc/config/bfin/bfin.c
index 61da6db38eb..ebcd825043e 100644
--- a/gcc/config/bfin/bfin.c
+++ b/gcc/config/bfin/bfin.c
@@ -63,6 +63,7 @@ struct GTY(()) machine_function
/* Set if we are notified by the doloop pass that a hardware loop
was created. */
int has_hardware_loops;
+
/* Set if we create a memcpy pattern that uses loop registers. */
int has_loopreg_clobber;
};
@@ -81,6 +82,7 @@ const char *dregs_pair_names[] = DREGS_PAIR_NAMES;
const char *byte_reg_names[] = BYTE_REGISTER_NAMES;
static int arg_regs[] = FUNCTION_ARG_REGISTERS;
+static int ret_regs[] = FUNCTION_RETURN_REGISTERS;
/* Nonzero if -mshared-library-id was given. */
static int bfin_lib_id_given;
@@ -532,7 +534,14 @@ n_pregs_to_save (bool is_inthandler, bool consecutive)
static bool
must_save_fp_p (void)
{
- return frame_pointer_needed || df_regs_ever_live_p (REG_FP);
+ return df_regs_ever_live_p (REG_FP);
+}
+
+/* Determine if we are going to save the RETS register. */
+static bool
+must_save_rets_p (void)
+{
+ return df_regs_ever_live_p (REG_RETS);
}
static bool
@@ -844,13 +853,12 @@ n_regs_saved_by_prologue (void)
int i;
if (all || stack_frame_needed_p ())
- /* We use a LINK instruction in this case. */
n += 2;
else
{
if (must_save_fp_p ())
n++;
- if (! current_function_is_leaf)
+ if (must_save_rets_p ())
n++;
}
@@ -1092,12 +1100,13 @@ do_link (rtx spreg, HOST_WIDE_INT frame_size, bool all)
{
frame_size += arg_area_size ();
- if (all || stack_frame_needed_p ()
- || (must_save_fp_p () && ! current_function_is_leaf))
+ if (all
+ || stack_frame_needed_p ()
+ || (must_save_rets_p () && must_save_fp_p ()))
emit_link_insn (spreg, frame_size);
else
{
- if (! current_function_is_leaf)
+ if (must_save_rets_p ())
{
rtx pat = gen_movsi (gen_rtx_MEM (Pmode,
gen_rtx_PRE_DEC (Pmode, spreg)),
@@ -1127,20 +1136,20 @@ do_unlink (rtx spreg, HOST_WIDE_INT frame_size, bool all, int epilogue_p)
{
frame_size += arg_area_size ();
- if (all || stack_frame_needed_p ())
+ if (stack_frame_needed_p ())
emit_insn (gen_unlink ());
else
{
rtx postinc = gen_rtx_MEM (Pmode, gen_rtx_POST_INC (Pmode, spreg));
add_to_reg (spreg, frame_size, 0, epilogue_p);
- if (must_save_fp_p ())
+ if (all || must_save_fp_p ())
{
rtx fpreg = gen_rtx_REG (Pmode, REG_FP);
emit_move_insn (fpreg, postinc);
emit_use (fpreg);
}
- if (! current_function_is_leaf)
+ if (all || must_save_rets_p ())
{
emit_move_insn (bfin_rets_rtx, postinc);
emit_use (bfin_rets_rtx);
@@ -1194,9 +1203,7 @@ expand_interrupt_handler_prologue (rtx spreg, e_funkind fkind, bool all)
if (lookup_attribute ("nesting", attrs))
{
- rtx srcreg = gen_rtx_REG (Pmode, (fkind == EXCPT_HANDLER ? REG_RETX
- : fkind == NMI_HANDLER ? REG_RETN
- : REG_RETI));
+ rtx srcreg = gen_rtx_REG (Pmode, ret_regs[fkind]);
insn = emit_move_insn (predec, srcreg);
RTX_FRAME_RELATED_P (insn) = 1;
}
@@ -1238,9 +1245,7 @@ expand_interrupt_handler_epilogue (rtx spreg, e_funkind fkind, bool all)
if (lookup_attribute ("nesting", attrs))
{
- rtx srcreg = gen_rtx_REG (Pmode, (fkind == EXCPT_HANDLER ? REG_RETX
- : fkind == NMI_HANDLER ? REG_RETN
- : REG_RETI));
+ rtx srcreg = gen_rtx_REG (Pmode, ret_regs[fkind]);
emit_move_insn (srcreg, postinc);
}
@@ -1256,7 +1261,7 @@ expand_interrupt_handler_epilogue (rtx spreg, e_funkind fkind, bool all)
if (fkind == EXCPT_HANDLER)
emit_insn (gen_addsi3 (spreg, spreg, GEN_INT (12)));
- emit_jump_insn (gen_return_internal (GEN_INT (fkind)));
+ emit_jump_insn (gen_return_internal (gen_rtx_REG (Pmode, ret_regs[fkind])));
}
/* Used while emitting the prologue to generate code to load the correct value
@@ -1392,7 +1397,7 @@ bfin_expand_epilogue (int need_return, int eh_return, bool sibcall_p)
if (eh_return)
emit_insn (gen_addsi3 (spreg, spreg, gen_rtx_REG (Pmode, REG_P2)));
- emit_jump_insn (gen_return_internal (GEN_INT (SUBROUTINE)));
+ emit_jump_insn (gen_return_internal (gen_rtx_REG (Pmode, REG_RETS)));
}
/* Return nonzero if register OLD_REG can be renamed to register NEW_REG. */
@@ -2193,9 +2198,10 @@ bfin_expand_call (rtx retval, rtx fnaddr, rtx callarg1, rtx cookie, int sibcall)
{
rtx use = NULL, call;
rtx callee = XEXP (fnaddr, 0);
- int nelts = 2 + !!sibcall;
+ int nelts = 3;
rtx pat;
rtx picreg = get_hard_reg_initial_val (SImode, FDPIC_REGNO);
+ rtx retsreg = gen_rtx_REG (Pmode, REG_RETS);
int n;
/* In an untyped call, we can get NULL for operand 2. */
@@ -2272,6 +2278,8 @@ bfin_expand_call (rtx retval, rtx fnaddr, rtx callarg1, rtx cookie, int sibcall)
XVECEXP (pat, 0, n++) = gen_rtx_USE (VOIDmode, cookie);
if (sibcall)
XVECEXP (pat, 0, n++) = gen_rtx_RETURN (VOIDmode);
+ else
+ XVECEXP (pat, 0, n++) = gen_rtx_CLOBBER (VOIDmode, retsreg);
call = emit_call_insn (pat);
if (use)
CALL_INSN_FUNCTION_USAGE (call) = use;
diff --git a/gcc/config/bfin/bfin.h b/gcc/config/bfin/bfin.h
index a9ff6fa8b47..53a7957405a 100644
--- a/gcc/config/bfin/bfin.h
+++ b/gcc/config/bfin/bfin.h
@@ -794,6 +794,7 @@ enum reg_class
typedef enum {
SUBROUTINE, INTERRUPT_HANDLER, EXCPT_HANDLER, NMI_HANDLER
} e_funkind;
+#define FUNCTION_RETURN_REGISTERS { REG_RETS, REG_RETI, REG_RETX, REG_RETN }
#define FUNCTION_ARG_REGISTERS { REG_R0, REG_R1, REG_R2, -1 }
@@ -1258,4 +1259,8 @@ extern int splitting_for_sched, splitting_loops;
#define PRINT_OPERAND_PUNCT_VALID_P(CHAR) ((CHAR) == '!')
+#ifndef TARGET_SUPPORTS_SYNC_CALLS
+#define TARGET_SUPPORTS_SYNC_CALLS 0
+#endif
+
#endif /* _BFIN_CONFIG */
diff --git a/gcc/config/bfin/bfin.md b/gcc/config/bfin/bfin.md
index a3638700a53..01e40125cf6 100644
--- a/gcc/config/bfin/bfin.md
+++ b/gcc/config/bfin/bfin.md
@@ -138,7 +138,8 @@
;; Distinguish a 32-bit version of an insn from a 16-bit version.
(UNSPEC_32BIT 11)
(UNSPEC_NOP 12)
- (UNSPEC_ONES 12)])
+ (UNSPEC_ONES 13)
+ (UNSPEC_ATOMIC 14)])
(define_constants
[(UNSPEC_VOLATILE_CSYNC 1)
@@ -2005,7 +2006,8 @@
[(call (mem:SI (match_operand:SI 0 "symbol_ref_operand" "Q"))
(match_operand 1 "general_operand" "g"))
(use (match_operand:SI 2 "register_operand" "Z"))
- (use (match_operand 3 "" ""))]
+ (use (match_operand 3 "" ""))
+ (clobber (reg:SI REG_RETS))]
"! SIBLING_CALL_P (insn)
&& GET_CODE (operands[0]) == SYMBOL_REF
&& !bfin_longcall_p (operands[0], INTVAL (operands[3]))"
@@ -2031,7 +2033,8 @@
(call (mem:SI (match_operand:SI 1 "symbol_ref_operand" "Q"))
(match_operand 2 "general_operand" "g")))
(use (match_operand:SI 3 "register_operand" "Z"))
- (use (match_operand 4 "" ""))]
+ (use (match_operand 4 "" ""))
+ (clobber (reg:SI REG_RETS))]
"! SIBLING_CALL_P (insn)
&& GET_CODE (operands[1]) == SYMBOL_REF
&& !bfin_longcall_p (operands[1], INTVAL (operands[4]))"
@@ -2057,7 +2060,8 @@
[(call (mem:SI (match_operand:SI 0 "register_no_elim_operand" "Y"))
(match_operand 1 "general_operand" "g"))
(use (match_operand:SI 2 "register_operand" "Z"))
- (use (match_operand 3 "" ""))]
+ (use (match_operand 3 "" ""))
+ (clobber (reg:SI REG_RETS))]
"! SIBLING_CALL_P (insn)"
"call (%0);"
[(set_attr "type" "call")
@@ -2079,7 +2083,8 @@
(call (mem:SI (match_operand:SI 1 "register_no_elim_operand" "Y"))
(match_operand 2 "general_operand" "g")))
(use (match_operand:SI 3 "register_operand" "Z"))
- (use (match_operand 4 "" ""))]
+ (use (match_operand 4 "" ""))
+ (clobber (reg:SI REG_RETS))]
"! SIBLING_CALL_P (insn)"
"call (%1);"
[(set_attr "type" "call")
@@ -2100,7 +2105,8 @@
(define_insn "*call_symbol"
[(call (mem:SI (match_operand:SI 0 "symbol_ref_operand" "Q"))
(match_operand 1 "general_operand" "g"))
- (use (match_operand 2 "" ""))]
+ (use (match_operand 2 "" ""))
+ (clobber (reg:SI REG_RETS))]
"! SIBLING_CALL_P (insn)
&& (!TARGET_ID_SHARED_LIBRARY || TARGET_LEAF_ID_SHARED_LIBRARY)
&& GET_CODE (operands[0]) == SYMBOL_REF
@@ -2126,7 +2132,8 @@
[(set (match_operand 0 "register_operand" "=d")
(call (mem:SI (match_operand:SI 1 "symbol_ref_operand" "Q"))
(match_operand 2 "general_operand" "g")))
- (use (match_operand 3 "" ""))]
+ (use (match_operand 3 "" ""))
+ (clobber (reg:SI REG_RETS))]
"! SIBLING_CALL_P (insn)
&& (!TARGET_ID_SHARED_LIBRARY || TARGET_LEAF_ID_SHARED_LIBRARY)
&& GET_CODE (operands[1]) == SYMBOL_REF
@@ -2152,7 +2159,8 @@
(define_insn "*call_insn"
[(call (mem:SI (match_operand:SI 0 "register_no_elim_operand" "a"))
(match_operand 1 "general_operand" "g"))
- (use (match_operand 2 "" ""))]
+ (use (match_operand 2 "" ""))
+ (clobber (reg:SI REG_RETS))]
"! SIBLING_CALL_P (insn)"
"call (%0);"
[(set_attr "type" "call")
@@ -2172,7 +2180,8 @@
[(set (match_operand 0 "register_operand" "=d")
(call (mem:SI (match_operand:SI 1 "register_no_elim_operand" "a"))
(match_operand 2 "general_operand" "g")))
- (use (match_operand 3 "" ""))]
+ (use (match_operand 3 "" ""))
+ (clobber (reg:SI REG_RETS))]
"! SIBLING_CALL_P (insn)"
"call (%1);"
[(set_attr "type" "call")
@@ -2641,18 +2650,18 @@
(define_insn "return_internal"
[(return)
- (unspec [(match_operand 0 "immediate_operand" "i")] UNSPEC_RETURN)]
+ (use (match_operand 0 "register_operand" ""))]
"reload_completed"
{
- switch (INTVAL (operands[0]))
+ switch (REGNO (operands[0]))
{
- case EXCPT_HANDLER:
+ case REG_RETX:
return "rtx;";
- case NMI_HANDLER:
+ case REG_RETN:
return "rtn;";
- case INTERRUPT_HANDLER:
+ case REG_RETI:
return "rti;";
- case SUBROUTINE:
+ case REG_RETS:
return "rts;";
}
gcc_unreachable ();
@@ -4106,3 +4115,5 @@
"DISALGNEXCPT || %0 = [%1];"
[(set_attr "type" "mcld")
(set_attr "length" "8")])
+
+(include "sync.md")
diff --git a/gcc/config/bfin/linux.h b/gcc/config/bfin/linux.h
index 5d576805e5b..5c716cd67f7 100644
--- a/gcc/config/bfin/linux.h
+++ b/gcc/config/bfin/linux.h
@@ -49,3 +49,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
%{static}} -init __init -fini __fini"
#define MD_UNWIND_SUPPORT "config/bfin/linux-unwind.h"
+
+#undef TARGET_SUPPORTS_SYNC_CALLS
+#define TARGET_SUPPORTS_SYNC_CALLS 1
diff --git a/gcc/config/bfin/sync.md b/gcc/config/bfin/sync.md
new file mode 100644
index 00000000000..7025af4979d
--- /dev/null
+++ b/gcc/config/bfin/sync.md
@@ -0,0 +1,178 @@
+;; GCC machine description for Blackfin synchronization instructions.
+;; Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
+;; Contributed by Analog Devices.
+;;
+;; This file is part of GCC.
+;;
+;; GCC is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3, or (at your option)
+;; any later version.
+;;
+;; GCC is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GCC; see the file COPYING3. If not see
+;; <http://www.gnu.org/licenses/>.
+
+(define_code_iterator FETCHOP [plus minus ior and xor])
+(define_code_attr fetchop_name
+ [(plus "add") (minus "sub") (ior "ior") (and "and") (xor "xor")])
+(define_code_attr fetchop_addr
+ [(plus "1072") (minus "1088") (ior "1104") (and "1120") (xor "1136")])
+
+(define_insn "sync_<fetchop_name>si_internal"
+ [(set (mem:SI (match_operand:SI 0 "register_operand" "qA"))
+ (unspec:SI
+ [(FETCHOP:SI (mem:SI (match_dup 0))
+ (match_operand:SI 1 "register_operand" "q0"))
+ (match_operand:SI 2 "register_no_elim_operand" "a")]
+ UNSPEC_ATOMIC))
+ (clobber (match_scratch:SI 3 "=q0"))
+ (clobber (match_scratch:SI 4 "=q1"))
+ (clobber (reg:SI REG_RETS))]
+ "TARGET_SUPPORTS_SYNC_CALLS"
+ "call (%2);"
+ [(set_attr "type" "call")])
+
+(define_expand "sync_<fetchop_name>si"
+ [(parallel
+ [(set (match_operand:SI 0 "memory_operand" "+m")
+ (unspec:SI
+ [(FETCHOP:SI (match_dup 0)
+ (match_operand:SI 1 "register_operand" "q0"))
+ (match_dup 2)]
+ UNSPEC_ATOMIC))
+ (clobber (match_scratch:SI 3 ""))
+ (clobber (match_scratch:SI 4 ""))
+ (clobber (reg:SI REG_RETS))])]
+ "TARGET_SUPPORTS_SYNC_CALLS"
+{
+ if (!REG_P (XEXP (operands[0], 0)))
+ {
+ operands[0] = shallow_copy_rtx (operands[0]);
+ XEXP (operands[0], 0) = force_reg (Pmode, XEXP (operands[0], 0));
+ }
+ operands[2] = force_reg (Pmode, GEN_INT (<fetchop_addr>));
+})
+
+(define_insn "sync_old_<fetchop_name>si_internal"
+ [(set (match_operand:SI 0 "register_operand" "=q1")
+ (mem:SI (match_operand:SI 1 "register_operand" "qA")))
+ (set (mem:SI (match_dup 1))
+ (unspec:SI
+ [(FETCHOP:SI (mem:SI (match_dup 1))
+ (match_operand:SI 2 "register_operand" "q0"))
+ (match_operand:SI 3 "register_no_elim_operand" "a")]
+ UNSPEC_ATOMIC))
+ (clobber (match_scratch:SI 4 "=q0"))
+ (clobber (reg:SI REG_RETS))]
+ "TARGET_SUPPORTS_SYNC_CALLS"
+ "call (%3);"
+ [(set_attr "type" "call")])
+
+(define_expand "sync_old_<fetchop_name>si"
+ [(parallel
+ [(set (match_operand:SI 0 "register_operand" "")
+ (match_operand:SI 1 "memory_operand" ""))
+ (set (match_dup 1)
+ (unspec:SI
+ [(FETCHOP:SI (match_dup 1)
+ (match_operand:SI 2 "register_operand" ""))
+ (match_dup 3)]
+ UNSPEC_ATOMIC))
+ (clobber (match_scratch:SI 4 ""))
+ (clobber (reg:SI REG_RETS))])]
+ "TARGET_SUPPORTS_SYNC_CALLS"
+{
+ if (!REG_P (XEXP (operands[1], 0)))
+ {
+ operands[1] = shallow_copy_rtx (operands[1]);
+ XEXP (operands[1], 0) = force_reg (Pmode, XEXP (operands[1], 0));
+ }
+ operands[3] = force_reg (Pmode, GEN_INT (<fetchop_addr>));
+})
+
+(define_insn "sync_new_<fetchop_name>si_internal"
+ [(set (match_operand:SI 0 "register_operand" "=q0")
+ (unspec:SI
+ [(FETCHOP:SI
+ (mem:SI (match_operand:SI 1 "register_operand" "qA"))
+ (match_operand:SI 2 "register_operand" "q0"))
+ (match_operand:SI 3 "register_no_elim_operand" "a")]
+ UNSPEC_ATOMIC))
+ (set (mem:SI (match_dup 1))
+ (unspec:SI
+ [(FETCHOP:SI (mem:SI (match_dup 1)) (match_dup 2))
+ (match_dup 3)]
+ UNSPEC_ATOMIC))
+ (clobber (match_scratch:SI 4 "=q1"))
+ (clobber (reg:SI REG_RETS))]
+ "TARGET_SUPPORTS_SYNC_CALLS"
+ "call (%3);"
+ [(set_attr "type" "call")])
+
+(define_expand "sync_new_<fetchop_name>si"
+ [(parallel
+ [(set (match_operand:SI 0 "register_operand" "")
+ (unspec:SI
+ [(FETCHOP:SI (match_operand:SI 1 "memory_operand" "")
+ (match_operand:SI 2 "register_operand" ""))
+ (match_dup 3)]
+ UNSPEC_ATOMIC))
+ (set (match_dup 1)
+ (unspec:SI
+ [(FETCHOP:SI (match_dup 1) (match_dup 2))
+ (match_dup 3)]
+ UNSPEC_ATOMIC))
+ (clobber (match_scratch:SI 4 ""))
+ (clobber (reg:SI REG_RETS))])]
+ "TARGET_SUPPORTS_SYNC_CALLS"
+{
+ if (!REG_P (XEXP (operands[1], 0)))
+ {
+ operands[1] = shallow_copy_rtx (operands[1]);
+ XEXP (operands[1], 0) = force_reg (Pmode, XEXP (operands[1], 0));
+ }
+ operands[3] = force_reg (Pmode, GEN_INT (<fetchop_addr>));
+})
+
+(define_insn "sync_compare_and_swapsi_internal"
+ [(set (match_operand:SI 0 "register_operand" "=q0")
+ (mem:SI (match_operand:SI 1 "register_operand" "qA")))
+ (set (mem:SI (match_dup 1))
+ (unspec:SI
+ [(mem:SI (match_dup 1))
+ (match_operand:SI 2 "register_operand" "q1")
+ (match_operand:SI 3 "register_operand" "q2")
+ (match_operand:SI 4 "register_no_elim_operand" "a")]
+ UNSPEC_ATOMIC))
+ (clobber (reg:SI REG_RETS))]
+ "TARGET_SUPPORTS_SYNC_CALLS"
+ "call (%4);"
+ [(set_attr "type" "call")])
+
+(define_expand "sync_compare_and_swapsi"
+ [(parallel
+ [(set (match_operand:SI 0 "register_operand" "")
+ (match_operand:SI 1 "memory_operand" ""))
+ (set (match_dup 1)
+ (unspec:SI
+ [(match_dup 1)
+ (match_operand:SI 2 "register_operand" "")
+ (match_operand:SI 3 "register_operand" "")
+ (match_dup 4)]
+ UNSPEC_ATOMIC))
+ (clobber (reg:SI REG_RETS))])]
+ "TARGET_SUPPORTS_SYNC_CALLS"
+{
+ if (!REG_P (XEXP (operands[1], 0)))
+ {
+ operands[1] = shallow_copy_rtx (operands[1]);
+ XEXP (operands[1], 0) = force_reg (Pmode, XEXP (operands[1], 0));
+ }
+ operands[4] = force_reg (Pmode, GEN_INT (0x420));
+})
diff --git a/gcc/config/bfin/uclinux.h b/gcc/config/bfin/uclinux.h
index 80419da0fba..6001b23645b 100644
--- a/gcc/config/bfin/uclinux.h
+++ b/gcc/config/bfin/uclinux.h
@@ -36,3 +36,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
--wrap=mmap --wrap=munmap --wrap=alloca\
%{fmudflapth: --wrap=pthread_create\
}} %{fmudflap|fmudflapth: --wrap=main}"
+
+#undef TARGET_SUPPORTS_SYNC_CALLS
+#define TARGET_SUPPORTS_SYNC_CALLS 1
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index 1e4d8bd8ed5..958abce0815 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -97,7 +97,7 @@ along with GCC; see the file COPYING3. If not see
/* True if INSN is a mips.md pattern or asm statement. */
#define USEFUL_INSN_P(INSN) \
- (INSN_P (INSN) \
+ (NONDEBUG_INSN_P (INSN) \
&& GET_CODE (PATTERN (INSN)) != USE \
&& GET_CODE (PATTERN (INSN)) != CLOBBER \
&& GET_CODE (PATTERN (INSN)) != ADDR_VEC \
@@ -8264,7 +8264,7 @@ mips16e_collect_argument_saves (void)
for (insn = get_insns (); insn; insn = next)
{
next = NEXT_INSN (insn);
- if (NOTE_P (insn))
+ if (NOTE_P (insn) || DEBUG_INSN_P (insn))
continue;
if (!INSN_P (insn))
@@ -11771,7 +11771,7 @@ static enum attr_type mips_last_74k_agen_insn = TYPE_UNKNOWN;
static void
mips_74k_agen_init (rtx insn)
{
- if (!insn || !NONJUMP_INSN_P (insn))
+ if (!insn || CALL_P (insn) || JUMP_P (insn))
mips_last_74k_agen_insn = TYPE_UNKNOWN;
else
{
@@ -13080,7 +13080,7 @@ mips16_lay_out_constants (void)
for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
{
/* Rewrite constant pool references in INSN. */
- if (INSN_P (insn))
+ if (USEFUL_INSN_P (insn))
{
info.insn = insn;
info.pool = &pool;
@@ -13450,7 +13450,7 @@ r10k_insert_cache_barriers (void)
- the first instruction in an unprotected region otherwise. */
for (insn = BB_HEAD (bb); insn != end; insn = NEXT_INSN (insn))
{
- if (unprotected_region && INSN_P (insn))
+ if (unprotected_region && USEFUL_INSN_P (insn))
{
if (recog_memoized (insn) == CODE_FOR_mips_cache)
/* This CACHE instruction protects the following code. */
@@ -14113,7 +14113,7 @@ mips_reorg_process_insns (void)
/* Make a first pass over the instructions, recording all the LO_SUMs. */
for (insn = get_insns (); insn != 0; insn = NEXT_INSN (insn))
FOR_EACH_SUBINSN (subinsn, insn)
- if (INSN_P (subinsn))
+ if (USEFUL_INSN_P (subinsn))
for_each_rtx (&PATTERN (subinsn), mips_record_lo_sum, htab);
last_insn = 0;
@@ -14127,7 +14127,7 @@ mips_reorg_process_insns (void)
for (insn = get_insns (); insn != 0; insn = next_insn)
{
next_insn = NEXT_INSN (insn);
- if (INSN_P (insn))
+ if (USEFUL_INSN_P (insn))
{
if (GET_CODE (PATTERN (insn)) == SEQUENCE)
{
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index fd386dd99d1..62459e237f3 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -163,7 +163,7 @@ dwarf2out_do_cfi_asm (void)
#endif
if (!flag_dwarf2_cfi_asm || !dwarf2out_do_frame ())
return false;
- if (saved_do_cfi_asm || !eh_personality_libfunc)
+ if (saved_do_cfi_asm)
return true;
if (!HAVE_GAS_CFI_PERSONALITY_DIRECTIVE)
return false;
@@ -11671,21 +11671,23 @@ loc_descriptor (rtx rtl, enum machine_mode mode,
switch (GET_CODE (rtl))
{
case SUBREG:
- case SIGN_EXTEND:
- case ZERO_EXTEND:
/* The case of a subreg may arise when we have a local (register)
variable or a formal (register) parameter which doesn't quite fill
up an entire register. For now, just assume that it is
legitimate to make the Dwarf info refer to the whole register which
contains the given subreg. */
- rtl = SUBREG_REG (rtl);
-
- /* ... fall through ... */
+ loc_result = loc_descriptor (SUBREG_REG (rtl), mode, initialized);
+ break;
case REG:
loc_result = reg_loc_descriptor (rtl, initialized);
break;
+ case SIGN_EXTEND:
+ case ZERO_EXTEND:
+ loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
+ break;
+
case MEM:
loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
initialized);
diff --git a/gcc/function.c b/gcc/function.c
index 32572544298..85e2f058932 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -2433,20 +2433,25 @@ assign_parm_find_stack_rtl (tree parm, struct assign_parm_data_one *data)
stack_parm = gen_rtx_PLUS (Pmode, stack_parm, offset_rtx);
stack_parm = gen_rtx_MEM (data->promoted_mode, stack_parm);
- set_mem_attributes (stack_parm, parm, 1);
- /* set_mem_attributes could set MEM_SIZE to the passed mode's size,
- while promoted mode's size is needed. */
- if (data->promoted_mode != BLKmode
- && data->promoted_mode != DECL_MODE (parm))
+ if (!data->passed_pointer)
{
- set_mem_size (stack_parm, GEN_INT (GET_MODE_SIZE (data->promoted_mode)));
- if (MEM_EXPR (stack_parm) && MEM_OFFSET (stack_parm))
+ set_mem_attributes (stack_parm, parm, 1);
+ /* set_mem_attributes could set MEM_SIZE to the passed mode's size,
+ while promoted mode's size is needed. */
+ if (data->promoted_mode != BLKmode
+ && data->promoted_mode != DECL_MODE (parm))
{
- int offset = subreg_lowpart_offset (DECL_MODE (parm),
- data->promoted_mode);
- if (offset)
- set_mem_offset (stack_parm,
- plus_constant (MEM_OFFSET (stack_parm), -offset));
+ set_mem_size (stack_parm,
+ GEN_INT (GET_MODE_SIZE (data->promoted_mode)));
+ if (MEM_EXPR (stack_parm) && MEM_OFFSET (stack_parm))
+ {
+ int offset = subreg_lowpart_offset (DECL_MODE (parm),
+ data->promoted_mode);
+ if (offset)
+ set_mem_offset (stack_parm,
+ plus_constant (MEM_OFFSET (stack_parm),
+ -offset));
+ }
}
}
diff --git a/gcc/ira.c b/gcc/ira.c
index b960f769534..b9b10dc9d3c 100644
--- a/gcc/ira.c
+++ b/gcc/ira.c
@@ -2384,21 +2384,9 @@ update_equiv_regs (void)
/* We only handle the case of a pseudo register being set
once, or always to the same value. */
- /* ??? The mn10200 port breaks if we add equivalences for
- values that need an ADDRESS_REGS register and set them equivalent
- to a MEM of a pseudo. The actual problem is in the over-conservative
- handling of INPADDR_ADDRESS / INPUT_ADDRESS / INPUT triples in
- calculate_needs, but we traditionally work around this problem
- here by rejecting equivalences when the destination is in a register
- that's likely spilled. This is fragile, of course, since the
- preferred class of a pseudo depends on all instructions that set
- or use it. */
-
if (!REG_P (dest)
|| (regno = REGNO (dest)) < FIRST_PSEUDO_REGISTER
- || reg_equiv[regno].init_insns == const0_rtx
- || (CLASS_LIKELY_SPILLED_P (reg_preferred_class (regno))
- && MEM_P (src) && ! reg_equiv[regno].is_arg_equivalence))
+ || reg_equiv[regno].init_insns == const0_rtx)
{
/* This might be setting a SUBREG of a pseudo, a pseudo that is
also set somewhere else to a constant. */
diff --git a/gcc/po/ChangeLog b/gcc/po/ChangeLog
index ecc4cae0ffd..e8ba16b4c8d 100644
--- a/gcc/po/ChangeLog
+++ b/gcc/po/ChangeLog
@@ -1,3 +1,7 @@
+2009-09-03 Joseph Myers <joseph@codesourcery.com>
+
+ * fi.po: Update.
+
2009-08-31 Joseph Myers <joseph@codesourcery.com>
* sv.po: Update.
diff --git a/gcc/po/fi.po b/gcc/po/fi.po
index d22e16493ad..a8bc5e1ade6 100644
--- a/gcc/po/fi.po
+++ b/gcc/po/fi.po
@@ -22,10 +22,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: gcc 4.4-b20081121\n"
+"Project-Id-Version: gcc 4.4.1\n"
"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
"POT-Creation-Date: 2009-07-15 13:37+0200\n"
-"PO-Revision-Date: 2009-02-03 22:16+0200\n"
+"PO-Revision-Date: 2009-09-03 20:43+0300\n"
"Last-Translator: Lauri Nurmi <lanurmi@iki.fi>\n"
"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
"MIME-Version: 1.0\n"
@@ -5472,19 +5472,16 @@ msgid "Error count reached limit of %d."
msgstr ""
#: fortran/error.c:734 fortran/error.c:788 fortran/error.c:825
-#, fuzzy
msgid "Warning:"
-msgstr "varoitus: "
+msgstr "Varoitus:"
#: fortran/error.c:790 fortran/error.c:873 fortran/error.c:899
-#, fuzzy
msgid "Error:"
-msgstr "virhe: "
+msgstr "Virhe:"
#: fortran/error.c:923
-#, fuzzy
msgid "Fatal Error:"
-msgstr "vakava virhe: "
+msgstr "Vakava virhe:"
#: fortran/error.c:942
#, no-c-format
@@ -17260,7 +17257,7 @@ msgstr "%qD:n osoite tulee aina olemaan %<true%>"
#: c-common.c:3472 cp/semantics.c:594 cp/typeck.c:6658
#, gcc-internal-format
msgid "suggest parentheses around assignment used as truth value"
-msgstr "ehdotetaan sulkuja totuusarvona käytetyn sijoituksen ympärille"
+msgstr "ehdotetaan sulkeita totuusarvona käytetyn sijoituksen ympärille"
#: c-common.c:3551 c-typeck.c:8974
#, gcc-internal-format
@@ -17800,39 +17797,39 @@ msgid "array subscript has type %<char%>"
msgstr "taulukon indeksin tyyppi on %<char%>"
#: c-common.c:8128
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "suggest parentheses around %<+%> inside %<<<%>"
-msgstr "sulkumerkkien käyttö + ja - -merkkien ympärillä on suositeltavaa bittisiirron sisällä"
+msgstr "ehdotetaan sulkeita %<+%>:n ympärille %<<<%>:n sisällä"
#: c-common.c:8131
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "suggest parentheses around %<-%> inside %<<<%>"
-msgstr "sulkumerkkien käyttö + ja - -merkkien ympärillä on suositeltavaa bittisiirron sisällä"
+msgstr "ehdotetaan sulkeita %<-%>:n ympärille %<<<%>:n sisällä"
#: c-common.c:8137
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "suggest parentheses around %<+%> inside %<>>%>"
-msgstr "sulkumerkkien käyttö + ja - -merkkien ympärillä on suositeltavaa bittisiirron sisällä"
+msgstr "ehdotetaan sulkeita %<+%>:n ympärille %<>>%>:n sisällä"
#: c-common.c:8140
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "suggest parentheses around %<-%> inside %<>>%>"
-msgstr "sulkumerkkien käyttö + ja - -merkkien ympärillä on suositeltavaa bittisiirron sisällä"
+msgstr "ehdotetaan sulkeita %<-%>:n ympärille %<>>%>:n sisällä"
#: c-common.c:8146
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "suggest parentheses around %<&&%> within %<||%>"
-msgstr "sulkumerkkien käyttö &&:n ympärillä on suositeltavaa ||:n sisällä"
+msgstr "ehdotetaan sulkeita %<&&%>:n ympärille %<||%>:n sisällä"
#: c-common.c:8155
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "suggest parentheses around arithmetic in operand of %<|%>"
-msgstr "sulkumerkkien käyttö laskulausekkeen ympärillä on suositeltavaa |:n operandissa"
+msgstr "ehdotetaan sulkeita lausekkeen ympärille %<|%>:n operandissa"
#: c-common.c:8160
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "suggest parentheses around comparison in operand of %<|%>"
-msgstr "sulkumerkkien käyttö vertailun ympärillä on suositeltavaa |:n operandissa"
+msgstr "ehdotetaan sulkeita vertailun ympärille %<|%>:n operandissa"
#: c-common.c:8164
#, gcc-internal-format
@@ -17840,29 +17837,29 @@ msgid "suggest parentheses around operand of %<!%> or change %<|%> to %<||%> or
msgstr ""
#: c-common.c:8174
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "suggest parentheses around arithmetic in operand of %<^%>"
-msgstr "sulkumerkkien käyttö laskulausekkeen ympärillä on suositeltavaa ^:n operandissa"
+msgstr "ehdotetaan sulkeita lausekkeen ympärille %<^%>:n operandissa"
#: c-common.c:8179
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "suggest parentheses around comparison in operand of %<^%>"
-msgstr "sulkumerkkien käyttö vertailun ympärillä on suositeltavaa ^:n operandissa"
+msgstr "ehdotetaan sulkeita vertailun ympärille %<^%>:n operandissa"
#: c-common.c:8185
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "suggest parentheses around %<+%> in operand of %<&%>"
-msgstr "sulkumerkkien käyttö + tai - -merkkien ympärillä on suositeltavaa &:n operandissa"
+msgstr "ehdotetaan sulkeita %<+%>:n ympärille %<&%>:n operandissa"
#: c-common.c:8188
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "suggest parentheses around %<-%> in operand of %<&%>"
-msgstr "sulkumerkkien käyttö + tai - -merkkien ympärillä on suositeltavaa &:n operandissa"
+msgstr "ehdotetaan sulkeita %<-%>:n ympärille %<&%>:n operandissa"
#: c-common.c:8193
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "suggest parentheses around comparison in operand of %<&%>"
-msgstr "sulkumerkkien käyttö vertailun ympärillä on suositeltavaa &:n operandissa"
+msgstr "ehdotetaan sulkeita vertailun ympärille %<&%>:n operandissa"
#: c-common.c:8197
#, gcc-internal-format
@@ -17870,24 +17867,24 @@ msgid "suggest parentheses around operand of %<!%> or change %<&%> to %<&&%> or
msgstr ""
#: c-common.c:8205
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "suggest parentheses around comparison in operand of %<==%>"
-msgstr "sulkumerkkien käyttö vertailun ympärillä on suositeltavaa |:n operandissa"
+msgstr "ehdotetaan sulkeita vertailun ympärille %<==%>:n operandissa"
#: c-common.c:8211
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "suggest parentheses around comparison in operand of %<!=%>"
-msgstr "sulkumerkkien käyttö vertailun ympärillä on suositeltavaa |:n operandissa"
+msgstr "ehdotetaan sulkeita vertailun ympärille %<!=%>:n operandissa"
#: c-common.c:8222
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "comparisons like %<X<=Y<=Z%> do not have their mathematical meaning"
-msgstr "X<=Y<=Z -tyyliset vertailut eivät toimi kuten matematiikassa"
+msgstr "%<X<=Y<=Z%> -tyylisillä vertailuilla on eri merkitys kuin matematiikassa"
#: c-common.c:8237
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "label %q+D defined but not used"
-msgstr "%Jnimike %qD määritelty, mutta ei käytetty"
+msgstr "nimike %q+D määritelty mutta käytettämättä"
#: c-common.c:8239
#, gcc-internal-format
@@ -17900,9 +17897,9 @@ msgid "division by zero"
msgstr "jako nollalla"
#: c-common.c:8291
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "comparison between types %qT and %qT"
-msgstr "osoittimen ja kokonaisluvun välinen vertailu"
+msgstr "tyyppien %qT ja %qT välinen vertailu"
#: c-common.c:8342
#, gcc-internal-format
@@ -18051,14 +18048,14 @@ msgid "conflicting types for built-in function %q+D"
msgstr "ristiriitaiset tyypit sisäiselle funktiolle %q+D"
#: c-decl.c:1233 c-decl.c:1246 c-decl.c:1255
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "conflicting types for %q+D"
-msgstr "%Jristiriitaiset tyypit funktiolle %qD"
+msgstr "ristiriitaiset tyypit %qD:lle"
#: c-decl.c:1253
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "conflicting type qualifiers for %q+D"
-msgstr "%J ristiriitaiset tyyppimääreet %qD:lle"
+msgstr "ristiriitaiset tyyppimääreet %q+D:lle"
#. Allow OLDDECL to continue in use.
#: c-decl.c:1273
@@ -18233,14 +18230,14 @@ msgid "%Jjump into scope of identifier with variably modified type"
msgstr ""
#: c-decl.c:2610
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%Htraditional C lacks a separate namespace for labels, identifier %qE conflicts"
-msgstr "%Hperinteisestä C:stä puuttuu erillinen nimiavaruus nimikkeille, tunniste %qs on ristiriidassa"
+msgstr "%Hperinteisestä C:stä puuttuu erillinen nimiavaruus nimikkeille, tunniste %qE on ristiriidassa"
#: c-decl.c:2685
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%H%qE defined as wrong kind of tag"
-msgstr "%H%qs määritelty vääränlaisena tunnisteena"
+msgstr "%H%qE määritelty vääränlaisena tunnisteena"
#: c-decl.c:2908
#, gcc-internal-format
@@ -18703,9 +18700,9 @@ msgid "variable previously declared %<static%> redeclared %<extern%>"
msgstr "%<static%>-määreellä esitelty muuttuja esitelty uudelleen %<extern%>-tyyppiseksi"
#: c-decl.c:4929
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "variable %q+D declared %<inline%>"
-msgstr "%Jmuuttuja %qD esitelty %<inline%>:ksi"
+msgstr "muuttuja %qD esitelty %<inline%>:ksi"
#. C99 6.7.5.2p2
#: c-decl.c:4960
@@ -18749,14 +18746,14 @@ msgid "%<void%> as only parameter may not be qualified"
msgstr "%<void%> vain parametrina ei ole oikeutettu"
#: c-decl.c:5151 c-decl.c:5185
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<void%> must be the only parameter"
-msgstr "%<void%> pitää olla ainoa parametri"
+msgstr "%<void%>:in on oltava ainoa parametri"
#: c-decl.c:5179
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "parameter %q+D has just a forward declaration"
-msgstr "parametrilla %qD on vain etukäteisesittely"
+msgstr "parametrilla %q+D on vain etukäteisesittely"
#. The %s will be one of 'struct', 'union', or 'enum'.
#: c-decl.c:5224
@@ -19753,17 +19750,17 @@ msgstr "muotoilun %s tyypin pitäisi olla %<%s%s%>, mutta argumentti %d on tyypp
#: c-format.c:2334
#, gcc-internal-format
msgid "format %q.*s expects type %<%s%s%>, but argument %d has type %qT"
-msgstr "muotoilu %q.*s edellyttää tyyppiä %<%s%s%>, mutta %d. argumentin tyyppi on %qT"
+msgstr "muotoilu %q.*s odottaa tyyppiä %<%s%s%>, mutta %d. argumentin tyyppi on %qT"
#: c-format.c:2342
#, gcc-internal-format
msgid "%s should have type %<%T%s%>, but argument %d has type %qT"
-msgstr "moutoilun %s tyypin pitäisi olla %<%T%s%>, mutta argumentti %d on tyyppiä %qT"
+msgstr "muotoilun %s tyypin pitäisi olla %<%T%s%>, mutta argumentti %d on tyyppiä %qT"
#: c-format.c:2346
#, gcc-internal-format
msgid "format %q.*s expects type %<%T%s%>, but argument %d has type %qT"
-msgstr "muotoilu %q.*s edellyttää %<%T%s%>-tyyppiä, mutta %d. argumentin tyyppi on %qT"
+msgstr "muotoilu %q.*s odottaa %<%T%s%>-tyyppiä, mutta %d. argumentin tyyppi on %qT"
#: c-format.c:2405 c-format.c:2411 c-format.c:2562
#, gcc-internal-format
@@ -19867,14 +19864,14 @@ msgid "non-standard suffix on floating constant"
msgstr ""
#: c-lex.c:687 c-lex.c:689
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "floating constant exceeds range of %qT"
-msgstr "liukulukuvakio ylittää arvoalueen %<%s%>"
+msgstr "liukulukuvakio ylittää %qT:n arvoalueen"
#: c-lex.c:697
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "floating constant truncated to zero"
-msgstr "liukulukuvakiota käytetty väärin"
+msgstr "liukulukuvakio katkaistu nollaksi"
#: c-lex.c:888
#, gcc-internal-format
@@ -19884,7 +19881,7 @@ msgstr ""
#: c-lex.c:910
#, gcc-internal-format
msgid "traditional C rejects string constant concatenation"
-msgstr "perinteinen C hylkii merkkijonovakiokatenaatioita"
+msgstr "perinteinen C ei salli merkkijonovakioiden katenointia"
#: c-omp.c:119
#, gcc-internal-format
@@ -20084,7 +20081,7 @@ msgstr "#-opastimen on myöhäistä asettaa debug-hakemisto"
#: c-parser.c:226
#, gcc-internal-format
msgid "identifier %qs conflicts with C++ keyword"
-msgstr ""
+msgstr "tunniste %qs on ristiriidassa C++:n varatun sanan kanssa"
#: c-parser.c:971
#, fuzzy, gcc-internal-format
@@ -20120,9 +20117,9 @@ msgid "expected %<=%>, %<,%>, %<;%>, %<asm%> or %<__attribute__%>"
msgstr ""
#: c-parser.c:1275
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ISO C forbids nested functions"
-msgstr "%HISO C kieltää sisäkkäiset funktiot"
+msgstr "ISO C kieltää sisäkkäiset funktiot"
#: c-parser.c:1641 c-parser.c:2454 c-parser.c:3094 c-parser.c:3352
#: c-parser.c:4292 c-parser.c:4892 c-parser.c:5314 c-parser.c:5335
@@ -20150,24 +20147,24 @@ msgid "expected %<{%>"
msgstr ""
#: c-parser.c:1706
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ISO C forbids forward references to %<enum%> types"
msgstr "ISO C kieltää etukäteisviittaukset %<enum%>-tyyppeihin"
#: c-parser.c:1812
#, gcc-internal-format
msgid "expected class name"
-msgstr ""
+msgstr "odotettiin luokan nimeä"
#: c-parser.c:1831 c-parser.c:5859
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "extra semicolon in struct or union specified"
-msgstr "%Hylimääräinen puolipiste structissa tai unionissa"
+msgstr "ylimääräinen puolipiste structissa tai unionissa"
#: c-parser.c:1860
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "no semicolon at end of struct or union"
-msgstr "%Hpuolipiste puuttuu structin tai unionin lopusta"
+msgstr "puolipiste puuttuu structin tai unionin lopusta"
#: c-parser.c:1863
#, gcc-internal-format
@@ -20180,9 +20177,9 @@ msgid "expected specifier-qualifier-list"
msgstr ""
#: c-parser.c:1952
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ISO C forbids member declarations with no members"
-msgstr "%HISO C kieltää jäsenettömät jäsenesittelyt"
+msgstr "ISO C kieltää jäsenettömät jäsenesittelyt"
#: c-parser.c:2028
#, gcc-internal-format
@@ -20220,12 +20217,12 @@ msgid "wide string literal in %<asm%>"
msgstr "leveä merkkijonovakio %<asm%>-lauseessa"
#: c-parser.c:2689 c-parser.c:6726
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "expected string literal"
-msgstr "leveä merkkijonovakio %<asm%>-lauseessa"
+msgstr "odotettiin merkkijonoliteraalia"
#: c-parser.c:3014
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ISO C forbids empty initializer braces"
msgstr "ISO C kieltää tyhjät alustusaaltosulkeet"
@@ -21651,7 +21648,7 @@ msgstr ""
#: c-typeck.c:7513
#, gcc-internal-format
msgid "%Hsuggest explicit braces to avoid ambiguous %<else%>"
-msgstr ""
+msgstr "%Hehdotetaan aaltosulkeita epäselveän %<else%>n välttämiseksi"
#: c-typeck.c:7622 cp/cp-gimplify.c:92
#, gcc-internal-format
@@ -25598,7 +25595,7 @@ msgstr ""
#: config/frv/frv.c:8784
#, gcc-internal-format
msgid "%qs expects a constant argument"
-msgstr ""
+msgstr "%qs odottaa vakioargumenttia"
#: config/frv/frv.c:8789
#, gcc-internal-format
@@ -27265,29 +27262,29 @@ msgid "parameter list does not match a valid signature for %s()"
msgstr ""
#: config/spu/spu.c:447 config/spu/spu.c:458
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Unknown architecture '%s'"
-msgstr "tuntematon konetila %qs"
+msgstr "Tuntematon arkkitehtuuri ”%s”"
#: config/spu/spu.c:3713
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "`%s' attribute ignored"
-msgstr "%qs attribuuttia ei huomioida"
+msgstr "”%s”-attribuuttia ei huomioida"
#: config/spu/spu.c:5902
#, gcc-internal-format
msgid "%s expects an integer literal in the range [%d, %d]."
-msgstr ""
+msgstr "%s odottaa kokonaislukuliteraalia väliltä [%d, %d]."
#: config/spu/spu.c:5922
#, gcc-internal-format
msgid "%s expects an integer literal in the range [%d, %d]. ("
-msgstr ""
+msgstr "%s odottaa kokonaislukuliteraalia väliltä [%d, %d]. ("
#: config/spu/spu.c:5952
#, gcc-internal-format
msgid "%d least significant bits of %s are ignored."
-msgstr ""
+msgstr "%d vähiten merkitsevää %s:n bittiä ei huomioida."
#: config/stormy16/stormy16.c:1086
#, gcc-internal-format
@@ -27497,7 +27494,7 @@ msgstr ""
#: cp/call.c:2879
#, gcc-internal-format
msgid "conversion from %qT to %qT is ambiguous"
-msgstr "muunnos tyypistä %qT tyyppiin %qT on monitulkintainen"
+msgstr "muunnos tyypistä %qT tyyppiin %qT on moniselitteinen"
#: cp/call.c:3038 cp/call.c:3058 cp/call.c:3122
#, gcc-internal-format
@@ -31217,9 +31214,9 @@ msgid "%H%qD used without template parameters"
msgstr "%J%qD:n edellinen esittely oli täällä"
#: cp/parser.c:4160 cp/parser.c:14892 cp/parser.c:17189
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%Hreference to %qD is ambiguous"
-msgstr "muunnos tyypistä %qT tyyppiin %qT on monitulkintainen"
+msgstr ""
#: cp/parser.c:4206 cp/pt.c:5659
#, gcc-internal-format
@@ -34670,6 +34667,9 @@ msgstr ""
#~ msgid "Warn about implicit conversion"
#~ msgstr "Varoita implisiittisistä muunnoksista"
+#~ msgid "Warn about C++ constructs whose meaning differs between ISO C++ 1998 and ISO C++ 201x"
+#~ msgstr "Varoita C++:n rakenteista, joilla on eri merkitys ISO C++ 1998- ja ISO C++ 201x -standardeissa"
+
#~ msgid "Enable OpenMP"
#~ msgstr "Käytä OpenMP:tä"
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 06e50502bc4..1317b16d5e7 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2009-09-03 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * lib/target-supports.exp (check_effective_target_sync_int_long):
+ Supported on Blackfin Linux targets.
+
2009-09-02 David Daney <ddaney@caviumnetworks.com>
* gcc.c-torture/compile/builtin_unreachable-1.c: New testcase.
diff --git a/gcc/testsuite/gcc.dg/autopar/parallelization-1.c b/gcc/testsuite/gcc.dg/autopar/parallelization-1.c
index f71d6d53343..f53be8598db 100644
--- a/gcc/testsuite/gcc.dg/autopar/parallelization-1.c
+++ b/gcc/testsuite/gcc.dg/autopar/parallelization-1.c
@@ -6,7 +6,7 @@ void abort (void);
void parloop (int N)
{
int i;
- int x[10000000];
+ int x[10000990];
for (i = 0; i < N; i++)
x[i] = i + 3;
@@ -20,7 +20,7 @@ void parloop (int N)
int main(void)
{
- parloop(10000000);
+ parloop(10000);
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/autopar/pr39500-1.c b/gcc/testsuite/gcc.dg/autopar/pr39500-1.c
index 161f31da6a1..6428bd062fe 100644
--- a/gcc/testsuite/gcc.dg/autopar/pr39500-1.c
+++ b/gcc/testsuite/gcc.dg/autopar/pr39500-1.c
@@ -8,14 +8,14 @@ void abort (void);
int main (void)
{
int i;
- int x[1000];
+ int x[100000];
- for (i = 0; i < 100; i++)
- x[i] = x[i+100];
+ for (i = 0; i < 10000; i++)
+ x[i] = x[i+10000];
- for (i = 0; i < 100; i++)
+ for (i = 0; i < 10000; i++)
{
- if (x[i] != x[i+100])
+ if (x[i] != x[i+10000])
abort ();
}
diff --git a/gcc/testsuite/gcc.dg/autopar/reduc-1.c b/gcc/testsuite/gcc.dg/autopar/reduc-1.c
index c8b624c8c5b..8018a558c43 100644
--- a/gcc/testsuite/gcc.dg/autopar/reduc-1.c
+++ b/gcc/testsuite/gcc.dg/autopar/reduc-1.c
@@ -4,55 +4,70 @@
#include <stdarg.h>
#include <stdlib.h>
-#define N 16
-#define DIFF 242
-
-unsigned int ub[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-unsigned int uc[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
-
-/* Reduction of unsigned-int. */
-
-void main1 (unsigned int x, unsigned int max_result, unsigned int min_result)
-{
- int i;
- unsigned int udiff = 2;
- unsigned int umax = x;
- unsigned int umin = x;
-
- /* Summation. */
- for (i = 0; i < N; i++) {
- udiff += (ub[i] - uc[i]);
- }
-
- /* Maximum. */
- for (i = 0; i < N; i++) {
- umax = umax < uc[i] ? uc[i] : umax;
- }
-
- /* Minimum. */
- for (i = 0; i < N; i++) {
- umin = umin > uc[i] ? uc[i] : umin;
- }
-
- /* check results: */
- if (udiff != DIFF)
- abort ();
- if (umax != max_result)
- abort ();
- if (umin != min_result)
- abort ();
+ #define N 1600
+ #define DIFF 2558402
+
+unsigned int ub[N];
+unsigned int uc[N];
+
+ /* Reduction of unsigned-int. */
+
+ void main1 (unsigned int x, unsigned int max_result, unsigned int min_result)
+ {
+ int i;
+ unsigned int udiff = 2;
+ unsigned int umax = x;
+ unsigned int umin = x;
+
+ /* Summation. */
+ for (i = 0; i < N; i++) {
+ udiff += (ub[i] - uc[i]);
+ }
+
+ /* Maximum. */
+ for (i = 0; i < N; i++) {
+ umax = umax < uc[i] ? uc[i] : umax;
+ }
+
+ /* Minimum. */
+ for (i = 0; i < N; i++) {
+ umin = umin > uc[i] ? uc[i] : umin;
+ }
+
+ /* check results: */
+ if (udiff != DIFF)
+ abort ();
+ if (umax != max_result)
+ abort ();
+ if (umin != min_result)
+ abort ();
+ }
+
+ __attribute__((noinline))
+ void init_arrays ()
+ {
+ int i;
+
+ ub[0] = 1;
+ uc[0] = 1;
+ for (i=1; i<N; i++)
+ {
+ ub[i] = i * 3;
+ uc[i] = i;
+ }
}
int main (void)
{
-
- main1 (100, 100, 1);
- main1 (0, 15, 0);
+ init_arrays ();
+ main1 (2000, 2000, 1);
+ main1 (0, 1599, 0);
return 0;
}
+
/* { dg-final { scan-tree-dump-times "Detected reduction" 3 "parloops" } } */
-/* { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 3 "parloops" } } */
+/* { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 4 "parloops" } } */
/* { dg-final { cleanup-tree-dump "parloops" } } */
/* { dg-final { cleanup-tree-dump "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/autopar/reduc-1char.c b/gcc/testsuite/gcc.dg/autopar/reduc-1char.c
index e3c73ba0d57..76645c85075 100644
--- a/gcc/testsuite/gcc.dg/autopar/reduc-1char.c
+++ b/gcc/testsuite/gcc.dg/autopar/reduc-1char.c
@@ -4,7 +4,7 @@
#include <stdarg.h>
#include <stdlib.h>
-#define N 16
+#define N 1600
#define DIFF 242
unsigned char ub[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
@@ -39,15 +39,29 @@ main1 (unsigned char x, unsigned char max_result, unsigned char min_result)
abort ();
}
+ __attribute__((noinline))
+ void init_arrays ()
+ {
+ int i;
+
+ for (i=16; i<N; i++)
+ {
+ ub[i] = 1;
+ uc[i] = 1;
+ }
+}
+
int main (void)
-{
+{
+ init_arrays();
main1 (100, 100, 1);
main1 (0, 15, 0);
return 0;
}
+
/* { dg-final { scan-tree-dump-times "Detected reduction" 3 "parloops" } } */
-/* { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 3 "parloops" } } */
+/* { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 4 "parloops" } } */
/* { dg-final { cleanup-tree-dump "parloops" } } */
/* { dg-final { cleanup-tree-dump "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/autopar/reduc-1short.c b/gcc/testsuite/gcc.dg/autopar/reduc-1short.c
index 10f1401d5c9..526f170096a 100644
--- a/gcc/testsuite/gcc.dg/autopar/reduc-1short.c
+++ b/gcc/testsuite/gcc.dg/autopar/reduc-1short.c
@@ -4,7 +4,7 @@
#include <stdarg.h>
#include <stdlib.h>
-#define N 16
+#define N 1600
#define DIFF 242
unsigned short ub[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
@@ -39,15 +39,28 @@ main1 (unsigned short x, unsigned short max_result, unsigned short min_result)
abort ();
}
+ __attribute__((noinline))
+ void init_arrays ()
+ {
+ int i;
+
+ for (i=16; i<N; i++)
+ {
+ ub[i] = 1;
+ uc[i] = 1;
+ }
+}
+
int main (void)
{
+ init_arrays();
main1 (100, 100, 1);
main1 (0, 15, 0);
return 0;
}
/* { dg-final { scan-tree-dump-times "Detected reduction" 3 "parloops" } } */
-/* { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 3 "parloops" } } */
+/* { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 4 "parloops" } } */
/* { dg-final { cleanup-tree-dump "parloops" } } */
/* { dg-final { cleanup-tree-dump "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/autopar/reduc-2.c b/gcc/testsuite/gcc.dg/autopar/reduc-2.c
index 8a0338f1c6a..e0abb265b5b 100644
--- a/gcc/testsuite/gcc.dg/autopar/reduc-2.c
+++ b/gcc/testsuite/gcc.dg/autopar/reduc-2.c
@@ -4,11 +4,11 @@
#include <stdarg.h>
#include <stdlib.h>
-#define N 16
-#define DIFF 240
+#define N 1600
+#define DIFF 2558400
-int b[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-int c[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+int b[N];
+int c[N];
/* Reduction of signed-int. */
@@ -31,7 +31,7 @@ void main1 (int x, int max_result, int min_result)
for (i = 0; i < N; i++) {
min = min > c[i] ? c[i] : min;
}
-
+
/* check results: */
if (diff != DIFF)
abort ();
@@ -41,15 +41,30 @@ void main1 (int x, int max_result, int min_result)
abort ();
}
+ __attribute__((noinline))
+ void init_arrays ()
+ {
+ int i;
+
+ b[0] = 1;
+ c[0] = 1;
+ for (i=1; i<N; i++)
+ {
+ b[i] = i * 3;
+ c[i] = i;
+ }
+}
+
int main (void)
{
- main1 (100, 100, 1);
- main1 (0, 15, 0);
+ init_arrays ();
+ main1 (2000, 2000, 1);
+ main1 (0, 1599, 0);
return 0;
}
/* { dg-final { scan-tree-dump-times "Detected reduction" 3 "parloops" } } */
-/* { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 3 "parloops" } } */
+/* { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 4 "parloops" } } */
/* { dg-final { cleanup-tree-dump "parloops" } } */
/* { dg-final { cleanup-tree-dump "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/autopar/reduc-2char.c b/gcc/testsuite/gcc.dg/autopar/reduc-2char.c
index 0372dc6a2b2..ada1275f99d 100644
--- a/gcc/testsuite/gcc.dg/autopar/reduc-2char.c
+++ b/gcc/testsuite/gcc.dg/autopar/reduc-2char.c
@@ -4,7 +4,7 @@
#include <stdarg.h>
#include <stdlib.h>
-#define N 16
+#define N 1600
#define DIFF 121
signed char b[N] = {1,2,3,6,8,10,12,14,16,18,20,22,24,26,28,30};
@@ -39,15 +39,29 @@ void main1 (signed char x, signed char max_result, signed char min_result)
abort ();
}
+ __attribute__((noinline))
+ void init_arrays ()
+ {
+ int i;
+
+ for (i=16; i<N; i++)
+ {
+ b[i] = 1;
+ c[i] = 1;
+ }
+}
+
int main (void)
{
+ init_arrays();
main1 (100, 100, 1);
main1 (0, 15, 0);
return 0;
}
+
/* { dg-final { scan-tree-dump-times "Detected reduction" 2 "parloops" } } */
-/* { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 2 "parloops" } } */
+/* { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 3 "parloops" } } */
/* { dg-final { cleanup-tree-dump "parloops" } } */
/* { dg-final { cleanup-tree-dump "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/autopar/reduc-2short.c b/gcc/testsuite/gcc.dg/autopar/reduc-2short.c
index 4f37e864192..3363c68f428 100644
--- a/gcc/testsuite/gcc.dg/autopar/reduc-2short.c
+++ b/gcc/testsuite/gcc.dg/autopar/reduc-2short.c
@@ -4,7 +4,7 @@
#include <stdarg.h>
#include <stdlib.h>
-#define N 16
+#define N 1600
#define DIFF 242
short b[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
@@ -38,15 +38,29 @@ void main1 (short x, short max_result, short min_result)
abort ();
}
+ __attribute__((noinline))
+ void init_arrays ()
+ {
+ int i;
+
+ for (i=16; i<N; i++)
+ {
+ b[i] = 1;
+ c[i] = 1;
+ }
+}
+
int main (void)
{
+ init_arrays();
main1 (100, 100, 1);
main1 (0, 15, 0);
return 0;
}
+
/* { dg-final { scan-tree-dump-times "Detected reduction" 2 "parloops" } } */
-/* { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 2 "parloops" } } */
+/* { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 3 "parloops" } } */
/* { dg-final { cleanup-tree-dump "parloops" } } */
/* { dg-final { cleanup-tree-dump "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/autopar/reduc-3.c b/gcc/testsuite/gcc.dg/autopar/reduc-3.c
index 0ec3aaa8102..6bc204711e5 100644
--- a/gcc/testsuite/gcc.dg/autopar/reduc-3.c
+++ b/gcc/testsuite/gcc.dg/autopar/reduc-3.c
@@ -4,10 +4,10 @@
#include <stdarg.h>
#include <stdlib.h>
-#define N 16
+#define N 1600
-unsigned int ub[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-unsigned int uc[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+unsigned int ub[N];
+unsigned int uc[N];
/* Reduction of unsigned-int. */
@@ -29,15 +29,29 @@ int main1 (int n, int res)
return 0;
}
+__attribute__((noinline))
+void init_arrays ()
+{
+ int i;
+
+ for (i=0; i<N; i++)
+ {
+ ub[i] = i * 3;
+ uc[i] = i;
+ }
+}
+
int main (void)
{
- main1 (N, 240);
- main1 (N-1, 210);
+ init_arrays ();
+ main1 (N, 2558400);
+ main1 (N-1, 2555202);
return 0;
}
+
/* { dg-final { scan-tree-dump-times "Detected reduction" 1 "parloops" } } */
-/* { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 1 "parloops" } } */
+/* { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 2 "parloops" } } */
/* { dg-final { cleanup-tree-dump "parloops" } } */
/* { dg-final { cleanup-tree-dump "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/autopar/reduc-6.c b/gcc/testsuite/gcc.dg/autopar/reduc-6.c
index f6d503c9be4..fface8fed35 100644
--- a/gcc/testsuite/gcc.dg/autopar/reduc-6.c
+++ b/gcc/testsuite/gcc.dg/autopar/reduc-6.c
@@ -4,19 +4,26 @@
#include <stdarg.h>
#include <stdlib.h>
-#define N 16
-#define DIFF 242
+#define N 1600
+#define DIFF 2558402
+
__attribute__ ((noinline))
int main1 (float x, float max_result)
{
int i;
- float b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
- float c[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+ float b[N];
+ float c[N];
float diff = 2;
float max = x;
float min = 10;
+ for (i=0; i<N; i++)
+ {
+ b[i] = i * 3;
+ c[i] = i;
+ }
+
for (i = 0; i < N; i++) {
diff += (b[i] - c[i]);
}
@@ -42,14 +49,15 @@ int main1 (float x, float max_result)
int main (void)
{
- main1 (100 ,100);
- main1 (0, 15);
+ main1 (2000, 2000);
+ main1 (0, 1599);
return 0;
}
+
/* need -ffast-math to parallelize these loops. */
/* { dg-final { scan-tree-dump-times "Detected reduction" 0 "parloops" } } */
-/* { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 0 "parloops" } } */
+/* { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 1 "parloops" } } */
/* { dg-final { scan-tree-dump-times "FAILED: it is not a part of reduction" 3 "parloops" } } */
/* { dg-final { cleanup-tree-dump "parloops" } } */
/* { dg-final { cleanup-tree-dump "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/autopar/reduc-7.c b/gcc/testsuite/gcc.dg/autopar/reduc-7.c
index f25b03abb6d..f66069e56ca 100644
--- a/gcc/testsuite/gcc.dg/autopar/reduc-7.c
+++ b/gcc/testsuite/gcc.dg/autopar/reduc-7.c
@@ -3,7 +3,7 @@
#include <stdlib.h>
-#define N 32
+#define N 3200
extern void abort (void);
typedef unsigned char T;
@@ -42,28 +42,36 @@ testmin (const T *c, T init, T result)
int main (void)
{
- static unsigned char const A[N] = {
+ static unsigned char A[N] = {
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f
};
- static unsigned char const B[N] = {
+ static unsigned char B[N] = {
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f
};
- static unsigned char const C[N] = {
+ static unsigned char C[N] = {
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
};
-
+ int i;
+
+ for (i=32; i<N; i++)
+ {
+ A[i]= 0x01;
+ B[i]= 0x70;
+ C[i]= 0xff;
+ }
+
testmin (A, 10, 1);
testmin (B, 0x7f, 0x70);
testmin (C, 0x7f, 0x09);
@@ -75,8 +83,9 @@ int main (void)
return 0;
}
+
/* { dg-final { scan-tree-dump-times "Detected reduction" 2 "parloops" } } */
-/* { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 2 "parloops" } } */
+/* { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 3 "parloops" } } */
/* { dg-final { cleanup-tree-dump "parloops" } } */
/* { dg-final { cleanup-tree-dump "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/autopar/reduc-8.c b/gcc/testsuite/gcc.dg/autopar/reduc-8.c
index 801561da87d..4a416df2372 100644
--- a/gcc/testsuite/gcc.dg/autopar/reduc-8.c
+++ b/gcc/testsuite/gcc.dg/autopar/reduc-8.c
@@ -3,7 +3,7 @@
#include <stdlib.h>
-#define N 32
+#define N 3200
extern void abort (void);
typedef signed char T;
@@ -42,27 +42,36 @@ testmin (const T *c, T init, T result)
int main (void)
{
- static signed char const A[N] = {
+ static signed char A[N] = {
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f
};
- static signed char const B[N] = {
+ static signed char B[N] = {
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f
};
- static signed char const C[N] = {
+ static signed char C[N] = {
0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
};
+ int i;
+
+ for (i=32; i<N; i++)
+ {
+ A[i]= 0x01;
+ B[i]= 0x70;
+ C[i]= 0xff;
+ }
+
testmin (A, 0, 0);
testmin (B, 0, 0x80);
testmin (C, 0, 0x80);
@@ -74,7 +83,8 @@ int main (void)
return 0;
}
+
/* { dg-final { scan-tree-dump-times "Detected reduction" 2 "parloops" } } */
-/* { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 2 "parloops" } } */
+/* { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 3 "parloops" } } */
/* { dg-final { cleanup-tree-dump "parloops" } } */
/* { dg-final { cleanup-tree-dump "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/autopar/reduc-9.c b/gcc/testsuite/gcc.dg/autopar/reduc-9.c
index 2bc04ccfc74..2c1677ce5ee 100644
--- a/gcc/testsuite/gcc.dg/autopar/reduc-9.c
+++ b/gcc/testsuite/gcc.dg/autopar/reduc-9.c
@@ -3,7 +3,7 @@
#include <stdlib.h>
-#define N 32
+#define N 3200
extern void abort (void);
typedef unsigned short T;
@@ -42,27 +42,36 @@ testmin (const T *c, T init, T result)
int main (void)
{
- static unsigned short const A[N] = {
+ static unsigned short A[N] = {
0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008,
0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, 0x0010,
0x7000, 0x7100, 0x7200, 0x7300, 0x7400, 0x7500, 0x7600, 0x7700,
0x7ff8, 0x7ff9, 0x7ffa, 0x7ffb, 0x7ffc, 0x7ffd, 0x7ffe, 0x7fff
};
- static unsigned short const B[N] = {
+ static unsigned short B[N] = {
0x7000, 0x7100, 0x7200, 0x7300, 0x7400, 0x7500, 0x7600, 0x7700,
0x7ff8, 0x7ff9, 0x7ffa, 0x7ffb, 0x7ffc, 0x7ffd, 0x7ffe, 0x7fff,
0x8000, 0x8001, 0x8002, 0x8003, 0x8004, 0x8005, 0x8006, 0x8007,
0x8008, 0x8009, 0x800a, 0x800b, 0x800c, 0x800d, 0x800e, 0x800f
};
- static unsigned short const C[N] = {
+ static unsigned short C[N] = {
0xffff, 0xfffe, 0xfffd, 0xfffc, 0xfffb, 0xfffa, 0xfff9, 0xfff8,
0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, 0x0010,
0x8000, 0x8001, 0x8002, 0x8003, 0x8004, 0x8005, 0x8006, 0x8007,
0x7000, 0x7100, 0x7200, 0x7300, 0x7400, 0x7500, 0x7600, 0x7700,
};
+ int i;
+
+ for (i=32; i<N; i++)
+ {
+ A[i]= 0x0001;
+ B[i]= 0x7000;
+ C[i]= 0xffff;
+ }
+
testmin (A, 10, 1);
testmin (B, 0x7fff, 0x7000);
testmin (C, 0x7fff, 0x0009);
@@ -74,7 +83,8 @@ int main (void)
return 0;
}
+
/* { dg-final { scan-tree-dump-times "Detected reduction" 2 "parloops" } } */
-/* { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 2 "parloops" } } */
+/* { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 3 "parloops" } } */
/* { dg-final { cleanup-tree-dump "parloops" } } */
/* { dg-final { cleanup-tree-dump "optimized" } } */
diff --git a/gcc/testsuite/gcc.target/arm/ctz.c b/gcc/testsuite/gcc.target/arm/ctz.c
new file mode 100644
index 00000000000..63e9d0266d2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/ctz.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target arm32 } */
+/* { dg-options "-O2 -march=armv6t2" } */
+
+unsigned int functest(unsigned int x)
+{
+ return __builtin_ctz(x);
+}
+
+/* { dg-final { scan-assembler "rbit" } } */
+/* { dg-final { scan-assembler "clz" } } */
+/* { dg-final { scan-assembler-not "rsb" } } */
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index c826b863a04..918993830e8 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -2670,6 +2670,7 @@ proc check_effective_target_sync_int_long { } {
|| [istarget i?86-*-*]
|| [istarget x86_64-*-*]
|| [istarget alpha*-*-*]
+ || [istarget bfin*-*linux*]
|| [istarget s390*-*-*]
|| [istarget powerpc*-*-*]
|| [istarget sparc64-*-*]
diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c
index a6d8f215914..12b4ac0171a 100644
--- a/gcc/tree-parloops.c
+++ b/gcc/tree-parloops.c
@@ -1135,7 +1135,7 @@ separate_decls_in_region (edge entry, edge exit, htab_t reduction_list,
VEC_free (basic_block, heap, body);
- if (htab_elements (name_copies) == 0 && reduction_list == 0)
+ if (htab_elements (name_copies) == 0 && htab_elements (reduction_list) == 0)
{
/* It may happen that there is nothing to copy (if there are only
loop carried and external variables in the loop). */
@@ -1908,7 +1908,8 @@ parallelize_loops (void)
/* FIXME: Bypass this check as graphite doesn't update the
count and frequency correctly now. */
if (!flag_loop_parallelize_all
- && (expected_loop_iterations (loop) <= n_threads
+ && ((estimated_loop_iterations_int (loop, false)
+ <= (HOST_WIDE_INT) n_threads * MIN_PER_THREAD)
/* Do not bother with loops in cold areas. */
|| optimize_loop_nest_for_size_p (loop)))
continue;
diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c
index 8d4dc90d179..aed2839dd7a 100644
--- a/gcc/tree-sra.c
+++ b/gcc/tree-sra.c
@@ -1496,26 +1496,6 @@ child_would_conflict_in_lacc (struct access *lacc, HOST_WIDE_INT norm_offset,
return false;
}
-/* Set the expr of TARGET to one just like MODEL but with is own base at the
- bottom of the handled components. */
-
-static void
-duplicate_expr_for_different_base (struct access *target,
- struct access *model)
-{
- tree t, expr = unshare_expr (model->expr);
-
- gcc_assert (handled_component_p (expr));
- t = expr;
- while (handled_component_p (TREE_OPERAND (t, 0)))
- t = TREE_OPERAND (t, 0);
- gcc_assert (TREE_OPERAND (t, 0) == model->base);
- TREE_OPERAND (t, 0) = target->base;
-
- target->expr = expr;
-}
-
-
/* Create a new child access of PARENT, with all properties just like MODEL
except for its offset and with its grp_write false and grp_read true.
Return the new access. Note that this access is created long after all
@@ -1528,6 +1508,7 @@ create_artificial_child_access (struct access *parent, struct access *model,
{
struct access *access;
struct access **child;
+ bool ok;
gcc_assert (!model->grp_unscalarizable_region);
@@ -1536,10 +1517,13 @@ create_artificial_child_access (struct access *parent, struct access *model,
access->base = parent->base;
access->offset = new_offset;
access->size = model->size;
- duplicate_expr_for_different_base (access, model);
access->type = model->type;
access->grp_write = true;
access->grp_read = false;
+ access->expr = access->base;
+ ok = build_ref_for_offset (&access->expr, TREE_TYPE (access->expr),
+ new_offset, access->type, false);
+ gcc_assert (ok);
child = &parent->first_child;
while (*child && (*child)->offset < new_offset)
@@ -1571,7 +1555,12 @@ propagate_subacesses_accross_link (struct access *lacc, struct access *racc)
if (!lacc->first_child && !racc->first_child
&& is_gimple_reg_type (racc->type))
{
- duplicate_expr_for_different_base (lacc, racc);
+ bool ok;
+
+ lacc->expr = lacc->base;
+ ok = build_ref_for_offset (&lacc->expr, TREE_TYPE (lacc->expr),
+ lacc->offset, racc->type, false);
+ gcc_assert (ok);
lacc->type = racc->type;
return false;
}
diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c
index a24755fe07e..4d30324569b 100644
--- a/gcc/var-tracking.c
+++ b/gcc/var-tracking.c
@@ -7058,10 +7058,20 @@ vt_add_function_parameters (void)
if (!vt_get_decl_and_offset (incoming, &decl, &offset))
{
- if (!vt_get_decl_and_offset (decl_rtl, &decl, &offset))
- continue;
- offset += byte_lowpart_offset (GET_MODE (incoming),
- GET_MODE (decl_rtl));
+ if (REG_P (incoming) || MEM_P (incoming))
+ {
+ /* This means argument is passed by invisible reference. */
+ offset = 0;
+ decl = parm;
+ incoming = gen_rtx_MEM (GET_MODE (decl_rtl), incoming);
+ }
+ else
+ {
+ if (!vt_get_decl_and_offset (decl_rtl, &decl, &offset))
+ continue;
+ offset += byte_lowpart_offset (GET_MODE (incoming),
+ GET_MODE (decl_rtl));
+ }
}
if (!decl)
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index f1ac312833b..065a4ba3c73 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,9 @@
+2009-09-03 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/41219
+ * intrinsics/iso_c_binding.c (c_f_pointer_u0): Move variable
+ declaration out of the loop.
+
2009-08-30 Thomas Koenig <tkoenig@gcc.gnu.org>
* m4/pack.m4 (pack_'rtype_code`): Use count_0 for counting true
diff --git a/libgfortran/intrinsics/iso_c_binding.c b/libgfortran/intrinsics/iso_c_binding.c
index 569b122f236..ea1bab39501 100644
--- a/libgfortran/intrinsics/iso_c_binding.c
+++ b/libgfortran/intrinsics/iso_c_binding.c
@@ -95,7 +95,7 @@ ISO_C_BINDING_PREFIX (c_f_pointer_u0) (void *c_ptr_in,
if (shape != NULL)
{
index_type source_stride;
- index_type size;
+ index_type size, str;
char *p;
f_ptr_out->offset = 0;
@@ -109,7 +109,7 @@ ISO_C_BINDING_PREFIX (c_f_pointer_u0) (void *c_ptr_in,
shapeSize = GFC_DESCRIPTOR_EXTENT(shape,0);
for (i = 0; i < shapeSize; i++)
{
- index_type str, ub;
+ index_type ub;
/* Have to allow for the SHAPE array to be any valid kind for
an INTEGER type. */
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index be981b8389a..17fb033c6f9 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -1,3 +1,12 @@
+2009-09-03 Ozkan Sezer <sezeroz@gmail.com>
+
+ PR target/39065
+ * configure.ac: Also check for intptr_t.
+ * config.h.in: Regenerated.
+ * configure: Regenerated.
+ * hashtab.c (hash_pointer): Cast the pointer argument to intptr_t
+ instead of of long.
+
2009-09-02 Tristan Gingold <gingold@adacore.com>
* vmsbuild.com: Removed as unused and superceeded by makefile.vms.
diff --git a/libiberty/config.in b/libiberty/config.in
index 514e73c2732..e962769e6a9 100644
--- a/libiberty/config.in
+++ b/libiberty/config.in
@@ -457,6 +457,9 @@
#undef inline
#endif
+/* Define to `long' if <sys/types.h> does not define. */
+#undef intptr_t
+
/* Define to `int' if <sys/types.h> does not define. */
#undef pid_t
diff --git a/libiberty/configure b/libiberty/configure
index 4a04e1f0794..9463f8f506f 100755
--- a/libiberty/configure
+++ b/libiberty/configure
@@ -5046,6 +5046,17 @@ _ACEOF
+ac_fn_c_check_type "$LINENO" "intptr_t" "ac_cv_type_intptr_t" "$ac_includes_default"
+if test "x$ac_cv_type_intptr_t" = x""yes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define intptr_t long
+_ACEOF
+
+fi
+
ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "$ac_includes_default"
if test "x$ac_cv_type_uintptr_t" = x""yes; then :
diff --git a/libiberty/configure.ac b/libiberty/configure.ac
index f01d518e5e4..c34fc10b81b 100644
--- a/libiberty/configure.ac
+++ b/libiberty/configure.ac
@@ -254,6 +254,7 @@ libiberty_AC_DECLARE_ERRNO
# Determine the size of an int for struct fibnode.
AC_CHECK_SIZEOF([int])
+AC_CHECK_TYPE(intptr_t, long)
AC_CHECK_TYPE(uintptr_t, unsigned long)
# Look for a 64-bit type.
diff --git a/libiberty/hashtab.c b/libiberty/hashtab.c
index 3e649215f42..8c8bd3110ad 100644
--- a/libiberty/hashtab.c
+++ b/libiberty/hashtab.c
@@ -196,7 +196,7 @@ higher_prime_index (unsigned long n)
static hashval_t
hash_pointer (const PTR p)
{
- return (hashval_t) ((long)p >> 3);
+ return (hashval_t) ((intptr_t)p >> 3);
}
/* Returns non-zero if P1 and P2 are equal. */