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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Target|                            |arm*

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
But I see

{
  int b;
  int a;
  unsigned int _4;
  signed char _6;
  int _7;
  unsigned char _9;
  int _10;

  <bb 2>:
  _4 = (unsigned int) x_3(D);
  if (_4 <= 66)
    goto <bb 8> (<L13>);
  else
    goto <bb 7> (<L12>);

<L12>:
  a_11 = 0;
  b_15 = 18;
  goto <bb 6> (<L14>);

<L13>:
  _6 = CSWTCH.2[_4];
  _7 = (int) _6;
  a_5 = _7;
  _9 = CSWTCH.3[_4];
  _10 = (int) _9;
  b_8 = _10;

  # a_1 = PHI <a_5(8), a_11(7)>
  # b_2 = PHI <b_8(8), b_15(7)>
<L14>:
<L11>:
  va = a_1;
  vb = b_2;
  return;

thus it is zero-extended on GIMPLE and also in asm:

        cmp     r0, #66
        movhi   r2, #18
        movhi   r0, #0
        ldrls   r3, .L5
        ldrsbls r0, [r3, r0]!
        ldr     r1, .L5+4
        ldrbls  r2, [r3, #68]   @ zero_extendqisi2
        ldr     r3, .L5+8
        str     r0, [r1]
        str     r2, [r3]

there is

CSWTCH.3:
        .byte   -128
        .byte   -118
...

but that shouldn't really matter [the constructor elts probably have
bogus types?!]

Note the above is what I observe on trunk.

Reply via email to