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

Side by Side Diff: src/IceTargetLowering.cpp

Issue 1961743002: Subzero: Update for LLVM 3.9 (trunk). (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero@master
Patch Set: Remove unnecessary variable Created 4 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
« no previous file with comments | « src/IceTargetLowering.h ('k') | src/IceTargetLoweringARM32.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 //===- subzero/src/IceTargetLowering.cpp - Basic lowering implementation --===// 1 //===- subzero/src/IceTargetLowering.cpp - Basic lowering implementation --===//
2 // 2 //
3 // The Subzero Code Generator 3 // The Subzero Code Generator
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 /// \file 10 /// \file
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 } 331 }
332 } 332 }
333 333
334 void TargetLowering::genTargetHelperCalls() { 334 void TargetLowering::genTargetHelperCalls() {
335 TimerMarker T(TimerStack::TT_genHelpers, Func); 335 TimerMarker T(TimerStack::TT_genHelpers, Func);
336 Utils::BoolFlagSaver _(GeneratingTargetHelpers, true); 336 Utils::BoolFlagSaver _(GeneratingTargetHelpers, true);
337 for (CfgNode *Node : Func->getNodes()) { 337 for (CfgNode *Node : Func->getNodes()) {
338 Context.init(Node); 338 Context.init(Node);
339 while (!Context.atEnd()) { 339 while (!Context.atEnd()) {
340 PostIncrLoweringContext _(Context); 340 PostIncrLoweringContext _(Context);
341 genTargetHelperCallFor(Context.getCur()); 341 genTargetHelperCallFor(iteratorToInst(Context.getCur()));
342 } 342 }
343 } 343 }
344 } 344 }
345 345
346 void TargetLowering::doAddressOpt() { 346 void TargetLowering::doAddressOpt() {
347 if (llvm::isa<InstLoad>(*Context.getCur())) 347 if (llvm::isa<InstLoad>(*Context.getCur()))
348 doAddressOptLoad(); 348 doAddressOptLoad();
349 else if (llvm::isa<InstStore>(*Context.getCur())) 349 else if (llvm::isa<InstStore>(*Context.getCur()))
350 doAddressOptStore(); 350 doAddressOptStore();
351 Context.advanceCur(); 351 Context.advanceCur();
352 Context.advanceNext(); 352 Context.advanceNext();
353 } 353 }
354 354
355 void TargetLowering::doNopInsertion(RandomNumberGenerator &RNG) { 355 void TargetLowering::doNopInsertion(RandomNumberGenerator &RNG) {
356 Inst *I = Context.getCur(); 356 Inst *I = iteratorToInst(Context.getCur());
357 bool ShouldSkip = llvm::isa<InstFakeUse>(I) || llvm::isa<InstFakeDef>(I) || 357 bool ShouldSkip = llvm::isa<InstFakeUse>(I) || llvm::isa<InstFakeDef>(I) ||
358 llvm::isa<InstFakeKill>(I) || I->isRedundantAssign() || 358 llvm::isa<InstFakeKill>(I) || I->isRedundantAssign() ||
359 I->isDeleted(); 359 I->isDeleted();
360 if (!ShouldSkip) { 360 if (!ShouldSkip) {
361 int Probability = getFlags().getNopProbabilityAsPercentage(); 361 int Probability = getFlags().getNopProbabilityAsPercentage();
362 for (int I = 0; I < getFlags().getMaxNopsPerInstruction(); ++I) { 362 for (int I = 0; I < getFlags().getMaxNopsPerInstruction(); ++I) {
363 randomlyInsertNop(Probability / 100.0, RNG); 363 randomlyInsertNop(Probability / 100.0, RNG);
364 } 364 }
365 } 365 }
366 } 366 }
367 367
368 // Lowers a single instruction according to the information in Context, by 368 // Lowers a single instruction according to the information in Context, by
369 // checking the Context.Cur instruction kind and calling the appropriate 369 // checking the Context.Cur instruction kind and calling the appropriate
370 // lowering method. The lowering method should insert target instructions at 370 // lowering method. The lowering method should insert target instructions at
371 // the Cur.Next insertion point, and should not delete the Context.Cur 371 // the Cur.Next insertion point, and should not delete the Context.Cur
372 // instruction or advance Context.Cur. 372 // instruction or advance Context.Cur.
373 // 373 //
374 // The lowering method may look ahead in the instruction stream as desired, and 374 // The lowering method may look ahead in the instruction stream as desired, and
375 // lower additional instructions in conjunction with the current one, for 375 // lower additional instructions in conjunction with the current one, for
376 // example fusing a compare and branch. If it does, it should advance 376 // example fusing a compare and branch. If it does, it should advance
377 // Context.Cur to point to the next non-deleted instruction to process, and it 377 // Context.Cur to point to the next non-deleted instruction to process, and it
378 // should delete any additional instructions it consumes. 378 // should delete any additional instructions it consumes.
379 void TargetLowering::lower() { 379 void TargetLowering::lower() {
380 assert(!Context.atEnd()); 380 assert(!Context.atEnd());
381 Inst *Instr = Context.getCur(); 381 Inst *Instr = iteratorToInst(Context.getCur());
382 Instr->deleteIfDead(); 382 Instr->deleteIfDead();
383 if (!Instr->isDeleted() && !llvm::isa<InstFakeDef>(Instr) && 383 if (!Instr->isDeleted() && !llvm::isa<InstFakeDef>(Instr) &&
384 !llvm::isa<InstFakeUse>(Instr)) { 384 !llvm::isa<InstFakeUse>(Instr)) {
385 // Mark the current instruction as deleted before lowering, otherwise the 385 // Mark the current instruction as deleted before lowering, otherwise the
386 // Dest variable will likely get marked as non-SSA. See 386 // Dest variable will likely get marked as non-SSA. See
387 // Variable::setDefinition(). However, just pass-through FakeDef and 387 // Variable::setDefinition(). However, just pass-through FakeDef and
388 // FakeUse instructions that might have been inserted prior to lowering. 388 // FakeUse instructions that might have been inserted prior to lowering.
389 Instr->setDeleted(); 389 Instr->setDeleted();
390 switch (Instr->getKind()) { 390 switch (Instr->getKind()) {
391 case Inst::Alloca: 391 case Inst::Alloca:
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 466
467 void TargetLowering::lowerInst(CfgNode *Node, InstList::iterator Next, 467 void TargetLowering::lowerInst(CfgNode *Node, InstList::iterator Next,
468 InstHighLevel *Instr) { 468 InstHighLevel *Instr) {
469 // TODO(stichnot): Consider modifying the design/implementation to avoid 469 // TODO(stichnot): Consider modifying the design/implementation to avoid
470 // multiple init() calls when using lowerInst() to lower several instructions 470 // multiple init() calls when using lowerInst() to lower several instructions
471 // in the same node. 471 // in the same node.
472 Context.init(Node); 472 Context.init(Node);
473 Context.setNext(Next); 473 Context.setNext(Next);
474 Context.insert(Instr); 474 Context.insert(Instr);
475 --Next; 475 --Next;
476 assert(&*Next == Instr); 476 assert(iteratorToInst(Next) == Instr);
477 Context.setCur(Next); 477 Context.setCur(Next);
478 lower(); 478 lower();
479 } 479 }
480 480
481 void TargetLowering::lowerOther(const Inst *Instr) { 481 void TargetLowering::lowerOther(const Inst *Instr) {
482 (void)Instr; 482 (void)Instr;
483 Func->setError("Can't lower unsupported instruction type"); 483 Func->setError("Can't lower unsupported instruction type");
484 } 484 }
485 485
486 // Drives register allocation, allowing all physical registers (except perhaps 486 // Drives register allocation, allowing all physical registers (except perhaps
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after
903 case TARGET_LOWERING_CLASS_FOR(X): \ 903 case TARGET_LOWERING_CLASS_FOR(X): \
904 return ::X::createTargetHeaderLowering(Ctx); 904 return ::X::createTargetHeaderLowering(Ctx);
905 #include "SZTargets.def" 905 #include "SZTargets.def"
906 #undef SUBZERO_TARGET 906 #undef SUBZERO_TARGET
907 } 907 }
908 } 908 }
909 909
910 TargetHeaderLowering::~TargetHeaderLowering() = default; 910 TargetHeaderLowering::~TargetHeaderLowering() = default;
911 911
912 } // end of namespace Ice 912 } // end of namespace Ice
OLDNEW
« no previous file with comments | « src/IceTargetLowering.h ('k') | src/IceTargetLoweringARM32.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698