I see what you mean, and have two questions now. Do we need both texkill -> SpvOpKill and discard -> SpvOpKill? For example, do we convert sm1 -> spirv directly? And second questions, what happens to texkill/discard arguments when translating to spirv?
We don't currently have d3dbc->spirv translation upstream, but @zfigura is working on adding that. I imagine that eventually we'll introduce a transformation pass to replace TEXKILL with an equivalent DISCARD, so that backends only need to handle DISCARD.
As for the differences between (tex)kill and discard, shader_glsl_texkill() in wined3d is probably a decent reference. Note that the behaviour is slightly different between shader model 1 and shader model 2+ as well. There's also a slight difference in the allowed source registers between ps 1.4 and earlier versions, though that mostly only matters when generating bytecode.
Note that the HLSL clip() intrinsic also exists.