[gicombiner] Allow disable-rule option to disable all-except-...
authorDaniel Sanders <daniel_l_sanders@apple.com>
Tue, 16 Jun 2020 21:52:50 +0000 (14:52 -0700)
committerDaniel Sanders <daniel_l_sanders@apple.com>
Tue, 16 Jun 2020 23:57:16 +0000 (16:57 -0700)
commit778db88723d77e5ec1d55a57d0ea979ead988cf4
treece6f13b7bb8e38bf3ccb2b543cbaa9829649327c
parent7b226fde6781aea59400aef880764c4632ee3b64
[gicombiner] Allow disable-rule option to disable all-except-...

Summary:
Adds two features to the generated rule disable option:
- '*' - Disable all rules
- '!<foo>' - Re-enable rule(s)
  - '!foo' - Enable rule named 'foo'
  - '!5' - Enable rule five
  - '!4-9' - Enable rule four to nine
  - '!foo-bar' - Enable rules from 'foo' to (and including) 'bar'
(the '!' is available to the generated disable option but is not part of the underlying and determines whether to call setRuleDisabled() or setRuleEnabled())

This is intended to support unit testing of combine rules so
that you can do:
  GeneratedCfg.setRuleDisabled("*")
  GeneratedCfg.setRuleEnabled("foo")
to ensure only a specific rule is in effect. The rule is still
required to be included in a combiner though

Also added --...-only-enable-rule=X,Y which is effectively an
alias for --...-disable-rule=*,!X,!Y and as such interacts
properly with disable-rule.

Reviewers: aditya_nandakumar, bogner, volkan, aemerson, paquette, arsenm

Subscribers: wdng, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D81889
llvm/test/CodeGen/AArch64/GlobalISel/prelegalizercombiner-copy-prop-disabled.mir
llvm/utils/TableGen/GICombinerEmitter.cpp