#include <SparsePropagation.h>
Public Member Functions | |
| SparseSolver (AbstractLatticeFunction *Lattice) | |
| void | Solve (Function &F) |
| void | Print (Function &F, raw_ostream &OS) const |
| LatticeVal | getLatticeState (Value *V) const |
| LatticeVal | getOrInitValueState (Value *V) |
| bool | isEdgeFeasible (BasicBlock *From, BasicBlock *To, bool AggressiveUndef=false) |
| bool | isBlockExecutable (BasicBlock *BB) const |
| LatticeVal llvm::SparseSolver::getLatticeState | ( | Value * | V | ) | const [inline] |
getLatticeState - Return the LatticeVal object that corresponds to the value. If an value is not in the map, it is returned as untracked, unlike the getOrInitValueState method.
| LatticeVal llvm::SparseSolver::getOrInitValueState | ( | Value * | V | ) |
getOrInitValueState - Return the LatticeVal object that corresponds to the value, initializing the value's state if it hasn't been entered into the map yet. This function is necessary because not all values should start out in the underdefined state... Arguments should be overdefined, and constants should be marked as constants.
| bool llvm::SparseSolver::isBlockExecutable | ( | BasicBlock * | BB | ) | const [inline] |
isBlockExecutable - Return true if there are any known feasible edges into the basic block. This is generally only useful when querying the lattice.
| bool llvm::SparseSolver::isEdgeFeasible | ( | BasicBlock * | From, | |
| BasicBlock * | To, | |||
| bool | AggressiveUndef = false | |||
| ) |
isEdgeFeasible - Return true if the control flow edge from the 'From' basic block to the 'To' basic block is currently feasible. If AggressiveUndef is true, then this treats values with unknown lattice values as undefined. This is generally only useful when solving the lattice, not when querying it.
| void llvm::SparseSolver::Solve | ( | Function & | F | ) |
Solve - Solve for constants and executable blocks.
1.5.8