Commit 2aa8aa18 by Richard Biener Committed by Richard Biener

re PR tree-optimization/81977 (Issue with inline memcpy with optimizations enabled)

2017-08-28  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/81977
	* tree-ssa-sccvn.c (vn_reference_lookup_3): Fix look through
	memcpy.

	* g++.dg/torture/pr81977.C: New testcase.

From-SVN: r251378
parent 5e5ccf0d
2017-08-28 Richard Biener <rguenther@suse.de>
PR tree-optimization/81977
* tree-ssa-sccvn.c (vn_reference_lookup_3): Fix look through
memcpy.
2017-08-28 Alexander Monakov <amonakov@ispras.ru>
PR target/80640
......
2017-08-28 Richard Biener <rguenther@suse.de>
PR tree-optimization/81977
* g++.dg/torture/pr81977.C: New testcase.
2017-08-28 Alexander Monakov <amonakov@ispras.ru>
PR target/80640
......
/* { dg-do run } */
/* { dg-require-effective-target int32plus } */
#include <cstdint>
typedef struct
{
uint16_t x ;
uint16_t y ;
uint64_t z ;
} __attribute__((packed, aligned(1))) TestMsgType;
struct Payload
{
uint16_t header_info[2];
TestMsgType _pref;
void Pack(uint8_t *buffer)
{
__builtin_memcpy(buffer, &_pref, sizeof(_pref));
}
void UnPack(uint8_t *buffer)
{
__builtin_memcpy(&_pref, buffer, sizeof(_pref));
}
};
struct Msg
{
Payload _payload;
void Pack(uint8_t *buffer)
{
_payload.Pack(buffer);
}
void UnPack(uint8_t *buffer)
{
_payload.UnPack(buffer);
}
};
int main()
{
uint8_t * buffer = new uint8_t [30];
Msg msg;
Msg msg1;
msg._payload._pref.x = 0xabcd;
msg._payload._pref.y = 0xa;
msg._payload._pref.z = 0x0001020304051617;
msg.Pack(&buffer[0]);
msg1.UnPack(&buffer[0]);
if (msg1._payload._pref.x != 0xabcd)
__builtin_abort ();
delete [] buffer;
}
......@@ -2334,7 +2334,7 @@ vn_reference_lookup_3 (ao_ref *ref, tree vuse, void *vr_,
memset (&op, 0, sizeof (op));
op.type = vr->type;
op.opcode = MEM_REF;
op.op0 = build_int_cst (ptr_type_node, at - rhs_offset);
op.op0 = build_int_cst (ptr_type_node, at - lhs_offset + rhs_offset);
op.off = at - lhs_offset + rhs_offset;
vr->operands[0] = op;
op.type = TREE_TYPE (rhs);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment