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.

Roberto Carlos, Fernando Hierro join Fursan Hispania FC as shareholders
Italy seal dominant win over France as Kane sets England appearance record
Luiten leads the way at DP World Tour Championship
Jake Paul hails Dubai as "perfect place" for Christmas Eve comeback fight
Derron and Taylor-Brown renew T100 title fight in Dubai
