Nineteen-year-old Bianca Andreescu will face Williams in the final of the Rogers Cup.
The unseeded home favourite beat American Sofia Kenin in two sets, 6-4 7-6.
She's spent much of the past year out with a shoulder injury but gained attention with her Indian Wells triumph in March.

Bencic tames Noskova to win Tokyo title
We need to find answers to stop Liverpool slide, says Slot
Rohit and Kohli bid likely farewell to Australia as winners
Al Wahda defeats Al Dhafra, heads to quarter-finals of UAE President's Cup
