/// <summary> /// Entry point method for performing constant-set propagation analysis. /// </summary> /// <param name="cfg"></param> /// <param name="method"></param> /// <param name="results"></param> /// <returns></returns> private ConstantPropagationSetAnalysis DoConstantPropagationAnalysis(ControlFlowGraph cfg, IMethodDefinition method, ScopeMethodAnalysisResult results) { Utils.WriteLine("Running constant propagation set analysis..."); var cpsAnalysis = new ConstantPropagationSetAnalysis(cfg, method, mhost, schemaType); results.CPropagationSummary = cpsAnalysis.Analyze()[cfg.Exit.Id].Output; //Utils.WriteLine(results.CPropagationSummary.ToString()); Utils.WriteLine("Done with constant propagation set analysis"); return(cpsAnalysis); }
public IEnumerable <Constant> GetConstants(Instruction instruction, IFieldAccess field) { if (!ConstantPropagationSetAnalysis.IsConstantType(field.Type, host)) { return(null); } var domain = info[instruction]; var fieldDomain = domain.Constants(field); if (fieldDomain.IsTop) { return(null); } if (fieldDomain.IsBottom) { return(new HashSet <Constant>()); } return(new HashSet <Constant>(fieldDomain.Elements)); }
public IEnumerable <Constant> GetConstants(Instruction instruction, IVariable var) { if (!ConstantPropagationSetAnalysis.IsConstantType(var.Type, host)) { return(null); } var domain = info[instruction]; var varDomain = domain.Constants(var); if (varDomain.IsTop) { return(null); } if (varDomain.IsBottom) { return(new HashSet <Constant>()); } return(new HashSet <Constant>(varDomain.Elements)); }
private bool IsConstantType(ITypeReference tref) { return(ConstantPropagationSetAnalysis.IsConstantType(tref, parent.Host)); }
public ConstantPropagationTransferVisitor(ConstantPropagationDomain start, ConstantPropagationSetAnalysis dad) { parent = dad; SetCurrent(start); }