| # 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 |
| |
| vabd.f16 q0, q2, q1 |
| vabd.f32 q0, q2, q1 |
| vabs.f16 q0, q2 |
| vabs.f32 q0, q2 |
| vadd.f16 q0, q2, q1 |
| vadd.f32 q0, q2, q1 |
| vadd.f16 q0, q2, r0 |
| vadd.f32 q0, q2, r0 |
| vcadd.f16 q0, q2, q1, #90 |
| vcadd.f32 q0, q2, q1, #90 |
| vcmla.f16 q0, q2, q1, #90 |
| vcmla.f32 q0, q2, q1, #90 |
| vcmul.f16 q0, q2, q1, #90 |
| vcmul.f32 q0, q2, q1, #90 |
| vcvt.f16.s16 q0, q1, #4 |
| vcvt.f16.u16 q0, q1, #4 |
| vcvt.s16.f16 q0, q1, #4 |
| vcvt.u16.f16 q0, q1, #4 |
| vcvt.f32.s32 q0, q1, #4 |
| vcvt.f32.u32 q0, q1, #4 |
| vcvt.s32.f32 q0, q1, #4 |
| vcvt.u32.f32 q0, q1, #4 |
| vcvt.f16.s16 q0, q1 |
| vcvt.f32.s32 q0, q1 |
| vcvt.f16.u16 q0, q1 |
| vcvt.f32.u32 q0, q1 |
| vcvt.s16.f16 q0, q1 |
| vcvt.s32.f32 q0, q1 |
| vcvt.u16.f16 q0, q1 |
| vcvt.u32.f32 q0, q1 |
| vcvtb.f16.f32 q0, q1 |
| vcvtb.f32.f16 q0, q1 |
| vcvtt.f16.f32 q0, q1 |
| vcvtt.f32.f16 q0, q1 |
| vcvta.s16.f16 q0, q1 |
| vcvta.s32.f32 q0, q1 |
| vcvta.u16.f16 q0, q1 |
| vcvta.u32.f32 q0, q1 |
| vcvtm.s16.f16 q0, q1 |
| vcvtm.s32.f32 q0, q1 |
| vcvtm.u16.f16 q0, q1 |
| vcvtm.u32.f32 q0, q1 |
| vcvtn.s16.f16 q0, q1 |
| vcvtn.s32.f32 q0, q1 |
| vcvtn.u16.f16 q0, q1 |
| vcvtn.u32.f32 q0, q1 |
| vcvtp.s16.f16 q0, q1 |
| vcvtp.s32.f32 q0, q1 |
| vcvtp.u16.f16 q0, q1 |
| vcvtp.u32.f32 q0, q1 |
| vfma.f16 q0, q2, r0 |
| vfma.f32 q0, q2, r0 |
| vfma.f16 q0, q2, q1 |
| vfma.f32 q0, q2, q1 |
| vfms.f16 q0, q2, q1 |
| vfms.f32 q0, q2, q1 |
| vfmas.f16 q0, q2, r0 |
| vfmas.f32 q0, q2, r0 |
| vmaxnm.f16 q0, q2, q1 |
| vmaxnm.f32 q0, q2, q1 |
| vmaxnma.f16 q0, q2 |
| vmaxnma.f32 q0, q2 |
| vmaxnmv.f16 r0, q2 |
| vmaxnmv.f32 r0, q2 |
| vmaxnmav.f16 r0, q2 |
| vmaxnmav.f32 r0, q2 |
| vminnm.f16 q0, q2, q1 |
| vminnm.f32 q0, q2, q1 |
| vminnma.f16 q0, q2 |
| vminnma.f32 q0, q2 |
| vminnmv.f16 r0, q2 |
| vminnmv.f32 r0, q2 |
| vminnmav.f16 r0, q2 |
| vminnmav.f32 r0, q2 |
| vmul.f16 q0, q2, q1 |
| vmul.f32 q0, q2, q1 |
| vmul.f16 q0, q2, r0 |
| vmul.f32 q0, q2, r0 |
| vneg.f16 q0, q2 |
| vneg.f32 q0, q2 |
| vrinta.f16 q0, q2 |
| vrinta.f32 q0, q2 |
| vrintm.f16 q0, q2 |
| vrintm.f32 q0, q2 |
| vrintn.f16 q0, q2 |
| vrintn.f32 q0, q2 |
| vrintp.f16 q0, q2 |
| vrintp.f32 q0, q2 |
| vrintx.f16 q0, q2 |
| vrintx.f32 q0, q2 |
| vrintz.f16 q0, q2 |
| vrintz.f32 q0, q2 |
| vsub.f16 q0, q2, q1 |
| vsub.f32 q0, q2, q1 |
| vsub.f16 q0, q2, r0 |
| vsub.f32 q0, q2, 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 vabd.f16 q0, q2, q1 |
| # CHECK-NEXT: 1 1 2.00 vabd.f32 q0, q2, q1 |
| # CHECK-NEXT: 1 1 2.00 vabs.f16 q0, q2 |
| # CHECK-NEXT: 1 1 2.00 vabs.f32 q0, q2 |
| # CHECK-NEXT: 1 1 2.00 vadd.f16 q0, q2, q1 |
| # CHECK-NEXT: 1 1 2.00 vadd.f32 q0, q2, q1 |
| # CHECK-NEXT: 1 2 2.00 vadd.f16 q0, q2, r0 |
| # CHECK-NEXT: 1 2 2.00 vadd.f32 q0, q2, r0 |
| # CHECK-NEXT: 1 1 2.00 vcadd.f16 q0, q2, q1, #90 |
| # CHECK-NEXT: 1 1 2.00 vcadd.f32 q0, q2, q1, #90 |
| # CHECK-NEXT: 1 2 2.00 vcmla.f16 q0, q2, q1, #90 |
| # CHECK-NEXT: 1 2 2.00 vcmla.f32 q0, q2, q1, #90 |
| # CHECK-NEXT: 1 2 2.00 vcmul.f16 q0, q2, q1, #90 |
| # CHECK-NEXT: 1 2 2.00 vcmul.f32 q0, q2, q1, #90 |
| # CHECK-NEXT: 1 2 2.00 vcvt.f16.s16 q0, q1, #4 |
| # CHECK-NEXT: 1 2 2.00 vcvt.f16.u16 q0, q1, #4 |
| # CHECK-NEXT: 1 2 2.00 vcvt.s16.f16 q0, q1, #4 |
| # CHECK-NEXT: 1 2 2.00 vcvt.u16.f16 q0, q1, #4 |
| # CHECK-NEXT: 1 2 2.00 vcvt.f32.s32 q0, q1, #4 |
| # CHECK-NEXT: 1 2 2.00 vcvt.f32.u32 q0, q1, #4 |
| # CHECK-NEXT: 1 2 2.00 vcvt.s32.f32 q0, q1, #4 |
| # CHECK-NEXT: 1 2 2.00 vcvt.u32.f32 q0, q1, #4 |
| # CHECK-NEXT: 1 2 2.00 vcvt.f16.s16 q0, q1 |
| # CHECK-NEXT: 1 2 2.00 vcvt.f32.s32 q0, q1 |
| # CHECK-NEXT: 1 2 2.00 vcvt.f16.u16 q0, q1 |
| # CHECK-NEXT: 1 2 2.00 vcvt.f32.u32 q0, q1 |
| # CHECK-NEXT: 1 2 2.00 vcvt.s16.f16 q0, q1 |
| # CHECK-NEXT: 1 2 2.00 vcvt.s32.f32 q0, q1 |
| # CHECK-NEXT: 1 2 2.00 vcvt.u16.f16 q0, q1 |
| # CHECK-NEXT: 1 2 2.00 vcvt.u32.f32 q0, q1 |
| # CHECK-NEXT: 1 3 2.00 vcvtb.f16.f32 q0, q1 |
| # CHECK-NEXT: 1 2 2.00 vcvtb.f32.f16 q0, q1 |
| # CHECK-NEXT: 1 3 2.00 vcvtt.f16.f32 q0, q1 |
| # CHECK-NEXT: 1 2 2.00 vcvtt.f32.f16 q0, q1 |
| # CHECK-NEXT: 1 2 2.00 vcvta.s16.f16 q0, q1 |
| # CHECK-NEXT: 1 2 2.00 vcvta.s32.f32 q0, q1 |
| # CHECK-NEXT: 1 2 2.00 vcvta.u16.f16 q0, q1 |
| # CHECK-NEXT: 1 2 2.00 vcvta.u32.f32 q0, q1 |
| # CHECK-NEXT: 1 2 2.00 vcvtm.s16.f16 q0, q1 |
| # CHECK-NEXT: 1 2 2.00 vcvtm.s32.f32 q0, q1 |
| # CHECK-NEXT: 1 2 2.00 vcvtm.u16.f16 q0, q1 |
| # CHECK-NEXT: 1 2 2.00 vcvtm.u32.f32 q0, q1 |
| # CHECK-NEXT: 1 2 2.00 vcvtn.s16.f16 q0, q1 |
| # CHECK-NEXT: 1 2 2.00 vcvtn.s32.f32 q0, q1 |
| # CHECK-NEXT: 1 2 2.00 vcvtn.u16.f16 q0, q1 |
| # CHECK-NEXT: 1 2 2.00 vcvtn.u32.f32 q0, q1 |
| # CHECK-NEXT: 1 2 2.00 vcvtp.s16.f16 q0, q1 |
| # CHECK-NEXT: 1 2 2.00 vcvtp.s32.f32 q0, q1 |
| # CHECK-NEXT: 1 2 2.00 vcvtp.u16.f16 q0, q1 |
| # CHECK-NEXT: 1 2 2.00 vcvtp.u32.f32 q0, q1 |
| # CHECK-NEXT: 1 2 2.00 vfma.f16 q0, q2, r0 |
| # CHECK-NEXT: 1 2 2.00 vfma.f32 q0, q2, r0 |
| # CHECK-NEXT: 1 2 2.00 vfma.f16 q0, q2, q1 |
| # CHECK-NEXT: 1 2 2.00 vfma.f32 q0, q2, q1 |
| # CHECK-NEXT: 1 2 2.00 vfms.f16 q0, q2, q1 |
| # CHECK-NEXT: 1 2 2.00 vfms.f32 q0, q2, q1 |
| # CHECK-NEXT: 1 2 2.00 vfmas.f16 q0, q2, r0 |
| # CHECK-NEXT: 1 2 2.00 vfmas.f32 q0, q2, r0 |
| # CHECK-NEXT: 1 1 2.00 vmaxnm.f16 q0, q2, q1 |
| # CHECK-NEXT: 1 1 2.00 vmaxnm.f32 q0, q2, q1 |
| # CHECK-NEXT: 1 1 2.00 vmaxnma.f16 q0, q2 |
| # CHECK-NEXT: 1 1 2.00 vmaxnma.f32 q0, q2 |
| # CHECK-NEXT: 1 1 2.00 vmaxnmv.f16 r0, q2 |
| # CHECK-NEXT: 1 1 2.00 vmaxnmv.f32 r0, q2 |
| # CHECK-NEXT: 1 1 2.00 vmaxnmav.f16 r0, q2 |
| # CHECK-NEXT: 1 1 2.00 vmaxnmav.f32 r0, q2 |
| # CHECK-NEXT: 1 1 2.00 vminnm.f16 q0, q2, q1 |
| # CHECK-NEXT: 1 1 2.00 vminnm.f32 q0, q2, q1 |
| # CHECK-NEXT: 1 1 2.00 vminnma.f16 q0, q2 |
| # CHECK-NEXT: 1 1 2.00 vminnma.f32 q0, q2 |
| # CHECK-NEXT: 1 1 2.00 vminnmv.f16 r0, q2 |
| # CHECK-NEXT: 1 1 2.00 vminnmv.f32 r0, q2 |
| # CHECK-NEXT: 1 1 2.00 vminnmav.f16 r0, q2 |
| # CHECK-NEXT: 1 1 2.00 vminnmav.f32 r0, q2 |
| # CHECK-NEXT: 1 2 2.00 vmul.f16 q0, q2, q1 |
| # CHECK-NEXT: 1 2 2.00 vmul.f32 q0, q2, q1 |
| # CHECK-NEXT: 1 2 2.00 vmul.f16 q0, q2, r0 |
| # CHECK-NEXT: 1 2 2.00 vmul.f32 q0, q2, r0 |
| # CHECK-NEXT: 1 1 2.00 vneg.f16 q0, q2 |
| # CHECK-NEXT: 1 1 2.00 vneg.f32 q0, q2 |
| # CHECK-NEXT: 1 2 2.00 vrinta.f16 q0, q2 |
| # CHECK-NEXT: 1 2 2.00 vrinta.f32 q0, q2 |
| # CHECK-NEXT: 1 2 2.00 vrintm.f16 q0, q2 |
| # CHECK-NEXT: 1 2 2.00 vrintm.f32 q0, q2 |
| # CHECK-NEXT: 1 2 2.00 vrintn.f16 q0, q2 |
| # CHECK-NEXT: 1 2 2.00 vrintn.f32 q0, q2 |
| # CHECK-NEXT: 1 2 2.00 vrintp.f16 q0, q2 |
| # CHECK-NEXT: 1 2 2.00 vrintp.f32 q0, q2 |
| # CHECK-NEXT: 1 2 2.00 vrintx.f16 q0, q2 |
| # CHECK-NEXT: 1 2 2.00 vrintx.f32 q0, q2 |
| # CHECK-NEXT: 1 2 2.00 vrintz.f16 q0, q2 |
| # CHECK-NEXT: 1 2 2.00 vrintz.f32 q0, q2 |
| # CHECK-NEXT: 1 1 2.00 vsub.f16 q0, q2, q1 |
| # CHECK-NEXT: 1 1 2.00 vsub.f32 q0, q2, q1 |
| # CHECK-NEXT: 1 2 2.00 vsub.f16 q0, q2, r0 |
| # CHECK-NEXT: 1 2 2.00 vsub.f32 q0, q2, 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: - - - 192.00 - |
| |
| # CHECK: Resource pressure by instruction: |
| # CHECK-NEXT: [0] [1] [2] [3] [4] Instructions: |
| # CHECK-NEXT: - - - 2.00 - vabd.f16 q0, q2, q1 |
| # CHECK-NEXT: - - - 2.00 - vabd.f32 q0, q2, q1 |
| # CHECK-NEXT: - - - 2.00 - vabs.f16 q0, q2 |
| # CHECK-NEXT: - - - 2.00 - vabs.f32 q0, q2 |
| # CHECK-NEXT: - - - 2.00 - vadd.f16 q0, q2, q1 |
| # CHECK-NEXT: - - - 2.00 - vadd.f32 q0, q2, q1 |
| # CHECK-NEXT: - - - 2.00 - vadd.f16 q0, q2, r0 |
| # CHECK-NEXT: - - - 2.00 - vadd.f32 q0, q2, r0 |
| # CHECK-NEXT: - - - 2.00 - vcadd.f16 q0, q2, q1, #90 |
| # CHECK-NEXT: - - - 2.00 - vcadd.f32 q0, q2, q1, #90 |
| # CHECK-NEXT: - - - 2.00 - vcmla.f16 q0, q2, q1, #90 |
| # CHECK-NEXT: - - - 2.00 - vcmla.f32 q0, q2, q1, #90 |
| # CHECK-NEXT: - - - 2.00 - vcmul.f16 q0, q2, q1, #90 |
| # CHECK-NEXT: - - - 2.00 - vcmul.f32 q0, q2, q1, #90 |
| # CHECK-NEXT: - - - 2.00 - vcvt.f16.s16 q0, q1, #4 |
| # CHECK-NEXT: - - - 2.00 - vcvt.f16.u16 q0, q1, #4 |
| # CHECK-NEXT: - - - 2.00 - vcvt.s16.f16 q0, q1, #4 |
| # CHECK-NEXT: - - - 2.00 - vcvt.u16.f16 q0, q1, #4 |
| # CHECK-NEXT: - - - 2.00 - vcvt.f32.s32 q0, q1, #4 |
| # CHECK-NEXT: - - - 2.00 - vcvt.f32.u32 q0, q1, #4 |
| # CHECK-NEXT: - - - 2.00 - vcvt.s32.f32 q0, q1, #4 |
| # CHECK-NEXT: - - - 2.00 - vcvt.u32.f32 q0, q1, #4 |
| # CHECK-NEXT: - - - 2.00 - vcvt.f16.s16 q0, q1 |
| # CHECK-NEXT: - - - 2.00 - vcvt.f32.s32 q0, q1 |
| # CHECK-NEXT: - - - 2.00 - vcvt.f16.u16 q0, q1 |
| # CHECK-NEXT: - - - 2.00 - vcvt.f32.u32 q0, q1 |
| # CHECK-NEXT: - - - 2.00 - vcvt.s16.f16 q0, q1 |
| # CHECK-NEXT: - - - 2.00 - vcvt.s32.f32 q0, q1 |
| # CHECK-NEXT: - - - 2.00 - vcvt.u16.f16 q0, q1 |
| # CHECK-NEXT: - - - 2.00 - vcvt.u32.f32 q0, q1 |
| # CHECK-NEXT: - - - 2.00 - vcvtb.f16.f32 q0, q1 |
| # CHECK-NEXT: - - - 2.00 - vcvtb.f32.f16 q0, q1 |
| # CHECK-NEXT: - - - 2.00 - vcvtt.f16.f32 q0, q1 |
| # CHECK-NEXT: - - - 2.00 - vcvtt.f32.f16 q0, q1 |
| # CHECK-NEXT: - - - 2.00 - vcvta.s16.f16 q0, q1 |
| # CHECK-NEXT: - - - 2.00 - vcvta.s32.f32 q0, q1 |
| # CHECK-NEXT: - - - 2.00 - vcvta.u16.f16 q0, q1 |
| # CHECK-NEXT: - - - 2.00 - vcvta.u32.f32 q0, q1 |
| # CHECK-NEXT: - - - 2.00 - vcvtm.s16.f16 q0, q1 |
| # CHECK-NEXT: - - - 2.00 - vcvtm.s32.f32 q0, q1 |
| # CHECK-NEXT: - - - 2.00 - vcvtm.u16.f16 q0, q1 |
| # CHECK-NEXT: - - - 2.00 - vcvtm.u32.f32 q0, q1 |
| # CHECK-NEXT: - - - 2.00 - vcvtn.s16.f16 q0, q1 |
| # CHECK-NEXT: - - - 2.00 - vcvtn.s32.f32 q0, q1 |
| # CHECK-NEXT: - - - 2.00 - vcvtn.u16.f16 q0, q1 |
| # CHECK-NEXT: - - - 2.00 - vcvtn.u32.f32 q0, q1 |
| # CHECK-NEXT: - - - 2.00 - vcvtp.s16.f16 q0, q1 |
| # CHECK-NEXT: - - - 2.00 - vcvtp.s32.f32 q0, q1 |
| # CHECK-NEXT: - - - 2.00 - vcvtp.u16.f16 q0, q1 |
| # CHECK-NEXT: - - - 2.00 - vcvtp.u32.f32 q0, q1 |
| # CHECK-NEXT: - - - 2.00 - vfma.f16 q0, q2, r0 |
| # CHECK-NEXT: - - - 2.00 - vfma.f32 q0, q2, r0 |
| # CHECK-NEXT: - - - 2.00 - vfma.f16 q0, q2, q1 |
| # CHECK-NEXT: - - - 2.00 - vfma.f32 q0, q2, q1 |
| # CHECK-NEXT: - - - 2.00 - vfms.f16 q0, q2, q1 |
| # CHECK-NEXT: - - - 2.00 - vfms.f32 q0, q2, q1 |
| # CHECK-NEXT: - - - 2.00 - vfmas.f16 q0, q2, r0 |
| # CHECK-NEXT: - - - 2.00 - vfmas.f32 q0, q2, r0 |
| # CHECK-NEXT: - - - 2.00 - vmaxnm.f16 q0, q2, q1 |
| # CHECK-NEXT: - - - 2.00 - vmaxnm.f32 q0, q2, q1 |
| # CHECK-NEXT: - - - 2.00 - vmaxnma.f16 q0, q2 |
| # CHECK-NEXT: - - - 2.00 - vmaxnma.f32 q0, q2 |
| # CHECK-NEXT: - - - 2.00 - vmaxnmv.f16 r0, q2 |
| # CHECK-NEXT: - - - 2.00 - vmaxnmv.f32 r0, q2 |
| # CHECK-NEXT: - - - 2.00 - vmaxnmav.f16 r0, q2 |
| # CHECK-NEXT: - - - 2.00 - vmaxnmav.f32 r0, q2 |
| # CHECK-NEXT: - - - 2.00 - vminnm.f16 q0, q2, q1 |
| # CHECK-NEXT: - - - 2.00 - vminnm.f32 q0, q2, q1 |
| # CHECK-NEXT: - - - 2.00 - vminnma.f16 q0, q2 |
| # CHECK-NEXT: - - - 2.00 - vminnma.f32 q0, q2 |
| # CHECK-NEXT: - - - 2.00 - vminnmv.f16 r0, q2 |
| # CHECK-NEXT: - - - 2.00 - vminnmv.f32 r0, q2 |
| # CHECK-NEXT: - - - 2.00 - vminnmav.f16 r0, q2 |
| # CHECK-NEXT: - - - 2.00 - vminnmav.f32 r0, q2 |
| # CHECK-NEXT: - - - 2.00 - vmul.f16 q0, q2, q1 |
| # CHECK-NEXT: - - - 2.00 - vmul.f32 q0, q2, q1 |
| # CHECK-NEXT: - - - 2.00 - vmul.f16 q0, q2, r0 |
| # CHECK-NEXT: - - - 2.00 - vmul.f32 q0, q2, r0 |
| # CHECK-NEXT: - - - 2.00 - vneg.f16 q0, q2 |
| # CHECK-NEXT: - - - 2.00 - vneg.f32 q0, q2 |
| # CHECK-NEXT: - - - 2.00 - vrinta.f16 q0, q2 |
| # CHECK-NEXT: - - - 2.00 - vrinta.f32 q0, q2 |
| # CHECK-NEXT: - - - 2.00 - vrintm.f16 q0, q2 |
| # CHECK-NEXT: - - - 2.00 - vrintm.f32 q0, q2 |
| # CHECK-NEXT: - - - 2.00 - vrintn.f16 q0, q2 |
| # CHECK-NEXT: - - - 2.00 - vrintn.f32 q0, q2 |
| # CHECK-NEXT: - - - 2.00 - vrintp.f16 q0, q2 |
| # CHECK-NEXT: - - - 2.00 - vrintp.f32 q0, q2 |
| # CHECK-NEXT: - - - 2.00 - vrintx.f16 q0, q2 |
| # CHECK-NEXT: - - - 2.00 - vrintx.f32 q0, q2 |
| # CHECK-NEXT: - - - 2.00 - vrintz.f16 q0, q2 |
| # CHECK-NEXT: - - - 2.00 - vrintz.f32 q0, q2 |
| # CHECK-NEXT: - - - 2.00 - vsub.f16 q0, q2, q1 |
| # CHECK-NEXT: - - - 2.00 - vsub.f32 q0, q2, q1 |
| # CHECK-NEXT: - - - 2.00 - vsub.f16 q0, q2, r0 |
| # CHECK-NEXT: - - - 2.00 - vsub.f32 q0, q2, r0 |