blob: d176d9e53cffcf58f6f92655675edc3299449b78 [file] [log] [blame]
Ruchira Sasanka683847f2001-07-24 17:14:13 +00001
2#include "llvm/Analysis/LiveVar/ValueSet.h"
Chris Lattnere9bb2df2001-12-03 22:26:30 +00003#include "llvm/ConstantVals.h"
Chris Lattner697954c2002-01-20 22:54:45 +00004#include <iostream>
5using std::cerr;
6using std::endl;
7using std::pair;
8using std::hash_set;
Ruchira Sasanka683847f2001-07-24 17:14:13 +00009
10void printValue( const Value *const v) // func to print a Value
11{
Chris Lattner634b3522001-10-15 18:30:06 +000012 if (v->hasName())
13 cerr << v << "(" << ((*v).getName()) << ") ";
Chris Lattnere9bb2df2001-12-03 22:26:30 +000014 else if (Constant *C = dyn_cast<Constant>(v))
15 cerr << v << "(" << C->getStrValue() << ") ";
Ruchira Sasankae27c3442001-08-20 21:12:49 +000016 else
Chris Lattner634b3522001-10-15 18:30:06 +000017 cerr << v << " ";
Ruchira Sasanka683847f2001-07-24 17:14:13 +000018}
19
20
21//---------------- Method implementations --------------------------
Ruchira Sasankae27c3442001-08-20 21:12:49 +000022 // for performing two set unions
Ruchira Sasanka683847f2001-07-24 17:14:13 +000023bool ValueSet::setUnion( const ValueSet *const set1) {
24 const_iterator set1it;
25 pair<iterator, bool> result;
26 bool changed = false;
27
Chris Lattner697954c2002-01-20 22:54:45 +000028 for( set1it = set1->begin() ; set1it != set1->end(); ++set1it) {
Ruchira Sasankae27c3442001-08-20 21:12:49 +000029 // for all all elements in set1
30 result = insert( *set1it ); // insert to this set
Ruchira Sasanka683847f2001-07-24 17:14:13 +000031 if( result.second == true) changed = true;
32 }
33
34 return changed;
35}
36
37
Ruchira Sasankae27c3442001-08-20 21:12:49 +000038 // for performing set difference
Ruchira Sasanka683847f2001-07-24 17:14:13 +000039void ValueSet::setDifference( const ValueSet *const set1,
40 const ValueSet *const set2) {
41
42 const_iterator set1it, set2it;
Chris Lattner697954c2002-01-20 22:54:45 +000043 for( set1it = set1->begin() ; set1it != set1->end(); ++set1it) {
Ruchira Sasanka683847f2001-07-24 17:14:13 +000044 // for all elements in set1
45 iterator set2it = set2->find( *set1it ); // find wether the elem is in set2
46 if( set2it == set2->end() ) // if the element is not in set2
47 insert( *set1it ); // insert to this set
48 }
49}
50
51
Ruchira Sasankae27c3442001-08-20 21:12:49 +000052 // for performing set subtraction
Ruchira Sasanka683847f2001-07-24 17:14:13 +000053void ValueSet::setSubtract( const ValueSet *const set1) {
54 const_iterator set1it;
Chris Lattner697954c2002-01-20 22:54:45 +000055 for( set1it = set1->begin() ; set1it != set1->end(); ++set1it)
Ruchira Sasanka683847f2001-07-24 17:14:13 +000056 // for all elements in set1
57 erase( *set1it ); // erase that element from this set
58}
59
60
61
62
Ruchira Sasankae27c3442001-08-20 21:12:49 +000063void ValueSet::printSet() const { // for printing a live variable set
Chris Lattner697954c2002-01-20 22:54:45 +000064 for_each(begin(), end(), printValue);
Ruchira Sasanka683847f2001-07-24 17:14:13 +000065}