[llvm] 7a78073 - [ARM][SchedModels] Let ldm* instruction scheduling use MCSchedPredicate
Evgeny Leviant via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 23 00:33:58 PDT 2020
Author: Evgeny Leviant
Date: 2020-10-23T10:33:20+03:00
New Revision: 7a78073be7649d9d2a83df50db9ec41b9a26d4f4
URL: https://github.com/llvm/llvm-project/commit/7a78073be7649d9d2a83df50db9ec41b9a26d4f4
DIFF: https://github.com/llvm/llvm-project/commit/7a78073be7649d9d2a83df50db9ec41b9a26d4f4.diff
LOG: [ARM][SchedModels] Let ldm* instruction scheduling use MCSchedPredicate
Differential revision: https://reviews.llvm.org/D89957
Added:
Modified:
llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp
llvm/lib/Target/ARM/ARMBaseInstrInfo.h
llvm/lib/Target/ARM/ARMSchedule.td
llvm/lib/Target/ARM/ARMScheduleA57.td
llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.h
llvm/test/tools/llvm-mca/ARM/cortex-a57-basic-instructions.s
llvm/test/tools/llvm-mca/ARM/cortex-a57-memory-instructions.s
Removed:
################################################################################
diff --git a/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp b/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp
index 817bc3363a11..cad9517e7579 100644
--- a/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp
+++ b/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp
@@ -3854,22 +3854,6 @@ ARMBaseInstrInfo::getVLDMDefCycle(const InstrItineraryData *ItinData,
return DefCycle;
}
-bool ARMBaseInstrInfo::isLDMBaseRegInList(const MachineInstr &MI) const {
- Register BaseReg = MI.getOperand(0).getReg();
- for (unsigned i = 1, sz = MI.getNumOperands(); i < sz; ++i) {
- const auto &Op = MI.getOperand(i);
- if (Op.isReg() && Op.getReg() == BaseReg)
- return true;
- }
- return false;
-}
-unsigned
-ARMBaseInstrInfo::getLDMVariableDefsSize(const MachineInstr &MI) const {
- // ins GPR:$Rn, $p (2xOp), reglist:$regs, variable_ops
- // (outs GPR:$wb), (ins GPR:$Rn, $p (2xOp), reglist:$regs, variable_ops)
- return MI.getNumOperands() + 1 - MI.getDesc().getNumOperands();
-}
-
int
ARMBaseInstrInfo::getLDMDefCycle(const InstrItineraryData *ItinData,
const MCInstrDesc &DefMCID,
diff --git a/llvm/lib/Target/ARM/ARMBaseInstrInfo.h b/llvm/lib/Target/ARM/ARMBaseInstrInfo.h
index a03d57c97d5e..26b6d19f8bbe 100644
--- a/llvm/lib/Target/ARM/ARMBaseInstrInfo.h
+++ b/llvm/lib/Target/ARM/ARMBaseInstrInfo.h
@@ -186,10 +186,6 @@ class ARMBaseInstrInfo : public ARMGenInstrInfo {
bool isLdstSoMinusReg(const MachineInstr &MI, unsigned Op) const;
// Scaled register offset in address mode 2
bool isAm2ScaledReg(const MachineInstr &MI, unsigned Op) const;
- // Load multiple, base reg in list
- bool isLDMBaseRegInList(const MachineInstr &MI) const;
- // get LDM variable defs size
- unsigned getLDMVariableDefsSize(const MachineInstr &MI) const;
/// GetInstSize - Returns the size of the specified MachineInstr.
///
diff --git a/llvm/lib/Target/ARM/ARMSchedule.td b/llvm/lib/Target/ARM/ARMSchedule.td
index 23cbf6b6c0be..2598d36e2953 100644
--- a/llvm/lib/Target/ARM/ARMSchedule.td
+++ b/llvm/lib/Target/ARM/ARMSchedule.td
@@ -168,6 +168,9 @@ let FunctionMapper = "ARM_AM::getAM2ShiftOpc" in {
def CheckExtNoShift : CheckImmOperand_s<4, "ARM_AM::no_shift">;
}
+def IsLDMBaseRegInList : CheckFunctionPredicate<
+ "ARM_MC::isLDMBaseRegInList", "ARM_MC::isLDMBaseRegInList"
+>;
//===----------------------------------------------------------------------===//
// Instruction Itinerary classes used for ARM
//
diff --git a/llvm/lib/Target/ARM/ARMScheduleA57.td b/llvm/lib/Target/ARM/ARMScheduleA57.td
index 99a31055645a..2357383942fe 100644
--- a/llvm/lib/Target/ARM/ARMScheduleA57.td
+++ b/llvm/lib/Target/ARM/ARMScheduleA57.td
@@ -63,8 +63,7 @@ def IsLdrAm2ScaledPred :
SchedPredicate<[{TII->isAm2ScaledReg(*MI, 1)}]>;
// LDM, base reg in list
-def IsLdmBaseRegInList :
- SchedPredicate<[{TII->isLDMBaseRegInList(*MI)}]>;
+def IsLDMBaseRegInListPred : MCSchedPredicate<IsLDMBaseRegInList>;
class A57WriteLMOpsListType<list<SchedWriteRes> writes> {
list <SchedWriteRes> Writes = writes;
@@ -508,8 +507,12 @@ def : InstRW<[A57WritePLD], (instregex "PLDrs", "PLDWrs")>;
// --- Load multiple instructions ---
foreach NumAddr = 1-8 in {
- def A57LMAddrPred#NumAddr :
- SchedPredicate<"(TII->getLDMVariableDefsSize(*MI)+1)/2 == "#NumAddr>;
+ def A57LMAddrPred#NumAddr : MCSchedPredicate<CheckAny<[
+ CheckNumOperands<!add(!shl(NumAddr, 1), 2)>,
+ CheckNumOperands<!add(!shl(NumAddr, 1), 3)>]>>;
+ def A57LMAddrUpdPred#NumAddr : MCSchedPredicate<CheckAny<[
+ CheckNumOperands<!add(!shl(NumAddr, 1), 3)>,
+ CheckNumOperands<!add(!shl(NumAddr, 1), 4)>]>>;
}
def A57LDMOpsListNoregin : A57WriteLMOpsListType<
@@ -565,20 +568,20 @@ def A57LDMOpsList_Upd : A57WriteLMOpsListType<
A57Write_9cyc_1L_1I, A57Write_9cyc_1L_1I,
A57Write_10cyc_1L_1I, A57Write_10cyc_1L_1I]>;
def A57WriteLDM_Upd : SchedWriteVariant<[
- SchedVar<A57LMAddrPred1, A57LDMOpsList_Upd.Writes[0-2]>,
- SchedVar<A57LMAddrPred2, A57LDMOpsList_Upd.Writes[0-4]>,
- SchedVar<A57LMAddrPred3, A57LDMOpsList_Upd.Writes[0-6]>,
- SchedVar<A57LMAddrPred4, A57LDMOpsList_Upd.Writes[0-8]>,
- SchedVar<A57LMAddrPred5, A57LDMOpsList_Upd.Writes[0-10]>,
- SchedVar<A57LMAddrPred6, A57LDMOpsList_Upd.Writes[0-12]>,
- SchedVar<A57LMAddrPred7, A57LDMOpsList_Upd.Writes[0-14]>,
- SchedVar<A57LMAddrPred8, A57LDMOpsList_Upd.Writes[0-16]>,
- SchedVar<NoSchedPred, A57LDMOpsList_Upd.Writes[0-16]>
+ SchedVar<A57LMAddrUpdPred1, A57LDMOpsList_Upd.Writes[0-2]>,
+ SchedVar<A57LMAddrUpdPred2, A57LDMOpsList_Upd.Writes[0-4]>,
+ SchedVar<A57LMAddrUpdPred3, A57LDMOpsList_Upd.Writes[0-6]>,
+ SchedVar<A57LMAddrUpdPred4, A57LDMOpsList_Upd.Writes[0-8]>,
+ SchedVar<A57LMAddrUpdPred5, A57LDMOpsList_Upd.Writes[0-10]>,
+ SchedVar<A57LMAddrUpdPred6, A57LDMOpsList_Upd.Writes[0-12]>,
+ SchedVar<A57LMAddrUpdPred7, A57LDMOpsList_Upd.Writes[0-14]>,
+ SchedVar<A57LMAddrUpdPred8, A57LDMOpsList_Upd.Writes[0-16]>,
+ SchedVar<NoSchedPred, A57LDMOpsList_Upd.Writes[0-16]>
]> { let Variadic=1; }
def A57WriteLDM : SchedWriteVariant<[
- SchedVar<IsLdmBaseRegInList, [A57WriteLDMreginlist]>,
- SchedVar<NoSchedPred, [A57WriteLDMnoreginlist]>
+ SchedVar<IsLDMBaseRegInListPred, [A57WriteLDMreginlist]>,
+ SchedVar<NoSchedPred, [A57WriteLDMnoreginlist]>
]> { let Variadic=1; }
def : InstRW<[A57WriteLDM], (instregex "(t|t2|sys)?LDM(IA|DA|DB|IB)$")>;
diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.h b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.h
index 31e58b4d24b2..5a0874f0ef1f 100644
--- a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.h
+++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.h
@@ -46,6 +46,17 @@ void initLLVMToCVRegMapping(MCRegisterInfo *MRI);
bool isPredicated(const MCInst &MI, const MCInstrInfo *MCII);
bool isCPSRDefined(const MCInst &MI, const MCInstrInfo *MCII);
+template<class Inst>
+bool isLDMBaseRegInList(const Inst &MI) {
+ auto BaseReg = MI.getOperand(0).getReg();
+ for (unsigned I = 1, E = MI.getNumOperands(); I < E; ++I) {
+ const auto &Op = MI.getOperand(I);
+ if (Op.isReg() && Op.getReg() == BaseReg)
+ return true;
+ }
+ return false;
+}
+
/// Create a ARM MCSubtargetInfo instance. This is exposed so Asm parser, etc.
/// do not need to go through TargetRegistry.
MCSubtargetInfo *createARMMCSubtargetInfo(const Triple &TT, StringRef CPU,
diff --git a/llvm/test/tools/llvm-mca/ARM/cortex-a57-basic-instructions.s b/llvm/test/tools/llvm-mca/ARM/cortex-a57-basic-instructions.s
index acd0f7095f8e..c383cc1ce783 100644
--- a/llvm/test/tools/llvm-mca/ARM/cortex-a57-basic-instructions.s
+++ b/llvm/test/tools/llvm-mca/ARM/cortex-a57-basic-instructions.s
@@ -1105,14 +1105,14 @@
# CHECK-NEXT: 1 2 1.00 eor r4, r4, r5, rrx
# CHECK-NEXT: 0 0 0.00 * * U isb sy
# CHECK-NEXT: 0 0 0.00 * * U isb #0xa
-# CHECK-NEXT: 16 10 16.00 * ldm r2, {r1, r3, r4, r5, r6, sp}
-# CHECK-NEXT: 16 10 16.00 * ldmib r2, {r1, r3, r4, r5, r6, sp}
-# CHECK-NEXT: 16 10 16.00 * ldmda r2, {r1, r3, r4, r5, r6, sp}
-# CHECK-NEXT: 16 10 16.00 * ldmdb r2, {r1, r3, r4, r5, r6, sp}
-# CHECK-NEXT: 32 10 16.00 * ldm r2!, {r1, r3, r4, r5, r6, sp}
-# CHECK-NEXT: 32 10 16.00 * ldmib r2!, {r1, r3, r4, r5, r6, sp}
-# CHECK-NEXT: 32 10 16.00 * ldmda r2!, {r1, r3, r4, r5, r6, sp}
-# CHECK-NEXT: 32 10 16.00 * ldmdb r2!, {r1, r3, r4, r5, r6, sp}
+# CHECK-NEXT: 6 5 6.00 * ldm r2, {r1, r3, r4, r5, r6, sp}
+# CHECK-NEXT: 6 5 6.00 * ldmib r2, {r1, r3, r4, r5, r6, sp}
+# CHECK-NEXT: 6 5 6.00 * ldmda r2, {r1, r3, r4, r5, r6, sp}
+# CHECK-NEXT: 6 5 6.00 * ldmdb r2, {r1, r3, r4, r5, r6, sp}
+# CHECK-NEXT: 12 5 6.00 * ldm r2!, {r1, r3, r4, r5, r6, sp}
+# CHECK-NEXT: 12 5 6.00 * ldmib r2!, {r1, r3, r4, r5, r6, sp}
+# CHECK-NEXT: 12 5 6.00 * ldmda r2!, {r1, r3, r4, r5, r6, sp}
+# CHECK-NEXT: 12 5 6.00 * ldmdb r2!, {r1, r3, r4, r5, r6, sp}
# CHECK-NEXT: 0 0 0.00 * * U ldrexb r3, [r4]
# CHECK-NEXT: 0 0 0.00 * * U ldrexh r2, [r5]
# CHECK-NEXT: 0 0 0.00 * * U ldrex r1, [r7]
@@ -1253,9 +1253,9 @@
# CHECK-NEXT: 1 2 1.00 pkhtb r2, r2, r3, asr #31
# CHECK-NEXT: 1 2 1.00 pkhtb r2, r2, r3, asr #15
# CHECK-NEXT: 2 4 1.00 * pop {r7}
-# CHECK-NEXT: 32 10 16.00 * pop {r7, r8, r9, r10}
+# CHECK-NEXT: 8 4 4.00 * pop {r7, r8, r9, r10}
# CHECK-NEXT: 2 1 1.00 * push {r7}
-# CHECK-NEXT: 2 2 1.00 * push {r7, r8, r9, r10}
+# CHECK-NEXT: 2 3 1.00 * push {r7, r8, r9, r10}
# CHECK-NEXT: 1 2 1.00 U qadd r1, r2, r3
# CHECK-NEXT: 1 2 1.00 U qaddne r1, r2, r3
# CHECK-NEXT: 1 2 1.00 U qadd16 r1, r2, r3
@@ -1512,16 +1512,16 @@
# CHECK-NEXT: 2 4 1.00 * * U ssub16ne r5, r3, r2
# CHECK-NEXT: 2 2 1.00 * * U ssub8 r9, r2, r4
# CHECK-NEXT: 2 4 1.00 * * U ssub8eq r5, r1, r2
-# CHECK-NEXT: 1 2 1.00 * stm r2, {r1, r3, r4, r5, r6, sp}
-# CHECK-NEXT: 1 2 1.00 * stm r3, {r1, r3, r4, r5, r6, lr}
-# CHECK-NEXT: 1 2 1.00 * stmib r4, {r1, r3, r4, r5, r6, sp}
-# CHECK-NEXT: 1 2 1.00 * stmda r5, {r1, r3, r4, r5, r6, sp}
-# CHECK-NEXT: 1 2 1.00 * stmdb r6, {r1, r3, r4, r5, r6, r8}
-# CHECK-NEXT: 1 2 1.00 * stmdb sp, {r1, r3, r4, r5, r6, sp}
-# CHECK-NEXT: 2 2 1.00 * stm r8!, {r1, r3, r4, r5, r6, sp}
-# CHECK-NEXT: 2 2 1.00 * stmib r9!, {r1, r3, r4, r5, r6, sp}
-# CHECK-NEXT: 2 2 1.00 * stmda sp!, {r1, r3, r4, r5, r6}
-# CHECK-NEXT: 2 2 1.00 * stmdb r0!, {r1, r5, r7, sp}
+# CHECK-NEXT: 1 3 1.00 * stm r2, {r1, r3, r4, r5, r6, sp}
+# CHECK-NEXT: 1 3 1.00 * stm r3, {r1, r3, r4, r5, r6, lr}
+# CHECK-NEXT: 1 3 1.00 * stmib r4, {r1, r3, r4, r5, r6, sp}
+# CHECK-NEXT: 1 3 1.00 * stmda r5, {r1, r3, r4, r5, r6, sp}
+# CHECK-NEXT: 1 3 1.00 * stmdb r6, {r1, r3, r4, r5, r6, r8}
+# CHECK-NEXT: 1 3 1.00 * stmdb sp, {r1, r3, r4, r5, r6, sp}
+# CHECK-NEXT: 2 4 1.00 * stm r8!, {r1, r3, r4, r5, r6, sp}
+# CHECK-NEXT: 2 4 1.00 * stmib r9!, {r1, r3, r4, r5, r6, sp}
+# CHECK-NEXT: 2 3 1.00 * stmda sp!, {r1, r3, r4, r5, r6}
+# CHECK-NEXT: 2 3 1.00 * stmdb r0!, {r1, r5, r7, sp}
# CHECK-NEXT: 0 0 0.00 * * U strexb r1, r3, [r4]
# CHECK-NEXT: 0 0 0.00 * * U strexh r4, r2, [r5]
# CHECK-NEXT: 0 0 0.00 * * U strex r2, r1, [r7]
@@ -1719,7 +1719,7 @@
# CHECK: Resource pressure per iteration:
# CHECK-NEXT: [0] [1.0] [1.1] [2] [3] [4] [5] [6]
-# CHECK-NEXT: 8.00 159.00 159.00 171.00 496.00 12.00 - -
+# CHECK-NEXT: 8.00 133.00 133.00 79.00 496.00 12.00 - -
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1.0] [1.1] [2] [3] [4] [5] [6] Instructions:
@@ -1969,14 +1969,14 @@
# CHECK-NEXT: - - - - 1.00 - - - eor r4, r4, r5, rrx
# CHECK-NEXT: - - - - - - - - isb sy
# CHECK-NEXT: - - - - - - - - isb #0xa
-# CHECK-NEXT: - - - 16.00 - - - - ldm r2, {r1, r3, r4, r5, r6, sp}
-# CHECK-NEXT: - - - 16.00 - - - - ldmib r2, {r1, r3, r4, r5, r6, sp}
-# CHECK-NEXT: - - - 16.00 - - - - ldmda r2, {r1, r3, r4, r5, r6, sp}
-# CHECK-NEXT: - - - 16.00 - - - - ldmdb r2, {r1, r3, r4, r5, r6, sp}
-# CHECK-NEXT: - 8.00 8.00 16.00 - - - - ldm r2!, {r1, r3, r4, r5, r6, sp}
-# CHECK-NEXT: - 8.00 8.00 16.00 - - - - ldmib r2!, {r1, r3, r4, r5, r6, sp}
-# CHECK-NEXT: - 8.00 8.00 16.00 - - - - ldmda r2!, {r1, r3, r4, r5, r6, sp}
-# CHECK-NEXT: - 8.00 8.00 16.00 - - - - ldmdb r2!, {r1, r3, r4, r5, r6, sp}
+# CHECK-NEXT: - - - 6.00 - - - - ldm r2, {r1, r3, r4, r5, r6, sp}
+# CHECK-NEXT: - - - 6.00 - - - - ldmib r2, {r1, r3, r4, r5, r6, sp}
+# CHECK-NEXT: - - - 6.00 - - - - ldmda r2, {r1, r3, r4, r5, r6, sp}
+# CHECK-NEXT: - - - 6.00 - - - - ldmdb r2, {r1, r3, r4, r5, r6, sp}
+# CHECK-NEXT: - 3.00 3.00 6.00 - - - - ldm r2!, {r1, r3, r4, r5, r6, sp}
+# CHECK-NEXT: - 3.00 3.00 6.00 - - - - ldmib r2!, {r1, r3, r4, r5, r6, sp}
+# CHECK-NEXT: - 3.00 3.00 6.00 - - - - ldmda r2!, {r1, r3, r4, r5, r6, sp}
+# CHECK-NEXT: - 3.00 3.00 6.00 - - - - ldmdb r2!, {r1, r3, r4, r5, r6, sp}
# CHECK-NEXT: - - - - - - - - ldrexb r3, [r4]
# CHECK-NEXT: - - - - - - - - ldrexh r2, [r5]
# CHECK-NEXT: - - - - - - - - ldrex r1, [r7]
@@ -2117,7 +2117,7 @@
# CHECK-NEXT: - - - - 1.00 - - - pkhtb r2, r2, r3, asr #31
# CHECK-NEXT: - - - - 1.00 - - - pkhtb r2, r2, r3, asr #15
# CHECK-NEXT: - 0.50 0.50 1.00 - - - - pop {r7}
-# CHECK-NEXT: - 8.00 8.00 16.00 - - - - pop {r7, r8, r9, r10}
+# CHECK-NEXT: - 2.00 2.00 4.00 - - - - pop {r7, r8, r9, r10}
# CHECK-NEXT: - 0.50 0.50 - - 1.00 - - push {r7}
# CHECK-NEXT: - 0.50 0.50 - - 1.00 - - push {r7, r8, r9, r10}
# CHECK-NEXT: - - - - 1.00 - - - qadd r1, r2, r3
diff --git a/llvm/test/tools/llvm-mca/ARM/cortex-a57-memory-instructions.s b/llvm/test/tools/llvm-mca/ARM/cortex-a57-memory-instructions.s
index d1e0880506d7..97b8393ea33a 100644
--- a/llvm/test/tools/llvm-mca/ARM/cortex-a57-memory-instructions.s
+++ b/llvm/test/tools/llvm-mca/ARM/cortex-a57-memory-instructions.s
@@ -241,18 +241,18 @@
# CHECK-NEXT: 2 4 1.00 * ldrsht r3, [r8], #-12
# CHECK-NEXT: 2 4 1.00 * ldrsht r8, [r9], r5
# CHECK-NEXT: 2 4 1.00 * ldrsht r2, [r1], -r4
-# CHECK-NEXT: 16 10 16.00 * ldm r2, {r1, r2, r4, r5, r6}
-# CHECK-NEXT: 16 10 16.00 * ldm r2, {r1, r2, r4, r5, r6}
-# CHECK-NEXT: 16 10 16.00 * ldm r2, {r1, r3, r4, r5, r6}
-# CHECK-NEXT: 16 10 16.00 * ldmib r2, {r1, r2}
-# CHECK-NEXT: 16 10 16.00 * ldmdb r2, {r1, r2}
-# CHECK-NEXT: 16 10 16.00 * ldmib r2, {r1, r3}
-# CHECK-NEXT: 16 10 16.00 * ldmib r2, {r1, r3, r5}
-# CHECK-NEXT: 16 10 16.00 * ldmib r2, {r1, r2, r5}
-# CHECK-NEXT: 16 10 16.00 * ldmdbeq r2, {r1, r2}
-# CHECK-NEXT: 16 10 16.00 * ldmibeq r2, {r1, r3}
+# CHECK-NEXT: 12 6 6.00 * ldm r2, {r1, r2, r4, r5, r6}
+# CHECK-NEXT: 12 6 6.00 * ldm r2, {r1, r2, r4, r5, r6}
+# CHECK-NEXT: 6 5 6.00 * ldm r2, {r1, r3, r4, r5, r6}
+# CHECK-NEXT: 4 4 2.00 * ldmib r2, {r1, r2}
+# CHECK-NEXT: 4 4 2.00 * ldmdb r2, {r1, r2}
+# CHECK-NEXT: 2 3 2.00 * ldmib r2, {r1, r3}
+# CHECK-NEXT: 4 4 4.00 * ldmib r2, {r1, r3, r5}
+# CHECK-NEXT: 8 5 4.00 * ldmib r2, {r1, r2, r5}
+# CHECK-NEXT: 4 4 2.00 * ldmdbeq r2, {r1, r2}
+# CHECK-NEXT: 2 3 2.00 * ldmibeq r2, {r1, r3}
# CHECK-NEXT: 16 10 16.00 * ldm r2, {r0, r1, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, sp, lr, pc}
-# CHECK-NEXT: 16 10 16.00 * ldm r2, {r0, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, sp, lr, pc}
+# CHECK-NEXT: 32 11 16.00 * ldm r2, {r0, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, sp, lr, pc}
# CHECK-NEXT: 1 1 1.00 * str r8, [r12]
# CHECK-NEXT: 1 1 1.00 * str r7, [r1, #12]
# CHECK-NEXT: 2 1 1.00 * str r3, [r5, #40]!
@@ -321,7 +321,7 @@
# CHECK: Resource pressure per iteration:
# CHECK-NEXT: [0] [1.0] [1.1] [2] [3] [4] [5] [6]
-# CHECK-NEXT: - 44.00 44.00 284.00 9.00 55.00 - -
+# CHECK-NEXT: - 63.00 63.00 160.00 9.00 55.00 - -
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1.0] [1.1] [2] [3] [4] [5] [6] Instructions:
@@ -406,18 +406,18 @@
# CHECK-NEXT: - 0.50 0.50 1.00 - - - - ldrsht r3, [r8], #-12
# CHECK-NEXT: - 0.50 0.50 1.00 - - - - ldrsht r8, [r9], r5
# CHECK-NEXT: - 0.50 0.50 1.00 - - - - ldrsht r2, [r1], -r4
-# CHECK-NEXT: - - - 16.00 - - - - ldm r2, {r1, r2, r4, r5, r6}
-# CHECK-NEXT: - - - 16.00 - - - - ldm r2, {r1, r2, r4, r5, r6}
-# CHECK-NEXT: - - - 16.00 - - - - ldm r2, {r1, r3, r4, r5, r6}
-# CHECK-NEXT: - - - 16.00 - - - - ldmib r2, {r1, r2}
-# CHECK-NEXT: - - - 16.00 - - - - ldmdb r2, {r1, r2}
-# CHECK-NEXT: - - - 16.00 - - - - ldmib r2, {r1, r3}
-# CHECK-NEXT: - - - 16.00 - - - - ldmib r2, {r1, r3, r5}
-# CHECK-NEXT: - - - 16.00 - - - - ldmib r2, {r1, r2, r5}
-# CHECK-NEXT: - - - 16.00 - - - - ldmdbeq r2, {r1, r2}
-# CHECK-NEXT: - - - 16.00 - - - - ldmibeq r2, {r1, r3}
+# CHECK-NEXT: - 3.00 3.00 6.00 - - - - ldm r2, {r1, r2, r4, r5, r6}
+# CHECK-NEXT: - 3.00 3.00 6.00 - - - - ldm r2, {r1, r2, r4, r5, r6}
+# CHECK-NEXT: - - - 6.00 - - - - ldm r2, {r1, r3, r4, r5, r6}
+# CHECK-NEXT: - 1.00 1.00 2.00 - - - - ldmib r2, {r1, r2}
+# CHECK-NEXT: - 1.00 1.00 2.00 - - - - ldmdb r2, {r1, r2}
+# CHECK-NEXT: - - - 2.00 - - - - ldmib r2, {r1, r3}
+# CHECK-NEXT: - - - 4.00 - - - - ldmib r2, {r1, r3, r5}
+# CHECK-NEXT: - 2.00 2.00 4.00 - - - - ldmib r2, {r1, r2, r5}
+# CHECK-NEXT: - 1.00 1.00 2.00 - - - - ldmdbeq r2, {r1, r2}
+# CHECK-NEXT: - - - 2.00 - - - - ldmibeq r2, {r1, r3}
# CHECK-NEXT: - - - 16.00 - - - - ldm r2, {r0, r1, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, sp, lr, pc}
-# CHECK-NEXT: - - - 16.00 - - - - ldm r2, {r0, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, sp, lr, pc}
+# CHECK-NEXT: - 8.00 8.00 16.00 - - - - ldm r2, {r0, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, sp, lr, pc}
# CHECK-NEXT: - - - - - 1.00 - - str r8, [r12]
# CHECK-NEXT: - - - - - 1.00 - - str r7, [r1, #12]
# CHECK-NEXT: - 0.50 0.50 - - 1.00 - - str r3, [r5, #40]!
More information about the llvm-commits
mailing list