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.

India's Iyer taken to hospital after fielding injury
Norris unfazed by crowd boos after winning in Mexico
Mbappe and Bellingham strike as Real Madrid edge Barcelona 2-1 in fiery El Clasico
Brazilian teen Fonseca beats Fokina to win biggest career title in Basel
Arsenal go clear after win over Palace, Man City slip up at Villa
