324 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 -instruction-tables < %s | FileCheck %s3 4vldrb.8 q1, [r0, 0]5vldrb.8 q1, [r0, 0]!6vldrb.8 q1, [r0], 07vldrh.16 q1, [r0, 0]8vldrh.16 q1, [r0, 0]!9vldrh.16 q1, [r0], 010vldrw.32 q1, [r0, 0]11vldrw.32 q1, [r0, 0]!12vldrw.32 q1, [r0], 013 14vldrb.u16 q1, [r0, 0]15vldrb.u16 q1, [r0, 0]!16vldrb.u16 q1, [r0], 017vldrb.u32 q1, [r0, 0]18vldrb.u32 q1, [r0, 0]!19vldrb.u32 q1, [r0], 020vldrh.u32 q1, [r0, 0]21vldrh.u32 q1, [r0, 0]!22vldrh.u32 q1, [r0], 023 24vldrb.s16 q1, [r0, 4]25vldrb.s16 q1, [r0, 4]!26vldrb.s16 q1, [r0], 427vldrb.s32 q1, [r0, 4]28vldrb.s32 q1, [r0, 4]!29vldrb.s32 q1, [r0], 430vldrh.s32 q1, [r0, 4]31vldrh.s32 q1, [r0, 4]!32vldrh.s32 q1, [r0], 433 34vldrw.32 q1, [r0, q0]35vldrh.16 q1, [r0, q0]36vldrb.8 q1, [r0, q0]37vldrb.u16 q1, [r0, q0]38vldrb.u32 q1, [r0, q0]39vldrh.u32 q1, [r0, q0]40vldrb.s16 q1, [r0, q0]41vldrb.s32 q1, [r0, q0]42vldrh.s32 q1, [r0, q0]43vldrw.32 q1, [r0, q0, uxtw #2]44vldrh.16 q1, [r0, q0, uxtw #1]45vldrh.u32 q1, [r0, q0, uxtw #1]46vldrh.s32 q1, [r0, q0, uxtw #1]47 48vldrw.32 q1, [q0, 4]49vldrw.32 q1, [q0, 4]!50 51vld20.8 {q0, q1}, [r0]52vld21.8 {q0, q1}, [r0]!53vld40.8 {q0, q1, q2, q3}, [r0]54vld43.8 {q0, q1, q2, q3}, [r0]!55vld20.16 {q0, q1}, [r0]56vld21.16 {q0, q1}, [r0]!57vld40.16 {q0, q1, q2, q3}, [r0]58vld43.16 {q0, q1, q2, q3}, [r0]!59vld20.32 {q0, q1}, [r0]60vld21.32 {q0, q1}, [r0]!61vld40.32 {q0, q1, q2, q3}, [r0]62vld43.32 {q0, q1, q2, q3}, [r0]!63 64vstrb.8 q1, [r0, 0]65vstrb.8 q1, [r0, 0]!66vstrb.8 q1, [r0], 067vstrh.16 q1, [r0, 0]68vstrh.16 q1, [r0, 0]!69vstrh.16 q1, [r0], 070vstrw.32 q1, [r0, 0]71vstrw.32 q1, [r0, 0]!72vstrw.32 q1, [r0], 073 74vstrb.16 q1, [r0, 0]75vstrb.16 q1, [r0, 0]!76vstrb.16 q1, [r0], 077vstrb.32 q1, [r0, 0]78vstrb.32 q1, [r0, 0]!79vstrb.32 q1, [r0], 080vstrh.32 q1, [r0, 0]81vstrh.32 q1, [r0, 0]!82vstrh.32 q1, [r0], 083 84vstrw.32 q1, [r0, q0]85vstrh.16 q1, [r0, q0]86vstrb.8 q1, [r0, q0]87vstrb.16 q1, [r0, q0]88vstrb.32 q1, [r0, q0]89vstrh.32 q1, [r0, q0]90 91vstrw.32 q1, [r0, q0, uxtw #2]92vstrh.16 q1, [r0, q0, uxtw #1]93vstrh.32 q1, [r0, q0, uxtw #1]94 95vstrw.32 q1, [q0, 4]96vstrw.32 q1, [q0, 4]!97 98vst20.8 {q0, q1}, [r0]99vst21.8 {q0, q1}, [r0]!100vst40.8 {q0, q1, q2, q3}, [r0]101vst43.8 {q0, q1, q2, q3}, [r0]!102vst20.16 {q0, q1}, [r0]103vst21.16 {q0, q1}, [r0]!104vst40.16 {q0, q1, q2, q3}, [r0]105vst43.16 {q0, q1, q2, q3}, [r0]!106vst20.32 {q0, q1}, [r0]107vst21.32 {q0, q1}, [r0]!108vst40.32 {q0, q1, q2, q3}, [r0]109vst43.32 {q0, q1, q2, q3}, [r0]!110 111# CHECK: Instruction Info:112# CHECK-NEXT: [1]: #uOps113# CHECK-NEXT: [2]: Latency114# CHECK-NEXT: [3]: RThroughput115# CHECK-NEXT: [4]: MayLoad116# CHECK-NEXT: [5]: MayStore117# CHECK-NEXT: [6]: HasSideEffects (U)118 119# CHECK: [1] [2] [3] [4] [5] [6] Instructions:120# CHECK-NEXT: 1 1 2.00 * vldrb.u8 q1, [r0]121# CHECK-NEXT: 1 1 2.00 * vldrb.u8 q1, [r0, #0]!122# CHECK-NEXT: 1 1 2.00 * vldrb.u8 q1, [r0], #0123# CHECK-NEXT: 1 1 2.00 * vldrh.u16 q1, [r0]124# CHECK-NEXT: 1 1 2.00 * vldrh.u16 q1, [r0, #0]!125# CHECK-NEXT: 1 1 2.00 * vldrh.u16 q1, [r0], #0126# CHECK-NEXT: 1 1 2.00 * vldrw.u32 q1, [r0]127# CHECK-NEXT: 1 1 2.00 * vldrw.u32 q1, [r0, #0]!128# CHECK-NEXT: 1 1 2.00 * vldrw.u32 q1, [r0], #0129# CHECK-NEXT: 1 1 2.00 * vldrb.u16 q1, [r0]130# CHECK-NEXT: 1 1 2.00 * vldrb.u16 q1, [r0]!131# CHECK-NEXT: 1 1 2.00 * vldrb.u16 q1, [r0], #0132# CHECK-NEXT: 1 1 2.00 * vldrb.u32 q1, [r0]133# CHECK-NEXT: 1 1 2.00 * vldrb.u32 q1, [r0]!134# CHECK-NEXT: 1 1 2.00 * vldrb.u32 q1, [r0], #0135# CHECK-NEXT: 1 1 2.00 * vldrh.u32 q1, [r0]136# CHECK-NEXT: 1 1 2.00 * vldrh.u32 q1, [r0]!137# CHECK-NEXT: 1 1 2.00 * vldrh.u32 q1, [r0], #0138# CHECK-NEXT: 1 1 2.00 * vldrb.s16 q1, [r0, #4]139# CHECK-NEXT: 1 1 2.00 * vldrb.s16 q1, [r0, #4]!140# CHECK-NEXT: 1 1 2.00 * vldrb.s16 q1, [r0], #4141# CHECK-NEXT: 1 1 2.00 * vldrb.s32 q1, [r0, #4]142# CHECK-NEXT: 1 1 2.00 * vldrb.s32 q1, [r0, #4]!143# CHECK-NEXT: 1 1 2.00 * vldrb.s32 q1, [r0], #4144# CHECK-NEXT: 1 1 2.00 * vldrh.s32 q1, [r0, #4]145# CHECK-NEXT: 1 1 2.00 * vldrh.s32 q1, [r0, #4]!146# CHECK-NEXT: 1 1 2.00 * vldrh.s32 q1, [r0], #4147# CHECK-NEXT: 1 6 2.00 * vldrw.u32 q1, [r0, q0]148# CHECK-NEXT: 1 6 2.00 * vldrh.u16 q1, [r0, q0]149# CHECK-NEXT: 1 6 2.00 * vldrb.u8 q1, [r0, q0]150# CHECK-NEXT: 1 6 2.00 * vldrb.u16 q1, [r0, q0]151# CHECK-NEXT: 1 6 2.00 * vldrb.u32 q1, [r0, q0]152# CHECK-NEXT: 1 6 2.00 * vldrh.u32 q1, [r0, q0]153# CHECK-NEXT: 1 6 2.00 * vldrb.s16 q1, [r0, q0]154# CHECK-NEXT: 1 6 2.00 * vldrb.s32 q1, [r0, q0]155# CHECK-NEXT: 1 6 2.00 * vldrh.s32 q1, [r0, q0]156# CHECK-NEXT: 1 6 2.00 * vldrw.u32 q1, [r0, q0, uxtw #2]157# CHECK-NEXT: 1 6 2.00 * vldrh.u16 q1, [r0, q0, uxtw #1]158# CHECK-NEXT: 1 6 2.00 * vldrh.u32 q1, [r0, q0, uxtw #1]159# CHECK-NEXT: 1 6 2.00 * vldrh.s32 q1, [r0, q0, uxtw #1]160# CHECK-NEXT: 1 6 2.00 * vldrw.u32 q1, [q0, #4]161# CHECK-NEXT: 1 6 2.00 * vldrw.u32 q1, [q0, #4]!162# CHECK-NEXT: 1 1 2.00 * vld20.8 {q0, q1}, [r0]163# CHECK-NEXT: 1 1 2.00 * vld21.8 {q0, q1}, [r0]!164# CHECK-NEXT: 1 1 2.00 * vld40.8 {q0, q1, q2, q3}, [r0]165# CHECK-NEXT: 1 1 2.00 * vld43.8 {q0, q1, q2, q3}, [r0]!166# CHECK-NEXT: 1 1 2.00 * vld20.16 {q0, q1}, [r0]167# CHECK-NEXT: 1 1 2.00 * vld21.16 {q0, q1}, [r0]!168# CHECK-NEXT: 1 1 2.00 * vld40.16 {q0, q1, q2, q3}, [r0]169# CHECK-NEXT: 1 1 2.00 * vld43.16 {q0, q1, q2, q3}, [r0]!170# CHECK-NEXT: 1 1 2.00 * vld20.32 {q0, q1}, [r0]171# CHECK-NEXT: 1 1 2.00 * vld21.32 {q0, q1}, [r0]!172# CHECK-NEXT: 1 1 2.00 * vld40.32 {q0, q1, q2, q3}, [r0]173# CHECK-NEXT: 1 1 2.00 * vld43.32 {q0, q1, q2, q3}, [r0]!174# CHECK-NEXT: 1 1 2.00 * vstrb.8 q1, [r0]175# CHECK-NEXT: 1 1 2.00 * vstrb.8 q1, [r0, #0]!176# CHECK-NEXT: 1 1 2.00 * vstrb.8 q1, [r0], #0177# CHECK-NEXT: 1 1 2.00 * vstrh.16 q1, [r0]178# CHECK-NEXT: 1 1 2.00 * vstrh.16 q1, [r0, #0]!179# CHECK-NEXT: 1 1 2.00 * vstrh.16 q1, [r0], #0180# CHECK-NEXT: 1 1 2.00 * vstrw.32 q1, [r0]181# CHECK-NEXT: 1 1 2.00 * vstrw.32 q1, [r0, #0]!182# CHECK-NEXT: 1 1 2.00 * vstrw.32 q1, [r0], #0183# CHECK-NEXT: 1 1 2.00 * vstrb.16 q1, [r0]184# CHECK-NEXT: 1 1 2.00 * vstrb.16 q1, [r0]!185# CHECK-NEXT: 1 1 2.00 * vstrb.16 q1, [r0], #0186# CHECK-NEXT: 1 1 2.00 * vstrb.32 q1, [r0]187# CHECK-NEXT: 1 1 2.00 * vstrb.32 q1, [r0]!188# CHECK-NEXT: 1 1 2.00 * vstrb.32 q1, [r0], #0189# CHECK-NEXT: 1 1 2.00 * vstrh.32 q1, [r0]190# CHECK-NEXT: 1 1 2.00 * vstrh.32 q1, [r0]!191# CHECK-NEXT: 1 1 2.00 * vstrh.32 q1, [r0], #0192# CHECK-NEXT: 1 5 2.00 * vstrw.32 q1, [r0, q0]193# CHECK-NEXT: 1 5 2.00 * vstrh.16 q1, [r0, q0]194# CHECK-NEXT: 1 5 2.00 * vstrb.8 q1, [r0, q0]195# CHECK-NEXT: 1 5 2.00 * vstrb.16 q1, [r0, q0]196# CHECK-NEXT: 1 5 2.00 * vstrb.32 q1, [r0, q0]197# CHECK-NEXT: 1 5 2.00 * vstrh.32 q1, [r0, q0]198# CHECK-NEXT: 1 5 2.00 * vstrw.32 q1, [r0, q0, uxtw #2]199# CHECK-NEXT: 1 5 2.00 * vstrh.16 q1, [r0, q0, uxtw #1]200# CHECK-NEXT: 1 5 2.00 * vstrh.32 q1, [r0, q0, uxtw #1]201# CHECK-NEXT: 1 5 2.00 * vstrw.32 q1, [q0, #4]202# CHECK-NEXT: 1 5 2.00 * vstrw.32 q1, [q0, #4]!203# CHECK-NEXT: 1 1 2.00 * vst20.8 {q0, q1}, [r0]204# CHECK-NEXT: 1 1 2.00 * vst21.8 {q0, q1}, [r0]!205# CHECK-NEXT: 1 1 2.00 * vst40.8 {q0, q1, q2, q3}, [r0]206# CHECK-NEXT: 1 1 2.00 * vst43.8 {q0, q1, q2, q3}, [r0]!207# CHECK-NEXT: 1 1 2.00 * vst20.16 {q0, q1}, [r0]208# CHECK-NEXT: 1 1 2.00 * vst21.16 {q0, q1}, [r0]!209# CHECK-NEXT: 1 1 2.00 * vst40.16 {q0, q1, q2, q3}, [r0]210# CHECK-NEXT: 1 1 2.00 * vst43.16 {q0, q1, q2, q3}, [r0]!211# CHECK-NEXT: 1 1 2.00 * vst20.32 {q0, q1}, [r0]212# CHECK-NEXT: 1 1 2.00 * vst21.32 {q0, q1}, [r0]!213# CHECK-NEXT: 1 1 2.00 * vst40.32 {q0, q1, q2, q3}, [r0]214# CHECK-NEXT: 1 1 2.00 * vst43.32 {q0, q1, q2, q3}, [r0]!215 216# CHECK: Resources:217# CHECK-NEXT: [0] - M55UnitALU218# CHECK-NEXT: [1] - M55UnitLoadStore219# CHECK-NEXT: [2] - M55UnitVecALU220# CHECK-NEXT: [3] - M55UnitVecFPALU221# CHECK-NEXT: [4] - M55UnitVecSys222 223# CHECK: Resource pressure per iteration:224# CHECK-NEXT: [0] [1] [2] [3] [4]225# CHECK-NEXT: - 190.00 - - -226 227# CHECK: Resource pressure by instruction:228# CHECK-NEXT: [0] [1] [2] [3] [4] Instructions:229# CHECK-NEXT: - 2.00 - - - vldrb.u8 q1, [r0]230# CHECK-NEXT: - 2.00 - - - vldrb.u8 q1, [r0, #0]!231# CHECK-NEXT: - 2.00 - - - vldrb.u8 q1, [r0], #0232# CHECK-NEXT: - 2.00 - - - vldrh.u16 q1, [r0]233# CHECK-NEXT: - 2.00 - - - vldrh.u16 q1, [r0, #0]!234# CHECK-NEXT: - 2.00 - - - vldrh.u16 q1, [r0], #0235# CHECK-NEXT: - 2.00 - - - vldrw.u32 q1, [r0]236# CHECK-NEXT: - 2.00 - - - vldrw.u32 q1, [r0, #0]!237# CHECK-NEXT: - 2.00 - - - vldrw.u32 q1, [r0], #0238# CHECK-NEXT: - 2.00 - - - vldrb.u16 q1, [r0]239# CHECK-NEXT: - 2.00 - - - vldrb.u16 q1, [r0]!240# CHECK-NEXT: - 2.00 - - - vldrb.u16 q1, [r0], #0241# CHECK-NEXT: - 2.00 - - - vldrb.u32 q1, [r0]242# CHECK-NEXT: - 2.00 - - - vldrb.u32 q1, [r0]!243# CHECK-NEXT: - 2.00 - - - vldrb.u32 q1, [r0], #0244# CHECK-NEXT: - 2.00 - - - vldrh.u32 q1, [r0]245# CHECK-NEXT: - 2.00 - - - vldrh.u32 q1, [r0]!246# CHECK-NEXT: - 2.00 - - - vldrh.u32 q1, [r0], #0247# CHECK-NEXT: - 2.00 - - - vldrb.s16 q1, [r0, #4]248# CHECK-NEXT: - 2.00 - - - vldrb.s16 q1, [r0, #4]!249# CHECK-NEXT: - 2.00 - - - vldrb.s16 q1, [r0], #4250# CHECK-NEXT: - 2.00 - - - vldrb.s32 q1, [r0, #4]251# CHECK-NEXT: - 2.00 - - - vldrb.s32 q1, [r0, #4]!252# CHECK-NEXT: - 2.00 - - - vldrb.s32 q1, [r0], #4253# CHECK-NEXT: - 2.00 - - - vldrh.s32 q1, [r0, #4]254# CHECK-NEXT: - 2.00 - - - vldrh.s32 q1, [r0, #4]!255# CHECK-NEXT: - 2.00 - - - vldrh.s32 q1, [r0], #4256# CHECK-NEXT: - 2.00 - - - vldrw.u32 q1, [r0, q0]257# CHECK-NEXT: - 2.00 - - - vldrh.u16 q1, [r0, q0]258# CHECK-NEXT: - 2.00 - - - vldrb.u8 q1, [r0, q0]259# CHECK-NEXT: - 2.00 - - - vldrb.u16 q1, [r0, q0]260# CHECK-NEXT: - 2.00 - - - vldrb.u32 q1, [r0, q0]261# CHECK-NEXT: - 2.00 - - - vldrh.u32 q1, [r0, q0]262# CHECK-NEXT: - 2.00 - - - vldrb.s16 q1, [r0, q0]263# CHECK-NEXT: - 2.00 - - - vldrb.s32 q1, [r0, q0]264# CHECK-NEXT: - 2.00 - - - vldrh.s32 q1, [r0, q0]265# CHECK-NEXT: - 2.00 - - - vldrw.u32 q1, [r0, q0, uxtw #2]266# CHECK-NEXT: - 2.00 - - - vldrh.u16 q1, [r0, q0, uxtw #1]267# CHECK-NEXT: - 2.00 - - - vldrh.u32 q1, [r0, q0, uxtw #1]268# CHECK-NEXT: - 2.00 - - - vldrh.s32 q1, [r0, q0, uxtw #1]269# CHECK-NEXT: - 2.00 - - - vldrw.u32 q1, [q0, #4]270# CHECK-NEXT: - 2.00 - - - vldrw.u32 q1, [q0, #4]!271# CHECK-NEXT: - 2.00 - - - vld20.8 {q0, q1}, [r0]272# CHECK-NEXT: - 2.00 - - - vld21.8 {q0, q1}, [r0]!273# CHECK-NEXT: - 2.00 - - - vld40.8 {q0, q1, q2, q3}, [r0]274# CHECK-NEXT: - 2.00 - - - vld43.8 {q0, q1, q2, q3}, [r0]!275# CHECK-NEXT: - 2.00 - - - vld20.16 {q0, q1}, [r0]276# CHECK-NEXT: - 2.00 - - - vld21.16 {q0, q1}, [r0]!277# CHECK-NEXT: - 2.00 - - - vld40.16 {q0, q1, q2, q3}, [r0]278# CHECK-NEXT: - 2.00 - - - vld43.16 {q0, q1, q2, q3}, [r0]!279# CHECK-NEXT: - 2.00 - - - vld20.32 {q0, q1}, [r0]280# CHECK-NEXT: - 2.00 - - - vld21.32 {q0, q1}, [r0]!281# CHECK-NEXT: - 2.00 - - - vld40.32 {q0, q1, q2, q3}, [r0]282# CHECK-NEXT: - 2.00 - - - vld43.32 {q0, q1, q2, q3}, [r0]!283# CHECK-NEXT: - 2.00 - - - vstrb.8 q1, [r0]284# CHECK-NEXT: - 2.00 - - - vstrb.8 q1, [r0, #0]!285# CHECK-NEXT: - 2.00 - - - vstrb.8 q1, [r0], #0286# CHECK-NEXT: - 2.00 - - - vstrh.16 q1, [r0]287# CHECK-NEXT: - 2.00 - - - vstrh.16 q1, [r0, #0]!288# CHECK-NEXT: - 2.00 - - - vstrh.16 q1, [r0], #0289# CHECK-NEXT: - 2.00 - - - vstrw.32 q1, [r0]290# CHECK-NEXT: - 2.00 - - - vstrw.32 q1, [r0, #0]!291# CHECK-NEXT: - 2.00 - - - vstrw.32 q1, [r0], #0292# CHECK-NEXT: - 2.00 - - - vstrb.16 q1, [r0]293# CHECK-NEXT: - 2.00 - - - vstrb.16 q1, [r0]!294# CHECK-NEXT: - 2.00 - - - vstrb.16 q1, [r0], #0295# CHECK-NEXT: - 2.00 - - - vstrb.32 q1, [r0]296# CHECK-NEXT: - 2.00 - - - vstrb.32 q1, [r0]!297# CHECK-NEXT: - 2.00 - - - vstrb.32 q1, [r0], #0298# CHECK-NEXT: - 2.00 - - - vstrh.32 q1, [r0]299# CHECK-NEXT: - 2.00 - - - vstrh.32 q1, [r0]!300# CHECK-NEXT: - 2.00 - - - vstrh.32 q1, [r0], #0301# CHECK-NEXT: - 2.00 - - - vstrw.32 q1, [r0, q0]302# CHECK-NEXT: - 2.00 - - - vstrh.16 q1, [r0, q0]303# CHECK-NEXT: - 2.00 - - - vstrb.8 q1, [r0, q0]304# CHECK-NEXT: - 2.00 - - - vstrb.16 q1, [r0, q0]305# CHECK-NEXT: - 2.00 - - - vstrb.32 q1, [r0, q0]306# CHECK-NEXT: - 2.00 - - - vstrh.32 q1, [r0, q0]307# CHECK-NEXT: - 2.00 - - - vstrw.32 q1, [r0, q0, uxtw #2]308# CHECK-NEXT: - 2.00 - - - vstrh.16 q1, [r0, q0, uxtw #1]309# CHECK-NEXT: - 2.00 - - - vstrh.32 q1, [r0, q0, uxtw #1]310# CHECK-NEXT: - 2.00 - - - vstrw.32 q1, [q0, #4]311# CHECK-NEXT: - 2.00 - - - vstrw.32 q1, [q0, #4]!312# CHECK-NEXT: - 2.00 - - - vst20.8 {q0, q1}, [r0]313# CHECK-NEXT: - 2.00 - - - vst21.8 {q0, q1}, [r0]!314# CHECK-NEXT: - 2.00 - - - vst40.8 {q0, q1, q2, q3}, [r0]315# CHECK-NEXT: - 2.00 - - - vst43.8 {q0, q1, q2, q3}, [r0]!316# CHECK-NEXT: - 2.00 - - - vst20.16 {q0, q1}, [r0]317# CHECK-NEXT: - 2.00 - - - vst21.16 {q0, q1}, [r0]!318# CHECK-NEXT: - 2.00 - - - vst40.16 {q0, q1, q2, q3}, [r0]319# CHECK-NEXT: - 2.00 - - - vst43.16 {q0, q1, q2, q3}, [r0]!320# CHECK-NEXT: - 2.00 - - - vst20.32 {q0, q1}, [r0]321# CHECK-NEXT: - 2.00 - - - vst21.32 {q0, q1}, [r0]!322# CHECK-NEXT: - 2.00 - - - vst40.32 {q0, q1, q2, q3}, [r0]323# CHECK-NEXT: - 2.00 - - - vst43.32 {q0, q1, q2, q3}, [r0]!324