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.

Chelsea's Maresca fumes over 'stupid, embarrassing' Delap red card
Liverpool thrashed by Palace, holders Newcastle through in League Cup
Vacherot beats cousin Rinderknech at Masters again in Paris
South Africa humble England to reach ICC Women's World Cup final
First Australia-India Twenty20 washed out by Canberra rain
