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.

Cameroon strike early to secure win over Gabon
Dubai Capitals sail to playoffs after a six-wicket win over Sharjah Warriorz
Stoppage-time comeback gives Burkina Faso victory in opener
Archer out of Ashes, England drop Pope from Boxing Day test
Martha Stewart joins Snoop Dogg as Swansea minority co-owner
