Skip to content
This repository was archived by the owner on Apr 23, 2020. It is now read-only.

Commit 3e7d32b

Browse files
committed
Enable the reuse of values computed in a previous loop iteration.
This patch adds a pass that removes the computation of provably redundant expressions that have been computed earlier in a previous iteration. It relies on the use of PHIs to identify loop carried dependences. This is scalar replacement for vector types. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@313925 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 4d15ba8 commit 3e7d32b

File tree

3 files changed

+588
-0
lines changed

3 files changed

+588
-0
lines changed

lib/Target/Hexagon/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ add_llvm_target(HexagonCodeGen
5353
HexagonTargetMachine.cpp
5454
HexagonTargetObjectFile.cpp
5555
HexagonTargetTransformInfo.cpp
56+
HexagonVectorLoopCarriedReuse.cpp
5657
HexagonVectorPrint.cpp
5758
HexagonVLIWPacketizer.cpp
5859
RDFCopy.cpp

lib/Target/Hexagon/HexagonTargetMachine.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,10 +123,12 @@ namespace llvm {
123123
void initializeHexagonExpandCondsetsPass(PassRegistry&);
124124
void initializeHexagonGenMuxPass(PassRegistry&);
125125
void initializeHexagonLoopIdiomRecognizePass(PassRegistry&);
126+
void initializeHexagonVectorLoopCarriedReusePass(PassRegistry&);
126127
void initializeHexagonNewValueJumpPass(PassRegistry&);
127128
void initializeHexagonOptAddrModePass(PassRegistry&);
128129
void initializeHexagonPacketizerPass(PassRegistry&);
129130
Pass *createHexagonLoopIdiomPass();
131+
Pass *createHexagonVectorLoopCarriedReusePass();
130132

131133
FunctionPass *createHexagonBitSimplify();
132134
FunctionPass *createHexagonBranchRelaxation();
@@ -177,6 +179,7 @@ extern "C" void LLVMInitializeHexagonTarget() {
177179
initializeHexagonEarlyIfConversionPass(PR);
178180
initializeHexagonGenMuxPass(PR);
179181
initializeHexagonLoopIdiomRecognizePass(PR);
182+
initializeHexagonVectorLoopCarriedReusePass(PR);
180183
initializeHexagonNewValueJumpPass(PR);
181184
initializeHexagonOptAddrModePass(PR);
182185
initializeHexagonPacketizerPass(PR);
@@ -237,6 +240,11 @@ void HexagonTargetMachine::adjustPassManager(PassManagerBuilder &PMB) {
237240
[&](const PassManagerBuilder &, legacy::PassManagerBase &PM) {
238241
PM.add(createHexagonLoopIdiomPass());
239242
});
243+
PMB.addExtension(
244+
PassManagerBuilder::EP_LoopOptimizerEnd,
245+
[&](const PassManagerBuilder &, legacy::PassManagerBase &PM) {
246+
PM.add(createHexagonVectorLoopCarriedReusePass());
247+
});
240248
}
241249

242250
TargetIRAnalysis HexagonTargetMachine::getTargetIRAnalysis() {

0 commit comments

Comments
 (0)