This patch adds a new reduction pass that tries to remove aliases and
special globals. It runs early, as most of those likely can be removed
up-front in practice.
This substantially improves llvm-reduce for IR generated by the swift
compiler, which can generate a lot of aliases and special globals, which
lead to lots of invalid reductions.
Removing aliases and special globals together is mostly done for
convenience, because both show up in IR generated by the swift compiler.
I am not sure if it is feasible to add a test case where globals cause problems,
because I think they only cause problems on large inputs where we spend a lot
of time removing globals in llvm.used & co.
clang-tidy: warning: header is missing header guard [llvm-header-guard]
not useful