Mercurial > hg > CbC > CbC_llvm
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; |