https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93507
Bug ID: 93507 Summary: Missed abstraction removal in VN Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: rguenth at gcc dot gnu.org Target Milestone: --- Skia (PR92645) contains abstraction that can be simplified to unsigned long foo(unsigned int x) { unsigned int src = x; unsigned long dst = 0; __builtin_memcpy (&dst, &src, sizeof (unsigned int)); return dst; } which we should be able to optimize to just zero-extension of x. But we end up keeping this all the way through assembling: foo: .LFB0: .cfi_startproc movq $0, -8(%rsp) movl %edi, -8(%rsp) movq -8(%rsp), %rax ret