| 45 | The statement {{{if E: S}}}, where {{{E}}} is a bit stream expresion and {{{S}}} is a block of Pablo |

| 46 | statements is a parallel if construct. It is semantically equivalent to {{{S}}} alone, but omits |

| 47 | computation of {{{S}}} whenever the entire stream {{{E}}} |

| 48 | is known to be zero. |

| 49 | |

| 50 | The parallel if optimization is highly useful in block-at-a-time code, because the optimization is |

| 51 | performed block-at-a-time: for any block in which {{{E}}} is known to be 0 at all bit positions |

| 52 | in the block (and there are no incoming carries for operations within the block), the execution |

| 53 | of {{{S}}} is omitted for the block. |

| 54 | |

| 55 | == While Loops == |

| 56 | |

| 57 | Pablo supports the concept of iteration over bit streams using while loops of the form {{{while E: S}}}, where {{{E}}} is a bit stream expresion and {{{S}}} is a block of Pablo |

| 58 | statements. The loop body {{{S}}} is repeatedly executed while any 1 bits remain in the stream {{{E}}}. |

| 59 | In compilation to block-by-block processing, the iteration terminates for that block as soon as {{{E}}} becomes zero. |

| 60 | At present, the semantics of while loops are restricted as follows: a one bit can only appear |

| 61 | at any given position within a stream at most once. Programs that violate this constraint |

| 62 | will produce undefined results. |