[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