<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/97020>97020</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
MCA crashing on armv7-m instruction
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
mkannwischer
</td>
</tr>
</table>
<pre>
I have the following piece of Arm Cortex-M4 assembly (or any armv7-m CPU really) in `input.asm`:
```
.syntax unified
str.w r1, [r0], #16
```
If I am running `llvm-mca --mcpu=cortex-m4 --march=arm < input.asm`, I'm getting:
```
$ llvm-mca --mcpu=cortex-m4 --march=arm < input.asm
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: llvm-mca --mcpu=cortex-m4 --march=arm
malloc(): invalid size (unsorted)
Aborted (core dumped)
```
If I remove the `.w` it works fine and I am getting the expected result.
```
.syntax unified
str r1, [r0], #16
```
```
$ llvm-mca --mcpu=cortex-m4 --march=arm < input.asm
Iterations: 100
Instructions: 100
Total Cycles: 101
Total uOps: 100
Dispatch Width: 1
uOps Per Cycle: 0.99
IPC: 0.99
Block RThroughput: 1.0
Instruction Info:
[1]: #uOps
[2]: Latency
[3]: RThroughput
[4]: MayLoad
[5]: MayStore
[6]: HasSideEffects (U)
[1] [2] [3] [4] [5] [6] Instructions:
1 1 1.00 * str r1, [r0], #16
Resources:
[0] - M4Unit
Resource pressure per iteration:
[0]
1.00
Resource pressure by instruction:
[0] Instructions:
1.00 str r1, [r0], #16
```
I do understand that the `.w` is not useful here, as the post-increment str results in the 32-bit T4 encoding anyway, I'd still not expect a crash like this.
I'm running llvm from the arch linux repo: https://archlinux.org/packages/extra/x86_64/llvm/
```
$ llvm-mca --version
LLVM (http://llvm.org/):
LLVM version 17.0.6
Optimized build.
Default target: x86_64-pc-linux-gnu
Host CPU: goldmont
Registered Targets:
aarch64 - AArch64 (little endian)
aarch64_32 - AArch64 (little endian ILP32)
aarch64_be - AArch64 (big endian)
amdgcn - AMD GCN GPUs
arm - ARM
arm64 - ARM64 (little endian)
arm64_32 - ARM64 (little endian ILP32)
armeb - ARM (big endian)
avr - Atmel AVR Microcontroller
bpf - BPF (host endian)
bpfeb - BPF (big endian)
bpfel - BPF (little endian)
hexagon - Hexagon
lanai - Lanai
loongarch32 - 32-bit LoongArch
loongarch64 - 64-bit LoongArch
mips - MIPS (32-bit big endian)
mips64 - MIPS (64-bit big endian)
mips64el - MIPS (64-bit little endian)
mipsel - MIPS (32-bit little endian)
msp430 - MSP430 [experimental]
nvptx - NVIDIA PTX 32-bit
nvptx64 - NVIDIA PTX 64-bit
ppc32 - PowerPC 32
ppc32le - PowerPC 32 LE
ppc64 - PowerPC 64
ppc64le - PowerPC 64 LE
r600 - AMD GPUs HD2XXX-HD6XXX
riscv32 - 32-bit RISC-V
riscv64 - 64-bit RISC-V
sparc - Sparc
sparcel - Sparc LE
sparcv9 - Sparc V9
systemz - SystemZ
thumb - Thumb
thumbeb - Thumb (big endian)
ve - VE
wasm32 - WebAssembly 32-bit
wasm64 - WebAssembly 64-bit
x86 - 32-bit X86: Pentium-Pro and above
x86-64 - 64-bit X86: EM64T and AMD64
xcore - XCore
```
I've also tried compiling llvm from source on a recent commit (`c791d86eab13634ec372196977eeac8f3e9f4805`), but that also results in a crash
```
$ llvm-mca --mcpu=cortex-m4 --march=arm < input.asm
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: llvm-mca --mcpu=cortex-m4 --march=arm
#0 0x00005af5a4096b3c (llvm-mca+0x698b3c)
#1 0x00005af5a409428b (llvm-mca+0x69628b)
#2 0x00007a79a5850ae0 (/usr/lib/libc.so.6+0x3cae0)
#3 0x00005af5a3f7db76 (llvm-mca+0x57fb76)
#4 0x00005af5a3f7fe66 (llvm-mca+0x581e66)
#5 0x00005af5a3f81f3b (llvm-mca+0x583f3b)
#6 0x00005af5a3f82f39 (llvm-mca+0x584f39)
#7 0x00005af5a3ac55f3 (llvm-mca+0xc75f3)
#8 0x00007a79a5839c88 (/usr/lib/libc.so.6+0x25c88)
#9 0x00007a79a5839d4c __libc_start_main (/usr/lib/libc.so.6+0x25d4c)
#10 0x00005af5a3ad6225 (llvm-mca+0xd8225)
Segmentation fault (core dumped)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWF9v4rgW_zTpyxHIOH954IHCdAep7KK2063uS-U4Dvg2iSPboTCf_sqOIQmlM7Oj-7ioSmOf8zv_fWyHKMW3FWMzL7z1wuUNafROyFn5RqrqnSu6Y_ImFdlxtoId2TPQOwa5KArxzqst1JxRBiKHuSxhIaRmh9E6AKIUK9PiCB5OhARSHYHIch-PSlhsvoFkpCiOHp4Cr8CLEK_qRo-JKr0Ief4cPLT00NwM2j87HKtjpckBmornnGXtpNJy_A5y4uEFeOGtRF64tO_Yn0RXxbTPVQ4rICXIpqqMH16EimJfjkpKYDQqad14_pK2_pSBmSKS7jx_SWQJnr-Agcl4ASsPxyVsmda82vZ8uGoCDuB3tVkBm_sv88cvoJq05BoIpM0WJKuF1KAF7LSulefPPXzn4bst17smHVNRevjOaHX_RrUU_2VUe_iOK9Uw5eE7IFUGvKJFk7WJppKoHaSEvmlJKBu36h81oW-QNWVttNgpNAb720ixlaQEIrdNySpt7Ph1X1tZJSkKQT2ceHhq4Lzak4JnoPh3ZgqqqZSBZ4ZsAfPUjg2NCsmsZT3y1QLolYFkpXCF7UVo_O5FCLiGdyHfFOS8YjYsbb24BFtmdqgZNXolU02hx_-sbP9Z0f6fC2ilmSSai8rmx_0myIlfVUrLhg7pZ-qT0KSAxZEWrE-d9KnNX_VVye1zyVVNNN3B3zzTO8PnwAYGGyZb6U4AGk9dIlebRU-o-3Xk20LQN3h42knRbHd1o63k8bW0dw7CqsrFuYy98HZikmHWL_atF6d57ObviWYVPZ7nfTff13uiBY62Jsd7QbLzfNjNP2oh2ZkQOcJXoh55xr7kOaNamcL-1pVz31ITAWece_W716B7DbvXyL1eZLkVCxOYtCkbI9SLsocHcTf1Cz-p4N7zgSnRSMpUP9CotWME6-BbxfXnKKglU6qRDGomgZ9K94ostwKd7T-WlR6BdxG4JuxqgJzsNgA_jcHnnccVImQCmipjUmnTZPSO6ItGpKASGhrF8qaAHZPM6CDKctVC6RGvqGSm11qj2l6kzMZqOHw8SrmGpwBYRUVmWhepju_keNqzMlCaF4VV0jY0IK7tF_zNdEWuxgOT7UZ32jdNF4JcitJqM00HCl41B7sdmUoebkaGwdLHQm49fFcT-ka2du9hBy2Jh-8OSfQaBd1e9SsNcM-kMkm0tPv757VZMUbzWbFhdjrbXcWVO1huh4dJPEbj6ET6q9a85N9ZBmnDi2x8ml-ynDSFBk3kltkm09o8qunIOjfaVs2J-atQ2px5DNtWFFkpqkGpAzywLVeaSZbBk5XYW40AQEzMosAW2wjm83bk4aTgWhcMWJVxUp27Qw_y6uMfQWB1v_HxVWDKhriUb6_qKbMtreBk2noJfyz-hD8231SPR5bnrjGC-cN6QHJ-OdJP_TIA69XngGteyZKlfT0_cmkvDY8uWQHz5wdYcyoFFZWWoiiY7BjTOu_5dbu5syVnkn0pNa3znnrH-Yl6w1tc8n4SkB07kK2oHO_XdtSJKkhF-FnUvRn1iEJUW5NsH8Po1CTuzaRJ-hW-KIARRMFnfCWvVReN9WrzaAx3cj_x1WBO-e8wTsc1TAto4_MB8HnVGNgpqB9s-wFM1YGPzrDHjRl54a1pkpKbfksK0_HPgGpf6wOM4M_n1XI1h83TiwvsBct5LfcYWyc6xrqmNjMb8c7kZgE-vqAVzAnpOOD-y4Cpt7ZOTFFwwfFBTBQMxMioOwW4Fb75puDrEr-8vIy-LqOXl5ceN1d03y7PrqoeVo-L0fMF0zkGLnuXTKomkp71PprRBdFl1BE7oy1xPx0Qn3tpVUelWfn9RLej_3RkvWvKbrE-mdEF0a1lR_zBWt4z6HWI55OB70SVLkYwgr9ZOj_dlS-rxXB2C6TPOSiXQxL19LiovySR2XE2rNK8KUcbKewlhqRizzoNhyQadRpcLhz0yzoKnixovl72C-dg71gn0MuiO79evWh7ON4zIIUSoCVnGVBR1rwYHh7c4UxUQEAyag4zVJTmcmuugRGi8XSSJREj6cSP_IBRP8aTaTSNY8YITXKfTfMgQaG9jE_N2SZtdHuaspp7pyJ3uvn3ev6713NzwEWADgghFJI8JAGaRqlP7VblRHn4Fh2iaZL6tFsT5mB8gQtwkl7BRThJBzjscDGJpyRMQkQYsqWB7xolTch42j7pWIlxZOX4lDA0EOP31ft5nKVx9EF9GOdpHA1wwQUuZ9EVXDJh0RAXDnHJJPc_uhsmfu4P3Y0ucDj3p1dwQe5PB7h4gCM0DHP_A47GYe4PYMkwuv6UJslPo4tDmiQDMdNLMVlA4fXVwF6VJlK_loRXvyA4C7qqMUWDhm5lEcbhB7eyBOPwDHtkW7tF2yt-e1z_2dehm2zmZ1N_Sm7YbBJPpmE0CXF0s5tNowiFKEmDGCGfTpJJHqeUZPGUxOkkTsMbPsMIByjCCYrDJIjGURQjlCNEaEoChrEXIFYSXoxP15Abu6Zn0xhhdFOQlBXKfn_FuGLvYIkeNpf6GzmzXqbNVnkBKrjSqpOiuS7YbL2Yt53A9FTTQt2X1t719qaRxez3G09r536G_xcAAP__1FI3ig">