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.

UAE Team Emirates rider achieves third on Itzulia Basque Country opening day
Pogacar wins third Flanders crown but faces fine for running red light
Thuram and Martinez star as Inter dismantle Roma
Silva to exit Man City at end of season, assistant manager confirms
Penalty heroics help Leeds beat West Ham to reach FA Cup semis
