58 #define DF_LAST_PROBLEM_PLUS1 (DF_MD + 1)
383 unsigned int ref_order;
391 struct df_base_ref base;
401 struct df_base_ref base;
412 struct df_base_ref base;
486 unsigned int refs_size;
494 unsigned int table_size;
495 unsigned int total_size;
528 struct dataflow *problems_in_order[DF_LAST_PROBLEM_PLUS1];
529 struct dataflow *problems_by_index[DF_LAST_PROBLEM_PLUS1];
535 bitmap blocks_to_analyze;
548 unsigned int regs_size;
549 unsigned int regs_inited;
553 unsigned int insns_size;
555 int num_problems_defined;
565 bitmap entry_block_defs;
566 bitmap exit_block_uses;
575 int *postorder_inverted;
578 int n_blocks_inverted;
591 unsigned int *hard_regs_live_count;
595 unsigned int ref_order;
599 int changeable_flags : 8;
607 bool redo_entry_and_exit;
610 #define DF_SCAN_BB_INFO(BB) (df_scan_get_bb_info ((BB)->index))
611 #define DF_RD_BB_INFO(BB) (df_rd_get_bb_info ((BB)->index))
612 #define DF_LR_BB_INFO(BB) (df_lr_get_bb_info ((BB)->index))
613 #define DF_LIVE_BB_INFO(BB) (df_live_get_bb_info ((BB)->index))
614 #define DF_WORD_LR_BB_INFO(BB) (df_word_lr_get_bb_info ((BB)->index))
615 #define DF_MD_BB_INFO(BB) (df_md_get_bb_info ((BB)->index))
619 #define DF_LIVE_IN(BB) (&DF_LIVE_BB_INFO (BB)->in)
620 #define DF_LIVE_OUT(BB) (&DF_LIVE_BB_INFO (BB)->out)
625 #define DF_LR_IN(BB) (&DF_LR_BB_INFO (BB)->in)
626 #define DF_LR_OUT(BB) (&DF_LR_BB_INFO (BB)->out)
631 #define DF_WORD_LR_IN(BB) (&DF_WORD_LR_BB_INFO (BB)->in)
632 #define DF_WORD_LR_OUT(BB) (&DF_WORD_LR_BB_INFO (BB)->out)
637 #define DF_REF_REAL_REG(REF) (GET_CODE ((REF)->base.reg) == SUBREG \
638 ? SUBREG_REG ((REF)->base.reg) : ((REF)->base.reg))
639 #define DF_REF_REGNO(REF) ((REF)->base.regno)
640 #define DF_REF_REAL_LOC(REF) (GET_CODE (*((REF)->regular_ref.loc)) == SUBREG \
641 ? &SUBREG_REG (*((REF)->regular_ref.loc)) : ((REF)->regular_ref.loc))
642 #define DF_REF_REG(REF) ((REF)->base.reg)
643 #define DF_REF_LOC(REF) (DF_REF_CLASS (REF) == DF_REF_REGULAR ? \
644 (REF)->regular_ref.loc : NULL)
645 #define DF_REF_BB(REF) (DF_REF_IS_ARTIFICIAL (REF) \
646 ? (REF)->artificial_ref.bb \
647 : BLOCK_FOR_INSN (DF_REF_INSN (REF)))
648 #define DF_REF_BBNO(REF) (DF_REF_BB (REF)->index)
649 #define DF_REF_INSN_INFO(REF) ((REF)->base.insn_info)
650 #define DF_REF_INSN(REF) ((REF)->base.insn_info->insn)
651 #define DF_REF_INSN_UID(REF) (INSN_UID (DF_REF_INSN(REF)))
652 #define DF_REF_CLASS(REF) ((REF)->base.cl)
653 #define DF_REF_TYPE(REF) ((REF)->base.type)
654 #define DF_REF_CHAIN(REF) ((REF)->base.chain)
655 #define DF_REF_ID(REF) ((REF)->base.id)
656 #define DF_REF_FLAGS(REF) ((REF)->base.flags)
657 #define DF_REF_FLAGS_IS_SET(REF, v) ((DF_REF_FLAGS (REF) & (v)) != 0)
658 #define DF_REF_FLAGS_SET(REF, v) (DF_REF_FLAGS (REF) |= (v))
659 #define DF_REF_FLAGS_CLEAR(REF, v) (DF_REF_FLAGS (REF) &= ~(v))
660 #define DF_REF_ORDER(REF) ((REF)->base.ref_order)
664 #define DF_REF_IS_ARTIFICIAL(REF) (DF_REF_CLASS (REF) == DF_REF_ARTIFICIAL)
665 #define DF_REF_REG_MARK(REF) (DF_REF_FLAGS_SET ((REF),DF_REF_REG_MARKER))
666 #define DF_REF_REG_UNMARK(REF) (DF_REF_FLAGS_CLEAR ((REF),DF_REF_REG_MARKER))
667 #define DF_REF_IS_REG_MARKED(REF) (DF_REF_FLAGS_IS_SET ((REF),DF_REF_REG_MARKER))
668 #define DF_REF_NEXT_REG(REF) ((REF)->base.next_reg)
669 #define DF_REF_PREV_REG(REF) ((REF)->base.prev_reg)
672 #define DF_REF_EXTRACT_WIDTH(REF) ((REF)->extract_ref.width)
673 #define DF_REF_EXTRACT_OFFSET(REF) ((REF)->extract_ref.offset)
674 #define DF_REF_EXTRACT_MODE(REF) ((REF)->extract_ref.mode)
677 #define DF_REF_REG_DEF_P(REF) (DF_REF_TYPE (REF) == DF_REF_REG_DEF)
678 #define DF_REF_REG_USE_P(REF) ((REF) && !DF_REF_REG_DEF_P (REF))
679 #define DF_REF_REG_MEM_STORE_P(REF) (DF_REF_TYPE (REF) == DF_REF_REG_MEM_STORE)
680 #define DF_REF_REG_MEM_LOAD_P(REF) (DF_REF_TYPE (REF) == DF_REF_REG_MEM_LOAD)
681 #define DF_REF_REG_MEM_P(REF) (DF_REF_REG_MEM_STORE_P (REF) \
682 || DF_REF_REG_MEM_LOAD_P (REF))
684 #define DF_MWS_REG_DEF_P(MREF) (DF_MWS_TYPE (MREF) == DF_REF_REG_DEF)
685 #define DF_MWS_REG_USE_P(MREF) ((MREF) && !DF_MWS_REG_DEF_P (MREF))
686 #define DF_MWS_TYPE(MREF) ((MREF)->type)
699 #define DF_DEFS_TABLE_SIZE() (df->def_info.table_size)
700 #define DF_DEFS_GET(ID) (df->def_info.refs[(ID)])
701 #define DF_DEFS_SET(ID,VAL) (df->def_info.refs[(ID)]=(VAL))
702 #define DF_DEFS_COUNT(ID) (df->def_info.count[(ID)])
703 #define DF_DEFS_BEGIN(ID) (df->def_info.begin[(ID)])
704 #define DF_USES_TABLE_SIZE() (df->use_info.table_size)
705 #define DF_USES_GET(ID) (df->use_info.refs[(ID)])
706 #define DF_USES_SET(ID,VAL) (df->use_info.refs[(ID)]=(VAL))
707 #define DF_USES_COUNT(ID) (df->use_info.count[(ID)])
708 #define DF_USES_BEGIN(ID) (df->use_info.begin[(ID)])
712 #define DF_REG_SIZE(DF) (df->regs_inited)
713 #define DF_REG_DEF_GET(REG) (df->def_regs[(REG)])
714 #define DF_REG_DEF_CHAIN(REG) (df->def_regs[(REG)]->reg_chain)
715 #define DF_REG_DEF_COUNT(REG) (df->def_regs[(REG)]->n_refs)
716 #define DF_REG_USE_GET(REG) (df->use_regs[(REG)])
717 #define DF_REG_USE_CHAIN(REG) (df->use_regs[(REG)]->reg_chain)
718 #define DF_REG_USE_COUNT(REG) (df->use_regs[(REG)]->n_refs)
719 #define DF_REG_EQ_USE_GET(REG) (df->eq_use_regs[(REG)])
720 #define DF_REG_EQ_USE_CHAIN(REG) (df->eq_use_regs[(REG)]->reg_chain)
721 #define DF_REG_EQ_USE_COUNT(REG) (df->eq_use_regs[(REG)]->n_refs)
725 #define DF_REGNO_FIRST_DEF(REGNUM) \
726 (DF_REG_DEF_GET(REGNUM) ? DF_REG_DEF_GET (REGNUM) : 0)
727 #define DF_REGNO_LAST_USE(REGNUM) \
728 (DF_REG_USE_GET(REGNUM) ? DF_REG_USE_GET (REGNUM) : 0)
732 #define DF_INSN_SIZE() ((df)->insns_size)
733 #define DF_INSN_INFO_GET(INSN) (df->insns[(INSN_UID (INSN))])
734 #define DF_INSN_INFO_SET(INSN,VAL) (df->insns[(INSN_UID (INSN))]=(VAL))
735 #define DF_INSN_INFO_LUID(II) ((II)->luid)
736 #define DF_INSN_INFO_DEFS(II) ((II)->defs)
737 #define DF_INSN_INFO_USES(II) ((II)->uses)
738 #define DF_INSN_INFO_EQ_USES(II) ((II)->eq_uses)
740 #define DF_INSN_LUID(INSN) (DF_INSN_INFO_LUID (DF_INSN_INFO_GET (INSN)))
741 #define DF_INSN_DEFS(INSN) (DF_INSN_INFO_DEFS (DF_INSN_INFO_GET (INSN)))
742 #define DF_INSN_USES(INSN) (DF_INSN_INFO_USES (DF_INSN_INFO_GET (INSN)))
743 #define DF_INSN_EQ_USES(INSN) (DF_INSN_INFO_EQ_USES (DF_INSN_INFO_GET (INSN)))
745 #define DF_INSN_UID_GET(UID) (df->insns[(UID)])
746 #define DF_INSN_UID_SET(UID,VAL) (df->insns[(UID)]=(VAL))
747 #define DF_INSN_UID_SAFE_GET(UID) (((unsigned)(UID) < DF_INSN_SIZE ()) \
748 ? DF_INSN_UID_GET (UID) \
750 #define DF_INSN_UID_LUID(INSN) (DF_INSN_UID_GET (INSN)->luid)
751 #define DF_INSN_UID_DEFS(INSN) (DF_INSN_UID_GET (INSN)->defs)
752 #define DF_INSN_UID_USES(INSN) (DF_INSN_UID_GET (INSN)->uses)
753 #define DF_INSN_UID_EQ_USES(INSN) (DF_INSN_UID_GET (INSN)->eq_uses)
754 #define DF_INSN_UID_MWS(INSN) (DF_INSN_UID_GET (INSN)->mw_hardregs)
775 df_ref *artificial_defs;
781 df_ref *artificial_uses;
873 #define df_scan (df->problems_by_index[DF_SCAN])
874 #define df_rd (df->problems_by_index[DF_RD])
875 #define df_lr (df->problems_by_index[DF_LR])
876 #define df_live (df->problems_by_index[DF_LIVE])
877 #define df_chain (df->problems_by_index[DF_CHAIN])
878 #define df_word_lr (df->problems_by_index[DF_WORD_LR])
879 #define df_note (df->problems_by_index[DF_NOTE])
880 #define df_md (df->problems_by_index[DF_MD])
1032 if (index < df_scan->block_info_size)
1041 if (index < df_rd->block_info_size)
1042 return &((
struct df_rd_bb_info *) df_rd->block_info)[index];
1050 if (index < df_lr->block_info_size)
1051 return &((
struct df_lr_bb_info *) df_lr->block_info)[index];
1059 if (index < df_md->block_info_size)
1060 return &((
struct df_md_bb_info *) df_md->block_info)[index];
1068 if (index < df_live->block_info_size)
1077 if (index < df_word_lr->block_info_size)
1088 static inline bitmap
1091 gcc_checking_assert (df_lr);
1094 return DF_LIVE_OUT (bb);
1096 return DF_LR_OUT (bb);
1104 static inline bitmap
1107 gcc_checking_assert (df_lr);
1110 return DF_LIVE_IN (bb);
1112 return DF_LR_IN (bb);
1118 static inline df_ref *
1127 static inline df_ref *