[llvm] r218838 - PR21101: tablegen's FastISel emitter should filter out unused functions.

David Blaikie dblaikie at gmail.com
Wed Oct 1 16:29:48 PDT 2014


On Wed, Oct 1, 2014 at 3:44 PM, Bob Wilson <bob.wilson at apple.com> wrote:

> Author: bwilson
> Date: Wed Oct  1 17:44:01 2014
> New Revision: 218838
>
> URL: http://llvm.org/viewvc/llvm-project?rev=218838&view=rev
> Log:
> PR21101: tablegen's FastISel emitter should filter out unused functions.
>
> FastISel has a fixed set of virtual functions that are overridden by the
> tablegen-generated code for each target. These functions are distinguished
> by
> the kinds of operands, e.g., register + immediate = "ri". The FastISel
> emitter
> has been blindly emitting functions with different combinations of operand
> kinds, even for combinations that are completely unused by FastISel, e.g.,
> "fastEmit_rrr". Change to filter out functions that will be irrelevant for
> FastISel and do not bother generating the code for them. Also add explicit
> "override" keywords for the virtual functions that are overridden.
>

We do seem to have some tests for TableGen under llvm/test/TableGen - is
this testable?

Any data on savings gained by omitting these unused functions?


>
> Modified:
>     llvm/trunk/utils/TableGen/FastISelEmitter.cpp
>
> Modified: llvm/trunk/utils/TableGen/FastISelEmitter.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/FastISelEmitter.cpp?rev=218838&r1=218837&r2=218838&view=diff
>
> ==============================================================================
> --- llvm/trunk/utils/TableGen/FastISelEmitter.cpp (original)
> +++ llvm/trunk/utils/TableGen/FastISelEmitter.cpp Wed Oct  1 17:44:01 2014
> @@ -19,6 +19,7 @@
>
>  #include "CodeGenDAGPatterns.h"
>  #include "llvm/ADT/SmallString.h"
> +#include "llvm/ADT/StringSwitch.h"
>  #include "llvm/Support/Debug.h"
>  #include "llvm/Support/ErrorHandling.h"
>  #include "llvm/TableGen/Error.h"
> @@ -541,6 +542,17 @@ void FastISelMap::collectPatterns(CodeGe
>          continue;
>      }
>
> +    // Check if the operands match one of the patterns handled by
> FastISel.
> +    std::string ManglingSuffix;
> +    raw_string_ostream SuffixOS(ManglingSuffix);
> +    Operands.PrintManglingSuffix(SuffixOS, ImmediatePredicates, true);
> +    SuffixOS.flush();
> +    if (!StringSwitch<bool>(ManglingSuffix)
> +        .Cases("", "r", "rr", "ri", "rf", true)
> +        .Cases("rri", "i", "f", true)
> +        .Default(false))
> +      continue;
> +
>      // Get the predicate that guards this pattern.
>      std::string PredicateCheck = Pattern.getPredicateCheck();
>
> @@ -803,7 +815,10 @@ void FastISelMap::printFunctionDefinitio
>      if (!Operands.empty())
>        OS << ", ";
>      Operands.PrintParameters(OS);
> -    OS << ") {\n";
> +    OS << ") ";
> +    if (!Operands.hasAnyImmediateCodes())
> +      OS << "override ";
> +    OS << "{\n";
>
>      // If there are any forms of this signature available that operate on
>      // constrained forms of the immediate (e.g., 32-bit sext immediate in
> a
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20141001/0cdbfc87/attachment.html>


More information about the llvm-commits mailing list