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.

Banton blitz lifts England past Scotland in T20 World Cup
Tudor appointed as interim Tottenham manager until end of season
Eight teams qualify for Dubai Games finals
Shaidorov shocks rivals to capture gold as 'Quad God' Malinin crumbles
Sabalenka, Swiatek withdraw from Dubai Duty Free Tennis Championships
