While pipelining can in theory increase performance over an unpipelined core by a factor of the number of stages (assuming the clock frequency also scales with the number of stages), in reality, most code does not allow for ideal execution.
Pipelining can  increase performance over an unpipelined core in theory. It must factor the number of stages. Assuming the clock frequency also scales with the number of stages is an example. In reality, most code does not allow for this ideal execution.