+
+struct df_regular_ref
+{
+ struct df_base_ref base;
+ /* The loc is the address in the insn of the reg. This is not
+ defined for special registers, such as clobbers and stack
+ pointers that are also associated with call insns and so those
+ just use the base. */
+ rtx *loc;
+};
+
+
+/* A df_ref_extract is just a df_ref with a width and offset field at
+ the end of it. It is used to hold this information if the ref was
+ wrapped by a SIGN_EXTRACT or a ZERO_EXTRACT and to pass this info
+ to passes that wish to process partial regs precisely. */
+struct df_extract_ref
+{
+ struct df_regular_ref base;
+ int width;
+ int offset;
+ enum machine_mode mode;
+};
+
+/* Union of the different kinds of defs/uses placeholders. */
+union df_ref_d
+{
+ struct df_base_ref base;
+ struct df_regular_ref regular_ref;
+ struct df_artificial_ref artificial_ref;
+ struct df_extract_ref extract_ref;
+};
+typedef union df_ref_d *df_ref;
+
+
+/* One of these structures is allocated for every insn. */
+struct df_insn_info
+{
+ rtx insn; /* The insn this info comes from. */
+ df_ref *defs; /* Head of insn-def chain. */
+ df_ref *uses; /* Head of insn-use chain. */
+ /* Head of insn-use chain for uses in REG_EQUAL/EQUIV notes. */
+ df_ref *eq_uses;
+ struct df_mw_hardreg **mw_hardregs;
+ /* The logical uid of the insn in the basic block. This is valid
+ after any call to df_analyze but may rot after insns are added,
+ deleted or moved. */
+ int luid;
+};
+
+/* These links are used for ref-ref chains. Currently only DEF-USE and
+ USE-DEF chains can be built by DF. */