[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