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.

Morocco beat UAE to reach FIFA Arab Cup final
Mid East Falcons win inaugural United Series Championship in Dubai
UAE to face Morocco in FIFA Arab Cup semi-final
Man City beat Palace, Villa edge West Ham in five-goal thriller
Rodrygo's winner lifts Real Madrid past Alaves to end losing streak