dp2add is only supported in shader model 2 and up for pixel shaders, and not at all for vertex shaders.
Hmm, that's a good point, I hadn't thought of that before.
I did a brief look to see if we were using any other instructions that weren't supported on all models. It seems we are using several instructions that are missing on ps_1_* but present everywhere else: exp, rcp, rsq, max, min, frc.
We're also missing checks for a lot of sm5 (and sm4.1?) features. We should probably start implementing those at some point; it's not great that we're emitting invalid bytecode.