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.

Mac Allister heads Liverpool to Champions League win over Real Madrid
Sabalenka overpowers Pegula, Gauff eliminates Paolini in WTA Finals
Pakistan win ODI against South Africa in last over as Salman shows the way
David Beckham knighted for services to sport and charity
Aryna Sabalenka challenges Nick Kyrgios in Dubai showdown
