[llvm] r284515 - [InterleavedAccessPass] Remove global variable.

Benjamin Kramer via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 18 11:59:59 PDT 2016


Author: d0k
Date: Tue Oct 18 13:59:58 2016
New Revision: 284515

URL: http://llvm.org/viewvc/llvm-project?rev=284515&view=rev
Log:
[InterleavedAccessPass] Remove global variable.

This is a threading hazard and rightfully complained about by tsan. No
functionality change.

Modified:
    llvm/trunk/lib/CodeGen/InterleavedAccessPass.cpp

Modified: llvm/trunk/lib/CodeGen/InterleavedAccessPass.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/InterleavedAccessPass.cpp?rev=284515&r1=284514&r2=284515&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/InterleavedAccessPass.cpp (original)
+++ llvm/trunk/lib/CodeGen/InterleavedAccessPass.cpp Tue Oct 18 13:59:58 2016
@@ -62,8 +62,6 @@ static cl::opt<bool> LowerInterleavedAcc
     cl::desc("Enable lowering interleaved accesses to intrinsics"),
     cl::init(true), cl::Hidden);
 
-static unsigned MaxFactor; // The maximum supported interleave factor.
-
 namespace {
 
 class InterleavedAccess : public FunctionPass {
@@ -89,6 +87,9 @@ private:
   const TargetMachine *TM;
   const TargetLowering *TLI;
 
+  /// The maximum supported interleave factor.
+  unsigned MaxFactor;
+
   /// \brief Transform an interleaved load into target specific intrinsics.
   bool lowerInterleavedLoad(LoadInst *LI,
                             SmallVector<Instruction *, 32> &DeadInsts);
@@ -149,7 +150,7 @@ static bool isDeInterleaveMaskOfFactor(A
 ///     <0, 2, 4, 6>    (mask of index 0 to extract even elements)
 ///     <1, 3, 5, 7>    (mask of index 1 to extract odd elements)
 static bool isDeInterleaveMask(ArrayRef<int> Mask, unsigned &Factor,
-                               unsigned &Index) {
+                               unsigned &Index, unsigned MaxFactor) {
   if (Mask.size() < 2)
     return false;
 
@@ -167,7 +168,8 @@ static bool isDeInterleaveMask(ArrayRef<
 ///
 /// E.g. The RE-interleave mask (Factor = 2) could be:
 ///     <0, 4, 1, 5, 2, 6, 3, 7>
-static bool isReInterleaveMask(ArrayRef<int> Mask, unsigned &Factor) {
+static bool isReInterleaveMask(ArrayRef<int> Mask, unsigned &Factor,
+                               unsigned MaxFactor) {
   unsigned NumElts = Mask.size();
   if (NumElts < 4)
     return false;
@@ -229,7 +231,8 @@ bool InterleavedAccess::lowerInterleaved
   unsigned Factor, Index;
 
   // Check if the first shufflevector is DE-interleave shuffle.
-  if (!isDeInterleaveMask(Shuffles[0]->getShuffleMask(), Factor, Index))
+  if (!isDeInterleaveMask(Shuffles[0]->getShuffleMask(), Factor, Index,
+                          MaxFactor))
     return false;
 
   // Holds the corresponding index for each DE-interleave shuffle.
@@ -347,7 +350,7 @@ bool InterleavedAccess::lowerInterleaved
 
   // Check if the shufflevector is RE-interleave shuffle.
   unsigned Factor;
-  if (!isReInterleaveMask(SVI->getShuffleMask(), Factor))
+  if (!isReInterleaveMask(SVI->getShuffleMask(), Factor, MaxFactor))
     return false;
 
   DEBUG(dbgs() << "IA: Found an interleaved store: " << *SI << "\n");




More information about the llvm-commits mailing list