Here's a bit more, you can get a bit of optimizations by reusing your length calculation for the direction normalization.
float3 lightDir = (PointLightPos[i] - input.wPos);
// PER PIXEL ATTENUATION
float dist = length(lightDir);
lightDir = lightDir / (dist + 0.001); // small bias to avoid division by 0 - check to see if it's necessary for you.
Also, to avoid the following:
att *= att;
You can use the squared distance instead of a linear one, it might give you a better falloff without this instruction (and is cheaper then length).
// PER PIXEL ATTENUATION
float dist = dot(lightDir, lightDir);
lightDir /= sqrt(dist) + 0.001; // small bias to avoid division by 0 - check to see if it's necessary for you.
float att = saturate(1 - ((dist - PointLightFPRange[i]) / (PointLightRange[i] - PointLightFPRange[i])));
The sqrt that's needed might be a bit heavier but you're still not doing the full normalize code, you don't need the att*att and you get the right falloff. This is something you'd need to try and see if it works for you. The first tip however is definitely a win.
The last thing is that the shader compiler is smart, but sometimes it misses stuff. So it's best to make sure your code is layed out properly. So for example your diffuse could be this instead, which should guarantee the use of a MAD in the compiled shader rather than an ADD and MUL.
diffuseAcc = diffIntPoint * PointLightColInt[i] + diffuseAcc;
specularAcc = (pow(saturate(dot(h, normal)), MatSpecPower) * att) * PointLightColInt[i] + specularAcc;
This should maybe help a bit. Splitting multiplications based on vector count can also help, so multiply everything that is a scalar first then multiply it by the vector one, that way you don't mix the vector/scalar math together too much and the GPU has a bit of an easier time dealing with it.