Example #1
0
        void Analyse()
        {
            var cfg         = verifier.Program.ProcessLoops(impl);
            var modSet      = LoopInvariantGenerator.GetModifiedVariables(verifier.RootRegion(impl));
            var multiDefMap = new VarDefMap();

            FindAssignments(verifier.RootRegion(impl), multiDefMap);
            foreach (var e in multiDefMap.Where(i => i.Value.Count == 2))
            {
                AnalyseAssignment(e.Key, e.Value, cfg, modSet);
            }
        }
Example #2
0
        void AddAssignment(IRegion region, VarDefMap multiDefMap, SimpleAssignLhs lhs, Expr rhs)
        {
            if (lhs == null)
            {
                return;
            }

            var variable = lhs.DeepAssignedVariable;

            if (!multiDefMap.ContainsKey(variable))
            {
                multiDefMap[variable] = new List <Tuple <IRegion, Expr> >();
            }
            multiDefMap[variable].Add(new Tuple <IRegion, Expr>(region, rhs));
        }
Example #3
0
 void FindAssignments(IRegion region, VarDefMap multiDefMap)
 {
     foreach (var c in region.CmdsChildRegions())
     {
         var aCmd = c as AssignCmd;
         if (aCmd != null)
         {
             foreach (var a in aCmd.Lhss.Zip(aCmd.Rhss))
             {
                 AddAssignment(region, multiDefMap, a.Item1 as SimpleAssignLhs, a.Item2);
             }
         }
         var child = c as IRegion;
         if (child != null)
         {
             FindAssignments(child, multiDefMap);
         }
     }
 }