A computer-implemented method for accessing predicate information associated with a thread group, the method comprising: receiving a first instruction for execution by the thread group, wherein the first instruction specifies a first source operand identifier, an operation, and a first destination predicate identifier; for each thread in the thread group, computing a predicate result by applying the operation to data in a first source operand identified by the first source operand identifier; and storing the predicate result in a first predicate register associated with the thread and identified by the first destination predicate identifier, wherein the first source operand and the first predicate register are different for each thread in the thread group; and receiving a guarded instruction for execution by the thread group, wherein the first guarded instruction specifies the first destination predicate identifier, wherein the guarded instruction comprises a minimum/maximum instruction that specifies a third source operand identifier and a fourth source operand identifier, and further comprising the step of, for each thread in the thread group, performing, depending on the first predicate register identified by the first destination predicate identifier, a minimum operation or a maximum operation on data in a third source operand identified by the third source operand identifier or data in a fourth source operand identified by the fourth source operand identifier. receiving a first instruction for execution by the thread group, wherein the first instruction specifies a first source operand identifier, an operation, and a first destination predicate identifier; for each thread in the thread group, computing a predicate result by applying the operation to data in a first source operand identified by the first source operand identifier; and storing the predicate result in a first predicate register associated with the thread and identified by the first destination predicate identifier, wherein the first source operand and the first predicate register are different for each thread in the thread group; and computing a predicate result by applying the operation to data in a first source operand identified by the first source operand identifier; and storing the predicate result in a first predicate register associated with the thread and identified by the first destination predicate identifier, wherein the first source operand and the first predicate register are different for each thread in the thread group; and receiving a guarded instruction for execution by the thread group, wherein the first guarded instruction specifies the first destination predicate identifier, wherein the guarded instruction comprises a minimum/maximum instruction that specifies a third source operand identifier and a fourth source operand identifier, and further comprising the step of, for each thread in the thread group, performing, depending on the first predicate register identified by the first destination predicate identifier, a minimum operation or a maximum operation on data in a third source operand identified by the third source operand identifier or data in a fourth source operand identified by the fourth source operand identifier.