Basic Block
A basic block is a maximal sequence of consecutive program instructions with a single entry point and a single exit point. Within a basic block, control flows linearly from the first instruction to the last without any branches or jumps except possibly at the final instruction. The basic block is the atomic unit of control flow in compiler optimization: control flow graphs are built from basic blocks as nodes, and most analyses and transformations operate on whole blocks rather than individual instructions.
The partition of a program into basic blocks is not merely a technical step in compiler construction. It is an abstraction that reveals the program's decision structure. A basic block represents a region of the program where computation proceeds deterministically, where the outcome of each instruction is known and sequential. The boundaries between basic blocks are the boundaries between certainty and choice — between computation that must happen and computation that might happen.
In instruction scheduling, the basic block is both a constraint and an opportunity. Instructions within a block can be freely reordered subject only to data dependencies; instructions across block boundaries cannot be reordered without changing control semantics. The basic block is therefore the granularity at which scheduling freedom meets control conservatism.
See also: Control Flow Graph, Compiler, Instruction Scheduling, Optimization, Data Flow Analysis, Static Single Assignment, Intermediate Representation