From 044eb2f6afba375a914ac9d8024f8f5142bb912e Mon Sep 17 00:00:00 2001 From: Dimitry Andric Date: Mon, 18 Dec 2017 20:10:56 +0000 Subject: Vendor import of llvm trunk r321017: https://llvm.org/svn/llvm-project/llvm/trunk@321017 --- lib/CodeGen/InterleavedAccessPass.cpp | 36 ++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) (limited to 'lib/CodeGen/InterleavedAccessPass.cpp') diff --git a/lib/CodeGen/InterleavedAccessPass.cpp b/lib/CodeGen/InterleavedAccessPass.cpp index ee4929c91482..9c906d309639 100644 --- a/lib/CodeGen/InterleavedAccessPass.cpp +++ b/lib/CodeGen/InterleavedAccessPass.cpp @@ -1,4 +1,4 @@ -//===--------------------- InterleavedAccessPass.cpp ----------------------===// +//===- InterleavedAccessPass.cpp ------------------------------------------===// // // The LLVM Compiler Infrastructure // @@ -42,17 +42,32 @@ // // Similarly, a set of interleaved stores can be transformed into an optimized // sequence of shuffles followed by a set of target specific stores for X86. +// //===----------------------------------------------------------------------===// -#include "llvm/CodeGen/Passes.h" +#include "llvm/ADT/ArrayRef.h" +#include "llvm/ADT/DenseMap.h" +#include "llvm/ADT/SmallVector.h" +#include "llvm/CodeGen/TargetLowering.h" #include "llvm/CodeGen/TargetPassConfig.h" +#include "llvm/CodeGen/TargetSubtargetInfo.h" +#include "llvm/IR/Constants.h" #include "llvm/IR/Dominators.h" +#include "llvm/IR/Function.h" +#include "llvm/IR/IRBuilder.h" #include "llvm/IR/InstIterator.h" +#include "llvm/IR/Instruction.h" +#include "llvm/IR/Instructions.h" +#include "llvm/IR/Type.h" +#include "llvm/Pass.h" +#include "llvm/Support/Casting.h" +#include "llvm/Support/CommandLine.h" #include "llvm/Support/Debug.h" #include "llvm/Support/MathExtras.h" #include "llvm/Support/raw_ostream.h" -#include "llvm/Target/TargetLowering.h" -#include "llvm/Target/TargetSubtargetInfo.h" +#include "llvm/Target/TargetMachine.h" +#include +#include using namespace llvm; @@ -66,10 +81,10 @@ static cl::opt LowerInterleavedAccesses( namespace { class InterleavedAccess : public FunctionPass { - public: static char ID; - InterleavedAccess() : FunctionPass(ID), DT(nullptr), TLI(nullptr) { + + InterleavedAccess() : FunctionPass(ID) { initializeInterleavedAccessPass(*PassRegistry::getPassRegistry()); } @@ -83,8 +98,8 @@ public: } private: - DominatorTree *DT; - const TargetLowering *TLI; + DominatorTree *DT = nullptr; + const TargetLowering *TLI = nullptr; /// The maximum supported interleave factor. unsigned MaxFactor; @@ -104,9 +119,11 @@ private: bool tryReplaceExtracts(ArrayRef Extracts, ArrayRef Shuffles); }; + } // end anonymous namespace. char InterleavedAccess::ID = 0; + INITIALIZE_PASS_BEGIN(InterleavedAccess, DEBUG_TYPE, "Lower interleaved memory accesses to target specific intrinsics", false, false) @@ -331,7 +348,6 @@ bool InterleavedAccess::lowerInterleavedLoad( bool InterleavedAccess::tryReplaceExtracts( ArrayRef Extracts, ArrayRef Shuffles) { - // If there aren't any extractelement instructions to modify, there's nothing // to do. if (Extracts.empty()) @@ -342,7 +358,6 @@ bool InterleavedAccess::tryReplaceExtracts( DenseMap> ReplacementMap; for (auto *Extract : Extracts) { - // The vector index that is extracted. auto *IndexOperand = cast(Extract->getIndexOperand()); auto Index = IndexOperand->getSExtValue(); @@ -351,7 +366,6 @@ bool InterleavedAccess::tryReplaceExtracts( // extractelement instruction (which uses an interleaved load) to use one // of the shufflevector instructions instead of the load. for (auto *Shuffle : Shuffles) { - // If the shufflevector instruction doesn't dominate the extract, we // can't create a use of it. if (!DT->dominates(Shuffle, Extract)) -- cgit v1.2.3