示例#1
0
void UseDefMgr::setMDSSAInfo(IR * ir, MDSSAInfo * mdssainfo)
{
    ASSERT0(ir && mdssainfo);
    if (ir->getAI() == NULL) {
        IR_ai(ir) = m_ru->allocAIContainer();
    }
    IR_ai(ir)->set(mdssainfo);
}
示例#2
0
文件: dbg.cpp 项目: alibaba/xoc
Dbx * get_dbx(IR const* ir)
{
    if (IR_ai(ir) == NULL) {
        return NULL;
    }
    DbxAttachInfo * da = (DbxAttachInfo*)IR_ai(ir)->get(AI_DBX);
    if (da == NULL) {
        return NULL;
    }
    return &da->dbx;
}
示例#3
0
文件: dbg.cpp 项目: alibaba/xoc
//Get line number in source code that corresponding to the IR.
UINT get_lineno(IR const* ir)
{
    if (IR_ai(ir) == NULL || !IR_ai(ir)->is_init()) {
        return 0;
    }
    DbxAttachInfo * da = (DbxAttachInfo*)IR_ai(ir)->get(AI_DBX);
    if (da == NULL) {
        return 0;
    }

    return DBX_lineno(&da->dbx);
}
示例#4
0
文件: dbg.cpp 项目: alibaba/xoc
//Copy dbx from 'src' to 'tgt'.
void copyDbx(IR * tgt, IR const* src, Region * ru)
{
    ASSERT0(ru);
    if (IR_ai(src) == NULL) {
        return;
    }

    DbxAttachInfo * src_da = (DbxAttachInfo*)IR_ai(src)->get(AI_DBX);
    if (IR_ai(tgt) == NULL) {
        if (src_da == NULL) {
            return;
        }
        IR_ai(tgt) = ru->allocAIContainer();
    }
    ASSERT0(IR_ai(tgt));
    if (src_da == NULL) {
        IR_ai(tgt)->clean(AI_DBX);
        return;
    }

    DbxAttachInfo * tgt_da = (DbxAttachInfo*)IR_ai(tgt)->get(AI_DBX);
    if (tgt_da == NULL) {
        tgt_da = (DbxAttachInfo*)smpoolMalloc(
                     sizeof(DbxAttachInfo), ru->get_pool());
        ASSERT0(tgt_da);
        tgt_da->init();
        IR_ai(tgt)->set((BaseAttachInfo*)tgt_da);
    }
    tgt_da->dbx.copy(src_da->dbx);
}
示例#5
0
MDSSAInfo * UseDefMgr::genMDSSAInfo(IR * ir)
{
    ASSERT0(ir);
    if (ir->getAI() == NULL) {
        IR_ai(ir) = m_ru->allocAIContainer();
    }

    MDSSAInfo * mdssainfo = (MDSSAInfo*)ir->getAI()->get(AI_MD_SSA);
    if (mdssainfo == NULL) {
        mdssainfo = allocMDSSAInfo();
        IR_ai(ir)->set(mdssainfo);
    }

    return mdssainfo;
}
示例#6
0
	//Attemp to compute POINT-TO set via the IR type.
	virtual MD * comp_point_to_via_type(IR const* ir)
	{
		IR_AI * ai = IR_ai(ir);
		IS_TRUE0(ir && ai);

		TBAA_AI * ty = (TBAA_AI*)ai->get(IRAI_TBAA);
		if (ty == NULL) { return NULL; }

		MD * md = m_tyid2md.get(ty->tyid);
		if (md != NULL) {
			return md;
		}

		CHAR buf[64];
		sprintf(buf, "dummy%d", ty->tyid);
		VAR * dummy = m_var_mgr->register_var(buf,
											D_MC, D_UNDEF,
											0, 1, 1, VAR_GLOBAL);
		VAR_is_addr_taken(dummy) = true;
		VAR_allocable(dummy) = false;
		m_ru->add_to_var_tab(dummy);

		MD dummy_md;
		MD_base(&dummy_md) = dummy;
		MD_size(&dummy_md) = 0;
		MD_ty(&dummy_md) = MD_UNBOUND;
		MD_is_addr_taken(&dummy_md) = true;
		MD * entry = m_md_sys->register_md(dummy_md);
		m_tyid2md.set(ty->tyid, entry);
		return entry;
	}
示例#7
0
文件: dbg.cpp 项目: alibaba/xoc
void set_lineno(IR * ir, UINT lineno, Region * ru)
{
    DbxAttachInfo * da;
    ASSERT0(ru);
    if (IR_ai(ir) == NULL) {
        IR_ai(ir) = ru->allocAIContainer();
        da = (DbxAttachInfo*)smpoolMalloc(
                 sizeof(DbxAttachInfo), ru->get_pool());
        ASSERT0(da);
        da->init();
        IR_ai(ir)->set((BaseAttachInfo*)da);
    } else {
        IR_ai(ir)->init();
        da = (DbxAttachInfo*)IR_ai(ir)->get(AI_DBX);
        if (da == NULL) {
            da = (DbxAttachInfo*)smpoolMalloc(
                     sizeof(DbxAttachInfo), ru->get_pool());
            ASSERT0(da);
            da->init();
            ASSERT0(da);
            IR_ai(ir)->set((BaseAttachInfo*)da);
        }
    }
    DBX_lineno(&da->dbx) = lineno;
}
示例#8
0
	void handle_ld(IR * ld, MD2MDS * mx)
	{
		IS_TRUE0(IR_type(ld) == IR_LD && mx);
		IR_AI * ai = IR_ai(ld);
		if (ai == NULL) { return; }

		TBAA_AI * ty = (TBAA_AI*)ai->get(IRAI_TBAA);
		if (ty == NULL) { return; }

		MD * md = m_tyid2md.get(ty->tyid);
		if (md != NULL) {
			MD const* t = alloc_ld_md(ld);
			set_point_to_set_add_md(t, *mx, md);
			return;
		}

		CHAR buf[64];
		sprintf(buf, "dummy%d", ty->tyid);
		VAR * dummy = m_var_mgr->register_var(buf,
											D_MC, D_UNDEF,
											0, 1, 1, VAR_GLOBAL);
		VAR_is_addr_taken(dummy) = true;
		VAR_allocable(dummy) = false;
		m_ru->add_to_var_tab(dummy);

		MD dummy_md;
		MD_base(&dummy_md) = dummy;
		MD_size(&dummy_md) = 0;
		MD_ty(&dummy_md) = MD_UNBOUND;
		MD_is_addr_taken(&dummy_md) = true;
		MD * entry = m_md_sys->register_md(dummy_md);
		m_tyid2md.set(ty->tyid, entry);

		MD const* t = alloc_ld_md(ld);
		set_point_to_set_add_md(t, *mx, entry);
	}