[TTI] Refactor emitGetActiveLaneMask
authorSjoerd Meijer <sjoerd.meijer@arm.com>
Tue, 9 Jun 2020 16:19:57 +0000 (17:19 +0100)
committerSjoerd Meijer <sjoerd.meijer@arm.com>
Wed, 17 Jun 2020 08:53:58 +0000 (09:53 +0100)
Refactor TTI hook emitGetActiveLaneMask and remove the unused arguments
as suggested in D79100.

llvm/include/llvm/Analysis/TargetTransformInfo.h
llvm/include/llvm/Analysis/TargetTransformInfoImpl.h
llvm/include/llvm/CodeGen/BasicTTIImpl.h
llvm/lib/Analysis/TargetTransformInfo.cpp
llvm/lib/Target/ARM/ARMTargetTransformInfo.cpp
llvm/lib/Target/ARM/ARMTargetTransformInfo.h

index 247b8a6..52da77d 100644 (file)
@@ -529,9 +529,8 @@ public:
                                    const LoopAccessInfo *LAI) const;
 
   /// Query the target whether lowering of the llvm.get.active.lane.mask
-  /// intrinsic is supported and if emitting it is desired for this loop.
-  bool emitGetActiveLaneMask(Loop *L, LoopInfo *LI, ScalarEvolution &SE,
-                             bool TailFolded) const;
+  /// intrinsic is supported.
+  bool emitGetActiveLaneMask() const;
 
   /// @}
 
@@ -1290,8 +1289,7 @@ public:
   preferPredicateOverEpilogue(Loop *L, LoopInfo *LI, ScalarEvolution &SE,
                               AssumptionCache &AC, TargetLibraryInfo *TLI,
                               DominatorTree *DT, const LoopAccessInfo *LAI) = 0;
-  virtual bool emitGetActiveLaneMask(Loop *L, LoopInfo *LI, ScalarEvolution &SE,
-                                     bool TailFolded) = 0;
+  virtual bool emitGetActiveLaneMask() = 0;
   virtual bool isLegalAddImmediate(int64_t Imm) = 0;
   virtual bool isLegalICmpImmediate(int64_t Imm) = 0;
   virtual bool isLegalAddressingMode(Type *Ty, GlobalValue *BaseGV,
@@ -1571,9 +1569,8 @@ public:
                                    const LoopAccessInfo *LAI) override {
     return Impl.preferPredicateOverEpilogue(L, LI, SE, AC, TLI, DT, LAI);
   }
-  bool emitGetActiveLaneMask(Loop *L, LoopInfo *LI, ScalarEvolution &SE,
-                             bool TailFolded) override {
-    return Impl.emitGetActiveLaneMask(L, LI, SE, TailFolded);
+  bool emitGetActiveLaneMask() override {
+    return Impl.emitGetActiveLaneMask();
   }
   bool isLegalAddImmediate(int64_t Imm) override {
     return Impl.isLegalAddImmediate(Imm);
index f8bfc4b..2f6faa7 100644 (file)
@@ -141,8 +141,7 @@ public:
     return false;
   }
 
-  bool emitGetActiveLaneMask(Loop *L, LoopInfo *LI, ScalarEvolution &SE,
-                             bool TailFold) const {
+  bool emitGetActiveLaneMask() const {
     return false;
   }
 
index 1e36aae..3e190a0 100644 (file)
@@ -462,9 +462,8 @@ public:
     return BaseT::preferPredicateOverEpilogue(L, LI, SE, AC, TLI, DT, LAI);
   }
 
-  bool emitGetActiveLaneMask(Loop *L, LoopInfo *LI, ScalarEvolution &SE,
-                             bool TailFold) {
-    return BaseT::emitGetActiveLaneMask(L, LI, SE, TailFold);
+  bool emitGetActiveLaneMask() {
+    return BaseT::emitGetActiveLaneMask();
   }
 
   int getInstructionLatency(const Instruction *I) {
index 116ff5a..642c15e 100644 (file)
@@ -313,9 +313,8 @@ bool TargetTransformInfo::preferPredicateOverEpilogue(
   return TTIImpl->preferPredicateOverEpilogue(L, LI, SE, AC, TLI, DT, LAI);
 }
 
-bool TargetTransformInfo::emitGetActiveLaneMask(Loop *L, LoopInfo *LI,
-    ScalarEvolution &SE, bool TailFolded) const {
-  return TTIImpl->emitGetActiveLaneMask(L, LI, SE, TailFolded);
+bool TargetTransformInfo::emitGetActiveLaneMask() const {
+  return TTIImpl->emitGetActiveLaneMask();
 }
 
 void TargetTransformInfo::getUnrollingPreferences(
index df84246..6d7a190 100644 (file)
@@ -1412,12 +1412,14 @@ bool ARMTTIImpl::preferPredicateOverEpilogue(Loop *L, LoopInfo *LI,
   return canTailPredicateLoop(L, LI, SE, DL, LAI);
 }
 
-bool ARMTTIImpl::emitGetActiveLaneMask(Loop *L, LoopInfo *LI,
-    ScalarEvolution &SE, bool TailFolded) const {
-  // TODO: if this loop is tail-folded, we want to emit the
-  // llvm.get.active.lane.mask intrinsic so that this can be picked up in the
-  // MVETailPredication pass that needs to know the number of elements
-  // processed by this vector loop.
+bool ARMTTIImpl::emitGetActiveLaneMask() const {
+  if (!ST->hasMVEIntegerOps())
+    return false;
+
+  // TODO: Intrinsic @llvm.get.active.lane.mask is supported.
+  // It is used in the MVETailPredication pass, which requires the number of
+  // elements processed by this vector loop to setup the tail-predicated
+  // loop.
   return false;
 }
 void ARMTTIImpl::getUnrollingPreferences(Loop *L, ScalarEvolution &SE,
index 72243ef..d319aa8 100644 (file)
@@ -250,8 +250,7 @@ public:
   void getUnrollingPreferences(Loop *L, ScalarEvolution &SE,
                                TTI::UnrollingPreferences &UP);
 
-  bool emitGetActiveLaneMask(Loop *L, LoopInfo *LI, ScalarEvolution &SE,
-                             bool TailFolded) const;
+  bool emitGetActiveLaneMask() const;
 
   bool shouldBuildLookupTablesForConstant(Constant *C) const {
     // In the ROPI and RWPI relocation models we can't have pointers to global