|
27 | 27 |
|
28 | 28 | using namespace llvm; |
29 | 29 |
|
30 | | -char llvm::GISelValueTrackingAnalysis::ID = 0; |
| 30 | +char llvm::GISelValueTrackingAnalysisLegacy::ID = 0; |
31 | 31 |
|
32 | | -INITIALIZE_PASS(GISelValueTrackingAnalysis, DEBUG_TYPE, |
| 32 | +INITIALIZE_PASS(GISelValueTrackingAnalysisLegacy, DEBUG_TYPE, |
33 | 33 | "Analysis for ComputingKnownBits", false, true) |
34 | 34 |
|
35 | 35 | GISelValueTracking::GISelValueTracking(MachineFunction &MF, unsigned MaxDepth) |
@@ -893,20 +893,57 @@ unsigned GISelValueTracking::computeNumSignBits(Register R, unsigned Depth) { |
893 | 893 | return computeNumSignBits(R, DemandedElts, Depth); |
894 | 894 | } |
895 | 895 |
|
896 | | -void GISelValueTrackingAnalysis::getAnalysisUsage(AnalysisUsage &AU) const { |
| 896 | +void GISelValueTrackingAnalysisLegacy::getAnalysisUsage( |
| 897 | + AnalysisUsage &AU) const { |
897 | 898 | AU.setPreservesAll(); |
898 | 899 | MachineFunctionPass::getAnalysisUsage(AU); |
899 | 900 | } |
900 | 901 |
|
901 | | -bool GISelValueTrackingAnalysis::runOnMachineFunction(MachineFunction &MF) { |
| 902 | +bool GISelValueTrackingAnalysisLegacy::runOnMachineFunction( |
| 903 | + MachineFunction &MF) { |
902 | 904 | return false; |
903 | 905 | } |
904 | 906 |
|
905 | | -GISelValueTracking &GISelValueTrackingAnalysis::get(MachineFunction &MF) { |
| 907 | +GISelValueTracking &GISelValueTrackingAnalysisLegacy::get(MachineFunction &MF) { |
906 | 908 | if (!Info) { |
907 | 909 | unsigned MaxDepth = |
908 | 910 | MF.getTarget().getOptLevel() == CodeGenOptLevel::None ? 2 : 6; |
909 | 911 | Info = std::make_unique<GISelValueTracking>(MF, MaxDepth); |
910 | 912 | } |
911 | 913 | return *Info; |
912 | 914 | } |
| 915 | + |
| 916 | +AnalysisKey GISelValueTrackingAnalysis::Key; |
| 917 | + |
| 918 | +GISelValueTracking |
| 919 | +GISelValueTrackingAnalysis::run(MachineFunction &MF, |
| 920 | + MachineFunctionAnalysisManager &MFAM) { |
| 921 | + return Result(MF); |
| 922 | +} |
| 923 | + |
| 924 | +PreservedAnalyses |
| 925 | +GISelValueTrackingPrinterPass::run(MachineFunction &MF, |
| 926 | + MachineFunctionAnalysisManager &MFAM) { |
| 927 | + auto &VTA = MFAM.getResult<GISelValueTrackingAnalysis>(MF); |
| 928 | + const auto &MRI = MF.getRegInfo(); |
| 929 | + OS << "name: "; |
| 930 | + MF.getFunction().printAsOperand(OS, /*PrintType=*/false); |
| 931 | + OS << '\n'; |
| 932 | + |
| 933 | + for (MachineBasicBlock &BB : MF) { |
| 934 | + for (MachineInstr &MI : BB) { |
| 935 | + for (MachineOperand &MO : MI.defs()) { |
| 936 | + if (!MO.isReg() || MO.getReg().isPhysical()) |
| 937 | + continue; |
| 938 | + Register Reg = MO.getReg(); |
| 939 | + if (!MRI.getType(Reg).isValid()) |
| 940 | + continue; |
| 941 | + KnownBits Known = VTA.getKnownBits(Reg); |
| 942 | + unsigned SignedBits = VTA.computeNumSignBits(Reg); |
| 943 | + OS << " " << MO << " KnownBits:" << Known << " SignBits:" << SignedBits |
| 944 | + << '\n'; |
| 945 | + }; |
| 946 | + } |
| 947 | + } |
| 948 | + return PreservedAnalyses::all(); |
| 949 | +} |
0 commit comments