The Swiss defeated Mardy Fish in straight sets 6-3, 7-6 (4) in the last eight to maintain his chances of a fifth ATP and WTA Cincinnati Masters title.
It was Federer's sixth quarter-final appearance in seven years in the competition, and he was overjoyed to have reached the last four.
"I played really well," the 31-year-old said after his victory. "The second set was very competitive, but I was able to maintain a high level for a long time.
"I'm very pleased with the form and glad to reach the semis."
Federer will now take on Swiss compatriot Stanislas Wawrinka for a place in the final.