270 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py2# RUN: llvm-mca -mtriple=thumbv8.1-m.main-none-none-eabi -mcpu=cortex-m55 -timeline < %s | FileCheck %s3 4# Most MVE operations are either latency=1 or can forward into stores5vadd.i8 q0, q2, q16vstrb.8 q0, [r0, #0]7vadd.f32 q0, q2, q18vstrb.8 q0, [r0, #0]9vmul.i8 q0, q2, q110vstrb.8 q0, [r0, #0]11vmlas.u32 q0, q2, r012vstrb.8 q0, [r0, #0]13vfma.f16 q0, q2, q114vstrb.8 q0, [r0, #0]15vmullb.s16 q0, q2, q116vstrb.8 q0, [r0, #0]17vcvtt.f32.f16 q0, q218vstrb.8 q0, [r0, #0]19vcvtb.f32.f16 q0, q220vstrb.8 q0, [r0, #0]21 22# The ones that cannot are VCVT.f16.f32 t/b and any VMOVN/VQMOVN/VSHRN/VQSHRN/VRSHRN23vmovnt.s16 q0, q224vstrb.8 q0, [r0, #0]25vmovnb.u32 q0, q226vstrb.8 q0, [r0, #0]27vqmovnt.s32 q0, q228vstrb.8 q0, [r0, #0]29vqmovnb.u16 q0, q230vstrb.8 q0, [r0, #0]31vshrnt.s32 q0, q2, #132vstrb.8 q0, [r0, #0]33vshrnb.u16 q0, q2, #134vstrb.8 q0, [r0, #0]35vqshrnt.s16 q0, q2, #136vstrb.8 q0, [r0, #0]37vqshrnb.u32 q0, q2, #138vstrb.8 q0, [r0, #0]39vrshrnt.s16 q0, q2, #140vstrb.8 q0, [r0, #0]41vrshrnb.u16 q0, q2, #142vstrb.8 q0, [r0, #0]43vcvtt.f16.f32 q0, q244vstrb.8 q0, [r0, #0]45vcvtb.f16.f32 q0, q246vstrb.8 q0, [r0, #0]47 48# CHECK: Iterations: 10049# CHECK-NEXT: Instructions: 400050# CHECK-NEXT: Total Cycles: 640151# CHECK-NEXT: Total uOps: 400052 53# CHECK: Dispatch Width: 254# CHECK-NEXT: uOps Per Cycle: 0.6255# CHECK-NEXT: IPC: 0.6256# CHECK-NEXT: Block RThroughput: 40.057 58# CHECK: Instruction Info:59# CHECK-NEXT: [1]: #uOps60# CHECK-NEXT: [2]: Latency61# CHECK-NEXT: [3]: RThroughput62# CHECK-NEXT: [4]: MayLoad63# CHECK-NEXT: [5]: MayStore64# CHECK-NEXT: [6]: HasSideEffects (U)65 66# CHECK: [1] [2] [3] [4] [5] [6] Instructions:67# CHECK-NEXT: 1 1 2.00 vadd.i8 q0, q2, q168# CHECK-NEXT: 1 1 2.00 * vstrb.8 q0, [r0]69# CHECK-NEXT: 1 1 2.00 vadd.f32 q0, q2, q170# CHECK-NEXT: 1 1 2.00 * vstrb.8 q0, [r0]71# CHECK-NEXT: 1 2 2.00 vmul.i8 q0, q2, q172# CHECK-NEXT: 1 1 2.00 * vstrb.8 q0, [r0]73# CHECK-NEXT: 1 2 2.00 vmlas.i32 q0, q2, r074# CHECK-NEXT: 1 1 2.00 * vstrb.8 q0, [r0]75# CHECK-NEXT: 1 2 2.00 vfma.f16 q0, q2, q176# CHECK-NEXT: 1 1 2.00 * vstrb.8 q0, [r0]77# CHECK-NEXT: 1 2 2.00 vmullb.s16 q0, q2, q178# CHECK-NEXT: 1 1 2.00 * vstrb.8 q0, [r0]79# CHECK-NEXT: 1 2 2.00 vcvtt.f32.f16 q0, q280# CHECK-NEXT: 1 1 2.00 * vstrb.8 q0, [r0]81# CHECK-NEXT: 1 2 2.00 vcvtb.f32.f16 q0, q282# CHECK-NEXT: 1 1 2.00 * vstrb.8 q0, [r0]83# CHECK-NEXT: 1 3 2.00 vmovnt.i16 q0, q284# CHECK-NEXT: 1 1 2.00 * vstrb.8 q0, [r0]85# CHECK-NEXT: 1 3 2.00 vmovnb.i32 q0, q286# CHECK-NEXT: 1 1 2.00 * vstrb.8 q0, [r0]87# CHECK-NEXT: 1 3 2.00 vqmovnt.s32 q0, q288# CHECK-NEXT: 1 1 2.00 * vstrb.8 q0, [r0]89# CHECK-NEXT: 1 3 2.00 vqmovnb.u16 q0, q290# CHECK-NEXT: 1 1 2.00 * vstrb.8 q0, [r0]91# CHECK-NEXT: 1 3 2.00 vshrnt.i32 q0, q2, #192# CHECK-NEXT: 1 1 2.00 * vstrb.8 q0, [r0]93# CHECK-NEXT: 1 3 2.00 vshrnb.i16 q0, q2, #194# CHECK-NEXT: 1 1 2.00 * vstrb.8 q0, [r0]95# CHECK-NEXT: 1 3 2.00 vqshrnt.s16 q0, q2, #196# CHECK-NEXT: 1 1 2.00 * vstrb.8 q0, [r0]97# CHECK-NEXT: 1 3 2.00 vqshrnb.u32 q0, q2, #198# CHECK-NEXT: 1 1 2.00 * vstrb.8 q0, [r0]99# CHECK-NEXT: 1 3 2.00 vrshrnt.i16 q0, q2, #1100# CHECK-NEXT: 1 1 2.00 * vstrb.8 q0, [r0]101# CHECK-NEXT: 1 3 2.00 vrshrnb.i16 q0, q2, #1102# CHECK-NEXT: 1 1 2.00 * vstrb.8 q0, [r0]103# CHECK-NEXT: 1 3 2.00 vcvtt.f16.f32 q0, q2104# CHECK-NEXT: 1 1 2.00 * vstrb.8 q0, [r0]105# CHECK-NEXT: 1 3 2.00 vcvtb.f16.f32 q0, q2106# CHECK-NEXT: 1 1 2.00 * vstrb.8 q0, [r0]107 108# CHECK: Resources:109# CHECK-NEXT: [0] - M55UnitALU110# CHECK-NEXT: [1] - M55UnitLoadStore111# CHECK-NEXT: [2] - M55UnitVecALU112# CHECK-NEXT: [3] - M55UnitVecFPALU113# CHECK-NEXT: [4] - M55UnitVecSys114 115# CHECK: Resource pressure per iteration:116# CHECK-NEXT: [0] [1] [2] [3] [4]117# CHECK-NEXT: - 40.00 22.00 18.00 -118 119# CHECK: Resource pressure by instruction:120# CHECK-NEXT: [0] [1] [2] [3] [4] Instructions:121# CHECK-NEXT: - - 2.00 - - vadd.i8 q0, q2, q1122# CHECK-NEXT: - 2.00 - - - vstrb.8 q0, [r0]123# CHECK-NEXT: - - - 2.00 - vadd.f32 q0, q2, q1124# CHECK-NEXT: - 2.00 - - - vstrb.8 q0, [r0]125# CHECK-NEXT: - - - 2.00 - vmul.i8 q0, q2, q1126# CHECK-NEXT: - 2.00 - - - vstrb.8 q0, [r0]127# CHECK-NEXT: - - - 2.00 - vmlas.i32 q0, q2, r0128# CHECK-NEXT: - 2.00 - - - vstrb.8 q0, [r0]129# CHECK-NEXT: - - - 2.00 - vfma.f16 q0, q2, q1130# CHECK-NEXT: - 2.00 - - - vstrb.8 q0, [r0]131# CHECK-NEXT: - - - 2.00 - vmullb.s16 q0, q2, q1132# CHECK-NEXT: - 2.00 - - - vstrb.8 q0, [r0]133# CHECK-NEXT: - - - 2.00 - vcvtt.f32.f16 q0, q2134# CHECK-NEXT: - 2.00 - - - vstrb.8 q0, [r0]135# CHECK-NEXT: - - - 2.00 - vcvtb.f32.f16 q0, q2136# CHECK-NEXT: - 2.00 - - - vstrb.8 q0, [r0]137# CHECK-NEXT: - - 2.00 - - vmovnt.i16 q0, q2138# CHECK-NEXT: - 2.00 - - - vstrb.8 q0, [r0]139# CHECK-NEXT: - - 2.00 - - vmovnb.i32 q0, q2140# CHECK-NEXT: - 2.00 - - - vstrb.8 q0, [r0]141# CHECK-NEXT: - - 2.00 - - vqmovnt.s32 q0, q2142# CHECK-NEXT: - 2.00 - - - vstrb.8 q0, [r0]143# CHECK-NEXT: - - 2.00 - - vqmovnb.u16 q0, q2144# CHECK-NEXT: - 2.00 - - - vstrb.8 q0, [r0]145# CHECK-NEXT: - - 2.00 - - vshrnt.i32 q0, q2, #1146# CHECK-NEXT: - 2.00 - - - vstrb.8 q0, [r0]147# CHECK-NEXT: - - 2.00 - - vshrnb.i16 q0, q2, #1148# CHECK-NEXT: - 2.00 - - - vstrb.8 q0, [r0]149# CHECK-NEXT: - - 2.00 - - vqshrnt.s16 q0, q2, #1150# CHECK-NEXT: - 2.00 - - - vstrb.8 q0, [r0]151# CHECK-NEXT: - - 2.00 - - vqshrnb.u32 q0, q2, #1152# CHECK-NEXT: - 2.00 - - - vstrb.8 q0, [r0]153# CHECK-NEXT: - - 2.00 - - vrshrnt.i16 q0, q2, #1154# CHECK-NEXT: - 2.00 - - - vstrb.8 q0, [r0]155# CHECK-NEXT: - - 2.00 - - vrshrnb.i16 q0, q2, #1156# CHECK-NEXT: - 2.00 - - - vstrb.8 q0, [r0]157# CHECK-NEXT: - - - 2.00 - vcvtt.f16.f32 q0, q2158# CHECK-NEXT: - 2.00 - - - vstrb.8 q0, [r0]159# CHECK-NEXT: - - - 2.00 - vcvtb.f16.f32 q0, q2160# CHECK-NEXT: - 2.00 - - - vstrb.8 q0, [r0]161 162# CHECK: Timeline view:163# CHECK-NEXT: 0123456789 0123456789 0123456789 0123456789164# CHECK-NEXT: Index 0123456789 0123456789 0123456789 0123456789165 166# CHECK: [0,0] DE . . . . . . . . . . . . . . . . vadd.i8 q0, q2, q1167# CHECK-NEXT: [0,1] .DE . . . . . . . . . . . . . . . . vstrb.8 q0, [r0]168# CHECK-NEXT: [0,2] . DE . . . . . . . . . . . . . . . . vadd.f32 q0, q2, q1169# CHECK-NEXT: [0,3] . DE. . . . . . . . . . . . . . . . vstrb.8 q0, [r0]170# CHECK-NEXT: [0,4] . DeE . . . . . . . . . . . . . . . vmul.i8 q0, q2, q1171# CHECK-NEXT: [0,5] . DE . . . . . . . . . . . . . . . vstrb.8 q0, [r0]172# CHECK-NEXT: [0,6] . .DeE . . . . . . . . . . . . . . . vmlas.i32 q0, q2, r0173# CHECK-NEXT: [0,7] . . DE . . . . . . . . . . . . . . . vstrb.8 q0, [r0]174# CHECK-NEXT: [0,8] . . DeE . . . . . . . . . . . . . . vfma.f16 q0, q2, q1175# CHECK-NEXT: [0,9] . . DE . . . . . . . . . . . . . . vstrb.8 q0, [r0]176# CHECK-NEXT: [0,10] . . DeE . . . . . . . . . . . . . . vmullb.s16 q0, q2, q1177# CHECK-NEXT: [0,11] . . .DE . . . . . . . . . . . . . . vstrb.8 q0, [r0]178# CHECK-NEXT: [0,12] . . . DeE. . . . . . . . . . . . . . vcvtt.f32.f16 q0, q2179# CHECK-NEXT: [0,13] . . . DE. . . . . . . . . . . . . . vstrb.8 q0, [r0]180# CHECK-NEXT: [0,14] . . . DeE . . . . . . . . . . . . . vcvtb.f32.f16 q0, q2181# CHECK-NEXT: [0,15] . . . DE . . . . . . . . . . . . . vstrb.8 q0, [r0]182# CHECK-NEXT: [0,16] . . . .DeeE. . . . . . . . . . . . . vmovnt.i16 q0, q2183# CHECK-NEXT: [0,17] . . . . DE . . . . . . . . . . . . vstrb.8 q0, [r0]184# CHECK-NEXT: [0,18] . . . . DeeE . . . . . . . . . . . . vmovnb.i32 q0, q2185# CHECK-NEXT: [0,19] . . . . . DE. . . . . . . . . . . . vstrb.8 q0, [r0]186# CHECK-NEXT: [0,20] . . . . . DeeE . . . . . . . . . . . vqmovnt.s32 q0, q2187# CHECK-NEXT: [0,21] . . . . . . DE . . . . . . . . . . . vstrb.8 q0, [r0]188# CHECK-NEXT: [0,22] . . . . . . DeeE . . . . . . . . . . vqmovnb.u16 q0, q2189# CHECK-NEXT: [0,23] . . . . . . .DE . . . . . . . . . . vstrb.8 q0, [r0]190# CHECK-NEXT: [0,24] . . . . . . . DeeE . . . . . . . . . vshrnt.i32 q0, q2, #1191# CHECK-NEXT: [0,25] . . . . . . . DE . . . . . . . . . vstrb.8 q0, [r0]192# CHECK-NEXT: [0,26] . . . . . . . .DeeE. . . . . . . . . vshrnb.i16 q0, q2, #1193# CHECK-NEXT: [0,27] . . . . . . . . DE . . . . . . . . vstrb.8 q0, [r0]194# CHECK-NEXT: [0,28] . . . . . . . . DeeE . . . . . . . . vqshrnt.s16 q0, q2, #1195# CHECK-NEXT: [0,29] . . . . . . . . . DE. . . . . . . . vstrb.8 q0, [r0]196# CHECK-NEXT: [0,30] . . . . . . . . . DeeE . . . . . . . vqshrnb.u32 q0, q2, #1197# CHECK-NEXT: [0,31] . . . . . . . . . . DE . . . . . . . vstrb.8 q0, [r0]198# CHECK-NEXT: [0,32] . . . . . . . . . . DeeE . . . . . . vrshrnt.i16 q0, q2, #1199# CHECK-NEXT: [0,33] . . . . . . . . . . .DE . . . . . . vstrb.8 q0, [r0]200# CHECK-NEXT: [0,34] . . . . . . . . . . . DeeE . . . . . vrshrnb.i16 q0, q2, #1201# CHECK-NEXT: [0,35] . . . . . . . . . . . DE . . . . . vstrb.8 q0, [r0]202# CHECK-NEXT: [0,36] . . . . . . . . . . . .DeeE. . . . . vcvtt.f16.f32 q0, q2203# CHECK-NEXT: [0,37] . . . . . . . . . . . . DE . . . . vstrb.8 q0, [r0]204# CHECK-NEXT: [0,38] . . . . . . . . . . . . DeeE . . . . vcvtb.f16.f32 q0, q2205# CHECK-NEXT: [0,39] . . . . . . . . . . . . . DE. . . . vstrb.8 q0, [r0]206# CHECK-NEXT: [1,0] . . . . . . . . . . . . . DE . . . vadd.i8 q0, q2, q1207# CHECK-NEXT: [1,1] . . . . . . . . . . . . . DE . . . vstrb.8 q0, [r0]208# CHECK-NEXT: [1,2] . . . . . . . . . . . . . .DE . . . vadd.f32 q0, q2, q1209# CHECK-NEXT: [1,3] . . . . . . . . . . . . . . DE . . . vstrb.8 q0, [r0]210# CHECK-NEXT: [1,4] . . . . . . . . . . . . . . DeE . . vmul.i8 q0, q2, q1211# CHECK-NEXT: [1,5] . . . . . . . . . . . . . . DE . . vstrb.8 q0, [r0]212# CHECK-NEXT: [1,6] . . . . . . . . . . . . . . DeE . . vmlas.i32 q0, q2, r0213# CHECK-NEXT: [1,7] . . . . . . . . . . . . . . .DE . . vstrb.8 q0, [r0]214# CHECK-NEXT: [1,8] . . . . . . . . . . . . . . . DeE. . vfma.f16 q0, q2, q1215# CHECK-NEXT: [1,9] . . . . . . . . . . . . . . . DE. . vstrb.8 q0, [r0]216# CHECK-NEXT: [1,10] . . . . . . . . . . . . . . . DeE . vmullb.s16 q0, q2, q1217# CHECK-NEXT: [1,11] . . . . . . . . . . . . . . . DE . vstrb.8 q0, [r0]218# CHECK-NEXT: [1,12] . . . . . . . . . . . . . . . .DeE. vcvtt.f32.f16 q0, q2219# CHECK-NEXT: [1,13] . . . . . . . . . . . . . . . . DE. vstrb.8 q0, [r0]220# CHECK-NEXT: Truncated display due to cycle limit221 222# CHECK: Average Wait times (based on the timeline view):223# CHECK-NEXT: [0]: Executions224# CHECK-NEXT: [1]: Average time spent waiting in a scheduler's queue225# CHECK-NEXT: [2]: Average time spent waiting in a scheduler's queue while ready226# CHECK-NEXT: [3]: Average time elapsed from WB until retire stage227 228# CHECK: [0] [1] [2] [3]229# CHECK-NEXT: 0. 10 0.0 0.0 0.0 vadd.i8 q0, q2, q1230# CHECK-NEXT: 1. 10 0.0 0.0 0.0 vstrb.8 q0, [r0]231# CHECK-NEXT: 2. 10 0.0 0.0 0.0 vadd.f32 q0, q2, q1232# CHECK-NEXT: 3. 10 0.0 0.0 0.0 vstrb.8 q0, [r0]233# CHECK-NEXT: 4. 10 0.0 0.0 0.0 vmul.i8 q0, q2, q1234# CHECK-NEXT: 5. 10 0.0 0.0 0.0 vstrb.8 q0, [r0]235# CHECK-NEXT: 6. 10 0.0 0.0 0.0 vmlas.i32 q0, q2, r0236# CHECK-NEXT: 7. 10 0.0 0.0 0.0 vstrb.8 q0, [r0]237# CHECK-NEXT: 8. 10 0.0 0.0 0.0 vfma.f16 q0, q2, q1238# CHECK-NEXT: 9. 10 0.0 0.0 0.0 vstrb.8 q0, [r0]239# CHECK-NEXT: 10. 10 0.0 0.0 0.0 vmullb.s16 q0, q2, q1240# CHECK-NEXT: 11. 10 0.0 0.0 0.0 vstrb.8 q0, [r0]241# CHECK-NEXT: 12. 10 0.0 0.0 0.0 vcvtt.f32.f16 q0, q2242# CHECK-NEXT: 13. 10 0.0 0.0 0.0 vstrb.8 q0, [r0]243# CHECK-NEXT: 14. 10 0.0 0.0 0.0 vcvtb.f32.f16 q0, q2244# CHECK-NEXT: 15. 10 0.0 0.0 0.0 vstrb.8 q0, [r0]245# CHECK-NEXT: 16. 10 0.0 0.0 0.0 vmovnt.i16 q0, q2246# CHECK-NEXT: 17. 10 0.0 0.0 0.0 vstrb.8 q0, [r0]247# CHECK-NEXT: 18. 10 0.0 0.0 0.0 vmovnb.i32 q0, q2248# CHECK-NEXT: 19. 10 0.0 0.0 0.0 vstrb.8 q0, [r0]249# CHECK-NEXT: 20. 10 0.0 0.0 0.0 vqmovnt.s32 q0, q2250# CHECK-NEXT: 21. 10 0.0 0.0 0.0 vstrb.8 q0, [r0]251# CHECK-NEXT: 22. 10 0.0 0.0 0.0 vqmovnb.u16 q0, q2252# CHECK-NEXT: 23. 10 0.0 0.0 0.0 vstrb.8 q0, [r0]253# CHECK-NEXT: 24. 10 0.0 0.0 0.0 vshrnt.i32 q0, q2, #1254# CHECK-NEXT: 25. 10 0.0 0.0 0.0 vstrb.8 q0, [r0]255# CHECK-NEXT: 26. 10 0.0 0.0 0.0 vshrnb.i16 q0, q2, #1256# CHECK-NEXT: 27. 10 0.0 0.0 0.0 vstrb.8 q0, [r0]257# CHECK-NEXT: 28. 10 0.0 0.0 0.0 vqshrnt.s16 q0, q2, #1258# CHECK-NEXT: 29. 10 0.0 0.0 0.0 vstrb.8 q0, [r0]259# CHECK-NEXT: 30. 10 0.0 0.0 0.0 vqshrnb.u32 q0, q2, #1260# CHECK-NEXT: 31. 10 0.0 0.0 0.0 vstrb.8 q0, [r0]261# CHECK-NEXT: 32. 10 0.0 0.0 0.0 vrshrnt.i16 q0, q2, #1262# CHECK-NEXT: 33. 10 0.0 0.0 0.0 vstrb.8 q0, [r0]263# CHECK-NEXT: 34. 10 0.0 0.0 0.0 vrshrnb.i16 q0, q2, #1264# CHECK-NEXT: 35. 10 0.0 0.0 0.0 vstrb.8 q0, [r0]265# CHECK-NEXT: 36. 10 0.0 0.0 0.0 vcvtt.f16.f32 q0, q2266# CHECK-NEXT: 37. 10 0.0 0.0 0.0 vstrb.8 q0, [r0]267# CHECK-NEXT: 38. 10 0.0 0.0 0.0 vcvtb.f16.f32 q0, q2268# CHECK-NEXT: 39. 10 0.0 0.0 0.0 vstrb.8 q0, [r0]269# CHECK-NEXT: 10 0.0 0.0 0.0 <total>270