From ffc3ffac7d56a2fb365be21a3d83fa5ba5010d7b Mon Sep 17 00:00:00 2001 From: Guillaume Chatelet Date: Wed, 10 Oct 2018 09:45:17 +0000 Subject: [PATCH] [llvm-exegesis][NFC] Simplify code now that Instruction has more semantic Reviewers: courbet Subscribers: tschuett, llvm-commits Differential Revision: https://reviews.llvm.org/D53065 llvm-svn: 344130 --- llvm/tools/llvm-exegesis/lib/Latency.cpp | 34 +++++------------------- llvm/tools/llvm-exegesis/lib/Latency.h | 2 -- llvm/tools/llvm-exegesis/lib/Uops.cpp | 21 ++++----------- llvm/tools/llvm-exegesis/lib/Uops.h | 2 -- 4 files changed, 11 insertions(+), 48 deletions(-) diff --git a/llvm/tools/llvm-exegesis/lib/Latency.cpp b/llvm/tools/llvm-exegesis/lib/Latency.cpp index 08155ee18551..4173cf3f9a1b 100644 --- a/llvm/tools/llvm-exegesis/lib/Latency.cpp +++ b/llvm/tools/llvm-exegesis/lib/Latency.cpp @@ -20,28 +20,8 @@ namespace exegesis { -static bool hasUnknownOperand(const llvm::MCOperandInfo &OpInfo) { - return OpInfo.OperandType == llvm::MCOI::OPERAND_UNKNOWN; -} - -// FIXME: Handle memory, see PR36905. -static bool hasMemoryOperand(const llvm::MCOperandInfo &OpInfo) { - return OpInfo.OperandType == llvm::MCOI::OPERAND_MEMORY; -} - LatencySnippetGenerator::~LatencySnippetGenerator() = default; -llvm::Error LatencySnippetGenerator::isInfeasible( - const llvm::MCInstrDesc &MCInstrDesc) const { - if (llvm::any_of(MCInstrDesc.operands(), hasUnknownOperand)) - return llvm::make_error( - "Infeasible : has unknown operands"); - if (llvm::any_of(MCInstrDesc.operands(), hasMemoryOperand)) - return llvm::make_error( - "Infeasible : has memory operands"); - return llvm::Error::success(); -} - llvm::Expected LatencySnippetGenerator::generateTwoInstructionPrototype( const Instruction &Instr) const { @@ -53,11 +33,9 @@ LatencySnippetGenerator::generateTwoInstructionPrototype( if (OtherOpcode == Instr.Description->Opcode) continue; const auto &OtherInstrDesc = State.getInstrInfo().get(OtherOpcode); - if (auto E = isInfeasible(OtherInstrDesc)) { - llvm::consumeError(std::move(E)); - continue; - } const Instruction OtherInstr(OtherInstrDesc, RATC); + if (OtherInstr.hasMemoryOperands()) + continue; const AliasingConfigurations Forward(Instr, OtherInstr); const AliasingConfigurations Back(OtherInstr, Instr); if (Forward.empty() || Back.empty()) @@ -81,10 +59,10 @@ LatencySnippetGenerator::generateTwoInstructionPrototype( llvm::Expected LatencySnippetGenerator::generateCodeTemplate(unsigned Opcode) const { - const auto &InstrDesc = State.getInstrInfo().get(Opcode); - if (auto E = isInfeasible(InstrDesc)) - return std::move(E); - const Instruction Instr(InstrDesc, RATC); + const Instruction Instr(State.getInstrInfo().get(Opcode), RATC); + if (Instr.hasMemoryOperands()) + return llvm::make_error( + "Infeasible : has memory operands"); if (auto CT = generateSelfAliasingCodeTemplate(Instr)) return CT; else diff --git a/llvm/tools/llvm-exegesis/lib/Latency.h b/llvm/tools/llvm-exegesis/lib/Latency.h index 3a72d026d9fd..37feb62e3dc3 100644 --- a/llvm/tools/llvm-exegesis/lib/Latency.h +++ b/llvm/tools/llvm-exegesis/lib/Latency.h @@ -30,8 +30,6 @@ public: generateCodeTemplate(unsigned Opcode) const override; private: - llvm::Error isInfeasible(const llvm::MCInstrDesc &MCInstrDesc) const; - llvm::Expected generateTwoInstructionPrototype(const Instruction &Instr) const; }; diff --git a/llvm/tools/llvm-exegesis/lib/Uops.cpp b/llvm/tools/llvm-exegesis/lib/Uops.cpp index 5bb44e33af3e..d291ff7664eb 100644 --- a/llvm/tools/llvm-exegesis/lib/Uops.cpp +++ b/llvm/tools/llvm-exegesis/lib/Uops.cpp @@ -81,18 +81,6 @@ namespace exegesis { -static bool hasUnknownOperand(const llvm::MCOperandInfo &OpInfo) { - return OpInfo.OperandType == llvm::MCOI::OPERAND_UNKNOWN; -} - -llvm::Error -UopsSnippetGenerator::isInfeasible(const llvm::MCInstrDesc &MCInstrDesc) const { - if (llvm::any_of(MCInstrDesc.operands(), hasUnknownOperand)) - return llvm::make_error( - "Infeasible : has unknown operands"); - return llvm::Error::success(); -} - static llvm::SmallVector getVariablesWithTiedOperands(const Instruction &Instr) { llvm::SmallVector Result; @@ -109,6 +97,7 @@ static void remove(llvm::BitVector &a, const llvm::BitVector &b) { } UopsBenchmarkRunner::~UopsBenchmarkRunner() = default; + UopsSnippetGenerator::~UopsSnippetGenerator() = default; void UopsSnippetGenerator::instantiateMemoryOperands( @@ -137,10 +126,10 @@ void UopsSnippetGenerator::instantiateMemoryOperands( llvm::Expected UopsSnippetGenerator::generateCodeTemplate(unsigned Opcode) const { - const auto &InstrDesc = State.getInstrInfo().get(Opcode); - if (auto E = isInfeasible(InstrDesc)) - return std::move(E); - const Instruction Instr(InstrDesc, RATC); + const Instruction Instr(State.getInstrInfo().get(Opcode), RATC); + if (Instr.hasMemoryOperands()) + return llvm::make_error( + "Infeasible : has unknown operands"); const auto &ET = State.getExegesisTarget(); CodeTemplate CT; diff --git a/llvm/tools/llvm-exegesis/lib/Uops.h b/llvm/tools/llvm-exegesis/lib/Uops.h index 31523f5a9a40..33d0d8b15961 100644 --- a/llvm/tools/llvm-exegesis/lib/Uops.h +++ b/llvm/tools/llvm-exegesis/lib/Uops.h @@ -31,8 +31,6 @@ public: static constexpr const size_t kMinNumDifferentAddresses = 6; private: - llvm::Error isInfeasible(const llvm::MCInstrDesc &MCInstrDesc) const; - // Instantiates memory operands within a snippet. // To make computations as parallel as possible, we generate independant // memory locations for instructions that load and store. If there are less