Loop splitting

It attempts to simplify a loop or eliminate dependencies by breaking it into multiple loops which have the same bodies but iterate over different contiguous portions of the index range.A compiler can take advantage of this by unwinding (or "peeling") the first iteration from the loop.After peeling the first iteration, the code would look like this: This equivalent form eliminates the need for the variable p inside the loop body.[1] Apparently the term "peeling" was for the first time used by Cannings, Thompson and Skolnick[2] in their 1976 paper on computational models for (human) inheritance.There the term was used to denote a method for collapsing phenotypic information onto parents.
compiler optimizationunwindingKennedy, KenAcademic PressMorgan Kaufmann PublishersElsevierCompiler optimizationsPeephole optimizationLocal value numberingLoop nest optimizationLoop unrollingLoop unswitchingSoftware pipeliningStrength reductionData-flowanalysisAvailable expressionCommon subexpression eliminationConstant foldingDead storeInduction variable recognition and eliminationLive-variable analysisUpwards exposed usesUse-define chainReaching definitionsGlobal value numberingSparse conditional constant propagationCode generationInstruction schedulingInstruction selectionRegister allocationRematerializationDeforestationTail-call eliminationInterprocedural optimizationBounds-checking eliminationCompile-time function executionDead-code eliminationExpression templatesInline expansionJump threadingPartial evaluationProfile-guided optimizationAlias analysisArray-access analysisControl-flow analysisData-flow analysisDependence analysisEscape analysisPointer analysisShape analysisValue range analysis