]>
Commit | Line | Data |
---|---|---|
b34b6497 | 1 | 2005-08-19 Uros Bizjak <uros@kss-loka.si> |
de9651ff | 2 | |
b34b6497 PS |
3 | * mode-switching.c (create_pre_exit): Skip assignments to |
4 | EH_RETURN_STACKADJ_RTX when searching for return_copy insn. | |
5 | Add comment regarding use insn and simplify check for insns, | |
6 | generated by builtin_apply_return. | |
7 | ||
8 | --- gcc/gcc/mode-switching.c 2005-07-05 18:20:07.000000000 +0200 | |
9 | +++ gcc/gcc/mode-switching.c 2005-08-19 10:28:41.000000000 +0200 | |
10 | @@ -250,6 +250,8 @@ create_pre_exit (int n_entities, int *en | |
de9651ff | 11 | |
b34b6497 PS |
12 | if (INSN_P (return_copy)) |
13 | { | |
14 | + /* Skip USE patterns inserted by | |
15 | + builtin_apply_return. */ | |
16 | if (GET_CODE (PATTERN (return_copy)) == USE | |
17 | && GET_CODE (XEXP (PATTERN (return_copy), 0)) == REG | |
18 | && (FUNCTION_VALUE_REGNO_P | |
19 | @@ -270,6 +272,15 @@ create_pre_exit (int n_entities, int *en | |
20 | break; | |
21 | } | |
22 | copy_reg = SET_DEST (return_copy_pat); | |
23 | + | |
24 | +#ifdef EH_RETURN_STACKADJ_RTX | |
25 | + /* Skip assignments to EH_RETURN_STACKADJ_RTX. */ | |
26 | + if (rtx_equal_p (copy_reg, EH_RETURN_STACKADJ_RTX)) | |
27 | + { | |
28 | + last_insn = return_copy; | |
29 | + continue; | |
30 | + } | |
31 | +#endif | |
32 | if (GET_CODE (copy_reg) == REG) | |
33 | copy_start = REGNO (copy_reg); | |
34 | else if (GET_CODE (copy_reg) == SUBREG | |
35 | @@ -311,8 +322,8 @@ create_pre_exit (int n_entities, int *en | |
36 | if (copy_start >= ret_start | |
37 | && copy_start + copy_num <= ret_end) | |
38 | nregs -= copy_num; | |
39 | - else if (!maybe_builtin_apply | |
40 | - || !FUNCTION_VALUE_REGNO_P (copy_start)) | |
41 | + else if (!(maybe_builtin_apply | |
42 | + && FUNCTION_VALUE_REGNO_P (copy_start))) | |
43 | break; | |
44 | last_insn = return_copy; | |
45 | } |