This is needed for OpenCL Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>master
| @@ -253,6 +253,14 @@ nir_select(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y, nir_ssa_def *s) | |||
| return nir_bcsel(b, nir_ieq(b, s, nir_imm_intN_t(b, 0, s->bit_size)), x, y); | |||
| } | |||
| static inline nir_ssa_def * | |||
| nir_clz_u(nir_builder *b, nir_ssa_def *a) | |||
| { | |||
| nir_ssa_def *val; | |||
| val = nir_isub(b, nir_imm_intN_t(b, a->bit_size - 1, 32), nir_ufind_msb(b, a)); | |||
| return nir_u2u(b, val, a->bit_size); | |||
| } | |||
| #ifdef __cplusplus | |||
| } | |||
| #endif | |||
| @@ -185,6 +185,8 @@ handle_special(struct vtn_builder *b, enum OpenCLstd_Entrypoints opcode, | |||
| return nir_rotate(nb, srcs[0], srcs[1]); | |||
| case OpenCLstd_Smoothstep: | |||
| return nir_smoothstep(nb, srcs[0], srcs[1], srcs[2]); | |||
| case OpenCLstd_Clz: | |||
| return nir_clz_u(nb, srcs[0]); | |||
| case OpenCLstd_Select: | |||
| return nir_select(nb, srcs[0], srcs[1], srcs[2]); | |||
| case OpenCLstd_Step: | |||