blob: 8bf0b4df2583f37942499ae249299736b50ea9a2 [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 Lattner11646322002-02-04 16:35:12 +00004#include <algorithm>
Chris Lattner697954c2002-01-20 22:54:45 +00005#include <iostream>
6using std::cerr;
7using std::endl;
8using std::pair;
9using std::hash_set;
Ruchira Sasanka683847f2001-07-24 17:14:13 +000010
Chris Lattner11646322002-02-04 16:35:12 +000011void printValue(const Value *v) { // func to print a Value
Chris Lattner634b3522001-10-15 18:30:06 +000012 if (v->hasName())
Chris Lattner11646322002-02-04 16:35:12 +000013 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
Chris Lattner11646322002-02-04 16:35:12 +000023bool ValueSet::setUnion( const ValueSet *set1) {
Ruchira Sasanka683847f2001-07-24 17:14:13 +000024 pair<iterator, bool> result;
25 bool changed = false;
26
Chris Lattner11646322002-02-04 16:35:12 +000027 for(const_iterator set1it = set1->begin() ; set1it != set1->end(); ++set1it) {
Ruchira Sasankae27c3442001-08-20 21:12:49 +000028 // for all all elements in set1
Chris Lattner11646322002-02-04 16:35:12 +000029 result = insert(*set1it); // insert to this set
30 if(result.second == true) changed = true;
Ruchira Sasanka683847f2001-07-24 17:14:13 +000031 }
32
33 return changed;
34}
35
36
Ruchira Sasankae27c3442001-08-20 21:12:49 +000037 // for performing set difference
Ruchira Sasanka683847f2001-07-24 17:14:13 +000038void ValueSet::setDifference( const ValueSet *const set1,
39 const ValueSet *const set2) {
40
41 const_iterator set1it, set2it;
Chris Lattner697954c2002-01-20 22:54:45 +000042 for( set1it = set1->begin() ; set1it != set1->end(); ++set1it) {
Ruchira Sasanka683847f2001-07-24 17:14:13 +000043 // for all elements in set1
44 iterator set2it = set2->find( *set1it ); // find wether the elem is in set2
45 if( set2it == set2->end() ) // if the element is not in set2
46 insert( *set1it ); // insert to this set
47 }
48}
49
50
Ruchira Sasankae27c3442001-08-20 21:12:49 +000051 // for performing set subtraction
Ruchira Sasanka683847f2001-07-24 17:14:13 +000052void ValueSet::setSubtract( const ValueSet *const set1) {
53 const_iterator set1it;
Chris Lattner697954c2002-01-20 22:54:45 +000054 for( set1it = set1->begin() ; set1it != set1->end(); ++set1it)
Ruchira Sasanka683847f2001-07-24 17:14:13 +000055 // for all elements in set1
56 erase( *set1it ); // erase that element from this set
57}
58
59
60
61
Ruchira Sasankae27c3442001-08-20 21:12:49 +000062void ValueSet::printSet() const { // for printing a live variable set
Chris Lattner697954c2002-01-20 22:54:45 +000063 for_each(begin(), end(), printValue);
Ruchira Sasanka683847f2001-07-24 17:14:13 +000064}