re PR tree-optimization/79578 (Unnecessary instructions in generated code)

PR tree-optimization/79578
	* tree-ssa-dse.c (clear_bytes_written_by): Use operand_equal_p
	to compare base operands.

	PR tree-optimization/79578
	* g++.dg/tree-ssa/ssa-dse-3.C: New test.

From-SVN: r245675
This commit is contained in:
Jeff Law 2017-02-22 22:47:43 -07:00 committed by Jeff Law
parent 680ed1065a
commit 18eb304e5f
4 changed files with 40 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2017-02-22 Jeff Law <law@redhat.com>
PR tree-optimization/79578
* tree-ssa-dse.c (clear_bytes_written_by): Use operand_equal_p
to compare base operands.
2017-02-22 Segher Boessenkool <segher@kernel.crashing.org>
PR target/79211

View File

@ -1,3 +1,8 @@
2017-02-22 Jeff Law <law@redhat.com>
PR tree-optimization/79578
* g++.dg/tree-ssa/ssa-dse-3.C: New test.
2017-02-22 Sameera Deshpande <sameera.deshpande@imgtec.com>
* gcc.target/mips/msa-fp-cc.c: New test.

View File

@ -0,0 +1,28 @@
/* { dg-do compile } */
/* { dg-options "-std=c++14 -O3 -fdump-tree-dse1-details" } */
#include <new>
#include <cstdint>
struct A
{
std::uint16_t a, b;
};
A* f(char* b) __attribute__((noinline));
A* f(char* b) {
auto a = new(b) A{};
a->a = 1;
a->b = 2;
return a;
}
int main() {
char b[sizeof(A)] alignas(A);
f(b);
}
/* { dg-final { scan-tree-dump "Deleted dead store: " "dse1" } } */

View File

@ -176,7 +176,7 @@ clear_bytes_written_by (sbitmap live_bytes, gimple *stmt, ao_ref *ref)
/* Verify we have the same base memory address, the write
has a known size and overlaps with REF. */
if (valid_ao_ref_for_dse (&write)
&& write.base == ref->base
&& operand_equal_p (write.base, ref->base, 0)
&& write.size == write.max_size
&& ((write.offset < ref->offset
&& write.offset + write.size > ref->offset)