No, using functions is not any slower, in fact it is partly why HLSL is so useful..it was designed with code reuse in mind.
You cant convert implicitly to larger variable type.. like float 2 to float 3 etc.
Always start with larger variable types and convert down.. or make a 'dummy' float4 out of a float 2 like .. float4 fake(f2.x,f2.y,0,0)
I'm sure you can get more expert advice on this subject elsewhere.