void ChangeLocationForm::resize(const ArsRectangle& screenBounds) { ArsRectangle rect(2, screenBounds.height()-78, screenBounds.width()-4, 76); setBounds(rect); locationField_.anchor(screenBounds, anchorRightEdge, 12, anchorNot, 0); FormObject gsi(*this); gsi.attachByIndex(getGraffitiStateIndex()); gsi.anchor(screenBounds, anchorLeftEdge, 16, anchorNot, 0); update(); }
template <unsigned int dim> void test_skin_iterator(Box<3,size_t> & bx1, Box<3,size_t> & bx2, grid_sm<3,void> & g_sm,size_t (& bc)[dim] , size_t vol_test) { grid_cpu<3,aggregate<size_t>> gtest(g_sm.getSize()); gtest.setMemory(); auto it = gtest.getSubIterator(0); while (it.isNext()) { auto key = it.get(); gtest.get<0>(key) = 0; ++it; } size_t count = 0; grid_skin_iterator_bc<3> gsi(g_sm,bx1,bx2,bc); while (gsi.isNext() == true) { auto key = gsi.get(); gtest.get<0>(key) += 1; count++; ++gsi; } BOOST_REQUIRE_EQUAL(count,(size_t)vol_test); bool ret = true; auto it2 = gtest.getSubIterator(0); while (it2.isNext()) { auto key = it2.get(); ret &= gtest.get<0>(key) <= 1; ++it2; } BOOST_REQUIRE_EQUAL(ret,true); }
void LIR_LocalCaching::cache_locals() { LoopList* loops = ir()->loops(); BlockList* all_blocks = ir()->code(); WordSizeList* local_name_to_offset_map = ir()->local_name_to_offset_map(); if (loops == NULL) { // collect global scan information BlockListScanInfo gsi(ir()->code()); RegisterManager* global_scan_info = gsi.info(); // just cache registers globally. LocalMappingSetter setter(cache_locals_for_blocks(all_blocks, global_scan_info)); all_blocks->iterate_forward(&setter); } else { assert(loops->length() != 0, "should be at least one loop"); int i; // collect all the blocks that are outside of the loops BlockList* non_loop_blocks = new BlockList; for (i = 0; i < all_blocks->length(); i++) { BlockBegin* b = all_blocks->at(i); if (b->loop_index() == -1 && b->next()->as_CachingChange() == NULL) { non_loop_blocks->append(b); } } RegisterManager* global_scan_info = new RegisterManager(); // scan each of the loops and the remaining blocks recording register usage // so we know what registers are free. RegisterManagerArray scan_infos(loops->length() + 1); for (i = 0; i < loops->length(); i++) { Loop* loop = loops->at(i); BlockListScanInfo lsi(loop->blocks()); scan_infos.at_put(i, lsi.info()); // accumulate the global state global_scan_info->merge(lsi.info()); } BlockListScanInfo lsi(non_loop_blocks); scan_infos.at_put(loops->length(), lsi.info()); // accumulate the global state global_scan_info->merge(lsi.info()); // use the global mapping as a guide in the rest of the register selection process. LocalMapping* global = cache_locals_for_blocks(all_blocks, global_scan_info, true); LocalMapping* pref = new LocalMapping(local_name_to_offset_map); pref->merge(global); pref->merge(_preferred); _preferred = pref; for (i = 0; i < loops->length(); i++) { if (i < LIRCacheLoopStart || (uint)i >= (uint)LIRCacheLoopStop) { continue; } Loop* loop = loops->at(i); LocalMapping* mapping = cache_locals_for_blocks(loop->blocks(), scan_infos.at(i)); LocalMappingSetter setter(mapping); loop->blocks()->iterate_forward(&setter); _preferred->merge(mapping); mapping->join(global); } LocalMapping* mapping = cache_locals_for_blocks(non_loop_blocks, scan_infos.at(loops->length())); mapping->join(global); LocalMappingSetter setter(mapping); non_loop_blocks->iterate_forward(&setter); } }