Do not use dynamic branching (if statement) in your shader, it will only slow the retail version down.
This is not strictly correct as it depends on hardware generation and the coherency of the branching and the code being branched around.
You have to think in terms of groups of threads.
If all the threads in a group take the 'if' or 'else' branch then your overhead will be minimal as the other code will not be run.
If some of the threads take one branch and some take the other then you'll end up executing both paths and the results/execution lanes get masked by the hardware to give you the correct result.
HOWEVER this can still result in a speed up if used correctly, even on DX9 hardware, if you take into account how threads are batched.
For example on a console game we had a system which used a mesh with a texture on to define a road; the road surface had bump maps etc on them and was a reasonably costly shader.
The texture itself was made up of three ares;
- solid colour where alpha = 1
- a wavey boundary area (some pixel alpha blended between 0 and 1)
- solid colour where alpha = 0
Because of this some groups of pixels had all alpha 0, some all alpha 1 and some with a mixture.
As the boundry condition was a thin section and the 'else' path was one instruction by introducing a branch on the diffuse alpha value large numbers of pixels could skip all the complicated processing and the overall effect was a large speed up.
Now, while in the OP's case I wouldn't use a branch there is no reason to avoid them completely - you just have to think about how they are going to branch and if the overhead is acceptable.