diff --git a/tools/llvm-mca/InstrBuilder.cpp b/tools/llvm-mca/InstrBuilder.cpp index b1ed2daac38..5b6b31b2eda 100644 --- a/tools/llvm-mca/InstrBuilder.cpp +++ b/tools/llvm-mca/InstrBuilder.cpp @@ -196,7 +196,8 @@ static void populateWrites(InstrDesc &ID, const MCInst &MCI, const MCWriteLatencyEntry &WLE = *STI.getWriteLatencyEntry(&SCDesc, CurrentDef); // Conservatively default to MaxLatency. - Write.Latency = WLE.Cycles == -1 ? ID.MaxLatency : WLE.Cycles; + Write.Latency = WLE.Cycles < 0 ? ID.MaxLatency + : static_cast(WLE.Cycles); Write.SClassOrWriteResourceID = WLE.WriteResourceID; } else { // Assign a default latency for this write. @@ -225,7 +226,8 @@ static void populateWrites(InstrDesc &ID, const MCInst &MCI, const MCWriteLatencyEntry &WLE = *STI.getWriteLatencyEntry(&SCDesc, Index); // Conservatively default to MaxLatency. - Write.Latency = WLE.Cycles == -1 ? ID.MaxLatency : WLE.Cycles; + Write.Latency = WLE.Cycles < 0 ? ID.MaxLatency + : static_cast(WLE.Cycles); Write.SClassOrWriteResourceID = WLE.WriteResourceID; } else { // Assign a default latency for this write. diff --git a/tools/llvm-mca/Instruction.cpp b/tools/llvm-mca/Instruction.cpp index dbf2d5ffecf..53f0d67bf77 100644 --- a/tools/llvm-mca/Instruction.cpp +++ b/tools/llvm-mca/Instruction.cpp @@ -41,7 +41,7 @@ void ReadState::writeStartEvent(unsigned Cycles) { void WriteState::onInstructionIssued() { assert(CyclesLeft == UNKNOWN_CYCLES); // Update the number of cycles left based on the WriteDescriptor info. - CyclesLeft = WD.Latency; + CyclesLeft = getLatency(); // Now that the time left before write-back is known, notify // all the users. @@ -93,7 +93,7 @@ void ReadState::cycleEvent() { #ifndef NDEBUG void WriteState::dump() const { - dbgs() << "{ OpIdx=" << WD.OpIndex << ", Lat=" << WD.Latency << ", RegID " + dbgs() << "{ OpIdx=" << WD.OpIndex << ", Lat=" << getLatency() << ", RegID " << getRegisterID() << ", Cycles Left=" << getCyclesLeft() << " }"; } diff --git a/tools/llvm-mca/Instruction.h b/tools/llvm-mca/Instruction.h index c2d1761a200..3588fb0ba60 100644 --- a/tools/llvm-mca/Instruction.h +++ b/tools/llvm-mca/Instruction.h @@ -28,11 +28,6 @@ namespace mca { -struct WriteDescriptor; -struct ReadDescriptor; -class WriteState; -class ReadState; - constexpr int UNKNOWN_CYCLES = -512; /// A register write descriptor. @@ -42,7 +37,7 @@ struct WriteDescriptor { // a bitwise not of the OpIndex. int OpIndex; // Write latency. Number of cycles before write-back stage. - int Latency; + unsigned Latency; // This field is set to a value different than zero only if this // is an implicit definition. unsigned RegisterID; @@ -81,6 +76,8 @@ struct ReadDescriptor { bool isImplicitRead() const { return OpIndex < 0; }; }; +class ReadState; + /// Tracks uses of a register definition (e.g. register write). /// /// Each implicit/explicit register write is associated with an instance of @@ -123,6 +120,7 @@ public: int getCyclesLeft() const { return CyclesLeft; } unsigned getWriteResourceID() const { return WD.SClassOrWriteResourceID; } unsigned getRegisterID() const { return RegisterID; } + unsigned getLatency() const { return WD.Latency; } void addUser(ReadState *Use, int ReadAdvance); unsigned getNumUsers() const { return Users.size(); }