Static Value-Flow Analysis
MSSAMuChi.h
Go to the documentation of this file.
1 //===- MSSAMuChi.h -- Mu/Chi on MSSA------------------------------------------//
2 //
3 // SVF: Static Value-Flow Analysis
4 //
5 // Copyright (C) <2013-> <Yulei Sui>
6 //
7 
8 // This program is free software: you can redistribute it and/or modify
9 // it under the terms of the GNU Affero General Public License as published by
10 // the Free Software Foundation, either version 3 of the License, or
11 // (at your option) any later version.
12 
13 // This program is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 // GNU Affero General Public License for more details.
17 
18 // You should have received a copy of the GNU Affero General Public License
19 // along with this program. If not, see <http://www.gnu.org/licenses/>.
20 //
21 //===----------------------------------------------------------------------===//
22 
23 /*
24  * MSSAMuChi.h
25  *
26  * Created on: Oct 31, 2013
27  * Author: Yulei Sui
28  */
29 
30 #ifndef MSSAMUCHI_H_
31 #define MSSAMUCHI_H_
32 
33 #include "MSSA/MemRegion.h"
34 
35 namespace SVF
36 {
37 
38 class MSSADEF;
39 
43 class MRVer
44 {
45 
46 public:
47  typedef MSSADEF MSSADef;
48 private:
51  const MemRegion* mr;
55 public:
57  MRVer(const MemRegion* m, MRVERSION v, MSSADef* d) :
58  mr(m), version(v), vid(totalVERNum++),def(d)
59  {
60  }
61 
63  inline const MemRegion* getMR() const
64  {
65  return mr;
66  }
67 
69  inline MRVERSION getSSAVersion() const
70  {
71  return version;
72  }
73 
75  inline MSSADef* getDef() const
76  {
77  return def;
78  }
79 
81  inline MRVERID getID() const
82  {
83  return vid;
84  }
85 };
86 
87 
94 template<class Cond>
95 class MSSAMU
96 {
97 
98 public:
99  enum MUTYPE
100  {
102  };
103 
104 protected:
106  const MemRegion* mr;
108  Cond cond;
109 public:
111 
112  MSSAMU(MUTYPE t, const MemRegion* m, Cond c) : type(t), mr(m), ver(nullptr), cond(c)
113  {
114  }
115  virtual ~MSSAMU()
116  {
117  }
119 
121  inline const MemRegion* getMR() const
122  {
123  return mr;
124  }
126  inline MUTYPE getType() const
127  {
128  return type;
129  }
131  inline void setVer(MRVer* v)
132  {
133  assert(v->getMR() == mr && "inserting different memory region?");
134  ver = v;
135  }
137  inline MRVer* getMRVer() const
138  {
139  assert(ver!=nullptr && "version is nullptr, did not rename?");
140  return ver;
141  }
143  inline Cond getCond() const
144  {
145  return cond;
146  }
147 
149  inline bool operator < (const MSSAMU & rhs) const
150  {
151  return mr > rhs.getMR();
152  }
154  virtual void dump()
155  {
156  SVFUtil::outs() << "MU(MR_" << mr->getMRID() << "V_" << ver->getSSAVersion() << ") \t" <<
157  this->getMR()->dumpStr() << "\n";
158  }
159 };
160 
164 template<class Cond>
165 class LoadMU : public MSSAMU<Cond>
166 {
167 
168 private:
169  const LoadStmt* inst;
171 
172 public:
174 
175  LoadMU(const SVFBasicBlock* b,const LoadStmt* i, const MemRegion* m, Cond c = true) :
176  MSSAMU<Cond>(MSSAMU<Cond>::LoadMSSAMU,m,c), inst(i), bb(b)
177  {
178  }
179  virtual ~LoadMU()
180  {
181 
182  }
184 
186  inline const LoadStmt* getLoadStmt() const
187  {
188  return inst;
189  }
190 
192  inline const SVFBasicBlock* getBasicBlock() const
193  {
194  return bb;
195  }
196 
198 
199  static inline bool classof(const LoadMU *)
200  {
201  return true;
202  }
203  static inline bool classof(const MSSAMU<Cond> *mu)
204  {
205  return mu->getType() == MSSAMU<Cond>::LoadMSSAMU;
206  }
208 
210  virtual void dump()
211  {
212  SVFUtil::outs() << "LDMU(MR_" << this->getMR()->getMRID() << "V_" << this->getMRVer()->getSSAVersion() << ") \t" <<
213  this->getMR()->dumpStr() << "\n";
214  }
215 };
216 
220 template<class Cond>
221 class CallMU : public MSSAMU<Cond>
222 {
223 
224 private:
226 
227 public:
229 
230  CallMU(const CallICFGNode* cs, const MemRegion* m, Cond c = true) :
231  MSSAMU<Cond>(MSSAMU<Cond>::CallMSSAMU,m,c), callsite(cs)
232  {
233  }
234  virtual ~CallMU()
235  {
236 
237  }
239 
241  inline const CallICFGNode* getCallSite() const
242  {
243  return callsite;
244  }
245 
247  inline const SVFBasicBlock* getBasicBlock() const
248  {
249  return callsite->getBB();
250  }
251 
253 
254  static inline bool classof(const CallMU *)
255  {
256  return true;
257  }
258  static inline bool classof(const MSSAMU<Cond> *mu)
259  {
260  return mu->getType() == MSSAMU<Cond>::CallMSSAMU;
261  }
263 
265  virtual void dump()
266  {
267  SVFUtil::outs() << "CALMU(MR_" << this->getMR()->getMRID() << "V_" << this->getMRVer()->getSSAVersion() << ") \t" <<
268  this->getMR()->dumpStr() << "\n";
269  }
270 };
271 
272 
276 template<class Cond>
277 class RetMU : public MSSAMU<Cond>
278 {
279 private:
280  const SVFFunction* fun;
281 public:
283 
284  RetMU(const SVFFunction* f, const MemRegion* m, Cond c = true) :
285  MSSAMU<Cond>(MSSAMU<Cond>::RetMSSAMU,m,c), fun(f)
286  {
287  }
288  virtual ~RetMU() {}
290 
292  inline const SVFFunction* getFunction() const
293  {
294  return fun;
295  }
296 
298 
299  static inline bool classof(const RetMU *)
300  {
301  return true;
302  }
303  static inline bool classof(const MSSAMU<Cond> *mu)
304  {
305  return mu->getType() == MSSAMU<Cond>::RetMSSAMU;
306  }
308 
310  virtual void dump()
311  {
312  SVFUtil::outs() << "RETMU(MR_" << this->getMR()->getMRID() << "V_" << this->getMRVer()->getSSAVersion() << ") \t" <<
313  this->getMR()->dumpStr() << "\n";
314  }
315 };
316 
317 
325 class MSSADEF
326 {
327 
328 public:
329  enum DEFTYPE
330  {
335  SSAPHI
336  };
337 
338 protected:
340  const MemRegion* mr;
342 
343 public:
345 
346  MSSADEF(DEFTYPE t, const MemRegion* m): type(t), mr(m), resVer(nullptr)
347  {
348 
349  }
350  virtual ~MSSADEF() {}
352 
354  inline const MemRegion* getMR() const
355  {
356  return mr;
357  }
358 
360  inline DEFTYPE getType() const
361  {
362  return type;
363  }
364 
366  inline void setResVer(MRVer* v)
367  {
368  assert(v->getMR() == mr && "inserting different memory region?");
369  resVer = v;
370  }
371 
373  inline MRVer* getResVer() const
374  {
375  assert(resVer!=nullptr && "version is nullptr, did not rename?");
376  return resVer;
377  }
378 
380  inline bool operator < (const MSSADEF & rhs) const
381  {
382  return mr > rhs.getMR();
383  }
384 
386  virtual void dump()
387  {
388  SVFUtil::outs() << "DEF(MR_" << mr->getMRID() << "V_" << resVer->getSSAVersion() << ")\n";
389  }
390 };
391 
395 template<class Cond>
396 class MSSACHI : public MSSADEF
397 {
398 
399 private:
401  Cond cond;
402 public:
403  typedef typename MSSADEF::DEFTYPE CHITYPE;
405 
406  MSSACHI(CHITYPE t, const MemRegion* m, Cond c): MSSADEF(t,m), opVer(nullptr), cond(c)
407  {
408 
409  }
410  virtual ~MSSACHI() {}
412 
414  inline void setOpVer(MRVer* v)
415  {
416  assert(v->getMR() == this->getMR() && "inserting different memory region?");
417  opVer = v;
418  }
419 
421  inline MRVer* getOpVer() const
422  {
423  assert(opVer!=nullptr && "version is nullptr, did not rename?");
424  return opVer;
425  }
426 
428  inline Cond getCond() const
429  {
430  return cond;
431  }
432 
434 
435  static inline bool classof(const MSSACHI * chi)
436  {
437  return true;
438  }
439  static inline bool classof(const MSSADEF *chi)
440  {
441  return chi->getType() == MSSADEF::EntryMSSACHI ||
442  chi->getType() == MSSADEF::StoreMSSACHI ||
443  chi->getType() == MSSADEF::SSACHI ;
444  }
446 
448  virtual void dump()
449  {
450  SVFUtil::outs() << "MR_" << this->getMR()->getMRID() << "V_" << this->getResVer()->getSSAVersion() <<
451  " = CHI(MR_" << this->getMR()->getMRID() << "V_" << opVer->getSSAVersion() << ") \t" <<
452  this->getMR()->dumpStr() << "\n";
453  }
454 };
455 
460 template<class Cond>
461 class StoreCHI : public MSSACHI<Cond>
462 {
463 private:
465  const StoreStmt* inst;
466 public:
468 
469  StoreCHI(const SVFBasicBlock* b, const StoreStmt* i, const MemRegion* m, Cond c = true) :
470  MSSACHI<Cond>(MSSADEF::StoreMSSACHI,m,c), bb(b), inst(i)
471  {
472  }
473  virtual ~StoreCHI()
474  {
475  }
477 
479  inline const SVFBasicBlock* getBasicBlock() const
480  {
481  return bb;
482  }
483 
485  inline const StoreStmt* getStoreStmt() const
486  {
487  return inst;
488  }
489 
491 
492  static inline bool classof(const StoreCHI * chi)
493  {
494  return true;
495  }
496  static inline bool classof(const MSSACHI<Cond> * chi)
497  {
498  return chi->getType() == MSSADEF::StoreMSSACHI;
499  }
500  static inline bool classof(const MSSADEF *chi)
501  {
502  return chi->getType() == MSSADEF::StoreMSSACHI;
503  }
505 
507  virtual void dump()
508  {
509  SVFUtil::outs() << this->getMR()->getMRID() << "V_" << this->getResVer()->getSSAVersion() <<
510  " = STCHI(MR_" << this->getMR()->getMRID() << "V_" << this->getOpVer()->getSSAVersion() << ") \t" <<
511  this->getMR()->dumpStr() << "\n";
512  }
513 };
514 
515 
520 template<class Cond>
521 class CallCHI : public MSSACHI<Cond>
522 {
523 private:
525 public:
527 
528  CallCHI(const CallICFGNode* cs, const MemRegion* m, Cond c = true) :
529  MSSACHI<Cond>(MSSADEF::CallMSSACHI,m,c), callsite(cs)
530  {
531  }
532  virtual ~CallCHI()
533  {
534  }
536 
538  inline const SVFBasicBlock* getBasicBlock() const
539  {
540  return callsite->getBB();
541  }
542 
544  inline const CallICFGNode* getCallSite() const
545  {
546  return callsite;
547  }
548 
550 
551  static inline bool classof(const CallCHI * chi)
552  {
553  return true;
554  }
555  static inline bool classof(const MSSACHI<Cond> * chi)
556  {
557  return chi->getType() == MSSADEF::CallMSSACHI;
558  }
559  static inline bool classof(const MSSADEF *chi)
560  {
561  return chi->getType() == MSSADEF::CallMSSACHI;
562  }
564 
566  virtual void dump()
567  {
568  SVFUtil::outs() << this->getMR()->getMRID() << "V_" << this->getResVer()->getSSAVersion() <<
569  " = CALCHI(MR_" << this->getMR()->getMRID() << "V_" << this->getOpVer()->getSSAVersion() << ") \t" <<
570  this->getMR()->dumpStr() << "\n";
571  }
572 };
573 
577 template<class Cond>
578 class EntryCHI : public MSSACHI<Cond>
579 {
580 private:
581  const SVFFunction* fun;
582 public:
584 
585  EntryCHI(const SVFFunction* f, const MemRegion* m, Cond c = true) :
586  MSSACHI<Cond>(MSSADEF::EntryMSSACHI,m,c),fun(f)
587  {
588  }
589  virtual ~EntryCHI()
590  {
591  }
593 
595  inline const SVFFunction* getFunction() const
596  {
597  return fun;
598  }
599 
601 
602  static inline bool classof(const EntryCHI * chi)
603  {
604  return true;
605  }
606  static inline bool classof(const MSSACHI<Cond> * chi)
607  {
608  return chi->getType() == MSSADEF::EntryMSSACHI;
609  }
610  static inline bool classof(const MSSADEF *chi)
611  {
612  return chi->getType() == MSSADEF::EntryMSSACHI;
613  }
615 
617  virtual void dump()
618  {
619  SVFUtil::outs() << this->getMR()->getMRID() << "V_" << this->getResVer()->getSSAVersion() <<
620  " = ENCHI(MR_" << this->getMR()->getMRID() << "V_" << this->getOpVer()->getSSAVersion() << ") \t" <<
621  this->getMR()->dumpStr() << "\n";
622  }
623 };
624 
625 /*
626  * Memory SSA Select, similar to PHINode
627  */
628 template<class Cond>
629 class MSSAPHI : public MSSADEF
630 {
631 
632 public:
634 private:
637  Cond cond;
638 public:
640 
641  MSSAPHI(const SVFBasicBlock* b, const MemRegion* m, Cond c = true) :
642  MSSADEF(MSSADEF::SSAPHI,m), bb(b), cond(c)
643  {
644  }
645  virtual ~MSSAPHI()
646  {
647  }
649 
651  inline void setOpVer(const MRVer* v, u32_t pos)
652  {
653  assert(v->getMR() == this->getMR() && "inserting different memory region?");
654  opVers[pos] = v;
655  }
656 
658  inline const MRVer* getOpVer(u32_t pos) const
659  {
660  OPVers::const_iterator it = opVers.find(pos);
661  assert(it!=opVers.end() && "version is nullptr, did not rename?");
662  return it->second;
663  }
664 
666  inline u32_t getOpVerNum() const
667  {
668  return opVers.size();
669  }
670 
672 
673  inline OPVers::const_iterator opVerBegin() const
674  {
675  return opVers.begin();
676  }
677  inline OPVers::const_iterator opVerEnd() const
678  {
679  return opVers.end();
680  }
682 
684  inline const SVFBasicBlock* getBasicBlock() const
685  {
686  return bb;
687  }
688 
690  inline Cond getCond() const
691  {
692  return cond;
693  }
694 
696 
697  static inline bool classof(const MSSAPHI * phi)
698  {
699  return true;
700  }
701  static inline bool classof(const MSSADEF *phi)
702  {
703  return phi->getType() == MSSADEF::SSAPHI ;
704  }
706 
708  virtual void dump()
709  {
710  SVFUtil::outs() << this->getMR()->getMRID() << "V_" << this->getResVer()->getSSAVersion() <<
711  " = PHI(";
712  for(OPVers::iterator it = opVers.begin(), eit = opVers.end(); it!=eit; ++it)
713  SVFUtil::outs() << "MR_" << this->getMR()->getMRID() << "V_" << it->second->getSSAVersion() << ", ";
714 
715  SVFUtil::outs() << ")\n";
716  }
717 };
718 
719 std::ostream& operator<<(std::ostream &o, const MRVer& mrver);
720 } // End namespace SVF
721 
722 #endif /* MSSAMUCHI_H_ */
const cJSON *const b
Definition: cJSON.h:255
CallCHI(const CallICFGNode *cs, const MemRegion *m, Cond c=true)
Constructors for StoreCHI.
Definition: MSSAMuChi.h:528
static bool classof(const MSSACHI< Cond > *chi)
Definition: MSSAMuChi.h:555
const CallICFGNode * callsite
Definition: MSSAMuChi.h:524
static bool classof(const CallCHI *chi)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition: MSSAMuChi.h:551
virtual ~CallCHI()
Definition: MSSAMuChi.h:532
const SVFBasicBlock * getBasicBlock() const
Return basic block.
Definition: MSSAMuChi.h:538
virtual void dump()
Print CHI.
Definition: MSSAMuChi.h:566
static bool classof(const MSSADEF *chi)
Definition: MSSAMuChi.h:559
const CallICFGNode * getCallSite() const
Return callsite.
Definition: MSSAMuChi.h:544
static bool classof(const MSSAMU< Cond > *mu)
Definition: MSSAMuChi.h:258
virtual ~CallMU()
Definition: MSSAMuChi.h:234
const CallICFGNode * getCallSite() const
Return callsite.
Definition: MSSAMuChi.h:241
const SVFBasicBlock * getBasicBlock() const
Return basic block.
Definition: MSSAMuChi.h:247
const CallICFGNode * callsite
Definition: MSSAMuChi.h:225
CallMU(const CallICFGNode *cs, const MemRegion *m, Cond c=true)
Constructor/Destructor for MU.
Definition: MSSAMuChi.h:230
virtual void dump()
Print MU.
Definition: MSSAMuChi.h:265
static bool classof(const CallMU *)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition: MSSAMuChi.h:254
EntryCHI(const SVFFunction *f, const MemRegion *m, Cond c=true)
Constructors for EntryCHI.
Definition: MSSAMuChi.h:585
static bool classof(const MSSACHI< Cond > *chi)
Definition: MSSAMuChi.h:606
virtual void dump()
Print CHI.
Definition: MSSAMuChi.h:617
static bool classof(const MSSADEF *chi)
Definition: MSSAMuChi.h:610
virtual ~EntryCHI()
Definition: MSSAMuChi.h:589
static bool classof(const EntryCHI *chi)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition: MSSAMuChi.h:602
const SVFFunction * getFunction() const
Return function.
Definition: MSSAMuChi.h:595
const SVFFunction * fun
Definition: MSSAMuChi.h:581
virtual const SVFBasicBlock * getBB() const
Return the basic block of this ICFGNode.
Definition: ICFGNode.h:82
const SVFBasicBlock * getBasicBlock() const
Return basic block.
Definition: MSSAMuChi.h:192
static bool classof(const MSSAMU< Cond > *mu)
Definition: MSSAMuChi.h:203
static bool classof(const LoadMU *)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition: MSSAMuChi.h:199
const LoadStmt * inst
Definition: MSSAMuChi.h:169
virtual ~LoadMU()
Definition: MSSAMuChi.h:179
virtual void dump()
Print MU.
Definition: MSSAMuChi.h:210
const SVFBasicBlock * bb
Definition: MSSAMuChi.h:170
const LoadStmt * getLoadStmt() const
Return load instruction.
Definition: MSSAMuChi.h:186
LoadMU(const SVFBasicBlock *b, const LoadStmt *i, const MemRegion *m, Cond c=true)
Constructor/Destructor for MU.
Definition: MSSAMuChi.h:175
MRVer(const MemRegion *m, MRVERSION v, MSSADef *d)
Constructor.
Definition: MSSAMuChi.h:57
MRVERSION getSSAVersion() const
Return SSA version.
Definition: MSSAMuChi.h:69
MSSADEF MSSADef
Definition: MSSAMuChi.h:47
MSSADef * def
Definition: MSSAMuChi.h:54
MRVERID vid
Definition: MSSAMuChi.h:53
MRVERID getID() const
Get MRVERID.
Definition: MSSAMuChi.h:81
MSSADef * getDef() const
Get MSSADef.
Definition: MSSAMuChi.h:75
const MemRegion * getMR() const
Return the memory region.
Definition: MSSAMuChi.h:63
const MemRegion * mr
Definition: MSSAMuChi.h:51
static u32_t totalVERNum
ver ID 0 is reserved
Definition: MSSAMuChi.h:50
MRVERSION version
Definition: MSSAMuChi.h:52
virtual ~MSSACHI()
Definition: MSSAMuChi.h:410
MSSADEF::DEFTYPE CHITYPE
Definition: MSSAMuChi.h:403
void setOpVer(MRVer *v)
Set operand ver.
Definition: MSSAMuChi.h:414
static bool classof(const MSSADEF *chi)
Definition: MSSAMuChi.h:439
static bool classof(const MSSACHI *chi)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition: MSSAMuChi.h:435
virtual void dump()
Print CHI.
Definition: MSSAMuChi.h:448
MRVer * getOpVer() const
Get operand ver.
Definition: MSSAMuChi.h:421
MRVer * opVer
Definition: MSSAMuChi.h:400
Cond getCond() const
Get condition.
Definition: MSSAMuChi.h:428
MSSACHI(CHITYPE t, const MemRegion *m, Cond c)
Constructor/Destructor for MSSACHI.
Definition: MSSAMuChi.h:406
const MemRegion * mr
Definition: MSSAMuChi.h:340
MSSADEF(DEFTYPE t, const MemRegion *m)
Constructor/Destructor for MSSADEF.
Definition: MSSAMuChi.h:346
MRVer * getResVer() const
Set operand vers.
Definition: MSSAMuChi.h:373
void setResVer(MRVer *v)
Set result operand ver.
Definition: MSSAMuChi.h:366
DEFTYPE getType() const
Return type of this CHI.
Definition: MSSAMuChi.h:360
MRVer * resVer
Definition: MSSAMuChi.h:341
DEFTYPE type
Definition: MSSAMuChi.h:339
virtual void dump()
Print MSSADef.
Definition: MSSAMuChi.h:386
const MemRegion * getMR() const
Return memory region.
Definition: MSSAMuChi.h:354
bool operator<(const MSSADEF &rhs) const
Avoid adding duplicated chis and phis.
Definition: MSSAMuChi.h:380
virtual ~MSSADEF()
Definition: MSSAMuChi.h:350
virtual ~MSSAMU()
Definition: MSSAMuChi.h:115
MSSAMU(MUTYPE t, const MemRegion *m, Cond c)
Constructor/Destructor for MU.
Definition: MSSAMuChi.h:112
void setVer(MRVer *v)
Set Ver.
Definition: MSSAMuChi.h:131
MUTYPE type
Definition: MSSAMuChi.h:105
virtual void dump()
Print MU.
Definition: MSSAMuChi.h:154
const MemRegion * mr
Definition: MSSAMuChi.h:106
const MemRegion * getMR() const
Return MR.
Definition: MSSAMuChi.h:121
bool operator<(const MSSAMU &rhs) const
Avoid adding duplicated mus.
Definition: MSSAMuChi.h:149
MUTYPE getType() const
Return type.
Definition: MSSAMuChi.h:126
MRVer * ver
Definition: MSSAMuChi.h:107
Cond getCond() const
Return condition.
Definition: MSSAMuChi.h:143
MRVer * getMRVer() const
Get Ver.
Definition: MSSAMuChi.h:137
Cond getCond() const
Return condition.
Definition: MSSAMuChi.h:690
virtual void dump()
Print PHI.
Definition: MSSAMuChi.h:708
OPVers::const_iterator opVerEnd() const
Definition: MSSAMuChi.h:677
const SVFBasicBlock * bb
Definition: MSSAMuChi.h:635
static bool classof(const MSSADEF *phi)
Definition: MSSAMuChi.h:701
MSSAPHI(const SVFBasicBlock *b, const MemRegion *m, Cond c=true)
Constructors for PHI.
Definition: MSSAMuChi.h:641
Map< u32_t, const MRVer * > OPVers
Definition: MSSAMuChi.h:633
void setOpVer(const MRVer *v, u32_t pos)
Set operand ver.
Definition: MSSAMuChi.h:651
OPVers::const_iterator opVerBegin() const
Operand ver iterators.
Definition: MSSAMuChi.h:673
OPVers opVers
Definition: MSSAMuChi.h:636
virtual ~MSSAPHI()
Definition: MSSAMuChi.h:645
static bool classof(const MSSAPHI *phi)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition: MSSAMuChi.h:697
u32_t getOpVerNum() const
Get the number of operand ver.
Definition: MSSAMuChi.h:666
const MRVer * getOpVer(u32_t pos) const
Get operand ver.
Definition: MSSAMuChi.h:658
const SVFBasicBlock * getBasicBlock() const
Return the basic block.
Definition: MSSAMuChi.h:684
Memory Region class.
Definition: MemRegion.h:56
MRID getMRID() const
Return memory region ID.
Definition: MemRegion.h:78
std::string dumpStr() const
Dump string.
Definition: MemRegion.h:93
virtual ~RetMU()
Definition: MSSAMuChi.h:288
const SVFFunction * fun
Definition: MSSAMuChi.h:280
const SVFFunction * getFunction() const
Return function.
Definition: MSSAMuChi.h:292
RetMU(const SVFFunction *f, const MemRegion *m, Cond c=true)
Constructor/Destructor for MU.
Definition: MSSAMuChi.h:284
static bool classof(const RetMU *)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition: MSSAMuChi.h:299
virtual void dump()
Print MU.
Definition: MSSAMuChi.h:310
static bool classof(const MSSAMU< Cond > *mu)
Definition: MSSAMuChi.h:303
const StoreStmt * getStoreStmt() const
Get store instruction.
Definition: MSSAMuChi.h:485
static bool classof(const MSSADEF *chi)
Definition: MSSAMuChi.h:500
static bool classof(const StoreCHI *chi)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition: MSSAMuChi.h:492
const StoreStmt * inst
Definition: MSSAMuChi.h:465
static bool classof(const MSSACHI< Cond > *chi)
Definition: MSSAMuChi.h:496
StoreCHI(const SVFBasicBlock *b, const StoreStmt *i, const MemRegion *m, Cond c=true)
Constructors for StoreCHI.
Definition: MSSAMuChi.h:469
virtual ~StoreCHI()
Definition: MSSAMuChi.h:473
const SVFBasicBlock * getBasicBlock() const
Get basic block.
Definition: MSSAMuChi.h:479
const SVFBasicBlock * bb
Definition: MSSAMuChi.h:464
virtual void dump()
Print CHI.
Definition: MSSAMuChi.h:507
std::ostream & outs()
Overwrite llvm::outs()
Definition: SVFUtil.h:50
for isBitcode
Definition: BasicTypes.h:68
NodeID MRVERID
Definition: MemRegion.h:51
NodeID MRVERSION
Definition: MemRegion.h:52
std::unordered_map< Key, Value, Hash, KeyEqual, Allocator > Map
Definition: GeneralType.h:101
unsigned u32_t
Definition: GeneralType.h:46
IntervalValue operator<<(const IntervalValue &lhs, const IntervalValue &rhs)
Left binary shift of IntervalValues.