[llvm-branch-commits] [llvm] d8f22c7 - [SchedModels] Return earlier removed checks

2020-11-25 Thread Evgeny Leviant via llvm-branch-commits

Author: Evgeny Leviant
Date: 2020-11-25T12:07:35+03:00
New Revision: d8f22c77699fe8483cdd80e0936d68875ead5838

URL: 
https://github.com/llvm/llvm-project/commit/d8f22c77699fe8483cdd80e0936d68875ead5838
DIFF: 
https://github.com/llvm/llvm-project/commit/d8f22c77699fe8483cdd80e0936d68875ead5838.diff

LOG: [SchedModels] Return earlier removed checks

It is possible that some write resource is variant in model A
and sequence in model B. Such case will trigger assertion in
getAllPredicates function.

Added: 


Modified: 
llvm/utils/TableGen/CodeGenSchedule.cpp

Removed: 




diff  --git a/llvm/utils/TableGen/CodeGenSchedule.cpp 
b/llvm/utils/TableGen/CodeGenSchedule.cpp
index 030e16b744a88..abb2420188116 100644
--- a/llvm/utils/TableGen/CodeGenSchedule.cpp
+++ b/llvm/utils/TableGen/CodeGenSchedule.cpp
@@ -1456,7 +1456,9 @@ static std::vector 
getAllPredicates(ArrayRef Variants,
   ArrayRef ProcIndices) {
   std::vector Preds;
   for (auto &Variant : Variants) {
-assert(Variant.VarOrSeqDef->isSubClassOf("SchedVar"));
+if (!Variant.VarOrSeqDef->isSubClassOf("SchedVar"))
+  continue;
+
 if (ProcIndices[0] && Variant.ProcIdx)
   if (!llvm::count(ProcIndices, Variant.ProcIdx))
 continue;
@@ -1532,9 +1534,11 @@ void PredTransitions::getIntersectingVariants(
 " Ensure only one SchedAlias exists per RW.");
   }
 }
-Record *PredDef = Variant.VarOrSeqDef->getValueAsDef("Predicate");
-if (mutuallyExclusive(PredDef, AllPreds, TransVec[TransIdx].PredTerm))
-  continue;
+if (Variant.VarOrSeqDef->isSubClassOf("SchedVar")) {
+  Record *PredDef = Variant.VarOrSeqDef->getValueAsDef("Predicate");
+  if (mutuallyExclusive(PredDef, AllPreds, TransVec[TransIdx].PredTerm))
+continue;
+}
 
 if (IntersectingVariants.empty()) {
   // The first variant builds on the existing transition.



___
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [llvm] 4c419c4 - [TableGen][SchedModels] Get rid of hasVariant. NFC

2020-11-27 Thread Evgeny Leviant via llvm-branch-commits

Author: Evgeny Leviant
Date: 2020-11-27T18:00:02+03:00
New Revision: 4c419c454ad255437331987dbd3ada6070432999

URL: 
https://github.com/llvm/llvm-project/commit/4c419c454ad255437331987dbd3ada6070432999
DIFF: 
https://github.com/llvm/llvm-project/commit/4c419c454ad255437331987dbd3ada6070432999.diff

LOG: [TableGen][SchedModels] Get rid of hasVariant. NFC

Differential revision: https://reviews.llvm.org/D92026

Added: 


Modified: 
llvm/utils/TableGen/CodeGenSchedule.cpp

Removed: 




diff  --git a/llvm/utils/TableGen/CodeGenSchedule.cpp 
b/llvm/utils/TableGen/CodeGenSchedule.cpp
index abb242018811..0851c0f321b8 100644
--- a/llvm/utils/TableGen/CodeGenSchedule.cpp
+++ b/llvm/utils/TableGen/CodeGenSchedule.cpp
@@ -1337,11 +1337,11 @@ class PredTransitions {
 
   PredTransitions(CodeGenSchedModels &sm): SchedModels(sm) {}
 
-  void substituteVariantOperand(const SmallVectorImpl &RWSeq,
+  bool substituteVariantOperand(const SmallVectorImpl &RWSeq,
 bool IsRead, bool IsForAnyCPU,
 unsigned StartIdx);
 
-  void substituteVariants(const PredTransition &Trans);
+  bool substituteVariants(const PredTransition &Trans);
 
 #ifndef NDEBUG
   void dump() const;
@@ -1436,22 +1436,6 @@ static bool hasAliasedVariants(const CodeGenSchedRW &RW,
   return false;
 }
 
-static bool hasVariant(ArrayRef Transitions,
-   CodeGenSchedModels &SchedModels) {
-  for (const PredTransition &PTI : Transitions) {
-for (const SmallVectorImpl &WSI : PTI.WriteSequences)
-  for (unsigned WI : WSI)
-if (hasAliasedVariants(SchedModels.getSchedWrite(WI), SchedModels))
-  return true;
-
-for (const SmallVectorImpl &RSI : PTI.ReadSequences)
-  for (unsigned RI : RSI)
-if (hasAliasedVariants(SchedModels.getSchedRead(RI), SchedModels))
-  return true;
-  }
-  return false;
-}
-
 static std::vector getAllPredicates(ArrayRef Variants,
   ArrayRef ProcIndices) {
   std::vector Preds;
@@ -1628,7 +1612,7 @@ pushVariant(const TransVariant &VInfo, bool IsRead) {
 // operand. StartIdx is an index into TransVec where partial results
 // starts. RWSeq must be applied to all transitions between StartIdx and the 
end
 // of TransVec.
-void PredTransitions::substituteVariantOperand(
+bool PredTransitions::substituteVariantOperand(
 const SmallVectorImpl &RWSeq, bool IsRead, bool IsForAnyCPU,
 unsigned StartIdx) {
 
@@ -1644,6 +1628,7 @@ void PredTransitions::substituteVariantOperand(
 return !IntersectingVariants.empty();
   };
 
+  bool Subst = false;
   // Visit each original RW within the current sequence.
   for (SmallVectorImpl::const_iterator
  RWI = RWSeq.begin(), RWE = RWSeq.end(); RWI != RWE; ++RWI) {
@@ -1664,6 +1649,7 @@ void PredTransitions::substituteVariantOperand(
   }
   HasAliases = true;
   WasPushed |= CollectAndAddVariants(TransIdx, SchedRW);
+  Subst |= WasPushed;
 }
 if (IsRead && IsForAnyCPU && HasAliases && !WasPushed) {
   // If we're here this means that in some sched class:
@@ -1678,9 +1664,10 @@ void PredTransitions::substituteVariantOperand(
   TransVec.reserve(TransVec.size() + 1);
   TransVec.emplace_back(TransVec[StartIdx].PredTerm);
   TransVec.back().ReadSequences.emplace_back();
-  CollectAndAddVariants(TransVec.size() - 1, SchedRW);
+  Subst |= CollectAndAddVariants(TransVec.size() - 1, SchedRW);
 }
   }
+  return Subst;
 }
 
 // For each variant of a Read/Write in Trans, substitute the sequence of
@@ -1689,10 +1676,11 @@ void PredTransitions::substituteVariantOperand(
 // predicates should result in linear growth in the total number variants.
 //
 // This is one step in a breadth-first search of nested variants.
-void PredTransitions::substituteVariants(const PredTransition &Trans) {
+bool PredTransitions::substituteVariants(const PredTransition &Trans) {
   // Build up a set of partial results starting at the back of
   // PredTransitions. Remember the first new transition.
   unsigned StartIdx = TransVec.size();
+  bool Subst = false;
   TransVec.emplace_back(Trans.PredTerm, Trans.ProcIndices);
 
   bool IsForAnyCPU = llvm::count(Trans.ProcIndices, 0);
@@ -1705,7 +1693,8 @@ void PredTransitions::substituteVariants(const 
PredTransition &Trans) {
TransVec.begin() + StartIdx, E = TransVec.end(); I != E; ++I) {
   I->WriteSequences.emplace_back();
 }
-substituteVariantOperand(*WSI, /*IsRead=*/false, IsForAnyCPU, StartIdx);
+Subst |=
+substituteVariantOperand(*WSI, /*IsRead=*/false, IsForAnyCPU, 
StartIdx);
   }
   // Visit each original read sequence.
   for (SmallVectorImpl>::const_iterator
@@ -1716,8 +1705,10 @@ void PredTransitions::substituteVariants(const 
PredTransition &Trans) {
TransVec.begin() + StartIdx, E = TransVec.end(); I != E; +

[llvm-branch-commits] [llvm] 112b3cb - [TableGen][SchedModels] Fix read/write variant substitution

2020-11-30 Thread Evgeny Leviant via llvm-branch-commits

Author: Evgeny Leviant
Date: 2020-11-30T11:55:55+03:00
New Revision: 112b3cb6ba49aacd821440d0913f15b32131480e

URL: 
https://github.com/llvm/llvm-project/commit/112b3cb6ba49aacd821440d0913f15b32131480e
DIFF: 
https://github.com/llvm/llvm-project/commit/112b3cb6ba49aacd821440d0913f15b32131480e.diff

LOG: [TableGen][SchedModels] Fix read/write variant substitution

Patch fixes multiple issues related to expansion of variant sched reads and
writes.

Differential revision: https://reviews.llvm.org/D90844

Added: 
llvm/test/CodeGen/ARM/cortex-a57-misched-mla.mir

Modified: 
llvm/lib/Target/ARM/ARMScheduleA57.td
llvm/utils/TableGen/CodeGenSchedule.cpp
llvm/utils/TableGen/CodeGenSchedule.h

Removed: 




diff  --git a/llvm/lib/Target/ARM/ARMScheduleA57.td 
b/llvm/lib/Target/ARM/ARMScheduleA57.td
index be8591935810..0c610a4839f8 100644
--- a/llvm/lib/Target/ARM/ARMScheduleA57.td
+++ b/llvm/lib/Target/ARM/ARMScheduleA57.td
@@ -183,11 +183,6 @@ class A57BranchForm :
 // TODO: according to the doc, conditional uses I0/I1, unconditional uses M
 // Why more complex instruction uses more simple pipeline?
 // May be an error in doc.
-def A57WriteALUsi : SchedWriteVariant<[
-  // lsl #2, lsl #1, or lsr #1.
-  SchedVar>]>,
-  SchedVar>]>
-]>;
 def A57WriteALUsr : SchedWriteVariant<[
   SchedVar>]>,
   SchedVar>]>
@@ -200,7 +195,7 @@ def A57ReadALUsr : SchedReadVariant<[
   SchedVar,
   SchedVar
 ]>;
-def : SchedAlias;
+def : SchedAlias>>;
 def : SchedAlias;
 def : SchedAlias;
 def : SchedAlias;

diff  --git a/llvm/test/CodeGen/ARM/cortex-a57-misched-mla.mir 
b/llvm/test/CodeGen/ARM/cortex-a57-misched-mla.mir
new file mode 100644
index ..da8df20e54d7
--- /dev/null
+++ b/llvm/test/CodeGen/ARM/cortex-a57-misched-mla.mir
@@ -0,0 +1,34 @@
+# RUN: llc -mcpu=cortex-a57 -mtriple=thumb -enable-misched 
-run-pass=machine-scheduler -debug-only=machine-scheduler %s 2>&1 | FileCheck %s
+
+# CHECK-LABEL: ** MI Scheduling **
+# CHECK:   %[[RES:[0-9]+]]:rgpr = t2MLA
+# CHECK-NEXT:  # preds left
+# CHECK-NEXT:  # succs left
+# CHECK-NEXT:  # rdefs left
+# CHECK-NEXT:  Latency : 3
+# CHECK-NEXT:  Depth
+# CHECK-NEXT:  Height
+# CHECK-NEXT:  Predecessors:
+# CHECK-NEXT:SU({{.*}}): Data Latency=1 Reg=
+# CHECK-NEXT:SU({{.*}}): Out  Latency=
+# CHECK-NEXT:SU({{.*}}): Data Latency=1 Reg=
+# CHECK-NEXT:  Successors:
+# CHECK-NEXT:SU([[SMLA_SU:[0-9]+]]): Data Latency=1 Reg=%[[RES]]
+# CHECK-NEXT:  Pressure Diff
+# CHECK-NEXT:  Single Issue : false;
+# CHECK-NEXT:  SU([[SMLA_SU]]): {{.*}} = t2SMLAL %{{[0-9]+}}:rgpr, 
%{{[0-9]+}}:rgpr, %{{[0-9]+}}:rgpr(tied-def 0), %[[RES]]:rgpr(tied-def 1), 14, 
$noreg
+
+name:test_smlal_forwarding
+tracksRegLiveness: true
+body: |
+  bb.0:
+liveins: $r1, $r3, $r4, $r5, $r6
+%1:rgpr = COPY $r1
+%3:rgpr = COPY $r3
+%4:rgpr = COPY $r4
+%5:rgpr = COPY $r5
+%6:rgpr = COPY $r6
+%3:rgpr = t2MLA %4:rgpr, %1:rgpr, %4:rgpr, 14, $noreg
+%6:rgpr, %5:rgpr = t2SMLAL %5:rgpr, %6:rgpr, %4:rgpr, %3:rgpr, 14, $noreg
+$r0 = COPY %6:rgpr
+BX_RET 14, $noreg, implicit $r0

diff  --git a/llvm/utils/TableGen/CodeGenSchedule.cpp 
b/llvm/utils/TableGen/CodeGenSchedule.cpp
index 0851c0f321b8..fa84199974ff 100644
--- a/llvm/utils/TableGen/CodeGenSchedule.cpp
+++ b/llvm/utils/TableGen/CodeGenSchedule.cpp
@@ -1338,8 +1338,7 @@ class PredTransitions {
   PredTransitions(CodeGenSchedModels &sm): SchedModels(sm) {}
 
   bool substituteVariantOperand(const SmallVectorImpl &RWSeq,
-bool IsRead, bool IsForAnyCPU,
-unsigned StartIdx);
+bool IsRead, unsigned StartIdx);
 
   bool substituteVariants(const PredTransition &Trans);
 
@@ -1413,29 +1412,6 @@ bool PredTransitions::mutuallyExclusive(Record *PredDef,
   return false;
 }
 
-static bool hasAliasedVariants(const CodeGenSchedRW &RW,
-   CodeGenSchedModels &SchedModels) {
-  if (RW.HasVariants)
-return true;
-
-  for (Record *Alias : RW.Aliases) {
-const CodeGenSchedRW &AliasRW =
-  SchedModels.getSchedRW(Alias->getValueAsDef("AliasRW"));
-if (AliasRW.HasVariants)
-  return true;
-if (AliasRW.IsSequence) {
-  IdxVec ExpandedRWs;
-  SchedModels.expandRWSequence(AliasRW.Index, ExpandedRWs, AliasRW.IsRead);
-  for (unsigned SI : ExpandedRWs) {
-if (hasAliasedVariants(SchedModels.getSchedRW(SI, AliasRW.IsRead),
-   SchedModels))
-  return true;
-  }
-}
-  }
-  return false;
-}
-
 static std::vector getAllPredicates(ArrayRef Variants,
   ArrayRef ProcIndices) {
   std::vector Preds;
@@ -1613,21 +1589,7 @@ pushVariant(const TransVariant &VInfo, bool IsRead) {
 // starts. RWSeq must be applied to all transitions between StartIdx and the 
end
 // of TransVec

[llvm-branch-commits] [llvm] 1295235 - Fix test case

2020-11-30 Thread Evgeny Leviant via llvm-branch-commits

Author: Evgeny Leviant
Date: 2020-11-30T12:35:28+03:00
New Revision: 129523588f2715cb5d2f8852c949b3669a3c1b6b

URL: 
https://github.com/llvm/llvm-project/commit/129523588f2715cb5d2f8852c949b3669a3c1b6b
DIFF: 
https://github.com/llvm/llvm-project/commit/129523588f2715cb5d2f8852c949b3669a3c1b6b.diff

LOG: Fix test case

Added: 


Modified: 
llvm/test/CodeGen/ARM/cortex-a57-misched-mla.mir

Removed: 




diff  --git a/llvm/test/CodeGen/ARM/cortex-a57-misched-mla.mir 
b/llvm/test/CodeGen/ARM/cortex-a57-misched-mla.mir
index da8df20e54d7..03241c48045d 100644
--- a/llvm/test/CodeGen/ARM/cortex-a57-misched-mla.mir
+++ b/llvm/test/CodeGen/ARM/cortex-a57-misched-mla.mir
@@ -1,4 +1,4 @@
-# RUN: llc -mcpu=cortex-a57 -mtriple=thumb -enable-misched 
-run-pass=machine-scheduler -debug-only=machine-scheduler %s 2>&1 | FileCheck %s
+# RUN: llc -mcpu=cortex-a57 -mtriple=thumb -enable-misched 
-run-pass=machine-scheduler -debug-only=machine-scheduler %s -o - 2>&1 | 
FileCheck %s
 
 # CHECK-LABEL: ** MI Scheduling **
 # CHECK:   %[[RES:[0-9]+]]:rgpr = t2MLA



___
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [llvm] 993eaf2 - Recommit [TableGen][SchedModels] Fix read/write variant substitution

2020-12-04 Thread Evgeny Leviant via llvm-branch-commits

Author: Evgeny Leviant
Date: 2020-12-04T21:50:34+03:00
New Revision: 993eaf2d69d8beb97e4695cbd919b927ed1cfe86

URL: 
https://github.com/llvm/llvm-project/commit/993eaf2d69d8beb97e4695cbd919b927ed1cfe86
DIFF: 
https://github.com/llvm/llvm-project/commit/993eaf2d69d8beb97e4695cbd919b927ed1cfe86.diff

LOG: Recommit [TableGen][SchedModels] Fix read/write variant substitution

Original commit rG112b3cb6ba49 introduced non-determinism in subtarget
generator due to iteration over DenseMap. New patch fixes this changing
ProcModelMapTy from DenseMap to std::map.

Added: 
llvm/test/CodeGen/ARM/cortex-a57-misched-mla.mir

Modified: 
llvm/lib/Target/ARM/ARMScheduleA57.td
llvm/utils/TableGen/CodeGenSchedule.cpp
llvm/utils/TableGen/CodeGenSchedule.h

Removed: 




diff  --git a/llvm/lib/Target/ARM/ARMScheduleA57.td 
b/llvm/lib/Target/ARM/ARMScheduleA57.td
index be8591935810..0c610a4839f8 100644
--- a/llvm/lib/Target/ARM/ARMScheduleA57.td
+++ b/llvm/lib/Target/ARM/ARMScheduleA57.td
@@ -183,11 +183,6 @@ class A57BranchForm :
 // TODO: according to the doc, conditional uses I0/I1, unconditional uses M
 // Why more complex instruction uses more simple pipeline?
 // May be an error in doc.
-def A57WriteALUsi : SchedWriteVariant<[
-  // lsl #2, lsl #1, or lsr #1.
-  SchedVar>]>,
-  SchedVar>]>
-]>;
 def A57WriteALUsr : SchedWriteVariant<[
   SchedVar>]>,
   SchedVar>]>
@@ -200,7 +195,7 @@ def A57ReadALUsr : SchedReadVariant<[
   SchedVar,
   SchedVar
 ]>;
-def : SchedAlias;
+def : SchedAlias>>;
 def : SchedAlias;
 def : SchedAlias;
 def : SchedAlias;

diff  --git a/llvm/test/CodeGen/ARM/cortex-a57-misched-mla.mir 
b/llvm/test/CodeGen/ARM/cortex-a57-misched-mla.mir
new file mode 100644
index ..03241c48045d
--- /dev/null
+++ b/llvm/test/CodeGen/ARM/cortex-a57-misched-mla.mir
@@ -0,0 +1,34 @@
+# RUN: llc -mcpu=cortex-a57 -mtriple=thumb -enable-misched 
-run-pass=machine-scheduler -debug-only=machine-scheduler %s -o - 2>&1 | 
FileCheck %s
+
+# CHECK-LABEL: ** MI Scheduling **
+# CHECK:   %[[RES:[0-9]+]]:rgpr = t2MLA
+# CHECK-NEXT:  # preds left
+# CHECK-NEXT:  # succs left
+# CHECK-NEXT:  # rdefs left
+# CHECK-NEXT:  Latency : 3
+# CHECK-NEXT:  Depth
+# CHECK-NEXT:  Height
+# CHECK-NEXT:  Predecessors:
+# CHECK-NEXT:SU({{.*}}): Data Latency=1 Reg=
+# CHECK-NEXT:SU({{.*}}): Out  Latency=
+# CHECK-NEXT:SU({{.*}}): Data Latency=1 Reg=
+# CHECK-NEXT:  Successors:
+# CHECK-NEXT:SU([[SMLA_SU:[0-9]+]]): Data Latency=1 Reg=%[[RES]]
+# CHECK-NEXT:  Pressure Diff
+# CHECK-NEXT:  Single Issue : false;
+# CHECK-NEXT:  SU([[SMLA_SU]]): {{.*}} = t2SMLAL %{{[0-9]+}}:rgpr, 
%{{[0-9]+}}:rgpr, %{{[0-9]+}}:rgpr(tied-def 0), %[[RES]]:rgpr(tied-def 1), 14, 
$noreg
+
+name:test_smlal_forwarding
+tracksRegLiveness: true
+body: |
+  bb.0:
+liveins: $r1, $r3, $r4, $r5, $r6
+%1:rgpr = COPY $r1
+%3:rgpr = COPY $r3
+%4:rgpr = COPY $r4
+%5:rgpr = COPY $r5
+%6:rgpr = COPY $r6
+%3:rgpr = t2MLA %4:rgpr, %1:rgpr, %4:rgpr, 14, $noreg
+%6:rgpr, %5:rgpr = t2SMLAL %5:rgpr, %6:rgpr, %4:rgpr, %3:rgpr, 14, $noreg
+$r0 = COPY %6:rgpr
+BX_RET 14, $noreg, implicit $r0

diff  --git a/llvm/utils/TableGen/CodeGenSchedule.cpp 
b/llvm/utils/TableGen/CodeGenSchedule.cpp
index 82ca35f37e8b..50ee9462d1d1 100644
--- a/llvm/utils/TableGen/CodeGenSchedule.cpp
+++ b/llvm/utils/TableGen/CodeGenSchedule.cpp
@@ -283,7 +283,7 @@ static APInt constructOperandMask(ArrayRef 
Indices) {
 
 static void
 processSTIPredicate(STIPredicateFunction &Fn,
-const DenseMap &ProcModelMap) {
+const ProcModelMapTy &ProcModelMap) {
   DenseMap Opcode2Index;
   using OpcodeMapPair = std::pair;
   std::vector OpcodeMappings;
@@ -1338,8 +1338,7 @@ class PredTransitions {
   PredTransitions(CodeGenSchedModels &sm): SchedModels(sm) {}
 
   bool substituteVariantOperand(const SmallVectorImpl &RWSeq,
-bool IsRead, bool IsForAnyCPU,
-unsigned StartIdx);
+bool IsRead, unsigned StartIdx);
 
   bool substituteVariants(const PredTransition &Trans);
 
@@ -1413,29 +1412,6 @@ bool PredTransitions::mutuallyExclusive(Record *PredDef,
   return false;
 }
 
-static bool hasAliasedVariants(const CodeGenSchedRW &RW,
-   CodeGenSchedModels &SchedModels) {
-  if (RW.HasVariants)
-return true;
-
-  for (Record *Alias : RW.Aliases) {
-const CodeGenSchedRW &AliasRW =
-SchedModels.getSchedRW(Alias->getValueAsDef("AliasRW"));
-if (AliasRW.HasVariants)
-  return true;
-if (AliasRW.IsSequence) {
-  IdxVec ExpandedRWs;
-  SchedModels.expandRWSequence(AliasRW.Index, ExpandedRWs, AliasRW.IsRead);
-  for (unsigned SI : ExpandedRWs) {
-if (hasAliasedVariants(SchedModels.getSchedRW(SI, AliasRW.IsRead),
-   S

[llvm-branch-commits] [llvm] f69936f - Attempt to fix buildbot after rG993eaf2d69d8

2020-12-04 Thread Evgeny Leviant via llvm-branch-commits

Author: Evgeny Leviant
Date: 2020-12-04T22:10:36+03:00
New Revision: f69936f52973750d4746624abf9b6607827b08b1

URL: 
https://github.com/llvm/llvm-project/commit/f69936f52973750d4746624abf9b6607827b08b1
DIFF: 
https://github.com/llvm/llvm-project/commit/f69936f52973750d4746624abf9b6607827b08b1.diff

LOG: Attempt to fix buildbot after rG993eaf2d69d8

Added: 


Modified: 
llvm/test/CodeGen/ARM/cortex-a57-misched-mla.mir

Removed: 




diff  --git a/llvm/test/CodeGen/ARM/cortex-a57-misched-mla.mir 
b/llvm/test/CodeGen/ARM/cortex-a57-misched-mla.mir
index 03241c48045d..1b40a0b8effb 100644
--- a/llvm/test/CodeGen/ARM/cortex-a57-misched-mla.mir
+++ b/llvm/test/CodeGen/ARM/cortex-a57-misched-mla.mir
@@ -1,3 +1,4 @@
+# REQUIRES: asserts
 # RUN: llc -mcpu=cortex-a57 -mtriple=thumb -enable-misched 
-run-pass=machine-scheduler -debug-only=machine-scheduler %s -o - 2>&1 | 
FileCheck %s
 
 # CHECK-LABEL: ** MI Scheduling **



___
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [llvm] 53401e8 - [TableGen][SchedModels] Simplify the code. NFC

2020-12-07 Thread Evgeny Leviant via llvm-branch-commits

Author: Evgeny Leviant
Date: 2020-12-07T11:53:33+03:00
New Revision: 53401e8e88641941fee0876d234f9a9fc70ef6ce

URL: 
https://github.com/llvm/llvm-project/commit/53401e8e88641941fee0876d234f9a9fc70ef6ce
DIFF: 
https://github.com/llvm/llvm-project/commit/53401e8e88641941fee0876d234f9a9fc70ef6ce.diff

LOG: [TableGen][SchedModels] Simplify the code. NFC

Differential revision: https://reviews.llvm.org/D92304

Added: 


Modified: 
llvm/utils/TableGen/CodeGenSchedule.cpp
llvm/utils/TableGen/CodeGenSchedule.h
llvm/utils/TableGen/SubtargetEmitter.cpp

Removed: 




diff  --git a/llvm/utils/TableGen/CodeGenSchedule.cpp 
b/llvm/utils/TableGen/CodeGenSchedule.cpp
index 50ee9462d1d1..49a7575dce95 100644
--- a/llvm/utils/TableGen/CodeGenSchedule.cpp
+++ b/llvm/utils/TableGen/CodeGenSchedule.cpp
@@ -1314,16 +1314,12 @@ struct PredTransition {
   SmallVector PredTerm;
   SmallVector, 16> WriteSequences;
   SmallVector, 16> ReadSequences;
-  SmallVector ProcIndices;
+  unsigned ProcIndex = 0;
 
   PredTransition() = default;
-  PredTransition(ArrayRef PT) {
+  PredTransition(ArrayRef PT, unsigned ProcId) {
 PredTerm.assign(PT.begin(), PT.end());
-ProcIndices.assign(1, 0);
-  }
-  PredTransition(ArrayRef PT, ArrayRef PIds) {
-PredTerm.assign(PT.begin(), PT.end());
-ProcIndices.assign(PIds.begin(), PIds.end());
+ProcIndex = ProcId;
   }
 };
 
@@ -1413,16 +1409,11 @@ bool PredTransitions::mutuallyExclusive(Record *PredDef,
 }
 
 static std::vector getAllPredicates(ArrayRef Variants,
-  ArrayRef ProcIndices) {
+  unsigned ProcId) {
   std::vector Preds;
   for (auto &Variant : Variants) {
 if (!Variant.VarOrSeqDef->isSubClassOf("SchedVar"))
   continue;
-
-if (ProcIndices[0] && Variant.ProcIdx)
-  if (!llvm::count(ProcIndices, Variant.ProcIdx))
-continue;
-
 Preds.push_back(Variant.VarOrSeqDef->getValueAsDef("Predicate"));
   }
   return Preds;
@@ -1444,12 +1435,14 @@ void PredTransitions::getIntersectingVariants(
   Record *ModelDef = SchedRW.TheDef->getValueAsDef("SchedModel");
   VarProcIdx = SchedModels.getProcModel(ModelDef).Index;
 }
-// Push each variant. Assign TransVecIdx later.
-const RecVec VarDefs = SchedRW.TheDef->getValueAsListOfDefs("Variants");
-for (Record *VarDef : VarDefs)
-  Variants.emplace_back(VarDef, SchedRW.Index, VarProcIdx, 0);
-if (VarProcIdx == 0)
-  GenericRW = true;
+if (VarProcIdx == 0 || VarProcIdx == TransVec[TransIdx].ProcIndex) {
+  // Push each variant. Assign TransVecIdx later.
+  const RecVec VarDefs = SchedRW.TheDef->getValueAsListOfDefs("Variants");
+  for (Record *VarDef : VarDefs)
+Variants.emplace_back(VarDef, SchedRW.Index, VarProcIdx, 0);
+  if (VarProcIdx == 0)
+GenericRW = true;
+}
   }
   for (RecIter AI = SchedRW.Aliases.begin(), AE = SchedRW.Aliases.end();
AI != AE; ++AI) {
@@ -1461,6 +1454,17 @@ void PredTransitions::getIntersectingVariants(
   Record *ModelDef = (*AI)->getValueAsDef("SchedModel");
   AliasProcIdx = SchedModels.getProcModel(ModelDef).Index;
 }
+if (AliasProcIdx && AliasProcIdx != TransVec[TransIdx].ProcIndex)
+  continue;
+if (!Variants.empty()) {
+  const CodeGenProcModel &PM =
+  *(SchedModels.procModelBegin() + AliasProcIdx);
+  PrintFatalError((*AI)->getLoc(),
+  "Multiple variants defined for processor " +
+  PM.ModelName +
+  " Ensure only one SchedAlias exists per RW.");
+}
+
 const CodeGenSchedRW &AliasRW =
   SchedModels.getSchedRW((*AI)->getValueAsDef("AliasRW"));
 
@@ -1475,25 +1479,10 @@ void PredTransitions::getIntersectingVariants(
   GenericRW = true;
   }
   std::vector AllPreds =
-  getAllPredicates(Variants, TransVec[TransIdx].ProcIndices);
+  getAllPredicates(Variants, TransVec[TransIdx].ProcIndex);
   for (TransVariant &Variant : Variants) {
 // Don't expand variants if the processor models don't intersect.
 // A zero processor index means any processor.
-SmallVectorImpl &ProcIndices = TransVec[TransIdx].ProcIndices;
-if (ProcIndices[0] && Variant.ProcIdx) {
-  unsigned Cnt = std::count(ProcIndices.begin(), ProcIndices.end(),
-Variant.ProcIdx);
-  if (!Cnt)
-continue;
-  if (Cnt > 1) {
-const CodeGenProcModel &PM =
-  *(SchedModels.procModelBegin() + Variant.ProcIdx);
-PrintFatalError(Variant.VarOrSeqDef->getLoc(),
-"Multiple variants defined for processor " +
-PM.ModelName +
-" Ensure only one SchedAlias exists per RW.");
-  }
-}
 if (Variant.VarOrSeqDef->isSubClassOf("SchedVar")) {
   Record *PredDef = Variant.VarOr