Starting the day two shots behind leader Rickie Fowler the former world number one – whose ranking has slipped to 14th during a troubled 2021 – carded a superb six-under 66 to end on 25-under par for his second victory of 2021.
McIlroy mixed four birdies around his first bogey since Thursday on the front nine, gained another stroke on the 12th before setting up the win by sinking a monster 34-foot putt from off the green for an eagle three on the 14th.
A composed approach shot on the last meant he could two-putt from 13 feet for a closing par to secure victory ahead of American Collin Morikawa who scorched up the leaderboard to put pressure on the Northern Irishman with a career-best 10-under 62.
Fowler (71) and fellow American Keith Mitchell (67) were two further shots back in equal-third.
“To get to 20 wins here is a big achievement,” said McIlroy, the 39th player to achieve the feat. “I didn’t know if it was going to be this week, but I knew if I just kept my head down and kept playing well and kept doing the right things that eventually I’d get there.
“To get a win, it’s great, it feels really good.”
McIlroy was playing for the first time since his moderate performance in Europe’s recent Ryder Cup defeat in Wisconsin last month – an arduous week which famously left the 32-year-old in tears in his closing interview – and said the experience had helped turn him around.
“It was huge. It really was. I was really disappointed with how I played,” he said in a greenside interview with PGA Tour.
“There was a lot of reflection in the last couple of weeks. This is what I need to do. I need to play golf, I need to simplify it. I need to just be me. I think for the last few months I was maybe trying to be someone else to try and get better.
“I realised that being me is enough, and being me I can do things like this.”
England’s Ian Poulter and Tyrrell Hatton started the day four and five shots off the lead but dropped to finish in a share of 18th, Poulter carding a two-under 70 and Hatton a one-under 71.
Fellow Englishman Paul Casey fired a four-under 68 to finish equal 25th.