Defending champion Carlos Alcaraz came from behind to beat Jannik Sinner 1-6 6-3 6-2 on Saturday to reach the Indian Wells final and end the Italian's winning streak at 16 matches.
Australian Open champion Sinner has been the hottest player on tour this year and looked poised to run away with the match when the Spaniard's forehand went long to end the 34-minute opening set, which was halted by a three-hour rain delay.
Alcaraz would finally break serve with a powerful forehand that set up a put-away volley for a 3-1 second set lead and hit a drop shot even the speedy Sinner did not try to race down to force a decider between the young rivals.
With Sinner serving in the third set, the Italian dove to keep a ball in play on break point near the net, his hands scraping along the gritty Indian Wells hard court.
Alcaraz' athletic volley secured the break and Sinner appeared to be bothered by his left hand after the exchange.
Alcaraz went up a double break and 4-1 on a forehand wide by a suddenly error-prone Sinner and sealed the win with a crosscourt forehand winner to keep Sinner from taking his world number two ranking.
"I stayed strong mentally and that's very important," Alcaraz said.
"I had to run more, defend better than I did in the first set. Put more balls in. Stay strong on the court."
Alcaraz will face either American Tommy Paul or fourth seed Daniil Medvedev in Sunday's final.