* rtl.h (enum reg_note): Add REG_FRAME_RELATED_EXPR.
* rtl.c (reg_note_name): Likewise.
* rtl.texi (REG_NOTES): Likewise.
* dwarf2out.c (dwarf2out_frame_debug): Use it. Recognize a store
without an offset.
From-SVN: r22273
+Sat Sep 5 22:05:25 1998 Richard Henderson <rth@cygnus.com>
+
+ * rtl.h (enum reg_note): Add REG_FRAME_RELATED_EXPR.
+ * rtl.c (reg_note_name): Likewise.
+ * rtl.texi (REG_NOTES): Likewise.
+ * dwarf2out.c (dwarf2out_frame_debug): Use it. Recognize a store
+ without an offset.
+
Sat Sep 5 14:47:17 1998 Richard Henderson <rth@cygnus.com>
* i386.h (PREFERRED_RELOAD_CLASS): Standard fp constants load to TOS.
label = dwarf2out_cfi_label ();
- insn = PATTERN (insn);
+ src = find_reg_note (insn, REG_FRAME_RELATED_EXPR, NULL_RTX);
+ if (src)
+ insn = XEXP (src, 0);
+ else
+ insn = PATTERN (insn);
+
/* Assume that in a PARALLEL prologue insn, only the first elt is
significant. Currently this is true. */
if (GET_CODE (insn) == PARALLEL)
offset -= cfa_store_offset;
break;
+ /* Without an offset. */
+ case REG:
+ if (cfa_store_reg != REGNO (XEXP (dest, 0)))
+ abort();
+ offset = -cfa_store_offset;
+ break;
+
default:
abort ();
}
"REG_CC_SETTER", "REG_CC_USER", "REG_LABEL",
"REG_DEP_ANTI", "REG_DEP_OUTPUT", "REG_BR_PROB",
"REG_EXEC_COUNT", "REG_NOALIAS", "REG_SAVE_AREA",
- "REG_BR_PRED", "REG_EH_CONTEXT" };
+ "REG_BR_PRED", "REG_EH_CONTEXT",
+ "REG_FRAME_RELATED_EXPR" };
static void dump_and_abort PROTO((int, int, FILE *));
static void read_name PROTO((char *, FILE *));
REG_SAVE_AREA is used to optimize rtl generated by dynamic stack
allocations for targets where SETJMP_VIA_SAVE_AREA is true.
REG_BR_PRED is attached to JUMP_INSNs only, it holds the branch prediction
- flags computed by get_jump_flags() after dbr scheduling is complete. */
-
+ flags computed by get_jump_flags() after dbr scheduling is complete.
+ REG_FRAME_RELATED_EXPR is attached to insns that are RTX_FRAME_RELATED_P,
+ but are too complex for DWARF to interpret what they imply. The attached
+ rtx is used instead of intuition. */
#define REG_NOTES(INSN) ((INSN)->fld[6].rtx)
REG_CC_SETTER = 11, REG_CC_USER = 12, REG_LABEL = 13,
REG_DEP_ANTI = 14, REG_DEP_OUTPUT = 15, REG_BR_PROB = 16,
REG_EXEC_COUNT = 17, REG_NOALIAS = 18, REG_SAVE_AREA = 19,
- REG_BR_PRED = 20, REG_EH_CONTEXT = 21 };
+ REG_BR_PRED = 20, REG_EH_CONTEXT = 21,
+ REG_FRAME_RELATED_EXPR = 22 };
/* The base value for branch probability notes. */
#define REG_BR_PROB_BASE 10000
extern HOST_WIDE_INT get_integer_term PROTO((rtx));
extern rtx get_related_value PROTO((rtx));
extern int reg_mentioned_p PROTO((rtx, rtx));
+extern int reg_mentioned_between_p PROTO((rtx, rtx, rtx));
extern int reg_referenced_p PROTO((rtx, rtx));
extern int reg_used_between_p PROTO((rtx, rtx, rtx));
extern int reg_referenced_between_p PROTO((rtx, rtx, rtx));
extern rtx struct_value_incoming_rtx;
extern rtx static_chain_rtx;
extern rtx static_chain_incoming_rtx;
-
+extern rtx return_address_pointer_rtx;
/* Include the RTL generation functions. */
These notes are found in JUMP insns after delayed branch scheduling
has taken place. They indicate both the direction and the likelyhood
of the JUMP. The format is a bitmask of ATTR_FLAG_* values.
+
+@findex REG_FRAME_RELATED_EXPR
+@item REG_FRAME_RELATED_EXPR
+This is used on an RTX_FRAME_RELATED_P insn wherein the attached expression
+is used in place of the actual insn pattern. This is done in cases where
+the pattern is either complex or misleading.
@end table
For convenience, the machine mode in an @code{insn_list} or