[llvm-commits] CVS: llvm/lib/Reoptimizer/LightWtProfiling/Trigger/scheduler.cpp

Anand Shukla ashukla at cs.uiuc.edu
Fri Jul 18 11:05:04 PDT 2003


Changes in directory llvm/lib/Reoptimizer/LightWtProfiling/Trigger:

scheduler.cpp added (r1.1)

---
Log message:

Major revision for runtime tracing framework

---
Diffs of the changes:

Index: llvm/lib/Reoptimizer/LightWtProfiling/Trigger/scheduler.cpp
diff -c /dev/null llvm/lib/Reoptimizer/LightWtProfiling/Trigger/scheduler.cpp:1.1
*** /dev/null	Fri Jul 18 11:04:35 2003
--- llvm/lib/Reoptimizer/LightWtProfiling/Trigger/scheduler.cpp	Fri Jul 18 11:04:25 2003
***************
*** 0 ****
--- 1,121 ----
+ #include <queue>
+ #include <iostream>
+ #include "llvm/Reoptimizer/VirtualMem.h"
+ #include "llvm/Reoptimizer/InstrUtils.h"
+ 
+ 
+ using namespace std;
+ 
+ class priority_queue_entry
+ {
+ public:
+     priority_queue_entry(uint64_t time, uint64_t where) :
+         cycle_to_process(time),
+         addr(where) {}
+     uint64_t cycle_to_process;
+     uint64_t addr;
+ };
+ 
+ 
+ bool operator<=(priority_queue_entry p1, priority_queue_entry p2)
+ {
+     return p1.cycle_to_process <= p2.cycle_to_process;
+ }
+ 
+ bool operator>=(priority_queue_entry p1, priority_queue_entry p2)
+ {
+     return operator<=(p2,p1);
+ }
+ 
+ 
+ bool operator>(priority_queue_entry p1, priority_queue_entry p2)
+ {
+     return !operator<=(p1, p2);
+ }
+ 
+ bool operator<(priority_queue_entry p1, priority_queue_entry p2)
+ {
+     return !operator>=(p1, p2);
+ }
+ 
+ bool operator==(priority_queue_entry p1, priority_queue_entry p2)
+ {
+     return p1.cycle_to_process == p2.cycle_to_process;
+ }
+ 
+ bool operator!=(priority_queue_entry p1, priority_queue_entry p2)
+ {
+     return !(operator==(p1, p2));
+ }
+ 
+ class my_compare
+ {
+ public:
+   bool operator()(priority_queue_entry p1, priority_queue_entry p2)
+   {
+     return p1>p2;
+   }
+ };
+ 
+ 
+ priority_queue<priority_queue_entry, vector<priority_queue_entry>, my_compare> pqueue;
+ extern uint64_t llvm_interval_counter;
+ extern VirtualMem* vm;
+ extern "C" void llvm_first_trigger();
+ 
+ void repair_trace(uint64_t){}
+ 
+ extern "C" int do_timer_interval()
+ {
+   //  std::cerr<<"examining queue of size  "<< pqueue.size()<<std::endl;
+     while(1)
+     {
+       //       std::cerr << "count = " << llvm_interval_counter << std::endl;
+ 	if(pqueue.size())
+ 	{
+           //	    std::cerr << "size  " << pqueue.size() << std::endl;
+ 	    const priority_queue_entry p = pqueue.top();
+ 	    if(p.cycle_to_process <= llvm_interval_counter)
+ 	    {
+ 	      //std::cerr << "Found one at : 0x" << hex << p.addr << dec <<  std::endl;
+ 	      //the trace needs to be restored to the zero state
+               vm->writeInstToVM(p.addr, 
+ 				getCallInstr((uint64_t)&llvm_first_trigger,  p.addr));
+               doFlush(p.addr-16, p.addr+16);
+ 	      pqueue.pop();
+ 	    }
+ 	    else 
+ 	      break;
+ 	}
+         else
+             break;
+     }
+     return 0;
+ }
+ 
+ extern "C" void mask_interrupt();
+ extern "C" void unmask_interrupt();
+ 
+ int insert_address_at(uint64_t time, uint64_t addr)
+ {
+   // mask_interrupt();
+   //printf("\t\t\t inserting time = %lu\n", time);
+     pqueue.push(priority_queue_entry(time,addr));
+     //printf("\t\t\t size = %lu\n", pqueue.size());
+     //  unmask_interrupt();
+     return 0;
+ }
+ 
+ //uint64_t elements[] = { 1,5,8,2,4,6,3,9,0,7 };
+ //
+ //int main()
+ //{
+ //  for( int i = 0; i < 10; i++)
+ //  {
+ //    insert_address_at(elements[i], (uint64_t)&elements[i]);
+ //  }
+ //  
+ //  llvm_interval_counter = 10;
+ //  
+ //  do_timer_interval();
+ //}





More information about the llvm-commits mailing list