diff options
Diffstat (limited to 'llvm/lib/CodeGen/GlobalISel/GISelKnownBits.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/GlobalISel/GISelKnownBits.cpp | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/GISelKnownBits.cpp b/llvm/lib/CodeGen/GlobalISel/GISelKnownBits.cpp index 363ffbfa90b5..ea8c20cdcd45 100644 --- a/llvm/lib/CodeGen/GlobalISel/GISelKnownBits.cpp +++ b/llvm/lib/CodeGen/GlobalISel/GISelKnownBits.cpp @@ -19,6 +19,7 @@ #include "llvm/CodeGen/TargetLowering.h" #include "llvm/CodeGen/TargetOpcodes.h" #include "llvm/IR/Module.h" +#include "llvm/Target/TargetMachine.h" #define DEBUG_TYPE "gisel-known-bits" @@ -48,6 +49,8 @@ Align GISelKnownBits::computeKnownAlignment(Register R, unsigned Depth) { } case TargetOpcode::G_INTRINSIC: case TargetOpcode::G_INTRINSIC_W_SIDE_EFFECTS: + case TargetOpcode::G_INTRINSIC_CONVERGENT: + case TargetOpcode::G_INTRINSIC_CONVERGENT_W_SIDE_EFFECTS: default: return TL.computeKnownAlignForTargetInstr(*this, R, MRI, Depth + 1); } @@ -72,7 +75,7 @@ KnownBits GISelKnownBits::getKnownBits(Register R, const APInt &DemandedElts, assert(ComputeKnownBitsCache.empty() && "Cache should have been cleared"); KnownBits Known; - computeKnownBitsImpl(R, Known, DemandedElts); + computeKnownBitsImpl(R, Known, DemandedElts, Depth); ComputeKnownBitsCache.clear(); return Known; } @@ -726,6 +729,8 @@ unsigned GISelKnownBits::computeNumSignBits(Register R, } case TargetOpcode::G_INTRINSIC: case TargetOpcode::G_INTRINSIC_W_SIDE_EFFECTS: + case TargetOpcode::G_INTRINSIC_CONVERGENT: + case TargetOpcode::G_INTRINSIC_CONVERGENT_W_SIDE_EFFECTS: default: { unsigned NumBits = TL.computeNumSignBitsForTargetInstr(*this, R, DemandedElts, MRI, Depth); @@ -769,3 +774,12 @@ void GISelKnownBitsAnalysis::getAnalysisUsage(AnalysisUsage &AU) const { bool GISelKnownBitsAnalysis::runOnMachineFunction(MachineFunction &MF) { return false; } + +GISelKnownBits &GISelKnownBitsAnalysis::get(MachineFunction &MF) { + if (!Info) { + unsigned MaxDepth = + MF.getTarget().getOptLevel() == CodeGenOptLevel::None ? 2 : 6; + Info = std::make_unique<GISelKnownBits>(MF, MaxDepth); + } + return *Info.get(); +} |
