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.

Gauff outruns Pegula to win thriller at WTA Finals
Fermin double gives LaLiga leaders Barca win at Atletico
Manchester United rescue dramatic 4-4 draw with Aston Villa
Norris wins in Brazil as Mercedes take constructors' title
Arwa Ali wins 100m silver for UAE at Dakar Youth Olympics
