1. A computer-implemented method of compiling a program code into predicated instructions, comprising: extracting, from control flow of the program code, constraints between instructions of the program code; solving constraint problem between the instructions by determining and assigning a value to a predicate vector that satisfies the constraints to each of the instructions; and generating a predicate guard and a predicate update for each of the instructions based on the predicate vector to control sequencing of instruction execution of each of the instructions to turn the instructions into the predicated instructions that can be executed on a processor that does not include any program counter which controls sequencing of instruction execution, wherein the predicate guard and predicate update of an instruction provide sequencing information of the corresponding instruction when the corresponding instruction is executed on the processor that does not include any program counter that controls sequencing of instruction execution, wherein the predicate guard of an instruction controls whether the corresponding instruction should be executed and the predicate update of an instruction updates a predicate register bit of the processor which controls when the corresponding instruction is executed.