The `math.clampf` op is semantically incorrect when compared to both the CUDA reference implementation and the SPIRV spec, both of which have a clamp op. - Fix the definition of `math.clampf` to agree with CUDA and SPIRV - Explicitly state when `math.clampf` produces `ub.poison` - Update the ExpandOps pass to reflect the corrected semantics