[Bug tree-optimization/80492] [5/6/7 Regression] Wrong code when unrolling a loop with inline asm and local regs

ubizjak at gmail dot com gcc-bugzilla@gcc.gnu.org
Mon Apr 24 15:38:00 GMT 2017


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

--- Comment #8 from Uroš Bizjak <ubizjak at gmail dot com> ---
Happens in fre3 pass.

The pass starts with:

do_syscalls ()
{
  register int reg __asm__ (*4);
  register int reg __asm__ (*4);
  int s;

  <bb 2> [33.33%]:
  reg = 0;
  __asm__ __volatile__("/* Some Code %0 */" :  : "r" reg);
  reg = 1;
  __asm__ __volatile__("/* Some Code %0 */" :  : "r" reg);
  s_11 = 1;
  reg = 0;
  __asm__ __volatile__("/* Some Code %0 */" :  : "r" reg);
  reg = 1;
  __asm__ __volatile__("/* Some Code %0 */" :  : "r" reg);
  s_16 = 2;
  return;

}

and converts the above to:

do_syscalls ()
{
  register int reg __asm__ (*4);
  register int reg __asm__ (*4);
  int s;

  <bb 2> [33.33%]:
  reg = 0;
  __asm__ __volatile__("/* Some Code %0 */" :  : "r" reg);
  reg = 1;
  __asm__ __volatile__("/* Some Code %0 */" :  : "r" reg);
  __asm__ __volatile__("/* Some Code %0 */" :  : "r" reg);
  __asm__ __volatile__("/* Some Code %0 */" :  : "r" reg);
  return;

}


More information about the Gcc-bugs mailing list