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

    <tr>
        <th>Summary</th>
        <td>
            O3 optimization level(clang 18) causes instruction disorder
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

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

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

<pre>
    **When I use `risc-v rv32gc clang 18.1.0` compiler to compile the example.c, the instruction in output.s is disordered.** 

All compilation options are `-g -o output.s -S -target riscv32-unknown-elf -march=rv32gc -mabi=ilp32d --gcc-toolchain=/opt/compiler-explorer/riscv32/gcc-10.2.0/riscv32-unknown-elf -fcolor-diagnostics -fno-crash-diagnostics -O3 example.c`

 example.c:
```c
#define SET_FLOAT_ROUNDING_MODE(reg)      ({      \
        asm ("fsrm %0" : : "r"(reg));              \
})

float add_f32_f32_test(float X,  float Y) { 
    volatile unsigned int reg = 0x4;
    SET_FLOAT_ROUNDING_MODE(reg);
    return X + Y;
}
```
And the output.s is as follow:
```c
add_f32_f32_test:                       # @add_f32_f32_test
        addi    sp, sp, -16
        li      a0, 4
        sw      a0, 12(sp)
        lw      a0, 12(sp)
        fadd.s  fa0, fa0, fa1
        fsrm    a0
        addi    sp, sp, 16
        ret
```
**Obviously, the `fsrm`  instruction should not follow `fadd.s ` instruction.**

But, when I use the O0 optimization level,the `fsrm`  instruction's order is true.

All compilation options are `-g -o output.s -S -target riscv32-unknown-elf -march=rv32gc -mabi=ilp32d --gcc-toolchain=/opt/compiler-explorer/riscv32/gcc-10.2.0/riscv32-unknown-elf -fcolor-diagnostics -fno-crash-diagnostics -O0 example.c `

And the output.s is as follow:
```c
add_f32_f32_test:                       # @add_f32_f32_test
        addi    sp, sp, -32
        sw      ra, 28(sp)                      # 4-byte Folded Spill
        sw      s0, 24(sp)                      # 4-byte Folded Spill
        addi    s0, sp, 32
        fsw     fa0, -12(s0)
        fsw     fa1, -16(s0)
        li      a0, 4
        sw      a0, -20(s0)
        lw      a0, -20(s0)
        fsrm    a0
        flw     fa5, -12(s0)
        flw     fa4, -16(s0)
        fadd.s  fa0, fa5, fa4
        lw      ra, 28(sp)                      # 4-byte Folded Reload
        lw      s0, 24(sp)                      # 4-byte Folded Reload
        addi    sp, sp, 32
        ret
```

So, is there a bug in clang-18? or are there grammar issues in example.c ? 
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkVt2O4yYUfhpyc4SFwc44F7lIJutqpXYj7WzV3asRNtihS0wEODPbp6_Azu9kZrerXlQqig3hfJwfOOcz3DnVdlLOUb5E-WrCe78xdv7cf-VdO0tnk8qIb3NEF4gu_tjIDt5D7ySgKbHK1XgPds9oW0OteddCWiRpQtCUQG22O6WlBW8OY_AbCfKZb3daJjWi93FCdc7bvvbKdKA6ML3f9T5xoBwI5YwV0kqRDA4AIitEFsN7ofWomcfFZhc6B9xG93AL2JzU4QfAnttWegiO7xnFffe1M08dlroBvOW23iC2GsPBW14pxFZK7xgVgHFb19gbo-sNVx1iK0RLs_OIlodAsXzeaWOlRbQcLSBahmUpSWhCTtOXhpvaaGOxULztjPOqdoCbzuDacre5nF6zs-2bkvPNOBOwcSog4q8e_1MmZKM6CQ_vPj2Wv64Xnx4_rn__sHr_4ZfH39ard4gWVraIziA2RAt0txzH-f1oZ2zcbSOA0sbZMMwJohQQWwwPpRZRetQYfmwJF-2oE92tgvwsmkYb7oEL8dgwGh8vnUe0GASfQ-7AMP4S_A1-nvzbm5ARWkLfxdwWoDoPVraA2ArIc4bY8oT-3mZcgK30ve3gMyC6hC9HUYjgcs_HFO1EzPHzpOYOGqO1eXr1oF7EzRZwuyHKAGXkxYLLoxJChd7twrYNb5xOL0FajWASxNml0D2dC9NwrEHN7ErFD6EaLkTiQh9hxy69goWsGpR9N5jrWKz0N09j4JB1tVemd_rbgYDQlARrgbQuyMhtTK8FdMaPBxaRg_sBfIYd6ek8hZe9DwaeTpQZbK1JpKmt-mvgLC33UiN6_4YfiN45iDQYssfbXib_cxYkJ7KDKxr87xYco7dryvIgDkw6VMvrdjNcffMSSqOFFPCwU1rfVuliSdHsX1B5DIWcQrmOpBntjqWMh8onLyv_iEsPFHQT9w-oCFPyio4fg73GMo0-uJq_HdIRl70Z0gvSy4cuu-31z-bER6kNF7d1_mxS3NJ5K8Gvs-JVEo7vBxPWBD7bSCuBQ9W34fYXb5E4LdC7Ei3v0awEYyOVDbjW8u2WByJ0vXRhwRkTsBImYs7EjM34RM7Tu5QUaUEKMtnMi7qmVS5pnkoupKxTJmZ5LWRD82zWVM1EzSmhGWHpjLA0y0iSNVw0VE6rmkxnFctQRuSWK51ovd8mxraT6MS8yO9oMdG8ktrFOzSlMYhw-8lXEzsPeFz1rUMZ0cp5d9LglddyvmY3vwnF4UYdDqvmvYsBnz5Ph8vxpLd6vvF-5wK_0TLQrfKbvkpqs0W0DNbGDu-s-VPWga-HHUS0jP7_HQAA__-uHFPX">