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.

England beat New Zealand to keep Pakistan's T20 World Cup hopes alive
Medvedev to face Griekspoor in bid for second Dubai title
Real Madrid face Man City again in Champions League knockouts
India defeat Zimbabwe to revive T20 World Cup hopes
Auger-Aliassime sets Medvedev semifinal in Dubai