Where the line is
Serving different content by IP address is neutral in itself. Showing a visitor in Germany euro pricing, or defaulting a store locator to the nearest city, is ordinary personalisation.
It becomes cloaking when the different treatment is targeted at search engines rather than at users — detecting Googlebot's address ranges and serving it something a visitor would never see. That is one of the few practices that reliably earns a manual action, because it defeats the premise that a search engine can evaluate what it indexes.
The test is not the technique but the question: does a crawler see what a visitor from the same place would see? If yes, it is personalisation. If no, it is cloaking regardless of intent.