Emit type checks late instead of early, this encourages

structural matching code to be factored and shared this
shrinks the X86 isel table from 86537 to 83890 bytes.

llvm-svn: 97442
This commit is contained in:
Chris Lattner 2010-03-01 07:54:59 +00:00
parent e89ca7c146
commit 86878b4a1e
1 changed files with 6 additions and 1 deletions

View File

@ -460,8 +460,9 @@ void MatcherGen::EmitMatchCode(const TreePatternNode *N,
// If N and NodeNoTypes don't agree on a type, then this is a case where we
// need to do a type check. Emit the check, apply the tyep to NodeNoTypes and
// reinfer any correlated types.
unsigned NodeType = EEVT::isUnknown;
if (NodeNoTypes->getExtTypes() != N->getExtTypes()) {
AddMatcher(new CheckTypeMatcher(N->getTypeNum(0)));
NodeType = N->getTypeNum(0);
NodeNoTypes->setTypes(N->getExtTypes());
InferPossibleTypes();
}
@ -488,6 +489,10 @@ void MatcherGen::EmitMatchCode(const TreePatternNode *N,
EmitLeafMatchCode(N);
else
EmitOperatorMatchCode(N, NodeNoTypes);
if (NodeType != EEVT::isUnknown)
AddMatcher(new CheckTypeMatcher((MVT::SimpleValueType)NodeType));
}
/// EmitMatcherCode - Generate the code that matches the predicate of this