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.

Arsenal crowned Premier League champions for first time in 22 years
Southampton expelled from EFL playoff final after spying breach
DR Congo prepares for World Cup despite Ebola outbreak
LIV Golf focused on long-term funding amid reports of potential bankruptcy
Alcaraz to miss Wimbledon as he continues to recover from wrist injury
