Sixth seed Caroline Wozniacki beat Karolina Pliskova 7-5 6-7 (3-7) 6-4 in a rain-hit match at the Rogers Cup for her first win over a world number one.
Wozniacki was 5-1 down in the first set and 4-2 down in the third but recovered to beat the Czech after three hours.
The Dane, 27, will play American Sloane Stephens in the semi-finals in Toronto.
Simona Halep faces Caroline Garcia and Garbine Muguruza plays Elina Svitolina in the remaining quarter-final matches.
“Almost every tournament I’ve played this year there has been a rain delay, so at this point I just have to laugh because I feel like it is following me,” said Wozniacki.
“Every time this year when it has been raining I’ve had a great tournament, so I thought this must be luck.”
She next faces Stephens, who saved three match points in the third set to beat Czech Lucie Safarova 6-2 1-6 7-5 in their quarter-final.
The remaining two quarter-finals will be decided on Saturday. Wimbledon champion Muguruza is one set up against Svitolina of Ukraine, winning the opener 6-4, while number two seed Halep has yet to start her match against France’s Garcia.