mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
"This patch adds a virtual call to AbstractLatticeFunction to derive a
type lattice value for an Argument*, giving clients the opportunity to use something other than Top for it if they choose to." Patch by John McCall! llvm-svn: 54589
This commit is contained in:
parent
310343bae7
commit
89120a8e63
@ -24,6 +24,7 @@
|
||||
namespace llvm {
|
||||
class Value;
|
||||
class Constant;
|
||||
class Argument;
|
||||
class Instruction;
|
||||
class PHINode;
|
||||
class TerminatorInst;
|
||||
@ -75,6 +76,12 @@ public:
|
||||
virtual Constant *GetConstant(LatticeVal LV, Value *Val, SparseSolver &SS) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// ComputeArgument - Given a formal argument value, compute and return a
|
||||
/// lattice value corresponding to the specified argument.
|
||||
virtual LatticeVal ComputeArgument(Argument *I) {
|
||||
return getOverdefinedVal(); // always safe
|
||||
}
|
||||
|
||||
/// MergeValues - Compute and return the merge of the two specified lattice
|
||||
/// values. Merging should only move one direction down the lattice to
|
||||
|
@ -57,8 +57,10 @@ SparseSolver::LatticeVal SparseSolver::getOrInitValueState(Value *V) {
|
||||
return LatticeFunc->getUntrackedVal();
|
||||
else if (Constant *C = dyn_cast<Constant>(V))
|
||||
LV = LatticeFunc->ComputeConstant(C);
|
||||
else if (Argument *A = dyn_cast<Argument>(V))
|
||||
LV = LatticeFunc->ComputeArgument(A);
|
||||
else if (!isa<Instruction>(V))
|
||||
// Non-instructions (e.g. formal arguments) are overdefined.
|
||||
// All other non-instructions are overdefined.
|
||||
LV = LatticeFunc->getOverdefinedVal();
|
||||
else
|
||||
// All instructions are underdefined by default.
|
||||
|
Loading…
Reference in New Issue
Block a user