1. A method comprising: performing, by a processor: determining data dependencies between instructions corresponding to at least two iterations of a loop, wherein each of the two iterations of the loop use different elements of a given input vector; generating a first control predicate vector based at least upon the data dependencies, wherein the first control predicate vector indicates: a number of elements that may be processed in parallel; and an element width to use when performing a first vector operation that uses the first control predicate vector as an operand, wherein the element width can be set to one of a plurality of values; performing the first vector operation on a plurality of elements of two or more input predicate vector operands including the first control predicate vector to generate a result predicate vector, wherein a size of the plurality of elements processed by the first vector operation is based on the element width included in the first control predicate vector; and using the result predicate vector from the first vector operation as a second control predicate vector in a second vector operation.