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.
Ray Liotta sues skin care company over use of likeness
Millions of Getty images now available for free via embed tool