Dominic Thiem beat Kevin Anderson for the first time in seven attempts to reach the Madrid Open final for the second successive year.
The Austrian fifth seed won 6-4 6-2 as he continued the scintillating form that ended top seed Rafa Nadal's year-long unbeaten run on clay in the quarter-finals.
South African Anderson, seeded sixth, was playing in his first Masters 1000 semi-final but faded after a solid start.
While Thiem had a 0-6 record against Anderson, the pair had never met on clay and the longer rallies suited his heavy baseline game.
Thiem needed a single break of serve in the opening set and broke twice in the second to wrap up victory.
He will play Alexander Zverev who steamrolled Denis Shapovalov 6-4 6-1.
The second-seeded German needed just 56 minutes to dismantle the teenage Canadian, breaking serve four times in the process.