Serena Williams beat qualifier Marie Bouzkova to set up a Rogers Cup final in Toronto against Canadian teenager Bianca Andreescu.
Bouzkova started strongly before being overpowered 1-6 6-3 6-3 by 23-time Grand Slam champion Williams.
Andreescu beat American Sofia Kenin 6-4 7-6 (7-5) in the other semi-final and is the first Canadian woman to reach the final of the tournament since 1969.
"I just felt like crying after because I'm just so happy," she said.
Czech Bouzkova, 21, had said before the match she would be playing her idol but she showed no signs of being intimidated, in what was her first WTA semi-final appearance, and took the first set 6-1.