diff options
author | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2018-01-26 21:17:14 +0000 |
---|---|---|
committer | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2018-01-26 21:17:14 +0000 |
commit | 95614acc24c59461e8e2d8d8f2b2d285baac99f8 (patch) | |
tree | 0dad9492cb15a6c46a88d2286e5c5bd7e8d6aefe /llvm/lib/Target/Hexagon/HexagonTargetMachine.cpp | |
parent | 06c0eca3c09ee543256d157621e01667dbd32dd1 (diff) | |
download | bcm5719-llvm-95614acc24c59461e8e2d8d8f2b2d285baac99f8.tar.gz bcm5719-llvm-95614acc24c59461e8e2d8d8f2b2d285baac99f8.zip |
[Hexagon] Replace multiple vector extracts with store-load combinations
llvm-svn: 323561
Diffstat (limited to 'llvm/lib/Target/Hexagon/HexagonTargetMachine.cpp')
-rw-r--r-- | llvm/lib/Target/Hexagon/HexagonTargetMachine.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/llvm/lib/Target/Hexagon/HexagonTargetMachine.cpp b/llvm/lib/Target/Hexagon/HexagonTargetMachine.cpp index df65cfd97a4..4ecfc0753b9 100644 --- a/llvm/lib/Target/Hexagon/HexagonTargetMachine.cpp +++ b/llvm/lib/Target/Hexagon/HexagonTargetMachine.cpp @@ -94,6 +94,9 @@ static cl::opt<bool> EnableVectorPrint("enable-hexagon-vector-print", cl::Hidden, cl::ZeroOrMore, cl::init(false), cl::desc("Enable Hexagon Vector print instr pass")); +static cl::opt<bool> EnableVExtractOpt("hexagon-opt-vextract", cl::Hidden, + cl::ZeroOrMore, cl::init(true), cl::desc("Enable vextract optimization")); + static cl::opt<bool> EnableTrapUnreachable("hexagon-trap-unreachable", cl::Hidden, cl::ZeroOrMore, cl::init(false), cl::desc("Enable generating trap for unreachable")); @@ -133,6 +136,7 @@ namespace llvm { void initializeHexagonOptAddrModePass(PassRegistry&); void initializeHexagonPacketizerPass(PassRegistry&); void initializeHexagonRDFOptPass(PassRegistry&); + void initializeHexagonVExtractPass(PassRegistry&); Pass *createHexagonLoopIdiomPass(); Pass *createHexagonVectorLoopCarriedReusePass(); @@ -165,6 +169,7 @@ namespace llvm { FunctionPass *createHexagonSplitDoubleRegs(); FunctionPass *createHexagonStoreWidening(); FunctionPass *createHexagonVectorPrint(); + FunctionPass *createHexagonVExtract(); } // end namespace llvm; static Reloc::Model getEffectiveRelocModel(Optional<Reloc::Model> RM) { @@ -194,6 +199,7 @@ extern "C" void LLVMInitializeHexagonTarget() { initializeHexagonOptAddrModePass(PR); initializeHexagonPacketizerPass(PR); initializeHexagonRDFOptPass(PR); + initializeHexagonVExtractPass(PR); } HexagonTargetMachine::HexagonTargetMachine(const Target &T, const Triple &TT, @@ -326,6 +332,8 @@ bool HexagonPassConfig::addInstSelector() { addPass(createHexagonISelDag(TM, getOptLevel())); if (!NoOpt) { + if (EnableVExtractOpt) + addPass(createHexagonVExtract()); // Create logical operations on predicate registers. if (EnableGenPred) addPass(createHexagonGenPredicate()); |