OLD | NEW |
---|---|
1 //===- ConstantInsertExtractElementIndex.cpp - Insert/Extract element -----===// | 1 //===- ConstantInsertExtractElementIndex.cpp - Insert/Extract element -----===// |
2 // | 2 // |
3 // The LLVM Compiler Infrastructure | 3 // The LLVM Compiler Infrastructure |
4 // | 4 // |
5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
7 // | 7 // |
8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
9 // | 9 // |
10 // Transform all InsertElement and ExtractElement with non-constant or | 10 // Transform all InsertElement and ExtractElement with non-constant or |
(...skipping 16 matching lines...) Expand all Loading... | |
27 using namespace llvm; | 27 using namespace llvm; |
28 | 28 |
29 namespace { | 29 namespace { |
30 class ConstantInsertExtractElementIndex : public BasicBlockPass { | 30 class ConstantInsertExtractElementIndex : public BasicBlockPass { |
31 public: | 31 public: |
32 static char ID; // Pass identification, replacement for typeid | 32 static char ID; // Pass identification, replacement for typeid |
33 ConstantInsertExtractElementIndex() : BasicBlockPass(ID), M(0), DL(0) { | 33 ConstantInsertExtractElementIndex() : BasicBlockPass(ID), M(0), DL(0) { |
34 initializeConstantInsertExtractElementIndexPass( | 34 initializeConstantInsertExtractElementIndexPass( |
35 *PassRegistry::getPassRegistry()); | 35 *PassRegistry::getPassRegistry()); |
36 } | 36 } |
37 void getAnalysisUsage(AnalysisUsage &AU) const override { | |
38 AU.addRequired<DataLayoutPass>(); | |
39 BasicBlockPass::getAnalysisUsage(AU); | |
40 } | |
41 using BasicBlockPass::doInitialization; | 37 using BasicBlockPass::doInitialization; |
42 bool doInitialization(Module &Mod) override { | 38 bool doInitialization(Module &Mod) override { |
43 M = &Mod; | 39 M = &Mod; |
44 return false; // Unchanged. | 40 return false; // Unchanged. |
45 } | 41 } |
46 bool runOnBasicBlock(BasicBlock &BB) override; | 42 bool runOnBasicBlock(BasicBlock &BB) override; |
47 | 43 |
48 private: | 44 private: |
49 typedef SmallVector<Instruction *, 8> Instructions; | 45 typedef SmallVector<Instruction *, 8> Instructions; |
50 const Module *M; | 46 const Module *M; |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
155 } | 151 } |
156 | 152 |
157 I->replaceAllUsesWith(Res); | 153 I->replaceAllUsesWith(Res); |
158 I->eraseFromParent(); | 154 I->eraseFromParent(); |
159 } | 155 } |
160 } | 156 } |
161 | 157 |
162 bool ConstantInsertExtractElementIndex::runOnBasicBlock(BasicBlock &BB) { | 158 bool ConstantInsertExtractElementIndex::runOnBasicBlock(BasicBlock &BB) { |
163 bool Changed = false; | 159 bool Changed = false; |
164 if (!DL) | 160 if (!DL) |
165 DL = &getAnalysis<DataLayoutPass>().getDataLayout(); | 161 DL = &BB.getParent()->getParent()->getDataLayout(); |
jvoung (off chromium)
2015/05/26 20:39:45
nit: Could be BB.getModule()->getDataLayout();
Derek Schuff
2015/05/26 22:01:32
Done.
| |
166 Instructions OutOfRangeConstantIndices; | 162 Instructions OutOfRangeConstantIndices; |
167 Instructions NonConstantVectorIndices; | 163 Instructions NonConstantVectorIndices; |
168 | 164 |
169 findNonConstantInsertExtractElements(BB, OutOfRangeConstantIndices, | 165 findNonConstantInsertExtractElements(BB, OutOfRangeConstantIndices, |
170 NonConstantVectorIndices); | 166 NonConstantVectorIndices); |
171 if (!OutOfRangeConstantIndices.empty()) { | 167 if (!OutOfRangeConstantIndices.empty()) { |
172 Changed = true; | 168 Changed = true; |
173 fixOutOfRangeConstantIndices(BB, OutOfRangeConstantIndices); | 169 fixOutOfRangeConstantIndices(BB, OutOfRangeConstantIndices); |
174 } | 170 } |
175 if (!NonConstantVectorIndices.empty()) { | 171 if (!NonConstantVectorIndices.empty()) { |
176 Changed = true; | 172 Changed = true; |
177 fixNonConstantVectorIndices(BB, NonConstantVectorIndices); | 173 fixNonConstantVectorIndices(BB, NonConstantVectorIndices); |
178 } | 174 } |
179 return Changed; | 175 return Changed; |
180 } | 176 } |
181 | 177 |
182 BasicBlockPass *llvm::createConstantInsertExtractElementIndexPass() { | 178 BasicBlockPass *llvm::createConstantInsertExtractElementIndexPass() { |
183 return new ConstantInsertExtractElementIndex(); | 179 return new ConstantInsertExtractElementIndex(); |
184 } | 180 } |
OLD | NEW |