1. A method of operating a data processing system which includes a programmable processing stage that executes sets of instructions to perform processing operations, and in which plural execution threads may each execute a same set of instructions; the method comprising: for a program comprising a set of instructions for execution by the programmable processing stage of the data processing system: identifying by processing circuitry a sequence of one or more instructions in the set of instructions that would produce the same result for plural execution threads were those plural execution threads each to execute the sequence of one or more instructions using the same input data; and associating by processing circuitry with at least one instruction in the identified sequence of one or more instructions an indication that the instruction belongs to a sequence of one or more instructions that would produce the same result for plural execution threads were those plural threads each to execute the sequence of one or more instructions using the same input data; the method further comprising: the programmable processing stage: receiving the set of instructions for execution by the programmable processing stage; and executing the set of instructions for plural execution threads; the executing the set of instructions for an execution thread comprising: determining whether an instruction of the set of instructions has associated with it an indication that it belongs to a sequence of one or more instructions that would produce the same result for plural threads were those plural threads each to execute the sequence of one or more instructions using the same input data; and when it is determined that an instruction has associated with it an indication that it belongs to a sequence of one or more instructions that would produce the same result for plural threads were those plural threads each to execute the sequence of one or more instructions using the same input data: determining whether a result produced by an earlier execution by a previous execution thread of a section of the sequence of instructions to which the instruction belongs, and that used the same input data as the input data which is intended to be used when executing the sequence of instructions for the current execution thread, is stored in memory; and when it is determined that a result produced by an earlier execution of a section of the sequence of instructions, and that used the same input data as the input data which is intended be used when executing the sequence of instructions for the current execution thread, is stored in memory: not executing the section of the sequence of instructions for which the result is stored for the current thread, and instead retrieving the stored result produced by the earlier execution of that section of the sequence of instructions and continuing execution of the set of instructions for the current thread after the section of the sequence of instructions for which the result is stored using the retrieved stored result.