Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(70)

Side by Side Diff: lib/Transforms/NaCl/BackendCanonicalize.cpp

Issue 1151093004: Changes from 3.7 merge to files not in upstream (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-llvm.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 //===- BackendCanonicalize.cpp --------------------------------------------===// 1 //===- BackendCanonicalize.cpp --------------------------------------------===//
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 // Clean up some toolchain-side PNaCl ABI simplification passes. These passes 10 // Clean up some toolchain-side PNaCl ABI simplification passes. These passes
(...skipping 18 matching lines...) Expand all
29 29
30 #include "llvm/Analysis/ConstantFolding.h" 30 #include "llvm/Analysis/ConstantFolding.h"
31 #include "llvm/IR/BasicBlock.h" 31 #include "llvm/IR/BasicBlock.h"
32 #include "llvm/IR/DataLayout.h" 32 #include "llvm/IR/DataLayout.h"
33 #include "llvm/IR/IRBuilder.h" 33 #include "llvm/IR/IRBuilder.h"
34 #include "llvm/IR/Instruction.h" 34 #include "llvm/IR/Instruction.h"
35 #include "llvm/IR/Instructions.h" 35 #include "llvm/IR/Instructions.h"
36 #include "llvm/IR/Operator.h" 36 #include "llvm/IR/Operator.h"
37 #include "llvm/IR/InstVisitor.h" 37 #include "llvm/IR/InstVisitor.h"
38 #include "llvm/Pass.h" 38 #include "llvm/Pass.h"
39 #include "llvm/Target/TargetLibraryInfo.h" 39 #include "llvm/Analysis/TargetLibraryInfo.h"
40 #include "llvm/Transforms/NaCl.h" 40 #include "llvm/Transforms/NaCl.h"
41 #include "llvm/Transforms/Utils/Local.h" 41 #include "llvm/Transforms/Utils/Local.h"
42 42
43 using namespace llvm; 43 using namespace llvm;
44 44
45 // ============================================================================= 45 // =============================================================================
46 // TODO(jfb) The following functions are as-is from instcombine. Make them 46 // TODO(jfb) The following functions are as-is from instcombine. Make them
47 // reusable instead. 47 // reusable instead.
48 48
49 /// CollectSingleShuffleElements - If V is a shuffle of values that ONLY returns 49 /// CollectSingleShuffleElements - If V is a shuffle of values that ONLY returns
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 namespace { 218 namespace {
219 219
220 class BackendCanonicalize : public FunctionPass, 220 class BackendCanonicalize : public FunctionPass,
221 public InstVisitor<BackendCanonicalize, bool> { 221 public InstVisitor<BackendCanonicalize, bool> {
222 public: 222 public:
223 static char ID; // Pass identification, replacement for typeid 223 static char ID; // Pass identification, replacement for typeid
224 BackendCanonicalize() : FunctionPass(ID), DL(0), TLI(0) { 224 BackendCanonicalize() : FunctionPass(ID), DL(0), TLI(0) {
225 initializeBackendCanonicalizePass(*PassRegistry::getPassRegistry()); 225 initializeBackendCanonicalizePass(*PassRegistry::getPassRegistry());
226 } 226 }
227 virtual void getAnalysisUsage(AnalysisUsage &AU) const { 227 virtual void getAnalysisUsage(AnalysisUsage &AU) const {
228 AU.addRequired<DataLayoutPass>(); 228 AU.addRequired<TargetLibraryInfoWrapperPass>();
229 AU.addRequired<TargetLibraryInfo>();
230 FunctionPass::getAnalysisUsage(AU); 229 FunctionPass::getAnalysisUsage(AU);
231 } 230 }
232 231
233 virtual bool runOnFunction(Function &F); 232 virtual bool runOnFunction(Function &F);
234 233
235 // InstVisitor implementation. Unhandled instructions stay as-is. 234 // InstVisitor implementation. Unhandled instructions stay as-is.
236 bool visitInstruction(Instruction &I) { return false; } 235 bool visitInstruction(Instruction &I) { return false; }
237 bool visitInsertElementInst(InsertElementInst &IE); 236 bool visitInsertElementInst(InsertElementInst &IE);
238 bool visitBitCastInst(BitCastInst &C); 237 bool visitBitCastInst(BitCastInst &C);
239 bool visitLoadInst(LoadInst &L); 238 bool visitLoadInst(LoadInst &L);
(...skipping 15 matching lines...) Expand all
255 }; 254 };
256 255
257 } // anonymous namespace 256 } // anonymous namespace
258 257
259 char BackendCanonicalize::ID = 0; 258 char BackendCanonicalize::ID = 0;
260 INITIALIZE_PASS(BackendCanonicalize, "backend-canonicalize", 259 INITIALIZE_PASS(BackendCanonicalize, "backend-canonicalize",
261 "Canonicalize PNaCl bitcode for LLVM backends", false, false) 260 "Canonicalize PNaCl bitcode for LLVM backends", false, false)
262 261
263 bool BackendCanonicalize::runOnFunction(Function &F) { 262 bool BackendCanonicalize::runOnFunction(Function &F) {
264 bool Modified = false; 263 bool Modified = false;
265 DL = &getAnalysis<DataLayoutPass>().getDataLayout(); 264 DL = &F.getParent()->getDataLayout();
266 TLI = &getAnalysis<TargetLibraryInfo>(); 265 TLI = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();
267 266
268 for (Function::iterator FI = F.begin(), FE = F.end(); FI != FE; ++FI) 267 for (Function::iterator FI = F.begin(), FE = F.end(); FI != FE; ++FI)
269 for (BasicBlock::iterator BI = FI->begin(), BE = FI->end(); BI != BE; ++BI) 268 for (BasicBlock::iterator BI = FI->begin(), BE = FI->end(); BI != BE; ++BI)
270 Modified |= visit(&*BI); 269 Modified |= visit(&*BI);
271 emptyKillList(Kill); 270 emptyKillList(Kill);
272 return Modified; 271 return Modified;
273 } 272 }
274 273
275 // This function is *almost* as-is from instcombine, avoiding silly 274 // This function is *almost* as-is from instcombine, avoiding silly
276 // cases that should already have been optimized. 275 // cases that should already have been optimized.
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 335
337 bool BackendCanonicalize::visitBitCastInst(BitCastInst &B) { 336 bool BackendCanonicalize::visitBitCastInst(BitCastInst &B) {
338 return visitConstantFoldableInstruction(&B); 337 return visitConstantFoldableInstruction(&B);
339 } 338 }
340 339
341 bool BackendCanonicalize::visitLoadInst(LoadInst &L) { 340 bool BackendCanonicalize::visitLoadInst(LoadInst &L) {
342 return visitConstantFoldableInstruction(&L); 341 return visitConstantFoldableInstruction(&L);
343 } 342 }
344 343
345 bool BackendCanonicalize::visitConstantFoldableInstruction(Instruction *I) { 344 bool BackendCanonicalize::visitConstantFoldableInstruction(Instruction *I) {
346 if (Constant *Folded = ConstantFoldInstruction(I, DL, TLI)) { 345 if (Constant *Folded = ConstantFoldInstruction(I, *DL, TLI)) {
347 I->replaceAllUsesWith(Folded); 346 I->replaceAllUsesWith(Folded);
348 Kill.push_back(I); 347 Kill.push_back(I);
349 return true; 348 return true;
350 } 349 }
351 return false; 350 return false;
352 } 351 }
353 352
354 void BackendCanonicalize::emptyKillList(KillList &Kill) { 353 void BackendCanonicalize::emptyKillList(KillList &Kill) {
355 while (!Kill.empty()) 354 while (!Kill.empty())
356 RecursivelyDeleteTriviallyDeadInstructions(Kill.pop_back_val()); 355 RecursivelyDeleteTriviallyDeadInstructions(Kill.pop_back_val());
357 } 356 }
358 357
359 FunctionPass *llvm::createBackendCanonicalizePass() { 358 FunctionPass *llvm::createBackendCanonicalizePass() {
360 return new BackendCanonicalize(); 359 return new BackendCanonicalize();
361 } 360 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698