The Spaniard beat Taylor Fritz in a fifth set tie-breaker to keep his hopes of a calendar Grand Slam alive.
He'll face Nick Kyrgios is the last-four.
The controversial Australian beat Chile's Cristian Garin in straight sets - a day after an allegation of common assault emerged against him in his home country.
Ons Jabeur aims to become the first Arabic player to reach a Grand Slam final later.
The Tunisian number three seed faces Tatjana Maria, who only gave birth to her second child last year.
That's followed on Centre Court by 2019 champion Simona Halep against Elena Rybakina.
Romanian Halep is yet to drop a set at the All-England club this year, while Rybakina is the first player from Kazakhstan to play in a Grand Slam semi.