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 "MSSA/MemRegion.h"
34
35namespace SVF
36{
37
38class MSSADEF;
39
43class MRVer
44{
45
46public:
48private:
51 const MemRegion* mr;
55public:
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
94template<class Cond>
95class MSSAMU
96{
97
98public:
103
104protected:
106 const MemRegion* mr;
109public:
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
164template<class Cond>
165class LoadMU : public MSSAMU<Cond>
166{
167
168private:
171
172public:
174
175 LoadMU(const SVFBasicBlock* b,const LoadStmt* i, const MemRegion* m, Cond c = true) :
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
220template<class Cond>
221class CallMU : public MSSAMU<Cond>
222{
223
224private:
226
227public:
229
230 CallMU(const CallICFGNode* cs, const MemRegion* m, Cond c = true) :
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
276template<class Cond>
277class RetMU : public MSSAMU<Cond>
278{
279private:
281public:
283
284 RetMU(const SVFFunction* f, const MemRegion* m, Cond c = true) :
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
326{
327
328public:
337
338protected:
340 const MemRegion* mr;
342
343public:
345
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
395template<class Cond>
396class MSSACHI : public MSSADEF
397{
398
399private:
402public:
403 typedef typename MSSADEF::DEFTYPE CHITYPE;
405
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
460template<class Cond>
461class StoreCHI : public MSSACHI<Cond>
462{
463private:
466public:
468
469 StoreCHI(const SVFBasicBlock* b, const StoreStmt* i, const MemRegion* m, Cond c = true) :
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
520template<class Cond>
521class CallCHI : public MSSACHI<Cond>
522{
523private:
525public:
527
528 CallCHI(const CallICFGNode* cs, const MemRegion* m, Cond c = true) :
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
577template<class Cond>
578class EntryCHI : public MSSACHI<Cond>
579{
580private:
582public:
584
585 EntryCHI(const SVFFunction* f, const MemRegion* m, Cond c = true) :
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 */
628template<class Cond>
629class MSSAPHI : public MSSADEF
630{
631
632public:
634private:
638public:
640
641 MSSAPHI(const SVFBasicBlock* b, const MemRegion* m, Cond c = true) :
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
719std::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 CallCHI.
Definition MSSAMuChi.h:528
static bool classof(const MSSACHI< Cond > *chi)
Definition MSSAMuChi.h:555
const CallICFGNode * callsite
Definition MSSAMuChi.h:524
const SVFBasicBlock * getBasicBlock() const
Return basic block.
Definition MSSAMuChi.h:538
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 CallICFGNode * getCallSite() const
Return callsite.
Definition MSSAMuChi.h:544
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:241
static bool classof(const MSSAMU< Cond > *mu)
Definition MSSAMuChi.h:258
virtual ~CallMU()
Definition MSSAMuChi.h:234
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
const SVFFunction * getFunction() const
Return function.
Definition MSSAMuChi.h:595
static bool classof(const EntryCHI *chi)
Methods for support type inquiry through isa, cast, and dyn_cast:
Definition MSSAMuChi.h:602
const SVFFunction * fun
Definition MSSAMuChi.h:581
virtual const SVFBasicBlock * getBB() const
Return the basic block of this ICFGNode.
Definition ICFGNode.h:82
static bool classof(const MSSAMU< Cond > *mu)
Definition MSSAMuChi.h:203
const SVFBasicBlock * getBasicBlock() const
Return basic block.
Definition MSSAMuChi.h:192
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
const MemRegion * getMR() const
Return the memory region.
Definition MSSAMuChi.h:63
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 * 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
const MemRegion * getMR() const
Return memory region.
Definition MSSAMuChi.h:354
MRVer * resVer
Definition MSSAMuChi.h:341
DEFTYPE type
Definition MSSAMuChi.h:339
virtual void dump()
Print MSSADef.
Definition MSSAMuChi.h:386
bool operator<(const MSSADEF &rhs) const
Avoid adding duplicated chis and phis.
Definition MSSAMuChi.h:380
virtual ~MSSADEF()
Definition MSSAMuChi.h:350
MRVer * getMRVer() const
Get Ver.
Definition MSSAMuChi.h:137
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
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
const MRVer * getOpVer(u32_t pos) const
Get operand ver.
Definition MSSAMuChi.h:658
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
const SVFBasicBlock * getBasicBlock() const
Return the basic block.
Definition MSSAMuChi.h:684
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
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
RetMU(const SVFFunction *f, const MemRegion *m, Cond c=true)
Constructor/Destructor for MU.
Definition MSSAMuChi.h:284
const SVFFunction * getFunction() const
Return function.
Definition MSSAMuChi.h:292
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
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 * getStoreStmt() const
Get store instruction.
Definition MSSAMuChi.h:485
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
llvm::IRBuilder IRBuilder
Definition BasicTypes.h:74
unsigned u32_t
Definition GeneralType.h:46
IntervalValue operator<<(const IntervalValue &lhs, const IntervalValue &rhs)
Left binary shift of IntervalValues.