Lines Matching refs:insn
33 struct instruction *insn;
36 FOR_EACH_PTR(old->insns, insn) {
39 if (!insn->bb)
41 if (insn->opcode != OP_PHI)
46 FOR_EACH_PTR(insn->phi_list, phi) {
51 assert(phisrc->phi_node == insn);
64 } END_FOR_EACH_PTR(insn);
119 struct instruction *insn = pseudo->def;
122 if (insn->opcode == OP_SYMADDR && insn->target == pseudo)
155 struct instruction *insn;
156 FOR_EACH_PTR(src->insns, insn) {
157 if (!insn->bb)
159 if (insn->opcode != OP_PHI)
161 if (pseudo_in_list(target->needs, insn->target))
163 } END_FOR_EACH_PTR(insn);
172 struct instruction *insn;
174 FOR_EACH_PTR(bb->insns, insn) {
175 if (!insn->bb)
177 switch (insn->opcode) {
187 } END_FOR_EACH_PTR(insn);
273 struct instruction *insn;
274 FOR_EACH_PTR(bb->insns, insn) {
275 if (!insn->bb)
277 switch (insn->opcode) {
283 if (!insn->type)
285 if (insn->is_volatile)
300 } END_FOR_EACH_PTR(insn);
323 struct instruction *insn;
328 insn = last_instruction(target->insns);
329 if (!insn || insn->opcode != OP_CBR || insn->cond != br->cond)
336 final = bb_true ? insn->bb_true : insn->bb_false;
352 convert_to_jump(insn, final);
392 void convert_instruction_target(struct instruction *insn, pseudo_t src)
397 * Go through the "insn->users" list and replace them all..
399 target = insn->target;
443 * in "insn".
447 int dominates(struct instruction *insn, struct instruction *dom, int local)
464 if (dom->src != insn->src) {
468 if (distinct_symbols(insn->src, dom->src))
473 if (!same_memop(insn, dom)) {
474 if (!overlapping_memop(insn, dom))
498 struct instruction *insn;
504 FOR_EACH_PTR_REVERSE(bb->insns, insn) {
505 if (!insn->bb)
507 switch (insn->opcode) {
509 if (insn->src == pseudo)
513 if (insn->src == pseudo) {
514 kill_instruction_force(insn);
524 if (!local && insn->src->type != PSEUDO_SYM)
526 } END_FOR_EACH_PTR_REVERSE(insn);
535 void check_access(struct instruction *insn)
537 pseudo_t pseudo = insn->src;
539 if (insn->bb && pseudo->type == PSEUDO_SYM) {
540 int offset = insn->offset, bit = bytes_to_bits(offset) + insn->size;
544 if (insn->tainted)
546 warning(insn->pos, "invalid access %s '%s' (%d %d)",
550 insn->tainted = 1;
577 struct instruction *insn = pu->insn;
578 if (insn->opcode == OP_STORE) {
579 kill_instruction_force(insn);
607 static void kill_defs(struct instruction *insn)
609 pseudo_t target = insn->target;
613 if (target->def != insn)
616 convert_instruction_target(insn, VOID);
621 struct instruction *insn;
624 FOR_EACH_PTR(bb->insns, insn) {
625 if (!insn->bb)
627 kill_instruction_force(insn);
628 kill_defs(insn);
633 } END_FOR_EACH_PTR(insn);
667 struct instruction *insn = last_instruction(bb->insns);
669 if (!insn)
676 switch (insn->opcode) {
678 changed |= rewrite_branch(bb, &insn->bb_false, old, new);
681 changed |= rewrite_branch(bb, &insn->bb_true, old, new);
686 FOR_EACH_PTR(insn->multijmp_list, jmp) {
795 int convert_to_jump(struct instruction *insn, struct basic_block *target)
797 struct basic_block *bb = insn->bb;
801 switch (insn->opcode) {
803 changed |= remove_phisources(insn->bb, insn->bb_true == target ? insn->bb_false : insn->bb_true);
806 changed |= remove_other_phisources(insn->bb, insn->multijmp_list, target);
809 kill_use(&insn->cond);
810 insn->bb_true = target;
811 insn->bb_false = NULL;
812 insn->cond = NULL;
813 insn->size = 0;
814 insn->opcode = OP_BR;
846 static void remove_merging_phisrc(struct instruction *insn, struct basic_block *bot)
848 struct instruction *node = insn->phi_node;
852 kill_instruction(insn);
863 kill_instruction(insn);
869 static void remove_merging_phi(struct basic_block *top, struct instruction *insn)
873 FOR_EACH_PTR(insn->phi_list, phi) {
883 convert_instruction_target(insn, def->src);
885 kill_instruction(insn);
895 struct instruction *insn;
909 FOR_EACH_PTR(top->insns, insn) {
910 if (!insn->bb)
912 if (insn->opcode != OP_PHISOURCE)
914 remove_merging_phisrc(insn, bot);
915 } END_FOR_EACH_PTR(insn);
918 FOR_EACH_PTR(bot->insns, insn) {
919 if (!insn->bb)
921 assert(insn->bb == bot);
922 switch (insn->opcode) {
924 remove_merging_phi(top, insn);
927 insn->bb = top;
928 add_instruction(&top->insns, insn);
929 } END_FOR_EACH_PTR(insn);
947 struct instruction *insn;
956 insn = last_instruction(bb->insns);
957 if (!insn)
959 switch (insn->opcode) {
961 tgt = insn->bb_true;