diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.md | 26 | ||||
-rw-r--r-- | gcc/emit-rtl.c | 6 | ||||
-rw-r--r-- | gcc/loop.c | 8 |
4 files changed, 29 insertions, 16 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 808a3af..405ea85 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2003-01-28 Dale Johannesen <dalej@apple.com> + * emit-rtl.c (const_double_htab_hash): Use mode in the hash. + * loop.c (scan_loop): Move movables on -Os rich-register targets. + * config/rs6000/rs6000.md (sibcall*): Use match_operand for LR. + 2003-01-28 Richard Henderson <rth@redhat.com> * target.h (targetm.address_cost): New. diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index e35602b..34415c2 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -11115,7 +11115,7 @@ [(parallel [(call (mem:SI (match_operand 0 "address_operand" "")) (match_operand 1 "" "")) (use (match_operand 2 "" "")) - (use (scratch:SI)) + (use (match_operand 3 "" "")) (return)])] "" " @@ -11129,6 +11129,7 @@ abort (); operands[0] = XEXP (operands[0], 0); + operands[3] = gen_reg_rtx (SImode); }") @@ -11140,7 +11141,7 @@ [(call (mem:SI (match_operand:SI 0 "current_file_function_operand" "s,s")) (match_operand 1 "" "g,g")) (use (match_operand:SI 2 "immediate_operand" "O,n")) - (use (match_scratch:SI 3 "=l,l")) + (use (match_operand:SI 3 "register_operand" "l,l")) (return)] "(INTVAL (operands[2]) & CALL_LONG) == 0" "* @@ -11160,7 +11161,7 @@ [(call (mem:SI (match_operand:DI 0 "current_file_function_operand" "s,s")) (match_operand 1 "" "g,g")) (use (match_operand:SI 2 "immediate_operand" "O,n")) - (use (match_scratch:SI 3 "=l,l")) + (use (match_operand:SI 3 "register_operand" "l,l")) (return)] "TARGET_64BIT && (INTVAL (operands[2]) & CALL_LONG) == 0" "* @@ -11181,7 +11182,7 @@ (call (mem:SI (match_operand:SI 1 "current_file_function_operand" "s,s")) (match_operand 2 "" "g,g"))) (use (match_operand:SI 3 "immediate_operand" "O,n")) - (use (match_scratch:SI 4 "=l,l")) + (use (match_operand:SI 4 "register_operand" "l,l")) (return)] "(INTVAL (operands[3]) & CALL_LONG) == 0" "* @@ -11203,7 +11204,7 @@ (call (mem:SI (match_operand:DI 1 "current_file_function_operand" "s,s")) (match_operand 2 "" "g,g"))) (use (match_operand:SI 3 "immediate_operand" "O,n")) - (use (match_scratch:SI 4 "=l,l")) + (use (match_operand:SI 4 "register_operand" "l,l")) (return)] "TARGET_64BIT && (INTVAL (operands[3]) & CALL_LONG) == 0" "* @@ -11223,7 +11224,7 @@ [(call (mem:SI (match_operand:SI 0 "symbol_ref_operand" "s")) (match_operand 1 "" "g")) (use (match_operand:SI 2 "immediate_operand" "O")) - (use (match_scratch:SI 3 "=l")) + (use (match_operand:SI 3 "register_operand" "l")) (return)] "TARGET_32BIT && DEFAULT_ABI == ABI_AIX @@ -11236,7 +11237,7 @@ [(call (mem:SI (match_operand:DI 0 "symbol_ref_operand" "s")) (match_operand 1 "" "g")) (use (match_operand:SI 2 "immediate_operand" "O")) - (use (match_scratch:SI 3 "=l")) + (use (match_operand:SI 3 "register_operand" "l")) (return)] "TARGET_64BIT && DEFAULT_ABI == ABI_AIX @@ -11250,7 +11251,7 @@ (call (mem:SI (match_operand:SI 1 "symbol_ref_operand" "s")) (match_operand 2 "" "g"))) (use (match_operand:SI 3 "immediate_operand" "O")) - (use (match_scratch:SI 4 "=l")) + (use (match_operand:SI 4 "register_operand" "l")) (return)] "TARGET_32BIT && DEFAULT_ABI == ABI_AIX @@ -11264,7 +11265,7 @@ (call (mem:SI (match_operand:DI 1 "symbol_ref_operand" "s")) (match_operand 2 "" "g"))) (use (match_operand:SI 3 "immediate_operand" "O")) - (use (match_scratch:SI 4 "=l")) + (use (match_operand:SI 4 "register_operand" "l")) (return)] "TARGET_64BIT && DEFAULT_ABI == ABI_AIX @@ -11277,7 +11278,7 @@ [(call (mem:SI (match_operand:SI 0 "symbol_ref_operand" "s,s")) (match_operand 1 "" "")) (use (match_operand 2 "immediate_operand" "O,n")) - (use (match_scratch:SI 3 "=l,l")) + (use (match_operand:SI 3 "register_operand" "l,l")) (return)] "(DEFAULT_ABI == ABI_DARWIN || DEFAULT_ABI == ABI_V4 @@ -11301,7 +11302,7 @@ (call (mem:SI (match_operand 1 "address_operand" "")) (match_operand 2 "" ""))) (use (match_operand 3 "" "")) - (use (scratch:SI)) + (use (match_operand 4 "" "")) (return)])] "" " @@ -11315,6 +11316,7 @@ abort (); operands[1] = XEXP (operands[1], 0); + operands[4] = gen_reg_rtx (SImode); }") @@ -11323,7 +11325,7 @@ (call (mem:SI (match_operand:SI 1 "symbol_ref_operand" "s,s")) (match_operand 2 "" ""))) (use (match_operand:SI 3 "immediate_operand" "O,n")) - (use (match_scratch:SI 4 "=l,l")) + (use (match_operand:SI 4 "register_operand" "l,l")) (return)] "(DEFAULT_ABI == ABI_DARWIN || DEFAULT_ABI == ABI_V4 diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index 5e719ae..ab950fd 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -237,7 +237,11 @@ const_double_htab_hash (x) if (GET_MODE (value) == VOIDmode) h = CONST_DOUBLE_LOW (value) ^ CONST_DOUBLE_HIGH (value); else - h = real_hash (CONST_DOUBLE_REAL_VALUE (value)); + { + h = real_hash (CONST_DOUBLE_REAL_VALUE (value)); + /* MODE is used in the comparison, so it should be in the hash. */ + h ^= GET_MODE (value); + } return h; } @@ -1108,10 +1108,12 @@ scan_loop (loop, flags) /* Now consider each movable insn to decide whether it is worth moving. Store 0 in regs->array[I].set_in_loop for each reg I that is moved. - Generally this increases code size, so do not move moveables when - optimizing for code size. */ + For machines with few registers this increases code size, so do not + move moveables when optimizing for code size on such machines. + (The 18 below is the value for i386.) */ - if (! optimize_size) + if (!optimize_size + || (reg_class_size[GENERAL_REGS] > 18 && !loop_info->has_call)) { move_movables (loop, movables, threshold, insn_count); |