The Swiss 17-time Grand Slam champion was far too strong for the Czech sixth seed, winning 7-6 (7/4), 6-2, 6-4 in two hours, 16 minutes.
He will now face either defending champion Novak Djokovic or Japan’s Kei Nishikori in Thursday’s semi-final.
Federer has now reached his 39th Grand Slam semi-final overall as he chases his fifth Australian Open title, at the age of 34.
The world number three extended his career record to 16-6 over the big-serving Czech and denied Berdych a third straight semi-final appearance in Melbourne.
It was a convincing display from Federer, who broke Berdych’s serve five times and dropped his own twice in storming to victory watched by tennis legend Rod Laver on Rod Laver Arena.
“Tomas has caused me a lot of problems over the years and it’s a pleasure playing against him,” Federer said.
“He’s one of the guys that makes you play better, he’s beaten me on some of the biggest courts around the world.
“I played a good match, I was aggressive, had some variety in there and it was quick conditions in the day session. I was very happy I was able to play this way.”
Both players exchanged early service breaks and Berdych fought off a set point at 5-4 before the opening set went to a tiebreaker.
Federer dominated the tiebreak with a couple of aces and a beautiful backhand winner to have the Czech under pressure before taking the set in an hour.
Federer went straight after Berdych in the second set, breaking serve in the opening game and then again for 5-2 with Berdych running about the court in vain.
The Swiss great got to two set points in his next service game and went two sets up with a forehand put-away to the open court.
Again both players exchanged service breaks in the final set and Federer fought off two break points at 3-2 before breaking Berdych at 4-4, and serving it out on his second match point with a smash set up by a wide serve.
Federer is 22-22 with Djokovic and leads Nishikori 4-2 in their previous meetings.