Rafael Nadal was beaten in straight sets in the quarter-final of the Italian Open but Novak Djokovic is through to the semi-finals.
The nine-time champion lost to Argentina's Diego Schwartzman for the first time in his career, going down 6-2 7-5 as he struggled with his serve.
Djokovic also dropped a set and needed more than two hours to defeat 97th-ranked German Dominik Koepfer 6-3 4-6 6-3.
The Serb's temper was on display again.
He smashed a racquet after losing a service game, two weeks after being defaulted from the US Open for hitting a line judge with a ball.
"It's not the first nor the last racquet I'll break in my career," he said.
"That's how I guess I release sometimes my anger. I am working on my mental and emotional health as much as I'm working on my physical health."
Djokovic will play Norway's Casper Ruud who earlier battled past Italian fourth seed Matteo Berrettini 4-6 6-3 7-6 (7-5).
Meanwhile Schwartzman, who had never beaten a top five player, broke Nadal's serve five times in an impressive performance and will play Canadian Denis Shapovalov, who beat Grigor Dimitrov 6-2 3-6 6-2 for his 100th tour-level win.
In the women's draw, top seed Simona Halep will play Spaniard Garbine Muguruza in the semi-final, a battle of former French Open champions before Roland Garros begins on Monday.
Halep went through after Kazakhstan's Yulia Putintseva retired injured while trailing 6-2 2-0, while Muguruza beat US Open finalist Victoria Azarenka 3-6 6-3 6-4.
Double Rome champion and fourth seed Elina Svitolina, who decided not to play the US Open to prepare for the clay court season, was hammered 6-3 6-0 by Czech Marketa Vondrousova.
Vondrousova will play compatriot Karolina Pliskova or Belgium's Elise Mertens in the other semi-final.