reload.c (132727) | reload.c (146906) |
---|---|
1/* Search an insn for pseudo regs that must be in hard regs and are not. 2 Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 3 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. 4 5This file is part of GCC. 6 7GCC is free software; you can redistribute it and/or modify it under 8the terms of the GNU General Public License as published by the Free --- 2130 unchanged lines hidden (view full) --- 2139 GET_MODE (SUBREG_REG (y)), 2140 SUBREG_BYTE (y), 2141 GET_MODE (y)); 2142 } 2143 else 2144 j = REGNO (y); 2145 2146 /* On a WORDS_BIG_ENDIAN machine, point to the last register of a | 1/* Search an insn for pseudo regs that must be in hard regs and are not. 2 Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 3 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. 4 5This file is part of GCC. 6 7GCC is free software; you can redistribute it and/or modify it under 8the terms of the GNU General Public License as published by the Free --- 2130 unchanged lines hidden (view full) --- 2139 GET_MODE (SUBREG_REG (y)), 2140 SUBREG_BYTE (y), 2141 GET_MODE (y)); 2142 } 2143 else 2144 j = REGNO (y); 2145 2146 /* On a WORDS_BIG_ENDIAN machine, point to the last register of a |
2147 multiple hard register group, so that for example (reg:DI 0) and 2148 (reg:SI 1) will be considered the same register. */ | 2147 multiple hard register group of scalar integer registers, so that 2148 for example (reg:DI 0) and (reg:SI 1) will be considered the same 2149 register. */ |
2149 if (WORDS_BIG_ENDIAN && GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD | 2150 if (WORDS_BIG_ENDIAN && GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD |
2151 && SCALAR_INT_MODE_P (GET_MODE (x)) |
|
2150 && i < FIRST_PSEUDO_REGISTER) 2151 i += HARD_REGNO_NREGS (i, GET_MODE (x)) - 1; 2152 if (WORDS_BIG_ENDIAN && GET_MODE_SIZE (GET_MODE (y)) > UNITS_PER_WORD | 2152 && i < FIRST_PSEUDO_REGISTER) 2153 i += HARD_REGNO_NREGS (i, GET_MODE (x)) - 1; 2154 if (WORDS_BIG_ENDIAN && GET_MODE_SIZE (GET_MODE (y)) > UNITS_PER_WORD |
2155 && SCALAR_INT_MODE_P (GET_MODE (y)) |
|
2153 && j < FIRST_PSEUDO_REGISTER) 2154 j += HARD_REGNO_NREGS (j, GET_MODE (y)) - 1; 2155 2156 return i == j; 2157 } 2158 /* If two operands must match, because they are really a single 2159 operand of an assembler insn, then two postincrements are invalid 2160 because the assembler insn would increment only once. --- 895 unchanged lines hidden (view full) --- 3056 bad = 1; 3057 3058 did_match = this_alternative_win[m]; 3059 } 3060 else 3061 { 3062 /* Operands don't match. */ 3063 rtx value; | 2156 && j < FIRST_PSEUDO_REGISTER) 2157 j += HARD_REGNO_NREGS (j, GET_MODE (y)) - 1; 2158 2159 return i == j; 2160 } 2161 /* If two operands must match, because they are really a single 2162 operand of an assembler insn, then two postincrements are invalid 2163 because the assembler insn would increment only once. --- 895 unchanged lines hidden (view full) --- 3059 bad = 1; 3060 3061 did_match = this_alternative_win[m]; 3062 } 3063 else 3064 { 3065 /* Operands don't match. */ 3066 rtx value; |
3067 int loc1, loc2; |
|
3064 /* Retroactively mark the operand we had to match 3065 as a loser, if it wasn't already. */ 3066 if (this_alternative_win[m]) 3067 losers++; 3068 this_alternative_win[m] = 0; 3069 if (this_alternative[m] == (int) NO_REGS) 3070 bad = 1; 3071 /* But count the pair only once in the total badness of | 3068 /* Retroactively mark the operand we had to match 3069 as a loser, if it wasn't already. */ 3070 if (this_alternative_win[m]) 3071 losers++; 3072 this_alternative_win[m] = 0; 3073 if (this_alternative[m] == (int) NO_REGS) 3074 bad = 1; 3075 /* But count the pair only once in the total badness of |
3072 this alternative, if the pair can be a dummy reload. */ | 3076 this alternative, if the pair can be a dummy reload. 3077 The pointers in operand_loc are not swapped; swap 3078 them by hand if necessary. */ 3079 if (swapped && i == commutative) 3080 loc1 = commutative + 1; 3081 else if (swapped && i == commutative + 1) 3082 loc1 = commutative; 3083 else 3084 loc1 = i; 3085 if (swapped && m == commutative) 3086 loc2 = commutative + 1; 3087 else if (swapped && m == commutative + 1) 3088 loc2 = commutative; 3089 else 3090 loc2 = m; |
3073 value 3074 = find_dummy_reload (recog_data.operand[i], 3075 recog_data.operand[m], | 3091 value 3092 = find_dummy_reload (recog_data.operand[i], 3093 recog_data.operand[m], |
3076 recog_data.operand_loc[i], 3077 recog_data.operand_loc[m], | 3094 recog_data.operand_loc[loc1], 3095 recog_data.operand_loc[loc2], |
3078 operand_mode[i], operand_mode[m], 3079 this_alternative[m], -1, 3080 this_alternative_earlyclobber[m]); 3081 3082 if (value != 0) 3083 losers--; 3084 } 3085 /* This can be fixed with reloads if the operand --- 3992 unchanged lines hidden --- | 3096 operand_mode[i], operand_mode[m], 3097 this_alternative[m], -1, 3098 this_alternative_earlyclobber[m]); 3099 3100 if (value != 0) 3101 losers--; 3102 } 3103 /* This can be fixed with reloads if the operand --- 3992 unchanged lines hidden --- |