@@ -2311,43 +2311,32 @@ bool PhyRegsLocalRA::findFreeSingleReg(int regIdx, G4_SubReg_Align subalign, int
23112311 found = true ;
23122312 }
23132313 }
2314- else if (subalign == Eight_Word || subalign == Four_Word)
2314+ else
23152315 {
2316- for (int j = 0 ; j < (NUM_WORDS_PER_GRF - size + 1 ) && found == false ; j += 4 )
2316+ // ToDo: check if dynamic step size has compile time impact
2317+ int step = 1 ;
2318+ int upBound = NUM_WORDS_PER_GRF - size + 1 ;
2319+ switch (subalign)
23172320 {
2318- if (isWordBusy (regIdx, j, size) == false )
2319- {
2320- subregnum = j;
2321- found = true ;
2322- }
2321+ case Eight_Word: step = 8 ; break ;
2322+ case Four_Word: step = 4 ; break ;
2323+ case Even_Word: step = 2 ; break ;
2324+ case Any:
2325+ upBound = NUM_WORDS_PER_GRF - size; // FIXME, why not the last word
2326+ step = 1 ; break ;
2327+ default :
2328+ assert (" unexpected alignment" );
23232329 }
2324- }
2325- else if (subalign == Even_Word)
2326- {
2327- for (int j = 0 ; j < (NUM_WORDS_PER_GRF - size + 1 ) && found == false ; j += 2 )
2330+ for (int j = 0 ; j < upBound; j += step)
23282331 {
2329- if (isWordBusy (regIdx, j, size) == false )
2330- {
2331- subregnum = j;
2332- found = true ;
2333- }
2334- }
2335- }
2336- else if (subalign == Any)
2337- {
2338- for (int j = 0 ; j < (NUM_WORDS_PER_GRF - size) && found == false ; j++)
2339- {
2340- if (isWordBusy (regIdx, j, size) == false )
2332+ if (!isWordBusy (regIdx, j, size))
23412333 {
23422334 subregnum = j;
23432335 found = true ;
2336+ break ;
23442337 }
23452338 }
23462339 }
2347- else
2348- {
2349- ASSERT_USER (false , " Dont know how to allocate this sub-alignment" );
2350- }
23512340
23522341 if (found)
23532342 {
0 commit comments