Loop fission er en compiler-optimering , der opdeler en loop i et program i flere loops, som hver har de samme indeksgrænser, men kun indeholder en del af kroppen af den originale loop .
For eksempel følgende kode :
int i , a [ 100 ], b [ 100 ]; for ( i = 0 ; i < 100 ; i ++ ) { a [ i ] = 1 ; b [ i ] = 2 ; }som et resultat af at anvende optimeringen konverteres til:
int i , a [ 100 ], b [ 100 ]; for ( i = 0 ; i < 100 ; i ++ ) { a [ i ] = 1 ; } for ( i = 0 ; i < 100 ; i ++ ) { b [ i ] = 2 ; }Hovedformålet med sådanne optimeringer er at reducere antallet af sløjfeoperationer. Her er den vigtigste optimeringsmetode at opdele løkken i flere løkker, for hver af hvilke antallet af instruktioner, der kræves for at pakke løkkelegemet, er strengt taget mindre end antallet af instruktioner for den originale løkke.
Distribution er nyttig til at isolere datasløjfeafhængigheder som forberedelse til sløjfevektorisering , til sløjfepermutationer eller til at forbedre lokaliteten ved at reducere den samlede mængde data, der refereres til i hver sløjfe.