Hubert Hurkacz shrugged off a slow start to upset fourth seed Casper Ruud 5-7, 6-3, 6-2 on Saturday and reach the final of the ATP Montreal Masters.
The eighth-seeded Pole needed two hours to oust his Norwegian opponent, who had dropped just one set all week.
Hurkacz finished with 47 winners - including 18 aces - and 19 unforced errors, advancing on his second match point.
He will play his second Masters 1000 final against either Briton Dan Evans or Spain's Pablo Carreno Busta.
"I was just trying to stay in the match, he was better for the first set and a half," the winner said. "I just had to hold on and fight."
Hurkacz has gone to three sets in each of his matches this week, but said he wasn't feeling any physical toll.
"I feel good, I have energy," he said. "So far so good."
Ruud and Hurkacz traded early breaks, but the Norwegian gained the edge in the first set, winning it on another break of serve.
He then inflicted further punishment by breaking Hurkacz to love in the opening game of the second as he tried to set a tone for the remainder of the match.