A rampant Rafael Nadal turned on the style to beat old rival Novak Djokovic 7-6(4), 6-3 on Saturday and reach his first Italian Open final since 2014.
The top-seeded Spaniard will face defending champion Alexander Zverev who overcame fourth seed Marin Cilic of Croatia 7-6(13), 7-5 in the other semi-final.
The 21-year-old German, who won the Madrid Open last week, is the in-form player on the ATP Tour going into the French Open, chalking up his 13th win in a row to reach Sunday's final.
Nadal's clash with Djokovic, an open-era record 51st meeting between the two, was a thriller, with former world number one Djokovic producing his best performance since returning from a long-term elbow injury.
"Playing against him is always a big challenge," Nadal said. "He played well, and it's always the same against him. When you go down a little bit in level, he's always there and you are in big trouble."
Djokovic made the stronger start as Nadal struggled to get his first serves in, the Spaniard coughing up two break points in the opening game which his opponent squandered.
Nadal soon pounced however, breaking Djokovic to go 4-2 up before the Serb rode his forehand to a stunning recovery.
Djokovic, a four-times champion in Rome, was helped by a fortunate touch off the net cord that gave him two break points, and he converted for 5-4 before holding serve to draw level.
Nadal started the tiebreak as he began the match, a poor forehand volley handing Djokovic the initiative, but the Spaniard won the next two points on his opponent's serve to retake control.
Djokovic clawed back to 3-3 but cracked after an unlucky touch off the tape put Nadal 6-4 up and the Spaniard wrapped up the set in 71 minutes.
Nadal carried his momentum into the second set, winning 10 of 11 points in a blur of vicious swerving forehands and clubbed backhands that brought him an early break and a 2-1 lead in the decider.
Djokovic still showed an appetite to fight back, forcing Nadal to three deuces in the eighth game of the second set before the Spaniard carved out a hold.
That failure ended the Serb's resistance and Nadal won in style on his opponent's serve, striking a punishing forehand down the line to seal victory.
Cilic proved a tough opponent for Zverev, going toe-to-toe with the youngster in a tiebreak lasting 20 minutes before the German ground down the wily 29-year-old to take the opener.
Second seed Zverev was still buzzing from going in front and immediately paid a heavy price as Cilic pounced to grab an early break.
But the German displayed nerves of steel, breaking the big-serving Croat to draw level before breaking him again to seal victory in just over two hours.
Halep faces Svitolina again in Rome final after beating Sharapova
World number one Simona Halep will face Elina Svitolina in a repeat of last year's Italian Open final after recovering from a set down to beat Russian Maria Sharapova 4-6, 6-1, 6-4 in Rome on Saturday.
Defending champion Svitolina put in a clinical performance earlier in the day to beat unseeded Estonian Anett Kontaveit 6-4, 6-3 in the other semi-final.
Halep and Sharapova both made nervy starts, with neither able to hold serve until the seventh game, when the Russian finally managed to get her nose in front.
That proved to be the only hold of the first set, with Sharapova relinquishing her serve once more either side of breaking Halep to clinch the opener.
The Romanian came out stronger at the start of the second set, breaking Sharapova in the first game before holding service for the first time in the match to go 2-0 up.
She saved break points to extend her lead to 3-1 and then 5-1 before levelling the match.
Both players exchanged breaks again at the start of the decider, before Halep held to go 2-1 up.
Sharapova surrendered a 30-0 lead on serve to allow Halep to extend her advantage to 3-1 before breaking back to reduce the deficit, but the Russian, who made 42 unforced errors and nine double faults, was unable to find a rhythm.
The pair exchanged breaks again before Sharapova finally held to tie things up at 4-4.
But Halep chose the right moment to turn in her most impressive service game, holding to love before breaking Sharapova for the 11th time to reach the final.
Earlier in the day, Ukrainian fourth seed Svitolina struck at key moments against Kontaveit in a display that bodes well for her chances at the French Open later this month.
Twenty-two-year-old Kontaveit offered stiff resistance, hitting 24 winners to Svitolina's 18, but her opponent converted four of her five break-point opportunities while making seven fewer unforced errors in a contest of tight margins.
Svitolina started well, breaking early in the first set to go 2-0 up, but Kontaveit held her nerve to take the next three games and edge in front.
Svitolina responded well, though, and took the opener.
With Svitolina's speed proving decisive, Kontaveit was forced to mix things up, but the baseliner's touch deserted her at times in the second set, allowing the speedy Ukrainian to run down a couple of poorly disguised drop shots.
The world number four took an early break in the second set for a 2-1 lead, and went on to take the match on her opponent's serve, converting her second match point with a deep forehand that left Kontaveit flailing.