Germany's Alexander Zverev defeated Dominic Thiem 6-3 6-4 to reach his second Madrid Open final.
Zverev, ranked two places lower than world number four Thiem, broke in the fourth game of the first set and twice more in the second.
It was a repeat of the 2018 final in the Spanish capital, which Zverev won.
Zverev, who beat five-time champion Rafa Nadal in Friday's quarter-final, will face either Casper Ruud or Matteo Berrettini in Sunday's final.
The 24-year-old started strongly and saved a break point to lead 2-1 before breaking in the following game at the fourth opportunity.
He only dropped three more points on serve as he closed out the opening set, before piling the pressure on Thiem early in the second.
Thiem lost his serve twice in the first five games, but he managed to get one break back and then held serve in a marathon game to make it 4-3.
However, Zverev twice held serve to see out the win.