Lines Matching refs:clgs

378 static void flushEvents ( ClgState* clgs )
390 if (!clgs->seen_before) {
393 for(i=0; i<clgs->events_used; i++) {
394 ev = &clgs->events[i];
433 for(i = 0; i < clgs->events_used; i = inew) {
442 tl_assert(i >= 0 && i < clgs->events_used);
444 ev = &clgs->events[i];
445 ev2 = ( i < clgs->events_used-1 ? &clgs->events[i+1] : NULL );
446 ev3 = ( i < clgs->events_used-2 ? &clgs->events[i+2] : NULL );
594 addStmtToIRSB( clgs->sbOut, IRStmt_Dirty(di) );
597 clgs->events_used = 0;
600 static void addEvent_Ir ( ClgState* clgs, InstrInfo* inode )
603 tl_assert(clgs->seen_before || (inode->eventset == 0));
606 if (clgs->events_used == N_EVENTS)
607 flushEvents(clgs);
608 tl_assert(clgs->events_used >= 0 && clgs->events_used < N_EVENTS);
609 evt = &clgs->events[clgs->events_used];
613 clgs->events_used++;
617 void addEvent_Dr ( ClgState* clgs, InstrInfo* inode, Int datasize, IRAtom* ea )
625 if (clgs->events_used == N_EVENTS)
626 flushEvents(clgs);
627 tl_assert(clgs->events_used >= 0 && clgs->events_used < N_EVENTS);
628 evt = &clgs->events[clgs->events_used];
634 clgs->events_used++;
638 void addEvent_Dw ( ClgState* clgs, InstrInfo* inode, Int datasize, IRAtom* ea )
648 lastEvt = &clgs->events[clgs->events_used-1];
649 if (clgs->events_used > 0
660 if (clgs->events_used == N_EVENTS)
661 flushEvents(clgs);
662 tl_assert(clgs->events_used >= 0 && clgs->events_used < N_EVENTS);
663 evt = &clgs->events[clgs->events_used];
669 clgs->events_used++;
673 void addEvent_D_guarded ( ClgState* clgs, InstrInfo* inode,
690 tl_assert(clgs->events_used >= 0);
691 flushEvents(clgs);
692 tl_assert(clgs->events_used == 0);
713 addStmtToIRSB( clgs->sbOut, IRStmt_Dirty(di) );
717 void addEvent_Bc ( ClgState* clgs, InstrInfo* inode, IRAtom* guard )
721 tl_assert(typeOfIRExpr(clgs->sbOut->tyenv, guard)
725 if (clgs->events_used == N_EVENTS)
726 flushEvents(clgs);
727 tl_assert(clgs->events_used >= 0 && clgs->events_used < N_EVENTS);
728 evt = &clgs->events[clgs->events_used];
733 clgs->events_used++;
737 void addEvent_Bi ( ClgState* clgs, InstrInfo* inode, IRAtom* whereTo )
741 tl_assert(typeOfIRExpr(clgs->sbOut->tyenv, whereTo)
745 if (clgs->events_used == N_EVENTS)
746 flushEvents(clgs);
747 tl_assert(clgs->events_used >= 0 && clgs->events_used < N_EVENTS);
748 evt = &clgs->events[clgs->events_used];
753 clgs->events_used++;
757 void addEvent_G ( ClgState* clgs, InstrInfo* inode )
762 if (clgs->events_used == N_EVENTS)
763 flushEvents(clgs);
764 tl_assert(clgs->events_used >= 0 && clgs->events_used < N_EVENTS);
765 evt = &clgs->events[clgs->events_used];
769 clgs->events_used++;
779 InstrInfo* next_InstrInfo ( ClgState* clgs, UInt instr_size )
782 tl_assert(clgs->ii_index >= 0);
783 tl_assert(clgs->ii_index < clgs->bb->instr_count);
784 ii = &clgs->bb->instr[ clgs->ii_index ];
786 if (clgs->seen_before) {
787 CLG_ASSERT(ii->instr_offset == clgs->instr_offset);
791 ii->instr_offset = clgs->instr_offset;
797 clgs->ii_index++;
798 clgs->instr_offset += instr_size;
806 UInt update_cost_offsets( ClgState* clgs )
812 CLG_ASSERT(clgs->bb->instr_count == clgs->ii_index);
813 for(i=0; i<clgs->ii_index; i++) {
814 ii = &clgs->bb->instr[i];
815 if (clgs->seen_before) {
938 void addBBSetupCall(ClgState* clgs)
943 arg1 = mkIRExpr_HWord( (HWord)clgs->bb );
948 addStmtToIRSB( clgs->sbOut, IRStmt_Dirty(di) );
964 ClgState clgs;
983 clgs.sbOut = deepCopyIRSBExceptStmts(sbIn);
988 addStmtToIRSB( clgs.sbOut, sbIn->stmts[i] );
1007 clgs.bb = CLG_(get_bb)(origAddr, sbIn, &(clgs.seen_before));
1009 addBBSetupCall(&clgs);
1012 clgs.events_used = 0;
1013 clgs.ii_index = 0;
1014 clgs.instr_offset = 0;
1032 CLG_ASSERT(clgs.instr_offset == cia - origAddr);
1044 curr_inode = next_InstrInfo (&clgs, isize);
1046 addEvent_Ir( &clgs, curr_inode );
1056 addEvent_Dr( &clgs, curr_inode,
1065 addEvent_Dw( &clgs, curr_inode,
1076 addEvent_D_guarded( &clgs, curr_inode,
1089 addEvent_D_guarded( &clgs, curr_inode,
1110 addEvent_Dr( &clgs, curr_inode, dataSize, d->mAddr );
1112 addEvent_Dw( &clgs, curr_inode, dataSize, d->mAddr );
1133 addEvent_Dr( &clgs, curr_inode, dataSize, cas->addr );
1134 addEvent_Dw( &clgs, curr_inode, dataSize, cas->addr );
1135 addEvent_G( &clgs, curr_inode );
1144 addEvent_Dr( &clgs, curr_inode,
1147 flushEvents( &clgs );
1151 addEvent_Dw( &clgs, curr_inode,
1158 addEvent_G( &clgs, curr_inode );
1180 if (cJumps+1 == clgs.bb->cjmp_count)
1181 inverted = clgs.bb->cjmp_inverted;
1197 IRTemp guard1 = newIRTemp(clgs.sbOut->tyenv, Ity_I1);
1198 IRTemp guardW = newIRTemp(clgs.sbOut->tyenv, tyW);
1199 IRTemp guard = newIRTemp(clgs.sbOut->tyenv, tyW);
1204 addStmtToIRSB( clgs.sbOut,
1206 addStmtToIRSB( clgs.sbOut,
1212 clgs.sbOut,
1219 addEvent_Bc( &clgs, curr_inode, IRExpr_RdTmp(guard) );
1224 flushEvents( &clgs );
1226 CLG_ASSERT(clgs.ii_index>0);
1227 if (!clgs.seen_before) {
1240 clgs.bb->jmp[cJumps].instr = clgs.ii_index-1;
1241 clgs.bb->jmp[cJumps].jmpkind = jk;
1248 addConstMemStoreStmt( clgs.sbOut,
1262 addStmtToIRSB( clgs.sbOut, st );
1281 addEvent_Bi( &clgs, curr_inode, sbIn->next );
1292 flushEvents( &clgs );
1301 if (clgs.bb->cjmp_inverted) jmps_passed--;
1302 addConstMemStoreStmt( clgs.sbOut,
1306 CLG_ASSERT(clgs.bb->cjmp_count == cJumps);
1307 CLG_ASSERT(clgs.bb->instr_count == clgs.ii_index);
1319 origAddr + clgs.instr_offset))
1322 clgs.bb->jmp[cJumps].jmpkind = jk;
1325 clgs.bb->jmp[cJumps].instr = clgs.ii_index-1;
1329 if (clgs.bb->cjmp_inverted) {
1333 jk = clgs.bb->jmp[cJumps].jmpkind;
1334 clgs.bb->jmp[cJumps].jmpkind = clgs.bb->jmp[cJumps-1].jmpkind;
1335 clgs.bb->jmp[cJumps-1].jmpkind = jk;
1336 instr = clgs.bb->jmp[cJumps].instr;
1337 clgs.bb->jmp[cJumps].instr = clgs.bb->jmp[cJumps-1].instr;
1338 clgs.bb->jmp[cJumps-1].instr = instr;
1341 if (clgs.seen_before) {
1342 CLG_ASSERT(clgs.bb->cost_count == update_cost_offsets(&clgs));
1343 CLG_ASSERT(clgs.bb->instr_len == clgs.instr_offset);
1346 clgs.bb->cost_count = update_cost_offsets(&clgs);
1347 clgs.bb->instr_len = clgs.instr_offset;
1351 origAddr, clgs.bb->instr_len,
1352 clgs.bb->cjmp_count, clgs.bb->cost_count);
1356 CLG_DEBUG(3, "%u ", clgs.bb->jmp[i].instr);
1358 clgs.bb->cjmp_inverted ? "yes":"no");
1361 return clgs.sbOut;