Static Value-Flow Analysis
Loading...
Searching...
No Matches
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 "Util/GeneralType.h"
34
35namespace SVF
36{
37
38class MemRegion;
39class MSSADEF;
40
44class MRVer
45{
46
47public:
49private:
52 const MemRegion* mr;
56public:
60 {
61 }
62
64 inline const MemRegion* getMR() const
65 {
66 return mr;
67 }
68
70 inline MRVERSION getSSAVersion() const
71 {
72 return version;
73 }
74
76 inline MSSADef* getDef() const
77 {
78 return def;
79 }
80
82 inline MRVERID getID() const
83 {
84 return vid;
85 }
86};
87
88
95template<class Cond>
96class MSSAMU
97{
98
99public:
104
105protected:
107 const MemRegion* mr;
110public:
112
113 MSSAMU(MUTYPE t, const MemRegion* m, Cond c) : type(t), mr(m), ver(nullptr), cond(c)
114 {
115 }
116 virtual ~MSSAMU()
117 {
118 }
120
122 inline const MemRegion* getMR() const
123 {
124 return mr;
125 }
127 inline MUTYPE getType() const
128 {
129 return type;
130 }
132 inline void setVer(MRVer* v)
133 {
134 assert(v->getMR() == mr && "inserting different memory region?");
135 ver = v;
136 }
138 inline MRVer* getMRVer() const
139 {
140 assert(ver!=nullptr && "version is nullptr, did not rename?");
141 return ver;
142 }
144 inline Cond getCond() const
145 {
146 return cond;
147 }
148
150 inline bool operator < (const MSSAMU & rhs) const
151 {
152 return mr > rhs.getMR();
153 }
155 virtual void dump()
156 {
157 SVFUtil::outs() << "MU(MR_" << mr->getMRID() << "V_" << ver->getSSAVersion() << ") \t" <<
158 this->getMR()->dumpStr() << "\n";
159 }
160};
161
165template<class Cond>
166class LoadMU : public MSSAMU<Cond>
167{
168
169private:
172
173public:
175
176 LoadMU(const SVFBasicBlock* b,const LoadStmt* i, const MemRegion* m, Cond c = true) :
178 {
179 }
180 virtual ~LoadMU()
181 {
182
183 }
185
187 inline const LoadStmt* getLoadStmt() const
188 {
189 return inst;
190 }
191
193 inline const SVFBasicBlock* getBasicBlock() const
194 {
195 return bb;
196 }
197
199
200 static inline bool classof(const LoadMU *)
201 {
202 return true;
203 }
204 static inline bool classof(const MSSAMU<Cond> *mu)
205 {
206 return mu->getType() == MSSAMU<Cond>::LoadMSSAMU;
207 }
209
211 virtual void dump()
212 {
213 SVFUtil::outs() << "LDMU(MR_" << this->getMR()->getMRID() << "V_" << this->getMRVer()->getSSAVersion() << ") \t" <<
214 this->getMR()->dumpStr() << "\n";
215 }
216};
217
221template<class Cond>
222class CallMU : public MSSAMU<Cond>
223{
224
225private:
227
228public:
230
231 CallMU(const CallICFGNode* cs, const MemRegion* m, Cond c = true) :
233 {
234 }
235 virtual ~CallMU()
236 {
237
238 }
240
242 inline const CallICFGNode* getCallSite() const
243 {
244 return callsite;
245 }
246
248 inline const SVFBasicBlock* getBasicBlock() const
249 {
250 return callsite->getBB();
251 }
252
254
255 static inline bool classof(const CallMU *)
256 {
257 return true;
258 }
259 static inline bool classof(const MSSAMU<Cond> *mu)
260 {
261 return mu->getType() == MSSAMU<Cond>::CallMSSAMU;
262 }
264
266 virtual void dump()
267 {
268 SVFUtil::outs() << "CALMU(MR_" << this->getMR()->getMRID() << "V_" << this->getMRVer()->getSSAVersion() << ") \t" <<
269 this->getMR()->dumpStr() << "\n";
270 }
271};
272
273
277template<class Cond>
278class RetMU : public MSSAMU<Cond>
279{
280private:
282public:
284
285 RetMU(const FunObjVar* f, const MemRegion* m, Cond c = true) :
287 {
288 }
289 virtual ~RetMU() {}
291
293 inline const FunObjVar* getFunction() const
294 {
295 return fun;
296 }
297
299
300 static inline bool classof(const RetMU *)
301 {
302 return true;
303 }
304 static inline bool classof(const MSSAMU<Cond> *mu)
305 {
306 return mu->getType() == MSSAMU<Cond>::RetMSSAMU;
307 }
309
311 virtual void dump()
312 {
313 SVFUtil::outs() << "RETMU(MR_" << this->getMR()->getMRID() << "V_" << this->getMRVer()->getSSAVersion() << ") \t" <<
314 this->getMR()->dumpStr() << "\n";
315 }
316};
317
318
327{
328
329public:
338
339protected:
341 const MemRegion* mr;
343
344public:
346
348 {
349
350 }
351 virtual ~MSSADEF() {}
353
355 inline const MemRegion* getMR() const
356 {
357 return mr;
358 }
359
361 inline DEFTYPE getType() const
362 {
363 return type;
364 }
365
367 inline void setResVer(MRVer* v)
368 {
369 assert(v->getMR() == mr && "inserting different memory region?");
370 resVer = v;
371 }
372
374 inline MRVer* getResVer() const
375 {
376 assert(resVer!=nullptr && "version is nullptr, did not rename?");
377 return resVer;
378 }
379
381 inline bool operator < (const MSSADEF & rhs) const
382 {
383 return mr > rhs.getMR();
384 }
385
387 virtual void dump()
388 {
389 SVFUtil::outs() << "DEF(MR_" << mr->getMRID() << "V_" << resVer->getSSAVersion() << ")\n";
390 }
391};
392
396template<class Cond>
397class MSSACHI : public MSSADEF
398{
399
400private:
403public:
404 typedef typename MSSADEF::DEFTYPE CHITYPE;
406
408 {
409
410 }
411 virtual ~MSSACHI() {}
413
415 inline void setOpVer(MRVer* v)
416 {
417 assert(v->getMR() == this->getMR() && "inserting different memory region?");
418 opVer = v;
419 }
420
422 inline MRVer* getOpVer() const
423 {
424 assert(opVer!=nullptr && "version is nullptr, did not rename?");
425 return opVer;
426 }
427
429 inline Cond getCond() const
430 {
431 return cond;
432 }
433
435
436 static inline bool classof(const MSSACHI * chi)
437 {
438 return true;
439 }
440 static inline bool classof(const MSSADEF *chi)
441 {
442 return chi->getType() == MSSADEF::EntryMSSACHI ||
443 chi->getType() == MSSADEF::StoreMSSACHI ||
444 chi->getType() == MSSADEF::SSACHI ;
445 }
447
449 virtual void dump()
450 {
451 SVFUtil::outs() << "MR_" << this->getMR()->getMRID() << "V_" << this->getResVer()->getSSAVersion() <<
452 " = CHI(MR_" << this->getMR()->getMRID() << "V_" << opVer->getSSAVersion() << ") \t" <<
453 this->getMR()->dumpStr() << "\n";
454 }
455};
456
461template<class Cond>
462class StoreCHI : public MSSACHI<Cond>
463{
464private:
467public:
469
470 StoreCHI(const SVFBasicBlock* b, const StoreStmt* i, const MemRegion* m, Cond c = true) :
472 {
473 }
474 virtual ~StoreCHI()
475 {
476 }
478
480 inline const SVFBasicBlock* getBasicBlock() const
481 {
482 return bb;
483 }
484
486 inline const StoreStmt* getStoreStmt() const
487 {
488 return inst;
489 }
490
492
493 static inline bool classof(const StoreCHI * chi)
494 {
495 return true;
496 }
497 static inline bool classof(const MSSACHI<Cond> * chi)
498 {
499 return chi->getType() == MSSADEF::StoreMSSACHI;
500 }
501 static inline bool classof(const MSSADEF *chi)
502 {
503 return chi->getType() == MSSADEF::StoreMSSACHI;
504 }
506
508 virtual void dump()
509 {
510 SVFUtil::outs() << this->getMR()->getMRID() << "V_" << this->getResVer()->getSSAVersion() <<
511 " = STCHI(MR_" << this->getMR()->getMRID() << "V_" << this->getOpVer()->getSSAVersion() << ") \t" <<
512 this->getMR()->dumpStr() << "\n";
513 }
514};
515
516
521template<class Cond>
522class CallCHI : public MSSACHI<Cond>
523{
524private:
526public:
528
529 CallCHI(const CallICFGNode* cs, const MemRegion* m, Cond c = true) :
531 {
532 }
533 virtual ~CallCHI()
534 {
535 }
537
539 inline const SVFBasicBlock* getBasicBlock() const
540 {
541 return callsite->getBB();
542 }
543
545 inline const CallICFGNode* getCallSite() const
546 {
547 return callsite;
548 }
549
551
552 static inline bool classof(const CallCHI * chi)
553 {
554 return true;
555 }
556 static inline bool classof(const MSSACHI<Cond> * chi)
557 {
558 return chi->getType() == MSSADEF::CallMSSACHI;
559 }
560 static inline bool classof(const MSSADEF *chi)
561 {
562 return chi->getType() == MSSADEF::CallMSSACHI;
563 }
565
567 virtual void dump()
568 {
569 SVFUtil::outs() << this->getMR()->getMRID() << "V_" << this->getResVer()->getSSAVersion() <<
570 " = CALCHI(MR_" << this->getMR()->getMRID() << "V_" << this->getOpVer()->getSSAVersion() << ") \t" <<
571 this->getMR()->dumpStr() << "\n";
572 }
573};
574
578template<class Cond>
579class EntryCHI : public MSSACHI<Cond>
580{
581private:
583public:
585
586 EntryCHI(const FunObjVar* f, const MemRegion* m, Cond c = true) :
588 {
589 }
590 virtual ~EntryCHI()
591 {
592 }
594
596 inline const FunObjVar* getFunction() const
597 {
598 return fun;
599 }
600
602
603 static inline bool classof(const EntryCHI * chi)
604 {
605 return true;
606 }
607 static inline bool classof(const MSSACHI<Cond> * chi)
608 {
609 return chi->getType() == MSSADEF::EntryMSSACHI;
610 }
611 static inline bool classof(const MSSADEF *chi)
612 {
613 return chi->getType() == MSSADEF::EntryMSSACHI;
614 }
616
618 virtual void dump()
619 {
620 SVFUtil::outs() << this->getMR()->getMRID() << "V_" << this->getResVer()->getSSAVersion() <<
621 " = ENCHI(MR_" << this->getMR()->getMRID() << "V_" << this->getOpVer()->getSSAVersion() << ") \t" <<
622 this->getMR()->dumpStr() << "\n";
623 }
624};
625
626/*
627 * Memory SSA Select, similar to PHINode
628 */
629template<class Cond>
630class MSSAPHI : public MSSADEF
631{
632
633public:
635private:
639public:
641
642 MSSAPHI(const SVFBasicBlock* b, const MemRegion* m, Cond c = true) :
644 {
645 }
646 virtual ~MSSAPHI()
647 {
648 }
650
652 inline void setOpVer(const MRVer* v, u32_t pos)
653 {
654 assert(v->getMR() == this->getMR() && "inserting different memory region?");
655 opVers[pos] = v;
656 }
657
659 inline const MRVer* getOpVer(u32_t pos) const
660 {
661 OPVers::const_iterator it = opVers.find(pos);
662 assert(it!=opVers.end() && "version is nullptr, did not rename?");
663 return it->second;
664 }
665
667 inline u32_t getOpVerNum() const
668 {
669 return opVers.size();
670 }
671
673
674 inline OPVers::const_iterator opVerBegin() const
675 {
676 return opVers.begin();
677 }
678 inline OPVers::const_iterator opVerEnd() const
679 {
680 return opVers.end();
681 }
683
685 inline const SVFBasicBlock* getBasicBlock() const
686 {
687 return bb;
688 }
689
691 inline Cond getCond() const
692 {
693 return cond;
694 }
695
697
698 static inline bool classof(const MSSAPHI * phi)
699 {
700 return true;
701 }
702 static inline bool classof(const MSSADEF *phi)
703 {
704 return phi->getType() == MSSADEF::SSAPHI ;
705 }
707
709 virtual void dump()
710 {
711 SVFUtil::outs() << this->getMR()->getMRID() << "V_" << this->getResVer()->getSSAVersion() <<
712 " = PHI(";
713 for(OPVers::iterator it = opVers.begin(), eit = opVers.end(); it!=eit; ++it)
714 SVFUtil::outs() << "MR_" << this->getMR()->getMRID() << "V_" << it->second->getSSAVersion() << ", ";
715
716 SVFUtil::outs() << ")\n";
717 }
718};
719
720std::ostream& operator<<(std::ostream &o, const MRVer& mrver);
721} // End namespace SVF
722
723#endif /* MSSAMUCHI_H_ */
const cJSON *const b
Definition cJSON.h:255
CallCHI(const CallICFGNode *cs, const MemRegion *m, Cond c=true)
Constructors for CallCHI.
Definition MSSAMuChi.h:529
static bool classof(const MSSACHI< Cond > *chi)
Definition MSSAMuChi.h:556
const CallICFGNode * callsite
Definition MSSAMuChi.h:525
const SVFBasicBlock * getBasicBlock() const
Return basic block.
Definition MSSAMuChi.h:539
static bool classof(const CallCHI *chi)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition MSSAMuChi.h:552
virtual ~CallCHI()
Definition MSSAMuChi.h:533
const CallICFGNode * getCallSite() const
Return callsite.
Definition MSSAMuChi.h:545
virtual void dump()
Print CHI.
Definition MSSAMuChi.h:567
static bool classof(const MSSADEF *chi)
Definition MSSAMuChi.h:560
const CallICFGNode * getCallSite() const
Return callsite.
Definition MSSAMuChi.h:242
static bool classof(const MSSAMU< Cond > *mu)
Definition MSSAMuChi.h:259
virtual ~CallMU()
Definition MSSAMuChi.h:235
const SVFBasicBlock * getBasicBlock() const
Return basic block.
Definition MSSAMuChi.h:248
const CallICFGNode * callsite
Definition MSSAMuChi.h:226
CallMU(const CallICFGNode *cs, const MemRegion *m, Cond c=true)
Constructor/Destructor for MU.
Definition MSSAMuChi.h:231
virtual void dump()
Print MU.
Definition MSSAMuChi.h:266
static bool classof(const CallMU *)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition MSSAMuChi.h:255
const FunObjVar * getFunction() const
Return function.
Definition MSSAMuChi.h:596
EntryCHI(const FunObjVar *f, const MemRegion *m, Cond c=true)
Constructors for EntryCHI.
Definition MSSAMuChi.h:586
static bool classof(const MSSACHI< Cond > *chi)
Definition MSSAMuChi.h:607
const FunObjVar * fun
Definition MSSAMuChi.h:582
virtual void dump()
Print CHI.
Definition MSSAMuChi.h:618
static bool classof(const MSSADEF *chi)
Definition MSSAMuChi.h:611
virtual ~EntryCHI()
Definition MSSAMuChi.h:590
static bool classof(const EntryCHI *chi)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition MSSAMuChi.h:603
virtual const SVFBasicBlock * getBB() const
Return the basic block of this ICFGNode.
Definition ICFGNode.h:81
static bool classof(const MSSAMU< Cond > *mu)
Definition MSSAMuChi.h:204
const SVFBasicBlock * getBasicBlock() const
Return basic block.
Definition MSSAMuChi.h:193
static bool classof(const LoadMU *)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition MSSAMuChi.h:200
const LoadStmt * inst
Definition MSSAMuChi.h:170
virtual ~LoadMU()
Definition MSSAMuChi.h:180
virtual void dump()
Print MU.
Definition MSSAMuChi.h:211
const SVFBasicBlock * bb
Definition MSSAMuChi.h:171
const LoadStmt * getLoadStmt() const
Return load instruction.
Definition MSSAMuChi.h:187
LoadMU(const SVFBasicBlock *b, const LoadStmt *i, const MemRegion *m, Cond c=true)
Constructor/Destructor for MU.
Definition MSSAMuChi.h:176
MRVer(const MemRegion *m, MRVERSION v, MSSADef *d)
Constructor.
Definition MSSAMuChi.h:58
MRVERSION getSSAVersion() const
Return SSA version.
Definition MSSAMuChi.h:70
const MemRegion * getMR() const
Return the memory region.
Definition MSSAMuChi.h:64
MSSADEF MSSADef
Definition MSSAMuChi.h:48
MSSADef * def
Definition MSSAMuChi.h:55
MRVERID vid
Definition MSSAMuChi.h:54
MRVERID getID() const
Get MRVERID.
Definition MSSAMuChi.h:82
MSSADef * getDef() const
Get MSSADef.
Definition MSSAMuChi.h:76
const MemRegion * mr
Definition MSSAMuChi.h:52
static u32_t totalVERNum
ver ID 0 is reserved
Definition MSSAMuChi.h:51
MRVERSION version
Definition MSSAMuChi.h:53
virtual ~MSSACHI()
Definition MSSAMuChi.h:411
MSSADEF::DEFTYPE CHITYPE
Definition MSSAMuChi.h:404
void setOpVer(MRVer *v)
Set operand ver.
Definition MSSAMuChi.h:415
static bool classof(const MSSADEF *chi)
Definition MSSAMuChi.h:440
static bool classof(const MSSACHI *chi)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition MSSAMuChi.h:436
virtual void dump()
Print CHI.
Definition MSSAMuChi.h:449
MRVer * getOpVer() const
Get operand ver.
Definition MSSAMuChi.h:422
MRVer * opVer
Definition MSSAMuChi.h:401
Cond getCond() const
Get condition.
Definition MSSAMuChi.h:429
MSSACHI(CHITYPE t, const MemRegion *m, Cond c)
Constructor/Destructor for MSSACHI.
Definition MSSAMuChi.h:407
const MemRegion * mr
Definition MSSAMuChi.h:341
MSSADEF(DEFTYPE t, const MemRegion *m)
Constructor/Destructor for MSSADEF.
Definition MSSAMuChi.h:347
MRVer * getResVer() const
Set operand vers.
Definition MSSAMuChi.h:374
void setResVer(MRVer *v)
Set result operand ver.
Definition MSSAMuChi.h:367
DEFTYPE getType() const
Return type of this CHI.
Definition MSSAMuChi.h:361
const MemRegion * getMR() const
Return memory region.
Definition MSSAMuChi.h:355
MRVer * resVer
Definition MSSAMuChi.h:342
DEFTYPE type
Definition MSSAMuChi.h:340
virtual void dump()
Print MSSADef.
Definition MSSAMuChi.h:387
bool operator<(const MSSADEF &rhs) const
Avoid adding duplicated chis and phis.
Definition MSSAMuChi.h:381
virtual ~MSSADEF()
Definition MSSAMuChi.h:351
MRVer * getMRVer() const
Get Ver.
Definition MSSAMuChi.h:138
virtual ~MSSAMU()
Definition MSSAMuChi.h:116
MSSAMU(MUTYPE t, const MemRegion *m, Cond c)
Constructor/Destructor for MU.
Definition MSSAMuChi.h:113
void setVer(MRVer *v)
Set Ver.
Definition MSSAMuChi.h:132
MUTYPE type
Definition MSSAMuChi.h:106
virtual void dump()
Print MU.
Definition MSSAMuChi.h:155
const MemRegion * mr
Definition MSSAMuChi.h:107
const MemRegion * getMR() const
Return MR.
Definition MSSAMuChi.h:122
bool operator<(const MSSAMU &rhs) const
Avoid adding duplicated mus.
Definition MSSAMuChi.h:150
MUTYPE getType() const
Return type.
Definition MSSAMuChi.h:127
MRVer * ver
Definition MSSAMuChi.h:108
Cond getCond() const
Return condition.
Definition MSSAMuChi.h:144
Cond getCond() const
Return condition.
Definition MSSAMuChi.h:691
virtual void dump()
Print PHI.
Definition MSSAMuChi.h:709
OPVers::const_iterator opVerEnd() const
Definition MSSAMuChi.h:678
const SVFBasicBlock * bb
Definition MSSAMuChi.h:636
static bool classof(const MSSADEF *phi)
Definition MSSAMuChi.h:702
MSSAPHI(const SVFBasicBlock *b, const MemRegion *m, Cond c=true)
Constructors for PHI.
Definition MSSAMuChi.h:642
Map< u32_t, const MRVer * > OPVers
Definition MSSAMuChi.h:634
const MRVer * getOpVer(u32_t pos) const
Get operand ver.
Definition MSSAMuChi.h:659
void setOpVer(const MRVer *v, u32_t pos)
Set operand ver.
Definition MSSAMuChi.h:652
OPVers::const_iterator opVerBegin() const
Operand ver iterators.
Definition MSSAMuChi.h:674
OPVers opVers
Definition MSSAMuChi.h:637
const SVFBasicBlock * getBasicBlock() const
Return the basic block.
Definition MSSAMuChi.h:685
virtual ~MSSAPHI()
Definition MSSAMuChi.h:646
static bool classof(const MSSAPHI *phi)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition MSSAMuChi.h:698
u32_t getOpVerNum() const
Get the number of operand ver.
Definition MSSAMuChi.h:667
Memory Region class.
Definition MemRegion.h:60
MRID getMRID() const
Return memory region ID.
Definition MemRegion.h:82
std::string dumpStr() const
Dump string.
Definition MemRegion.h:97
virtual ~RetMU()
Definition MSSAMuChi.h:289
const FunObjVar * getFunction() const
Return function.
Definition MSSAMuChi.h:293
const FunObjVar * fun
Definition MSSAMuChi.h:281
RetMU(const FunObjVar *f, const MemRegion *m, Cond c=true)
Constructor/Destructor for MU.
Definition MSSAMuChi.h:285
static bool classof(const RetMU *)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition MSSAMuChi.h:300
virtual void dump()
Print MU.
Definition MSSAMuChi.h:311
static bool classof(const MSSAMU< Cond > *mu)
Definition MSSAMuChi.h:304
static bool classof(const MSSADEF *chi)
Definition MSSAMuChi.h:501
static bool classof(const StoreCHI *chi)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition MSSAMuChi.h:493
const StoreStmt * getStoreStmt() const
Get store instruction.
Definition MSSAMuChi.h:486
const StoreStmt * inst
Definition MSSAMuChi.h:466
static bool classof(const MSSACHI< Cond > *chi)
Definition MSSAMuChi.h:497
StoreCHI(const SVFBasicBlock *b, const StoreStmt *i, const MemRegion *m, Cond c=true)
Constructors for StoreCHI.
Definition MSSAMuChi.h:470
virtual ~StoreCHI()
Definition MSSAMuChi.h:474
const SVFBasicBlock * getBasicBlock() const
Get basic block.
Definition MSSAMuChi.h:480
const SVFBasicBlock * bb
Definition MSSAMuChi.h:465
virtual void dump()
Print CHI.
Definition MSSAMuChi.h:508
std::ostream & outs()
Overwrite llvm::outs()
Definition SVFUtil.h:52
for isBitcode
Definition BasicTypes.h:70
NodeID MRVERID
Definition MemRegion.h:55
NodeID MRVERSION
Definition MemRegion.h:56
llvm::IRBuilder IRBuilder
Definition BasicTypes.h:76
unsigned u32_t
Definition GeneralType.h:67
IntervalValue operator<<(const IntervalValue &lhs, const IntervalValue &rhs)
Left binary shift of IntervalValues.