Stefanos Tsitsipas clinched his first win over Rafael Nadal to book his place in Sunday's Madrid Open final against Novak Djokovic.
World number nine Tsitsipas, whose 27 match wins this year is more than any other player on the ATP Tour, showed no nerves to defeat the five-time champion 6-4 2-6 6-3 in a thriller.
Djokovic secured his first final appearance since winning the Australian Open at the start of the year by beating Dominic Thiem 7-6 (2) 7-6 (4).
Nadal, 32, saved three match points in the final game against Tsitsipas, who is 12 years younger, but was denied his chance of reaching the tournament's final for a ninth time.
Tsitsipas twice lost his serve in the opening set, but broke Nadal three times on his way to edging it after 58 minutes.
Nadal responded by taking his first two service games in the second set without dropping a point and he broke Tsitsipas in the sixth and eighth games to seal it in 36 minutes.
The deciding set went with serve until Tsitsipas broke Nadal in the fifth game. The Greek number one held and then won on the Spaniard's serve again in the seventh.
Nadal pulled it back to 5-3 and stubbornly refused to surrender, saving three match points on Tsitsipas's serve before his resistance was broken.
Djokovic rode an early storm in each set to overcome fifth-seeded Austrian Thiem and reach his third Madrid Open final.
The world number one overcame fifth seed Thiem in a physical baseline battle in two hours and 22 minutes.
Thiem, who beat Roger Federer in the last eight, let slip 4-2 leads in both sets and the Serbian's defence was water-tight in the tie-breaks, prompting Thiem to make unforced errors.
Djokovic double-faulted as he served for the match at 6-5 in the second set, but recovered instantly to take control of the tie-break and set up a showdown with Tsitsipas.