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.

Alcaraz stunned by Korda at Miami Open
Former All Blacks assistant McLeod named Wallabies defence coach
10-man Real Madrid edge Atletico in pulsating derby
Man City win League Cup with O'Reilly double
Bezzecchi dominates MotoGP Brazil for fourth straight victory
