@@ -213,6 +213,11 @@ static bool try_to_kill_store(pseudo_t pseudo, struct instruction *insn,
/* possible partial dominance? */
if (dominance < 0)
return false;
+ if (insn->target == dom->target && insn->bb == dom->bb) {
+ // found a memop which makes the store redundant
+ kill_instruction_force(insn);
+ return false;
+ }
if (dom->opcode == OP_LOAD)
return false;
if (dom->is_volatile)
@@ -7,7 +7,6 @@ void foo(int *ptr)
/*
* check-name: kill-redundant-store0
* check-command: test-linearize -Wno-decl $file
- * check-known-to-fail
*
* check-output-ignore
* check-output-excludes: store
A store is called 'redundant' when the corresponding location already contains the value that will be stored. This patch removes such stores in the case where the memops which make them redundant is in the same basic block. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com> --- memops.c | 5 +++++ validation/memops/kill-redundant-store0.c | 1 - 2 files changed, 5 insertions(+), 1 deletion(-)