[llvm-exegesis][NFC] Simplify code now that Instruction has more semantic
authorGuillaume Chatelet <gchatelet@google.com>
Wed, 10 Oct 2018 09:45:17 +0000 (09:45 +0000)
committerGuillaume Chatelet <gchatelet@google.com>
Wed, 10 Oct 2018 09:45:17 +0000 (09:45 +0000)
Reviewers: courbet

Subscribers: tschuett, llvm-commits

Differential Revision: https://reviews.llvm.org/D53065

llvm-svn: 344130

llvm/tools/llvm-exegesis/lib/Latency.cpp
llvm/tools/llvm-exegesis/lib/Latency.h
llvm/tools/llvm-exegesis/lib/Uops.cpp
llvm/tools/llvm-exegesis/lib/Uops.h

index 08155ee..4173cf3 100644 (file)
 
 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<BenchmarkFailure>(
-        "Infeasible : has unknown operands");
-  if (llvm::any_of(MCInstrDesc.operands(), hasMemoryOperand))
-    return llvm::make_error<BenchmarkFailure>(
-        "Infeasible : has memory operands");
-  return llvm::Error::success();
-}
-
 llvm::Expected<CodeTemplate>
 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<CodeTemplate>
 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<BenchmarkFailure>(
+        "Infeasible : has memory operands");
   if (auto CT = generateSelfAliasingCodeTemplate(Instr))
     return CT;
   else
index 3a72d02..37feb62 100644 (file)
@@ -30,8 +30,6 @@ public:
   generateCodeTemplate(unsigned Opcode) const override;
 
 private:
-  llvm::Error isInfeasible(const llvm::MCInstrDesc &MCInstrDesc) const;
-
   llvm::Expected<CodeTemplate>
   generateTwoInstructionPrototype(const Instruction &Instr) const;
 };
index 5bb44e3..d291ff7 100644 (file)
 
 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<BenchmarkFailure>(
-        "Infeasible : has unknown operands");
-  return llvm::Error::success();
-}
-
 static llvm::SmallVector<const Variable *, 8>
 getVariablesWithTiedOperands(const Instruction &Instr) {
   llvm::SmallVector<const Variable *, 8> 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<CodeTemplate>
 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<BenchmarkFailure>(
+        "Infeasible : has unknown operands");
   const auto &ET = State.getExegesisTarget();
   CodeTemplate CT;
 
index 31523f5..33d0d8b 100644 (file)
@@ -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