# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py # RUN: llvm-mca -mtriple=thumbv8.1-m.main-none-none-eabi -mcpu=cortex-m55 -instruction-tables < %s | FileCheck %s vldrb.8 q1, [r0, 0] vldrb.8 q1, [r0, 0]! vldrb.8 q1, [r0], 0 vldrh.16 q1, [r0, 0] vldrh.16 q1, [r0, 0]! vldrh.16 q1, [r0], 0 vldrw.32 q1, [r0, 0] vldrw.32 q1, [r0, 0]! vldrw.32 q1, [r0], 0 vldrb.u16 q1, [r0, 0] vldrb.u16 q1, [r0, 0]! vldrb.u16 q1, [r0], 0 vldrb.u32 q1, [r0, 0] vldrb.u32 q1, [r0, 0]! vldrb.u32 q1, [r0], 0 vldrh.u32 q1, [r0, 0] vldrh.u32 q1, [r0, 0]! vldrh.u32 q1, [r0], 0 vldrb.s16 q1, [r0, 4] vldrb.s16 q1, [r0, 4]! vldrb.s16 q1, [r0], 4 vldrb.s32 q1, [r0, 4] vldrb.s32 q1, [r0, 4]! vldrb.s32 q1, [r0], 4 vldrh.s32 q1, [r0, 4] vldrh.s32 q1, [r0, 4]! vldrh.s32 q1, [r0], 4 vldrw.32 q1, [r0, q0] vldrh.16 q1, [r0, q0] vldrb.8 q1, [r0, q0] vldrb.u16 q1, [r0, q0] vldrb.u32 q1, [r0, q0] vldrh.u32 q1, [r0, q0] vldrb.s16 q1, [r0, q0] vldrb.s32 q1, [r0, q0] vldrh.s32 q1, [r0, q0] vldrw.32 q1, [r0, q0, uxtw #2] vldrh.16 q1, [r0, q0, uxtw #1] vldrh.u32 q1, [r0, q0, uxtw #1] vldrh.s32 q1, [r0, q0, uxtw #1] vldrw.32 q1, [q0, 4] vldrw.32 q1, [q0, 4]! vld20.8 {q0, q1}, [r0] vld21.8 {q0, q1}, [r0]! vld40.8 {q0, q1, q2, q3}, [r0] vld43.8 {q0, q1, q2, q3}, [r0]! vld20.16 {q0, q1}, [r0] vld21.16 {q0, q1}, [r0]! vld40.16 {q0, q1, q2, q3}, [r0] vld43.16 {q0, q1, q2, q3}, [r0]! vld20.32 {q0, q1}, [r0] vld21.32 {q0, q1}, [r0]! vld40.32 {q0, q1, q2, q3}, [r0] vld43.32 {q0, q1, q2, q3}, [r0]! vstrb.8 q1, [r0, 0] vstrb.8 q1, [r0, 0]! vstrb.8 q1, [r0], 0 vstrh.16 q1, [r0, 0] vstrh.16 q1, [r0, 0]! vstrh.16 q1, [r0], 0 vstrw.32 q1, [r0, 0] vstrw.32 q1, [r0, 0]! vstrw.32 q1, [r0], 0 vstrb.16 q1, [r0, 0] vstrb.16 q1, [r0, 0]! vstrb.16 q1, [r0], 0 vstrb.32 q1, [r0, 0] vstrb.32 q1, [r0, 0]! vstrb.32 q1, [r0], 0 vstrh.32 q1, [r0, 0] vstrh.32 q1, [r0, 0]! vstrh.32 q1, [r0], 0 vstrw.32 q1, [r0, q0] vstrh.16 q1, [r0, q0] vstrb.8 q1, [r0, q0] vstrb.16 q1, [r0, q0] vstrb.32 q1, [r0, q0] vstrh.32 q1, [r0, q0] vstrw.32 q1, [r0, q0, uxtw #2] vstrh.16 q1, [r0, q0, uxtw #1] vstrh.32 q1, [r0, q0, uxtw #1] vstrw.32 q1, [q0, 4] vstrw.32 q1, [q0, 4]! vst20.8 {q0, q1}, [r0] vst21.8 {q0, q1}, [r0]! vst40.8 {q0, q1, q2, q3}, [r0] vst43.8 {q0, q1, q2, q3}, [r0]! vst20.16 {q0, q1}, [r0] vst21.16 {q0, q1}, [r0]! vst40.16 {q0, q1, q2, q3}, [r0] vst43.16 {q0, q1, q2, q3}, [r0]! vst20.32 {q0, q1}, [r0] vst21.32 {q0, q1}, [r0]! vst40.32 {q0, q1, q2, q3}, [r0] vst43.32 {q0, q1, q2, q3}, [r0]! # CHECK: Instruction Info: # CHECK-NEXT: [1]: #uOps # CHECK-NEXT: [2]: Latency # CHECK-NEXT: [3]: RThroughput # CHECK-NEXT: [4]: MayLoad # CHECK-NEXT: [5]: MayStore # CHECK-NEXT: [6]: HasSideEffects (U) # CHECK: [1] [2] [3] [4] [5] [6] Instructions: # CHECK-NEXT: 1 1 2.00 * vldrb.u8 q1, [r0] # CHECK-NEXT: 1 1 2.00 * vldrb.u8 q1, [r0, #0]! # CHECK-NEXT: 1 1 2.00 * vldrb.u8 q1, [r0], #0 # CHECK-NEXT: 1 1 2.00 * vldrh.u16 q1, [r0] # CHECK-NEXT: 1 1 2.00 * vldrh.u16 q1, [r0, #0]! # CHECK-NEXT: 1 1 2.00 * vldrh.u16 q1, [r0], #0 # CHECK-NEXT: 1 1 2.00 * vldrw.u32 q1, [r0] # CHECK-NEXT: 1 1 2.00 * vldrw.u32 q1, [r0, #0]! # CHECK-NEXT: 1 1 2.00 * vldrw.u32 q1, [r0], #0 # CHECK-NEXT: 1 1 2.00 * vldrb.u16 q1, [r0] # CHECK-NEXT: 1 1 2.00 * vldrb.u16 q1, [r0]! # CHECK-NEXT: 1 1 2.00 * vldrb.u16 q1, [r0], #0 # CHECK-NEXT: 1 1 2.00 * vldrb.u32 q1, [r0] # CHECK-NEXT: 1 1 2.00 * vldrb.u32 q1, [r0]! # CHECK-NEXT: 1 1 2.00 * vldrb.u32 q1, [r0], #0 # CHECK-NEXT: 1 1 2.00 * vldrh.u32 q1, [r0] # CHECK-NEXT: 1 1 2.00 * vldrh.u32 q1, [r0]! # CHECK-NEXT: 1 1 2.00 * vldrh.u32 q1, [r0], #0 # CHECK-NEXT: 1 1 2.00 * vldrb.s16 q1, [r0, #4] # CHECK-NEXT: 1 1 2.00 * vldrb.s16 q1, [r0, #4]! # CHECK-NEXT: 1 1 2.00 * vldrb.s16 q1, [r0], #4 # CHECK-NEXT: 1 1 2.00 * vldrb.s32 q1, [r0, #4] # CHECK-NEXT: 1 1 2.00 * vldrb.s32 q1, [r0, #4]! # CHECK-NEXT: 1 1 2.00 * vldrb.s32 q1, [r0], #4 # CHECK-NEXT: 1 1 2.00 * vldrh.s32 q1, [r0, #4] # CHECK-NEXT: 1 1 2.00 * vldrh.s32 q1, [r0, #4]! # CHECK-NEXT: 1 1 2.00 * vldrh.s32 q1, [r0], #4 # CHECK-NEXT: 1 6 2.00 * vldrw.u32 q1, [r0, q0] # CHECK-NEXT: 1 6 2.00 * vldrh.u16 q1, [r0, q0] # CHECK-NEXT: 1 6 2.00 * vldrb.u8 q1, [r0, q0] # CHECK-NEXT: 1 6 2.00 * vldrb.u16 q1, [r0, q0] # CHECK-NEXT: 1 6 2.00 * vldrb.u32 q1, [r0, q0] # CHECK-NEXT: 1 6 2.00 * vldrh.u32 q1, [r0, q0] # CHECK-NEXT: 1 6 2.00 * vldrb.s16 q1, [r0, q0] # CHECK-NEXT: 1 6 2.00 * vldrb.s32 q1, [r0, q0] # CHECK-NEXT: 1 6 2.00 * vldrh.s32 q1, [r0, q0] # CHECK-NEXT: 1 6 2.00 * vldrw.u32 q1, [r0, q0, uxtw #2] # CHECK-NEXT: 1 6 2.00 * vldrh.u16 q1, [r0, q0, uxtw #1] # CHECK-NEXT: 1 6 2.00 * vldrh.u32 q1, [r0, q0, uxtw #1] # CHECK-NEXT: 1 6 2.00 * vldrh.s32 q1, [r0, q0, uxtw #1] # CHECK-NEXT: 1 6 2.00 * vldrw.u32 q1, [q0, #4] # CHECK-NEXT: 1 6 2.00 * vldrw.u32 q1, [q0, #4]! # CHECK-NEXT: 1 1 2.00 * vld20.8 {q0, q1}, [r0] # CHECK-NEXT: 1 1 2.00 * vld21.8 {q0, q1}, [r0]! # CHECK-NEXT: 1 1 2.00 * vld40.8 {q0, q1, q2, q3}, [r0] # CHECK-NEXT: 1 1 2.00 * vld43.8 {q0, q1, q2, q3}, [r0]! # CHECK-NEXT: 1 1 2.00 * vld20.16 {q0, q1}, [r0] # CHECK-NEXT: 1 1 2.00 * vld21.16 {q0, q1}, [r0]! # CHECK-NEXT: 1 1 2.00 * vld40.16 {q0, q1, q2, q3}, [r0] # CHECK-NEXT: 1 1 2.00 * vld43.16 {q0, q1, q2, q3}, [r0]! # CHECK-NEXT: 1 1 2.00 * vld20.32 {q0, q1}, [r0] # CHECK-NEXT: 1 1 2.00 * vld21.32 {q0, q1}, [r0]! # CHECK-NEXT: 1 1 2.00 * vld40.32 {q0, q1, q2, q3}, [r0] # CHECK-NEXT: 1 1 2.00 * vld43.32 {q0, q1, q2, q3}, [r0]! # CHECK-NEXT: 1 1 2.00 * vstrb.8 q1, [r0] # CHECK-NEXT: 1 1 2.00 * vstrb.8 q1, [r0, #0]! # CHECK-NEXT: 1 1 2.00 * vstrb.8 q1, [r0], #0 # CHECK-NEXT: 1 1 2.00 * vstrh.16 q1, [r0] # CHECK-NEXT: 1 1 2.00 * vstrh.16 q1, [r0, #0]! # CHECK-NEXT: 1 1 2.00 * vstrh.16 q1, [r0], #0 # CHECK-NEXT: 1 1 2.00 * vstrw.32 q1, [r0] # CHECK-NEXT: 1 1 2.00 * vstrw.32 q1, [r0, #0]! # CHECK-NEXT: 1 1 2.00 * vstrw.32 q1, [r0], #0 # CHECK-NEXT: 1 1 2.00 * vstrb.16 q1, [r0] # CHECK-NEXT: 1 1 2.00 * vstrb.16 q1, [r0]! # CHECK-NEXT: 1 1 2.00 * vstrb.16 q1, [r0], #0 # CHECK-NEXT: 1 1 2.00 * vstrb.32 q1, [r0] # CHECK-NEXT: 1 1 2.00 * vstrb.32 q1, [r0]! # CHECK-NEXT: 1 1 2.00 * vstrb.32 q1, [r0], #0 # CHECK-NEXT: 1 1 2.00 * vstrh.32 q1, [r0] # CHECK-NEXT: 1 1 2.00 * vstrh.32 q1, [r0]! # CHECK-NEXT: 1 1 2.00 * vstrh.32 q1, [r0], #0 # CHECK-NEXT: 1 5 2.00 * vstrw.32 q1, [r0, q0] # CHECK-NEXT: 1 5 2.00 * vstrh.16 q1, [r0, q0] # CHECK-NEXT: 1 5 2.00 * vstrb.8 q1, [r0, q0] # CHECK-NEXT: 1 5 2.00 * vstrb.16 q1, [r0, q0] # CHECK-NEXT: 1 5 2.00 * vstrb.32 q1, [r0, q0] # CHECK-NEXT: 1 5 2.00 * vstrh.32 q1, [r0, q0] # CHECK-NEXT: 1 5 2.00 * vstrw.32 q1, [r0, q0, uxtw #2] # CHECK-NEXT: 1 5 2.00 * vstrh.16 q1, [r0, q0, uxtw #1] # CHECK-NEXT: 1 5 2.00 * vstrh.32 q1, [r0, q0, uxtw #1] # CHECK-NEXT: 1 5 2.00 * vstrw.32 q1, [q0, #4] # CHECK-NEXT: 1 5 2.00 * vstrw.32 q1, [q0, #4]! # CHECK-NEXT: 1 1 2.00 * vst20.8 {q0, q1}, [r0] # CHECK-NEXT: 1 1 2.00 * vst21.8 {q0, q1}, [r0]! # CHECK-NEXT: 1 1 2.00 * vst40.8 {q0, q1, q2, q3}, [r0] # CHECK-NEXT: 1 1 2.00 * vst43.8 {q0, q1, q2, q3}, [r0]! # CHECK-NEXT: 1 1 2.00 * vst20.16 {q0, q1}, [r0] # CHECK-NEXT: 1 1 2.00 * vst21.16 {q0, q1}, [r0]! # CHECK-NEXT: 1 1 2.00 * vst40.16 {q0, q1, q2, q3}, [r0] # CHECK-NEXT: 1 1 2.00 * vst43.16 {q0, q1, q2, q3}, [r0]! # CHECK-NEXT: 1 1 2.00 * vst20.32 {q0, q1}, [r0] # CHECK-NEXT: 1 1 2.00 * vst21.32 {q0, q1}, [r0]! # CHECK-NEXT: 1 1 2.00 * vst40.32 {q0, q1, q2, q3}, [r0] # CHECK-NEXT: 1 1 2.00 * vst43.32 {q0, q1, q2, q3}, [r0]! # CHECK: Resources: # CHECK-NEXT: [0] - M55UnitALU # CHECK-NEXT: [1] - M55UnitLoadStore # CHECK-NEXT: [2] - M55UnitVecALU # CHECK-NEXT: [3] - M55UnitVecFPALU # CHECK-NEXT: [4] - M55UnitVecSys # CHECK: Resource pressure per iteration: # CHECK-NEXT: [0] [1] [2] [3] [4] # CHECK-NEXT: - 190.00 - - - # CHECK: Resource pressure by instruction: # CHECK-NEXT: [0] [1] [2] [3] [4] Instructions: # CHECK-NEXT: - 2.00 - - - vldrb.u8 q1, [r0] # CHECK-NEXT: - 2.00 - - - vldrb.u8 q1, [r0, #0]! # CHECK-NEXT: - 2.00 - - - vldrb.u8 q1, [r0], #0 # CHECK-NEXT: - 2.00 - - - vldrh.u16 q1, [r0] # CHECK-NEXT: - 2.00 - - - vldrh.u16 q1, [r0, #0]! # CHECK-NEXT: - 2.00 - - - vldrh.u16 q1, [r0], #0 # CHECK-NEXT: - 2.00 - - - vldrw.u32 q1, [r0] # CHECK-NEXT: - 2.00 - - - vldrw.u32 q1, [r0, #0]! # CHECK-NEXT: - 2.00 - - - vldrw.u32 q1, [r0], #0 # CHECK-NEXT: - 2.00 - - - vldrb.u16 q1, [r0] # CHECK-NEXT: - 2.00 - - - vldrb.u16 q1, [r0]! # CHECK-NEXT: - 2.00 - - - vldrb.u16 q1, [r0], #0 # CHECK-NEXT: - 2.00 - - - vldrb.u32 q1, [r0] # CHECK-NEXT: - 2.00 - - - vldrb.u32 q1, [r0]! # CHECK-NEXT: - 2.00 - - - vldrb.u32 q1, [r0], #0 # CHECK-NEXT: - 2.00 - - - vldrh.u32 q1, [r0] # CHECK-NEXT: - 2.00 - - - vldrh.u32 q1, [r0]! # CHECK-NEXT: - 2.00 - - - vldrh.u32 q1, [r0], #0 # CHECK-NEXT: - 2.00 - - - vldrb.s16 q1, [r0, #4] # CHECK-NEXT: - 2.00 - - - vldrb.s16 q1, [r0, #4]! # CHECK-NEXT: - 2.00 - - - vldrb.s16 q1, [r0], #4 # CHECK-NEXT: - 2.00 - - - vldrb.s32 q1, [r0, #4] # CHECK-NEXT: - 2.00 - - - vldrb.s32 q1, [r0, #4]! # CHECK-NEXT: - 2.00 - - - vldrb.s32 q1, [r0], #4 # CHECK-NEXT: - 2.00 - - - vldrh.s32 q1, [r0, #4] # CHECK-NEXT: - 2.00 - - - vldrh.s32 q1, [r0, #4]! # CHECK-NEXT: - 2.00 - - - vldrh.s32 q1, [r0], #4 # CHECK-NEXT: - 2.00 - - - vldrw.u32 q1, [r0, q0] # CHECK-NEXT: - 2.00 - - - vldrh.u16 q1, [r0, q0] # CHECK-NEXT: - 2.00 - - - vldrb.u8 q1, [r0, q0] # CHECK-NEXT: - 2.00 - - - vldrb.u16 q1, [r0, q0] # CHECK-NEXT: - 2.00 - - - vldrb.u32 q1, [r0, q0] # CHECK-NEXT: - 2.00 - - - vldrh.u32 q1, [r0, q0] # CHECK-NEXT: - 2.00 - - - vldrb.s16 q1, [r0, q0] # CHECK-NEXT: - 2.00 - - - vldrb.s32 q1, [r0, q0] # CHECK-NEXT: - 2.00 - - - vldrh.s32 q1, [r0, q0] # CHECK-NEXT: - 2.00 - - - vldrw.u32 q1, [r0, q0, uxtw #2] # CHECK-NEXT: - 2.00 - - - vldrh.u16 q1, [r0, q0, uxtw #1] # CHECK-NEXT: - 2.00 - - - vldrh.u32 q1, [r0, q0, uxtw #1] # CHECK-NEXT: - 2.00 - - - vldrh.s32 q1, [r0, q0, uxtw #1] # CHECK-NEXT: - 2.00 - - - vldrw.u32 q1, [q0, #4] # CHECK-NEXT: - 2.00 - - - vldrw.u32 q1, [q0, #4]! # CHECK-NEXT: - 2.00 - - - vld20.8 {q0, q1}, [r0] # CHECK-NEXT: - 2.00 - - - vld21.8 {q0, q1}, [r0]! # CHECK-NEXT: - 2.00 - - - vld40.8 {q0, q1, q2, q3}, [r0] # CHECK-NEXT: - 2.00 - - - vld43.8 {q0, q1, q2, q3}, [r0]! # CHECK-NEXT: - 2.00 - - - vld20.16 {q0, q1}, [r0] # CHECK-NEXT: - 2.00 - - - vld21.16 {q0, q1}, [r0]! # CHECK-NEXT: - 2.00 - - - vld40.16 {q0, q1, q2, q3}, [r0] # CHECK-NEXT: - 2.00 - - - vld43.16 {q0, q1, q2, q3}, [r0]! # CHECK-NEXT: - 2.00 - - - vld20.32 {q0, q1}, [r0] # CHECK-NEXT: - 2.00 - - - vld21.32 {q0, q1}, [r0]! # CHECK-NEXT: - 2.00 - - - vld40.32 {q0, q1, q2, q3}, [r0] # CHECK-NEXT: - 2.00 - - - vld43.32 {q0, q1, q2, q3}, [r0]! # CHECK-NEXT: - 2.00 - - - vstrb.8 q1, [r0] # CHECK-NEXT: - 2.00 - - - vstrb.8 q1, [r0, #0]! # CHECK-NEXT: - 2.00 - - - vstrb.8 q1, [r0], #0 # CHECK-NEXT: - 2.00 - - - vstrh.16 q1, [r0] # CHECK-NEXT: - 2.00 - - - vstrh.16 q1, [r0, #0]! # CHECK-NEXT: - 2.00 - - - vstrh.16 q1, [r0], #0 # CHECK-NEXT: - 2.00 - - - vstrw.32 q1, [r0] # CHECK-NEXT: - 2.00 - - - vstrw.32 q1, [r0, #0]! # CHECK-NEXT: - 2.00 - - - vstrw.32 q1, [r0], #0 # CHECK-NEXT: - 2.00 - - - vstrb.16 q1, [r0] # CHECK-NEXT: - 2.00 - - - vstrb.16 q1, [r0]! # CHECK-NEXT: - 2.00 - - - vstrb.16 q1, [r0], #0 # CHECK-NEXT: - 2.00 - - - vstrb.32 q1, [r0] # CHECK-NEXT: - 2.00 - - - vstrb.32 q1, [r0]! # CHECK-NEXT: - 2.00 - - - vstrb.32 q1, [r0], #0 # CHECK-NEXT: - 2.00 - - - vstrh.32 q1, [r0] # CHECK-NEXT: - 2.00 - - - vstrh.32 q1, [r0]! # CHECK-NEXT: - 2.00 - - - vstrh.32 q1, [r0], #0 # CHECK-NEXT: - 2.00 - - - vstrw.32 q1, [r0, q0] # CHECK-NEXT: - 2.00 - - - vstrh.16 q1, [r0, q0] # CHECK-NEXT: - 2.00 - - - vstrb.8 q1, [r0, q0] # CHECK-NEXT: - 2.00 - - - vstrb.16 q1, [r0, q0] # CHECK-NEXT: - 2.00 - - - vstrb.32 q1, [r0, q0] # CHECK-NEXT: - 2.00 - - - vstrh.32 q1, [r0, q0] # CHECK-NEXT: - 2.00 - - - vstrw.32 q1, [r0, q0, uxtw #2] # CHECK-NEXT: - 2.00 - - - vstrh.16 q1, [r0, q0, uxtw #1] # CHECK-NEXT: - 2.00 - - - vstrh.32 q1, [r0, q0, uxtw #1] # CHECK-NEXT: - 2.00 - - - vstrw.32 q1, [q0, #4] # CHECK-NEXT: - 2.00 - - - vstrw.32 q1, [q0, #4]! # CHECK-NEXT: - 2.00 - - - vst20.8 {q0, q1}, [r0] # CHECK-NEXT: - 2.00 - - - vst21.8 {q0, q1}, [r0]! # CHECK-NEXT: - 2.00 - - - vst40.8 {q0, q1, q2, q3}, [r0] # CHECK-NEXT: - 2.00 - - - vst43.8 {q0, q1, q2, q3}, [r0]! # CHECK-NEXT: - 2.00 - - - vst20.16 {q0, q1}, [r0] # CHECK-NEXT: - 2.00 - - - vst21.16 {q0, q1}, [r0]! # CHECK-NEXT: - 2.00 - - - vst40.16 {q0, q1, q2, q3}, [r0] # CHECK-NEXT: - 2.00 - - - vst43.16 {q0, q1, q2, q3}, [r0]! # CHECK-NEXT: - 2.00 - - - vst20.32 {q0, q1}, [r0] # CHECK-NEXT: - 2.00 - - - vst21.32 {q0, q1}, [r0]! # CHECK-NEXT: - 2.00 - - - vst40.32 {q0, q1, q2, q3}, [r0] # CHECK-NEXT: - 2.00 - - - vst43.32 {q0, q1, q2, q3}, [r0]!