Loop fission är en kompilatoroptimering som delar upp en loop i ett program i flera loopar, som var och en har samma indexgränser, men som bara innehåller en del av den ursprungliga loopens kropp .
Till exempel följande kod :
int i , a [ 100 ], b [ 100 ]; för ( i = 0 ; i < 100 ; i ++ ) { a [ i ] = 1 ; b [ i ] = 2 ; }som ett resultat av att tillämpa optimeringen konverteras till:
int i , a [ 100 ], b [ 100 ]; för ( i = 0 ; i < 100 ; i ++ ) { a [ i ] = 1 ; } för ( i = 0 ; i < 100 ; i ++ ) { b [ i ] = 2 ; }Huvudsyftet med sådana optimeringar är att minska antalet loopoperationer. Här är den huvudsakliga optimeringsmetoden att dela slingan i flera slingor, för var och en av vilka antalet instruktioner som krävs för att packa slingkroppen är strikt mindre än antalet instruktioner för den ursprungliga slingan.
Distribution är användbar för att isolera dataloopberoenden som förberedelse för loopvektorisering , för looppermutationer eller för att förbättra lokaliteten genom att minska den totala mängden data som refereras till i varje loop.