<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/134916>134916</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [MIPS] Compiler crash when using -O3
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          hpoussin
      </td>
    </tr>
</table>

<pre>
    Using clang version 20.1.2

clang -target "mipsel-w64-windows-gnu" -c test.cpp
```
typedef unsigned int size_t;
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned uint32_t;
typedef unsigned long long uint64_t;
typedef unsigned int uintptr_t;
typedef signed char int8_t;
typedef short int16_t;
typedef int int32_t;
typedef long long int64_t;

size_t readULEB128(const uint8_t **data);

// read a pointer encoded value and advance pointer
static uintptr_t readEncodedPointer(const uint8_t **data, uint8_t encoding) {
  const uint8_t *p = *data;
  uintptr_t result = 0;

  // first get value
  switch (encoding & 0x0F) {
  case 0x01:
    result = readULEB128(&p);
    break;
  case 0x0A:
    result = *((const int16_t *)p);
    p += sizeof(int16_t);
    break;
  case 0x0B:
 result = *((const int32_t *)p);
    p += sizeof(int32_t);
    break;
 case 0x0C:
    result = *((const int64_t *)p);
    p += sizeof(int64_t);
 break;
  default:
    // not supported
    return 0;
  }

  *data = p;
  return result;
}

int __gcc_personality_v0(const uint8_t* lsda)
{
 uint8_t callSiteEncoding = *lsda++;
  const uint8_t *p = 0;
  while (1) {
    uintptr_t start = readEncodedPointer(&p, callSiteEncoding);
 size_t length = readEncodedPointer(&p, callSiteEncoding);
    size_t landingPad = readEncodedPointer(&p, callSiteEncoding);
    readULEB128(&p); // action value not used for C code
  }

  // No landing pad found, continue unwinding.
  return 0;
}
```
gives
```
fatal error: error in backend: Not supported instr: <MCInst 45 <MCOperand Imm:0>>
```
Possible workaround: add `-O0`
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJykVl1v6ygQ_TXkZZQIg-3GD35w0kaqtPe20tV9roghNlsCFuBku79-Bbbz0TbdSleK2gTOzDkzPoNhzslGC1GibIWy-xnrfWts2Xamd07q2dbwt_K3k7qBWjHdwEFYJ40GghfJgiBcIVwNO3PPbCM8IEL2snNCzY95Oj9Kzc3RzRvdI0JgXoMXzi_qrguxOR4_uPJvneBiB72OijhI7cHJf8WLR3T1GaBumYVear-8CXGtsT5ikvwmKGxTcnNbGd0MfwIwT28Cg-AA6bx9j7lU_JngQeenMkPWTwWedV3JQrgaugZWMP77r4dVQpaILGujnZ_aBYhUiFSceYZIcQpEZIPIJgYCg85I7YUFoWvDBYcDU70ApjkwfmC6FhMiUHrmZX0uP-Z4GAKfR9RXGtan1cgmdYNIAeguCAP4ENcBovcwRdMBdUnueuUjBp-KAxjL20nrPASrxoriljtKX7eAyHLiB0RywP_gzZUQ5kRYTBAdUsIl13XDEcm7U3MDcmsFe51-TpmqTzPF1pyf2miMYbm4ztoBIqsQE5662SGynGz0v9yrkftL4mC87xNHm94innjX36w5mPr71HEETqirgrnYsV75M-3oBG08uL7rjPWCnxT53urJNwDo7v7sn-i3qLab9kf8UMhotikkzO7LS1PXL52wzmimpH97OeD3o4BIBcrxOIshPGae7F4zpX5JLx5OxhyaNQSsYie-HJNTKcdWKhE8nlx6-nJwnGf27OUP8ztYev1B0rnt49GjhG58-yeJAE65mA5bz4z_Yb5b4zm5gdU-vNmGYy5Yo3eCw85YWEPg-2iHGPbTTBKhYwHfax61GO2l7gX0OrwEpW4Wl4bBV165eBE28iDcu7Ud80yBsNZYRKvhC0gNW1a_Cs3D2s9LL4PUzkcoousf68fgizQbfjx1woZD_HG_R7TCiD6EzzXfs3FObpWAo7GvzMaSaAWMc0A5nj8F2IyXlBe0YDNRJndpmqS4yJaztiQp2WZLwUnBE1Zky5QlOaaU7nJxh0XOZrIkmGQ4xcukoFm2XOQpq7cpzviW4iwrKEqx2DOpFkod9gtjm5l0rhdlQtMiyWeKbYVy8cpCiBZHiLuIkHCDsWUImm_7xqEUK-m8O6fx0qt41_nx-PwLZfewNvtOKmGhtsy1cGyFhj5ed-ZPdNZbVbbedy6cHPFpN9K3_XZRmz0im5B2_DfvrPlb1B6RTRTjENmMag8l-S8AAP__dcncKQ">