diff options
-rw-r--r-- | llvm/test/tools/llvm-mca/X86/BtVer2/register-files-3.s | 33 | ||||
-rw-r--r-- | llvm/tools/llvm-mca/Dispatch.cpp | 8 |
2 files changed, 38 insertions, 3 deletions
diff --git a/llvm/test/tools/llvm-mca/X86/BtVer2/register-files-3.s b/llvm/test/tools/llvm-mca/X86/BtVer2/register-files-3.s new file mode 100644 index 00000000000..55274306fcb --- /dev/null +++ b/llvm/test/tools/llvm-mca/X86/BtVer2/register-files-3.s @@ -0,0 +1,33 @@ +# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=btver2 -register-file-size=5 -iterations=2 -verbose -timeline < %s | FileCheck %s + +idiv %eax + +# CHECK: Iterations: 2 +# CHECK-NEXT: Instructions: 2 + +# 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 + +# CHECK: [1] [2] [3] [4] [5] [6] Instructions: +# CHECK-NEXT: 2 25 25.00 * idivl %eax + + +# CHECK: RAT - Register unavailable: 26 + +# CHECK: Register File statistics. +# CHECK-NEXT: Register File #0 +# CHECK-NEXT: Total number of mappings created: 6 +# CHECK-NEXT: Max number of mappings used: 3 + + +# CHECK: Timeline view: +# CHECK-NEXT: 0123456789 0123456789 01234 +# CHECK-NEXT: Index 0123456789 0123456789 0123456789 + +# CHECK: [0,0] DeeeeeeeeeeeeeeeeeeeeeeeeeER . . . . . . idivl %eax +# CHECK: [1,0] . . . . . . DeeeeeeeeeeeeeeeeeeeeeeeeeER idivl %eax diff --git a/llvm/tools/llvm-mca/Dispatch.cpp b/llvm/tools/llvm-mca/Dispatch.cpp index c0f16f07376..51fe0d8791b 100644 --- a/llvm/tools/llvm-mca/Dispatch.cpp +++ b/llvm/tools/llvm-mca/Dispatch.cpp @@ -274,9 +274,11 @@ void RetireControlUnit::dump() const { #endif bool DispatchUnit::checkRAT(unsigned Index, const Instruction &Instr) { - const InstrDesc &Desc = Instr.getDesc(); - unsigned NumWrites = Desc.Writes.size(); - unsigned RegisterMask = RAT->isAvailable(NumWrites); + SmallVector<unsigned, 4> RegDefs; + for (const std::unique_ptr<WriteState> &RegDef : Instr.getDefs()) + RegDefs.emplace_back(RegDef->getRegisterID()); + + unsigned RegisterMask = RAT->isAvailable(RegDefs); // A mask with all zeroes means: register files are available. if (RegisterMask) { Owner->notifyStallEvent( |