https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100260

            Bug ID: 100260
           Summary: DSE: join stores
           Product: gcc
           Version: tree-ssa
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: david.bolvansky at gmail dot com
  Target Milestone: ---

#include <string.h>

struct pam {
  void *p1;
  void *p2;
  #ifdef LONG
  unsigned long size;
  #else
  unsigned int pad;
  unsigned int size;
  #endif
};

extern int use(struct pam *param);

unsigned int foo(void) {
  struct pam s_pam;
  memset(&s_pam, 0, sizeof(struct pam));
  s_pam.size = 1;
  return use(&s_pam);
}

INT

foo():
  sub rsp, 40
  pxor xmm0, xmm0
  mov rdi, rsp
  mov DWORD PTR [rsp+16], 0
  mov DWORD PTR [rsp+20], 1
  movaps XMMWORD PTR [rsp], xmm0
  call use(pam*)
  add rsp, 40
  ret

LONG

foo():
  sub rsp, 40
  pxor xmm0, xmm0
  mov rdi, rsp
  movaps XMMWORD PTR [rsp], xmm0
  mov QWORD PTR [rsp+16], 1
  call use(pam*)
  add rsp, 40
  ret

Stores
  mov DWORD PTR [rsp+16], 0
  mov DWORD PTR [rsp+20], 1
can be replaced with one mov QWORD..
  • [Bug c/100260] New: DSE: joi... david.bolvansky at gmail dot com via Gcc-bugs

Reply via email to