While working on an improved test for the opt bisect code I discovered that the AlwaysInliner pass was being skipped because it inherits its runOnSCC implementation from the Inliner base class. This causes failures for AMDGPU targets.
This patch works around that problem by making the skipSCC method virtual and overriding it in AlwaysInliner. There doesn't seem to be a good existing way to determine from the run function whether or not the derived pass can be skipped. Alternatives I considered were either adding a virtual method specific to this purpose (which seemed equivalent to the approach taken in this patch but with extra baggage) and removing the skipSCC check in the base Inliner class but adding case checks for individual function inlining and checking for the "always-inline" attribute at the callsite (which would be useful but leaks a bit of the attribute handling into the base class).