comparison lib/CodeGen/IfConversion.cpp @ 134:3a76565eade5 LLVM5.0.1

update 5.0.1
author mir3636
date Sat, 17 Feb 2018 09:57:20 +0900
parents 803732b1fca8
children c2174574ed3a
comparison
equal deleted inserted replaced
133:c60214abe0e8 134:3a76565eade5
29 #include "llvm/CodeGen/MachineInstr.h" 29 #include "llvm/CodeGen/MachineInstr.h"
30 #include "llvm/CodeGen/MachineInstrBuilder.h" 30 #include "llvm/CodeGen/MachineInstrBuilder.h"
31 #include "llvm/CodeGen/MachineModuleInfo.h" 31 #include "llvm/CodeGen/MachineModuleInfo.h"
32 #include "llvm/CodeGen/MachineOperand.h" 32 #include "llvm/CodeGen/MachineOperand.h"
33 #include "llvm/CodeGen/MachineRegisterInfo.h" 33 #include "llvm/CodeGen/MachineRegisterInfo.h"
34 #include "llvm/CodeGen/TargetInstrInfo.h"
35 #include "llvm/CodeGen/TargetLowering.h"
36 #include "llvm/CodeGen/TargetRegisterInfo.h"
34 #include "llvm/CodeGen/TargetSchedule.h" 37 #include "llvm/CodeGen/TargetSchedule.h"
38 #include "llvm/CodeGen/TargetSubtargetInfo.h"
35 #include "llvm/IR/DebugLoc.h" 39 #include "llvm/IR/DebugLoc.h"
36 #include "llvm/MC/MCRegisterInfo.h" 40 #include "llvm/MC/MCRegisterInfo.h"
37 #include "llvm/Pass.h" 41 #include "llvm/Pass.h"
38 #include "llvm/Support/BranchProbability.h" 42 #include "llvm/Support/BranchProbability.h"
39 #include "llvm/Support/CommandLine.h" 43 #include "llvm/Support/CommandLine.h"
40 #include "llvm/Support/Debug.h" 44 #include "llvm/Support/Debug.h"
41 #include "llvm/Support/ErrorHandling.h" 45 #include "llvm/Support/ErrorHandling.h"
42 #include "llvm/Support/raw_ostream.h" 46 #include "llvm/Support/raw_ostream.h"
43 #include "llvm/Target/TargetInstrInfo.h"
44 #include "llvm/Target/TargetLowering.h"
45 #include "llvm/Target/TargetRegisterInfo.h"
46 #include "llvm/Target/TargetSubtargetInfo.h"
47 #include <algorithm> 47 #include <algorithm>
48 #include <cassert> 48 #include <cassert>
49 #include <functional> 49 #include <functional>
50 #include <iterator> 50 #include <iterator>
51 #include <memory> 51 #include <memory>
335 INITIALIZE_PASS_BEGIN(IfConverter, DEBUG_TYPE, "If Converter", false, false) 335 INITIALIZE_PASS_BEGIN(IfConverter, DEBUG_TYPE, "If Converter", false, false)
336 INITIALIZE_PASS_DEPENDENCY(MachineBranchProbabilityInfo) 336 INITIALIZE_PASS_DEPENDENCY(MachineBranchProbabilityInfo)
337 INITIALIZE_PASS_END(IfConverter, DEBUG_TYPE, "If Converter", false, false) 337 INITIALIZE_PASS_END(IfConverter, DEBUG_TYPE, "If Converter", false, false)
338 338
339 bool IfConverter::runOnMachineFunction(MachineFunction &MF) { 339 bool IfConverter::runOnMachineFunction(MachineFunction &MF) {
340 if (skipFunction(*MF.getFunction()) || (PredicateFtor && !PredicateFtor(MF))) 340 if (skipFunction(MF.getFunction()) || (PredicateFtor && !PredicateFtor(MF)))
341 return false; 341 return false;
342 342
343 const TargetSubtargetInfo &ST = MF.getSubtarget(); 343 const TargetSubtargetInfo &ST = MF.getSubtarget();
344 TLI = ST.getTargetLowering(); 344 TLI = ST.getTargetLowering();
345 TII = ST.getInstrInfo(); 345 TII = ST.getInstrInfo();
404 default: llvm_unreachable("Unexpected!"); 404 default: llvm_unreachable("Unexpected!");
405 case ICSimple: 405 case ICSimple:
406 case ICSimpleFalse: { 406 case ICSimpleFalse: {
407 bool isFalse = Kind == ICSimpleFalse; 407 bool isFalse = Kind == ICSimpleFalse;
408 if ((isFalse && DisableSimpleF) || (!isFalse && DisableSimple)) break; 408 if ((isFalse && DisableSimpleF) || (!isFalse && DisableSimple)) break;
409 DEBUG(dbgs() << "Ifcvt (Simple" << (Kind == ICSimpleFalse ? 409 DEBUG(dbgs() << "Ifcvt (Simple"
410 " false" : "") 410 << (Kind == ICSimpleFalse ? " false" : "")
411 << "): BB#" << BBI.BB->getNumber() << " (" 411 << "): " << printMBBReference(*BBI.BB) << " ("
412 << ((Kind == ICSimpleFalse) 412 << ((Kind == ICSimpleFalse) ? BBI.FalseBB->getNumber()
413 ? BBI.FalseBB->getNumber() 413 : BBI.TrueBB->getNumber())
414 : BBI.TrueBB->getNumber()) << ") "); 414 << ") ");
415 RetVal = IfConvertSimple(BBI, Kind); 415 RetVal = IfConvertSimple(BBI, Kind);
416 DEBUG(dbgs() << (RetVal ? "succeeded!" : "failed!") << "\n"); 416 DEBUG(dbgs() << (RetVal ? "succeeded!" : "failed!") << "\n");
417 if (RetVal) { 417 if (RetVal) {
418 if (isFalse) ++NumSimpleFalse; 418 if (isFalse) ++NumSimpleFalse;
419 else ++NumSimple; 419 else ++NumSimple;
433 DEBUG(dbgs() << "Ifcvt (Triangle"); 433 DEBUG(dbgs() << "Ifcvt (Triangle");
434 if (isFalse) 434 if (isFalse)
435 DEBUG(dbgs() << " false"); 435 DEBUG(dbgs() << " false");
436 if (isRev) 436 if (isRev)
437 DEBUG(dbgs() << " rev"); 437 DEBUG(dbgs() << " rev");
438 DEBUG(dbgs() << "): BB#" << BBI.BB->getNumber() << " (T:" 438 DEBUG(dbgs() << "): " << printMBBReference(*BBI.BB)
439 << BBI.TrueBB->getNumber() << ",F:" 439 << " (T:" << BBI.TrueBB->getNumber()
440 << BBI.FalseBB->getNumber() << ") "); 440 << ",F:" << BBI.FalseBB->getNumber() << ") ");
441 RetVal = IfConvertTriangle(BBI, Kind); 441 RetVal = IfConvertTriangle(BBI, Kind);
442 DEBUG(dbgs() << (RetVal ? "succeeded!" : "failed!") << "\n"); 442 DEBUG(dbgs() << (RetVal ? "succeeded!" : "failed!") << "\n");
443 if (RetVal) { 443 if (RetVal) {
444 if (isFalse) { 444 if (isFalse) {
445 if (isRev) ++NumTriangleFRev; 445 if (isRev) ++NumTriangleFRev;
451 } 451 }
452 break; 452 break;
453 } 453 }
454 case ICDiamond: 454 case ICDiamond:
455 if (DisableDiamond) break; 455 if (DisableDiamond) break;
456 DEBUG(dbgs() << "Ifcvt (Diamond): BB#" << BBI.BB->getNumber() << " (T:" 456 DEBUG(dbgs() << "Ifcvt (Diamond): " << printMBBReference(*BBI.BB)
457 << BBI.TrueBB->getNumber() << ",F:" 457 << " (T:" << BBI.TrueBB->getNumber()
458 << BBI.FalseBB->getNumber() << ") "); 458 << ",F:" << BBI.FalseBB->getNumber() << ") ");
459 RetVal = IfConvertDiamond(BBI, Kind, NumDups, NumDups2, 459 RetVal = IfConvertDiamond(BBI, Kind, NumDups, NumDups2,
460 Token->TClobbersPred, 460 Token->TClobbersPred,
461 Token->FClobbersPred); 461 Token->FClobbersPred);
462 DEBUG(dbgs() << (RetVal ? "succeeded!" : "failed!") << "\n"); 462 DEBUG(dbgs() << (RetVal ? "succeeded!" : "failed!") << "\n");
463 if (RetVal) ++NumDiamonds; 463 if (RetVal) ++NumDiamonds;
464 break; 464 break;
465 case ICForkedDiamond: 465 case ICForkedDiamond:
466 if (DisableForkedDiamond) break; 466 if (DisableForkedDiamond) break;
467 DEBUG(dbgs() << "Ifcvt (Forked Diamond): BB#" 467 DEBUG(dbgs() << "Ifcvt (Forked Diamond): " << printMBBReference(*BBI.BB)
468 << BBI.BB->getNumber() << " (T:" 468 << " (T:" << BBI.TrueBB->getNumber()
469 << BBI.TrueBB->getNumber() << ",F:" 469 << ",F:" << BBI.FalseBB->getNumber() << ") ");
470 << BBI.FalseBB->getNumber() << ") ");
471 RetVal = IfConvertForkedDiamond(BBI, Kind, NumDups, NumDups2, 470 RetVal = IfConvertForkedDiamond(BBI, Kind, NumDups, NumDups2,
472 Token->TClobbersPred, 471 Token->TClobbersPred,
473 Token->FClobbersPred); 472 Token->FClobbersPred);
474 DEBUG(dbgs() << (RetVal ? "succeeded!" : "failed!") << "\n"); 473 DEBUG(dbgs() << (RetVal ? "succeeded!" : "failed!") << "\n");
475 if (RetVal) ++NumForkedDiamonds; 474 if (RetVal) ++NumForkedDiamonds;