Skip to content

Commit

Permalink
issue #126: trim dmr_C by removing the simplification passes
Browse files Browse the repository at this point in the history
  • Loading branch information
dibyendumajumdar committed Jul 7, 2018
1 parent be20b2e commit 37a98cd
Show file tree
Hide file tree
Showing 7 changed files with 307 additions and 260 deletions.
10 changes: 5 additions & 5 deletions CMakeLists.txt
Expand Up @@ -255,26 +255,26 @@ set(DMR_C_SRCS
dmr_c/src/allocate.c
dmr_c/src/builtin.c
dmr_c/src/char.c
dmr_c/src/cse.c
# dmr_c/src/cse.c
dmr_c/src/expression.c
dmr_c/src/evaluate.c
dmr_c/src/expand.c
dmr_c/src/flow.c
# dmr_c/src/flow.c
dmr_c/src/inline.c
dmr_c/src/lib.c
dmr_c/src/linearize.c
dmr_c/src/liveness.c
dmr_c/src/memops.c
# dmr_c/src/memops.c
dmr_c/src/parse.c
dmr_c/src/target.c
dmr_c/src/tokenize.c
dmr_c/src/pre-process.c
dmr_c/src/ptrlist.c
dmr_c/src/scope.c
dmr_c/src/show-parse.c
dmr_c/src/simplify.c
# dmr_c/src/simplify.c
dmr_c/src/symbol.c
dmr_c/src/unssa.c
# dmr_c/src/unssa.c
dmr_c/src/walksymbol.c
src/ravi_dmrc_parsesymbols.c
)
Expand Down
91 changes: 0 additions & 91 deletions dmr_c/src/flow.c
Expand Up @@ -265,31 +265,6 @@ int dmrC_simplify_flow(struct dmr_C *C, struct entrypoint *ep)
return simplify_branch_nodes(C, ep);
}

static inline void concat_user_list(struct pseudo_user_list *src, struct pseudo_user_list **dst)
{
ptrlist_concat((struct ptr_list *)src, (struct ptr_list **)dst);
}

void dmrC_convert_instruction_target(struct dmr_C *C, struct instruction *insn, pseudo_t src)
{
pseudo_t target;
struct pseudo_user *pu;
/*
* Go through the "insn->users" list and replace them all..
*/
target = insn->target;
if (target == src)
return;
FOR_EACH_PTR(target->users, pu) {
if (*pu->userp != VOID_PSEUDO(C)) {
assert(*pu->userp == target);
*pu->userp = src;
}
} END_FOR_EACH_PTR(pu);
if (dmrC_has_use_list(src))
concat_user_list(target->users, &src->users);
target->users = NULL;
}

void dmrC_convert_load_instruction(struct dmr_C *C, struct instruction *insn, pseudo_t src)
{
Expand Down Expand Up @@ -808,72 +783,6 @@ void dmrC_simplify_symbol_usage(struct dmr_C *C, struct entrypoint *ep)
} END_FOR_EACH_PTR(pseudo);
}

static void mark_bb_reachable(struct basic_block *bb, unsigned long generation)
{
struct basic_block *child;

if (bb->generation == generation)
return;
bb->generation = generation;
FOR_EACH_PTR(bb->children, child) {
mark_bb_reachable(child, generation);
} END_FOR_EACH_PTR(child);
}

static void kill_defs(struct dmr_C *C, struct instruction *insn)
{
pseudo_t target = insn->target;

if (!dmrC_has_use_list(target))
return;
if (target->def != insn)
return;

dmrC_convert_instruction_target(C, insn, VOID_PSEUDO(C));
}

void dmrC_kill_bb(struct dmr_C *C, struct basic_block *bb)
{
struct instruction *insn;
struct basic_block *child, *parent;

FOR_EACH_PTR(bb->insns, insn) {
dmrC_kill_instruction_force(C, insn);
kill_defs(C, insn);
/*
* We kill unreachable instructions even if they
* otherwise aren't "killable" (e.g. volatile loads)
*/
} END_FOR_EACH_PTR(insn);
bb->insns = NULL;

FOR_EACH_PTR(bb->children, child) {
dmrC_remove_bb_from_list(&child->parents, bb, 0);
} END_FOR_EACH_PTR(child);
bb->children = NULL;

FOR_EACH_PTR(bb->parents, parent) {
dmrC_remove_bb_from_list(&parent->children, bb, 0);
} END_FOR_EACH_PTR(parent);
bb->parents = NULL;
}

void dmrC_kill_unreachable_bbs(struct dmr_C *C, struct entrypoint *ep)
{
struct basic_block *bb;
unsigned long generation = ++C->L->bb_generation;

mark_bb_reachable(ep->entry->bb, generation);
FOR_EACH_PTR(ep->bbs, bb) {
if (bb->generation == generation)
continue;
/* Mark it as being dead */
dmrC_kill_bb(C, bb);
bb->ep = NULL;
DELETE_CURRENT_PTR(bb);
} END_FOR_EACH_PTR(bb);
ptrlist_pack((struct ptr_list **) &ep->bbs);
}

static int rewrite_parent_branch(struct dmr_C *C, struct basic_block *bb, struct basic_block *old, struct basic_block *new)
{
Expand Down
21 changes: 0 additions & 21 deletions dmr_c/src/flow.h
Expand Up @@ -15,10 +15,6 @@ extern "C" {
#endif


#define REPEAT_CSE 1
#define REPEAT_SYMBOL_CLEANUP 2
#define REPEAT_CFG_CLEANUP 3

struct entrypoint;
struct instruction;

Expand All @@ -28,34 +24,17 @@ extern void dmrC_simplify_symbol_usage(struct dmr_C *C, struct entrypoint *ep);
extern void dmrC_simplify_memops(struct dmr_C *C, struct entrypoint *ep);
extern void dmrC_pack_basic_blocks(struct dmr_C *C, struct entrypoint *ep);

extern void dmrC_convert_instruction_target(struct dmr_C *C, struct instruction *insn, pseudo_t src);
extern void dmrC_cleanup_and_cse(struct dmr_C *C, struct entrypoint *ep);
extern int dmrC_simplify_instruction(struct dmr_C *C, struct instruction *);

extern void dmrC_kill_bb(struct dmr_C *C, struct basic_block *);
extern void dmrC_kill_use(struct dmr_C *C, pseudo_t *usep);
extern void dmrC_remove_use(struct dmr_C *C, pseudo_t *);
extern void dmrC_kill_insn(struct dmr_C *C, struct instruction *, int force);
static inline void dmrC_kill_instruction(struct dmr_C *C, struct instruction *insn)
{
dmrC_kill_insn(C, insn, 0);
}
static inline void dmrC_kill_instruction_force(struct dmr_C *C, struct instruction *insn)
{
dmrC_kill_insn(C, insn, 1);
}
extern void dmrC_kill_unreachable_bbs(struct dmr_C *C, struct entrypoint *ep);

void dmrC_check_access(struct dmr_C *C, struct instruction *insn);
void dmrC_convert_load_instruction(struct dmr_C *C, struct instruction *, pseudo_t);
void dmrC_rewrite_load_instruction(struct dmr_C *C, struct instruction *, struct pseudo_list *);
int dmrC_dominates(struct dmr_C *C, pseudo_t pseudo, struct instruction *insn, struct instruction *dom, int local);

extern void dmrC_clear_liveness(struct entrypoint *ep);
extern void dmrC_track_pseudo_liveness(struct dmr_C *C, struct entrypoint *ep);
extern void dmrC_track_pseudo_death(struct dmr_C *C, struct entrypoint *ep);
extern void dmrC_track_phi_uses(struct dmr_C *C, struct instruction *insn);

extern void dmrC_vrfy_flow(struct entrypoint *ep);
extern int dmrC_pseudo_in_list(struct pseudo_list *list, pseudo_t pseudo);

Expand Down

0 comments on commit 37a98cd

Please sign in to comment.