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.

Zayed Charity Run Abu Dhabi draws over 10,000 participants
India's focus now on winning ODI series, says captain Rahul
UAE to host Ireland for two-match T20I series
Crews eye $2 million SailGP prize in Abu Dhabi final
Roma tame Midtjylland and Malen double earns Villa win over Young Boys