OpenADFortTk (including Open64 and OpenAnalysis references)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
CompareExprTree.cpp
Go to the documentation of this file.
1 
14 // standard headers
15 
16 #include "ExprTree.hpp"
17 
18 // included here instead of in hpp file to remove circular reference
21 
22 namespace OA {
23 
24 //--------------------------------------------------------------------
26 {
27 }
28 
30 {
31 }
32 
35  std::set<OA_ptr<ExprTree> >& set2)
36 {
38  temp = new set<OA_ptr<ExprTree> >;
39  std::set_intersection(set1.begin(), set1.end(),
40  set2.begin(), set2.end(),
41  std::inserter(*temp,temp->end()));
42  return temp;
43 }
44 
45 
46 OA_ptr<std::set<OA_ptr<ExprTree> > >
47 unionExprTreeSets(std::set<OA_ptr<ExprTree> >& set1, std::set<OA_ptr<ExprTree> >& set2)
48 {
50  temp = new std::set<OA_ptr<ExprTree> >;
51 
52  std::set<OA_ptr<ExprTree> >::iterator setIter;
53  int count1=0;
54  for (setIter=set1.begin(); setIter!=set1.end(); setIter++) {
55  OA_ptr<ExprTree> loc = *setIter;
56  count1++;
57  }
58 
59  int count2=0;
60  for (setIter=set2.begin(); setIter!=set2.end(); setIter++) {
61  OA_ptr<ExprTree> loc = *setIter;
62  count2++;
63  }
64 
65  std::set_union(set1.begin(), set1.end(),
66  set2.begin(), set2.end(),
67  std::inserter(*temp,temp->end()));
68  return temp;
69 }
70 
71 
72 
73 
74 
75 
78 {
79  pVisitor.visitExprTreeBefore(*this);
80  getRoot()->acceptVisitor(pVisitor);
81  pVisitor.visitExprTreeAfter(*this);
82 }
83 
89 //FOR NOW COMMENTED
90 /*void ExprTree::copyAndConnectSubTree(OA_ptr<Node> src, OA_ptr<ExprTree> subtree)
91 {
92  std::map<OA_ptr<Node>,OA_ptr<Node> > oldToNewNodeMap;
93 
94  // iterate over all nodes to get copy
95  NodesIterator nIter(*subtree);
96  for ( ; nIter.isValid(); ++nIter) {
97  oldToNewNodeMap[nIter.current()] = nIter.current()->copy();
98  }
99 
100  // iterate over all edges of the subtree
101  EdgesIterator eIter(*subtree);
102  for ( ; eIter.isValid(); ++eIter ) {
103  OA_ptr<Edge> edge = eIter.current();
104  connect( oldToNewNodeMap[edge->source()],
105  oldToNewNodeMap[edge->sink()] );
106  }
107  connect(src,oldToNewNodeMap[subtree->getRoot()]);
108 } */
109 
110 
111 void
113 {
114  os << "===== ExprTree: =====" << std::endl;
115 
116  // print the contents of all the nodes
117  //PreOrderIterator nodes_iter(*this);
118  NodesIterator nodes_iter(*this);
119  for ( ; nodes_iter.isValid(); ++nodes_iter) {
120  OA_ptr<ExprTree::Node> node = nodes_iter.current();
121  node->dump(os,ir);
122  }
123 
124  os << "====================" << std::endl << std::endl;
125 }
126 
128 {
129 
130 
131 }
132 
133 
134 
135 
136 
138 {
139 
140 }
141 
142 void
144 {
145 
146  NodesIterator nodes_iter(*this);
147 
148  sOutBuild->graphStart("EXPRESSION TREE");
149 
150  OutputExprTreeVisitor OutputTreeVisitor(ir);
151  acceptVisitor(OutputTreeVisitor);
152 
153 /* for ( ; nodes_iter.isValid(); ++nodes_iter) {
154  OA_ptr<ExprTree::Node> node = nodes_iter.current();
155  ostringstream align;
156  align << indt;
157  sOutBuild->outputString( align.str() );
158 
159  ostringstream pushIndent;
160  pushIndent << pushIndt;
161  sOutBuild->outputString( pushIndent.str() );
162 
163  //node->output(ir);
164  node->acceptVisitor(OutputTreeVisitor);
165 
166  //ostringstream popIndent;
167  //popIndent << popIndt << indt;
168  //sOutBuild->outputString( popIndent.str() );
169  }
170 */
171 
172  sOutBuild->graphEnd("Expression Tree");
173 
174 }
175 //---------------------------------------------------------------
176 //Node
177 //---------------------------------------------------------------
178 
179 
180 
181 
182 
183 //-------------------------------------------------------------------
184 // OpNode
185 //-------------------------------------------------------------------
186 
188 {
189  Node::dump(os,ir);
190  os << "handle: " << ir->toString(mHandle) << std::endl;
191 }
192 
194 {
195  ostringstream label;
196  label << "ET OpNode ( " << ir.toString(mHandle) << " )";
197  sOutBuild->outputString( label.str() );
198 }
199 
201 {
202  pVisitor.visitOpNode(*this);
203 }
204 
206 {
207  if(getOrder() < other.getOrder()) { return true; }
208  else if(getOrder() > other.getOrder()) { return false; }
209 
210  // execution will reach here of two NamedRef objects are being compared
211  OpNode& ref = static_cast<OpNode&>(other);
212 
213  if( getHandle() < ref.getHandle() )
214  {
215  return true;
216  } else {
217  return false;
218  }
219 
220 }
221 
223 {
224  if(getOrder() != other.getOrder()) { return false; }
225 
226  // execution reaches here if two NamedRef objects are being compared
227  OpNode& ref = static_cast<OpNode&>(other);
228 
229  if( getHandle() == ref.getHandle() )
230  {
231  return true;
232  } else {
233  return false;
234  }
235 
236 }
237 
238 //-------------------------------------------------------------------
239 // CallNode
240 //-------------------------------------------------------------------
242 {
243  Node::dump(os,ir);
244  os << "handle: " << ir->toString(mHandle) << std::endl;
245 }
246 
248 {
249  ostringstream label;
250  label << "ET CallNode ( " << ir.toString(mHandle) << " )";
251  sOutBuild->outputString( label.str() );
252 }
253 
255 {
256  pVisitor.visitCallNode(*this);
257 }
258 
260 {
261  if(getOrder() < other.getOrder()) { return true; }
262  else if(getOrder() > other.getOrder()) { return false; }
263 
264  return false;
265  // execution will reach here of two UnnamedRef objects are being compared
266  CallNode& ref = static_cast<CallNode&>(other);
267 
268  if( getHandle() < ref.getHandle() )
269  {
270  return true;
271  } else {
272  return false;
273  }
274 
275 
276 }
277 
279 {
280  if(getOrder() != other.getOrder()) { return false; }
281 
282  // execution reaches here if two UnnamedRef objects are being compared
283  CallNode& ref = static_cast<CallNode&>(other);
284 
285  if( getHandle() == ref.getHandle() )
286  {
287  return true;
288  } else {
289  return false;
290  }
291 
292 }
293 
294 
295 //-------------------------------------------------------------------
296 // MemRefNode
297 //-------------------------------------------------------------------
299 {
300  Node::dump(os,ir);
301  os << "handle: " << ir->toString(mHandle) << std::endl;
302 }
303 
305 {
306  ostringstream label;
307  label << "ET MemRefNode ( " << ir.toString(mHandle) << " )";
308  sOutBuild->outputString( label.str() );
309 }
310 
312 {
313  pVisitor.visitMemRefNode(*this);
314 }
316 {
317  if(getOrder() < other.getOrder()) { return true; }
318  else if(getOrder() > other.getOrder()) { return false; }
319 
320  // execution will reach here of two Deref objects are being compared
321  MemRefNode& ref = static_cast<MemRefNode&>(other);
322 
323  if( getHandle() < ref.getHandle() )
324  {
325  return true;
326  } else {
327  return false;
328  }
329 
330 }
331 
333 {
334  if(getOrder() != other.getOrder()) { return false; }
335 
336  MemRefNode& ref = static_cast<MemRefNode&>(other);
337 
338  if( getHandle() == ref.getHandle() )
339  {
340  return true;
341  } else {
342  return false;
343  }
344 
345 }
346 
347 //-------------------------------------------------------------------
348 // ConstSymNode
349 //-------------------------------------------------------------------
350 void ExprTree::ConstSymNode::dump(std::ostream& os,
352 {
353  Node::dump(os,ir);
354  os << "handle: " << ir->toString(mHandle) << std::endl;
355 }
356 
358 {
359  ostringstream label;
360  label << "ET ConstSymNode ( " << ir.toString(mHandle) << " )";
361  sOutBuild->outputString( label.str() );
362 }
363 
365 {
366  pVisitor.visitConstSymNode(*this);
367 }
369 {
370  if(getOrder() < other.getOrder()) { return true; }
371  else if(getOrder() > other.getOrder()) { return false; }
372 
373  // execution will reach here of two Deref objects are being compared
374  ConstSymNode& ref = static_cast<ConstSymNode&>(other);
375 
376  if( getHandle() < ref.getHandle() )
377  {
378  return true;
379  } else {
380  return false;
381  }
382 
383 }
384 
386 {
387  if(getOrder() != other.getOrder()) { return false; }
388 
389  ConstSymNode& ref = static_cast<ConstSymNode&>(other);
390 
391  if( getHandle() == ref.getHandle() )
392  {
393  return true;
394  } else {
395  return false;
396  }
397 
398 }
399 
400 //-------------------------------------------------------------------
401 // ConstValNode
402 //-------------------------------------------------------------------
403 void ExprTree::ConstValNode::dump(std::ostream& os,
405 {
406  Node::dump(os,ir);
407  os << "handle: " << ir->toString(mHandle) << std::endl;
408 }
409 
411 {
412  ostringstream label;
413  label << "ET ConstValNode ( " << ir.toString(mHandle) << " )";
414  sOutBuild->outputString( label.str() );
415 }
416 
418 {
419  pVisitor.visitConstValNode(*this);
420 }
422 {
423  bool retval = false;
424  if(getOrder() < other.getOrder()) { return true; }
425  else
426  if(getOrder() > other.getOrder()) { return false; }
427 
428  // execution will reach here of two Deref objects are being compared
429  ConstValNode& ref = static_cast<ConstValNode&>(other);
430 
431  if( getHandle() < ref.getHandle() )
432  {
433  return true;
434  } else {
435  return false;
436  }
437 
438 }
439 
441 {
442  std::cout << "this order" << getOrder();
443  std::cout << "other order" << other.getOrder();
444  if(getOrder() != other.getOrder()) { return false; }
445 std::cout<<"comparing gethandle";
446  ConstValNode& ref = static_cast<ConstValNode&>(other);
447  std::cout<<"comparing gethandle";
448  if( getHandle() == ref.getHandle() )
449  {
450  std::cout<<"comparing gethandle true";
451  return true;
452  } else {
453 std::cout<<"comparing gethandle false";
454  return false;
455  }
456 
457 }
458 
459 
460 //--------------------------------------------------------------------
461 void ExprTree::Edge::dump(std::ostream& os)
462 {
463  std::cout << "{Edge: parent: " << parent() << " child: " << child()
464  << "}" << std::endl;
465 }
466 
467 //--------------------------------------------------------------------
468 void
470 {
471  os << "{Node: "
472  << " " << mName;
473  //<< ", attr: " << mAttr;
474 }
475 
476 //--------------------------------------------------------------------
477 /*
478 void
479 ExprTree::Node::str(ostream& os){
480  if (isSym()) {
481  os << symHndl << ":";
482  }
483  if (isConst()) {
484  os << constHndl << ":";
485  }
486  if (isAttr()) {
487  os << attr << ":";
488  }
489 }
490 
491 //-----------------------------------------------------------------
492 void ExprTree::str(ostream &os){
493  PreOrderIterator nodes_iter(*this);
494  for ( ; (bool)nodes_iter; ++nodes_iter) {
495  ExprTree::Node* node =
496  dynamic_cast<ExprTree::Node*>((Tree::Node*)nodes_iter);
497  node->str(os);
498  }
499 }
500 */
501 
502 } // end of OA namespace