Completely rewrite tblgen's type inference mechanism,
authorChris Lattner <sabre@nondot.org>
Mon, 15 Mar 2010 06:00:16 +0000 (06:00 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 15 Mar 2010 06:00:16 +0000 (06:00 +0000)
commit2cacec55f947c716b058a39038889550d7e39b3c
treedc66a0d042a020fd18baa16e52fe5e205ef0e073
parent6894b07996757134b7036753fcad85f354a0f5bd
Completely rewrite tblgen's type inference mechanism,
changing the primary datastructure from being a
"std::vector<unsigned char>" to being a new TypeSet class
that actually has (gasp) invariants!

This changes more things than I remember, but one major
innovation here is that it enforces that named input
values agree in type with their output values.

This also eliminates code that transparently assumes (in
some cases) that SDNodeXForm input/output types are the
same, because this is wrong in many case.

This also eliminates a bug which caused a lot of ambiguous
patterns to go undetected, where a register class would
sometimes pick the first possible type, causing an
ambiguous pattern to get arbitrary results.

With all the recent target changes, this causes no
functionality change!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98534 91177308-0d34-0410-b5e6-96231b3b80d8
utils/TableGen/CodeGenDAGPatterns.cpp
utils/TableGen/CodeGenDAGPatterns.h
utils/TableGen/CodeGenTarget.cpp
utils/TableGen/CodeGenTarget.h
utils/TableGen/DAGISelEmitter.cpp
utils/TableGen/DAGISelMatcherGen.cpp
utils/TableGen/FastISelEmitter.cpp