diff options
| -rw-r--r-- | simplify.c | 10 | ||||
| -rw-r--r-- | validation/reassoc/bug-zephyr-63417.c | 13 |
2 files changed, 19 insertions, 4 deletions
@@ -1818,10 +1818,12 @@ static int simplify_associative_binop(struct instruction *insn) insn->src2 = eval_op(insn->opcode, insn->size, insn->src2, def->src2); return replace_pseudo(insn, &insn->src1, def->src1); } - if (!one_use(def->target)) - return 0; - switch_pseudo(def, &def->src1, insn, &insn->src2); - return REPEAT_CSE; + + if (!canonical_order(def->src1, insn->src2) && can_move_to(insn->src2, def)) { + // (x # y) # z -> (z # y) # x when x ≻ z + return switch_pseudo(def, &def->src1, insn, &insn->src2); + } + return 0; } static int simplify_add_one_side(struct instruction *insn, pseudo_t *p1, pseudo_t *p2) diff --git a/validation/reassoc/bug-zephyr-63417.c b/validation/reassoc/bug-zephyr-63417.c new file mode 100644 index 00000000..5db821d3 --- /dev/null +++ b/validation/reassoc/bug-zephyr-63417.c @@ -0,0 +1,13 @@ +extern char __tdata_size[]; +extern char __tdata_align[]; + +unsigned long z_tls_data_size(void); +unsigned long z_tls_data_size(void) +{ + return ((unsigned long)__tdata_size) + ((unsigned long)__tdata_align - 1); +} + +/* + * check-name: bug-zephyr-63417 + * check-timeout: + */ |
