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 assigning 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 such that the predicated instructions can be executed on a processor that does not include any program counter.