Federer, seeded third this week but a five-time winner of the tournament, ousted No. 8-seeded Grigor Dimitrov 6-3, 7-6 (7-2) by fighting off nine of the 10 break points he faced.
Federer held off five break points in the first set while building a lead and overcame an early second-set break to force the tiebreaker, which he won easily.
Federer can clinch a spot in the Tour Finals by winning the tournament. He is in the top position of the non-qualifiers with three spots left to decide in the eight-player event.
Top-seed and defending champion Juan Martin del Potro also advanced to the semifinals, topping Paul-Henri Mathieu 6-4, 6-4. Del Potro didn't see a break point and finished off two of his three break chances. He lost six points in his 10 games serving.
Also Friday, Edouard Roger-Vasselin defeated Daniel Brands 6-3, 4-6, 6-3 and Vasek Pospisil edged Ivan Dodig 7-6 (13-11), 6-4.
Del Potro goes against Roger-Vasselin in the first of Saturday's semifinals. They have split their first two meetings. Federer won the only previous time he played Pospisil.
Megyn Kelly: Santa Claus and Jesus are both white men
Wisconsin business offering 'therapeutic cuddling' forced to close