A computer device, comprising: a graphics processing unit, GPU, that supports half precision storage and arithmetic in shader programs; a memory to store data and instructions; at least one processor configured to communicate with the memory; and a compiler in communication with the memory and the at least one processor, wherein the compiler is operable to: receive program code for a shader program to use with the GPU; perform at least one pass on the program code to automatically search for opportunities for precision lowering in the program code and select a set of operations within the program code that may tolerate a lower precision, wherein the search is a trained search that uses hardware parameters of the GPU in combination with a list of previously defined operations that support half precision and a list of previously defined operations sensitive to precision lowering for identifying the set of operations as supporting half precision; evaluate a risk of precision loss for lowering the precision for a computation to a half precision for each computation of a plurality of computations used by the set of operations, wherein the risk of precision loss for each computation is evaluated by comparing ranges and/or precision information for the computation to an expected range and/or precision bound for the computation; generate edited program code by rewriting the computation to the half precision in response to the risk of precision loss being below a precision loss threshold; and provide a notification with a warning for possible precision loss in response to the risk of precision loss being above the precision loss threshold. a graphics processing unit, GPU, that supports half precision storage and arithmetic in shader programs; a memory to store data and instructions; at least one processor configured to communicate with the memory; and a compiler in communication with the memory and the at least one processor, wherein the compiler is operable to: receive program code for a shader program to use with the GPU; perform at least one pass on the program code to automatically search for opportunities for precision lowering in the program code and select a set of operations within the program code that may tolerate a lower precision, wherein the search is a trained search that uses hardware parameters of the GPU in combination with a list of previously defined operations that support half precision and a list of previously defined operations sensitive to precision lowering for identifying the set of operations as supporting half precision; evaluate a risk of precision loss for lowering the precision for a computation to a half precision for each computation of a plurality of computations used by the set of operations, wherein the risk of precision loss for each computation is evaluated by comparing ranges and/or precision information for the computation to an expected range and/or precision bound for the computation; generate edited program code by rewriting the computation to the half precision in response to the risk of precision loss being below a precision loss threshold; and provide a notification with a warning for possible precision loss in response to the risk of precision loss being above the precision loss threshold. receive program code for a shader program to use with the GPU; perform at least one pass on the program code to automatically search for opportunities for precision lowering in the program code and select a set of operations within the program code that may tolerate a lower precision, wherein the search is a trained search that uses hardware parameters of the GPU in combination with a list of previously defined operations that support half precision and a list of previously defined operations sensitive to precision lowering for identifying the set of operations as supporting half precision; evaluate a risk of precision loss for lowering the precision for a computation to a half precision for each computation of a plurality of computations used by the set of operations, wherein the risk of precision loss for each computation is evaluated by comparing ranges and/or precision information for the computation to an expected range and/or precision bound for the computation; generate edited program code by rewriting the computation to the half precision in response to the risk of precision loss being below a precision loss threshold; and provide a notification with a warning for possible precision loss in response to the risk of precision loss being above the precision loss threshold.