llvm/utils/TableGen
Dan Gohman e8be6c6391 Add a new function, ReplaceAllUsesOfValuesWith, which handles bulk
replacement of multiple values. This is slightly more efficient
than doing multiple ReplaceAllUsesOfValueWith calls, and theoretically
could be optimized even further. However, an important property of this
new function is that it handles the case where the source value set and
destination value set overlap. This makes it feasible for isel to use
SelectNodeTo in many very common cases, which is advantageous because
SelectNodeTo avoids a temporary node and it doesn't require CSEMap
updates for users of values that don't change position.

Revamp MorphNodeTo, which is what does all the work of SelectNodeTo, to
handle operand lists more efficiently, and to correctly handle a number
of corner cases to which its new wider use exposes it.

This commit also includes a change to the encoding of post-isel opcodes
in SDNodes; now instead of being sandwiched between the target-independent
pre-isel opcodes and the target-dependent pre-isel opcodes, post-isel
opcodes are now represented as negative values. This makes it possible
to test if an opcode is pre-isel or post-isel without having to know
the size of the current target's post-isel instruction set.

These changes speed up llc overall by 3% and reduce memory usage by 10%
on the InstructionCombining.cpp testcase with -fast and -regalloc=local.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53728 91177308-0d34-0410-b5e6-96231b3b80d8
2008-07-17 19:10:17 +00:00
..
AsmWriterEmitter.cpp Split ISD::LABEL into ISD::DBG_LABEL and ISD::EH_LABEL, eliminating 2008-07-01 00:05:16 +00:00
AsmWriterEmitter.h remove attributions from utils. 2007-12-29 20:37:13 +00:00
CallingConvEmitter.cpp Wrap MVT::ValueType in a struct to get type safety 2008-06-06 12:08:01 +00:00
CallingConvEmitter.h remove attributions from utils. 2007-12-29 20:37:13 +00:00
CodeEmitterGen.cpp Split ISD::LABEL into ISD::DBG_LABEL and ISD::EH_LABEL, eliminating 2008-07-01 00:05:16 +00:00
CodeEmitterGen.h remove attributions from utils. 2007-12-29 20:37:13 +00:00
CodeGenDAGPatterns.cpp check in anton's patch to make inlining happen in a determinstic order 2008-06-30 03:02:03 +00:00
CodeGenDAGPatterns.h - Add "Commutative" property to intrinsics. This allows tblgen to generate the commuted variants for dagisel matching code. 2008-06-16 20:29:38 +00:00
CodeGenInstruction.cpp Teach the DAGISelEmitter to not compute the variable_ops operand 2008-05-31 02:11:25 +00:00
CodeGenInstruction.h Add a flag to indicate that an instruction is as cheap (or cheaper) than a move 2008-05-28 22:54:52 +00:00
CodeGenIntrinsics.h - Add "Commutative" property to intrinsics. This allows tblgen to generate the commuted variants for dagisel matching code. 2008-06-16 20:29:38 +00:00
CodeGenRegisters.h Wrap MVT::ValueType in a struct to get type safety 2008-06-06 12:08:01 +00:00
CodeGenTarget.cpp Split ISD::LABEL into ISD::DBG_LABEL and ISD::EH_LABEL, eliminating 2008-07-01 00:05:16 +00:00
CodeGenTarget.h Added MemOperands to Atomic operations since Atomics touches memory. 2008-06-25 08:15:39 +00:00
DAGISelEmitter.cpp Add a new function, ReplaceAllUsesOfValuesWith, which handles bulk 2008-07-17 19:10:17 +00:00
DAGISelEmitter.h Teach the DAGISelEmitter to not compute the variable_ops operand 2008-05-31 02:11:25 +00:00
InstrEnumEmitter.cpp split enum emission out from InstrInfoEmitter into it's own tblgen backend. 2008-01-06 00:49:05 +00:00
InstrEnumEmitter.h split enum emission out from InstrInfoEmitter into it's own tblgen backend. 2008-01-06 00:49:05 +00:00
InstrInfoEmitter.cpp Split ISD::LABEL into ISD::DBG_LABEL and ISD::EH_LABEL, eliminating 2008-07-01 00:05:16 +00:00
InstrInfoEmitter.h Move instruction flag inference out of InstrInfoEmitter and into 2008-04-03 00:02:49 +00:00
IntrinsicEmitter.cpp Wrap MVT::ValueType in a struct to get type safety 2008-06-06 12:08:01 +00:00
IntrinsicEmitter.h remove attributions from utils. 2007-12-29 20:37:13 +00:00
LLVMCConfigurationEmitter.cpp Add #includes required by GCC 4.3, thanks for Zhongxing Xu 2008-06-04 04:46:14 +00:00
LLVMCConfigurationEmitter.h Fix some headers. 2008-05-30 06:20:54 +00:00
Makefile remove attributions from tools/utils makefiles. 2007-12-29 20:07:17 +00:00
Record.cpp Remove some debug output from tblgen. This fixes a test. 2008-06-10 14:53:49 +00:00
Record.h Add explicit keywords. 2008-07-07 18:00:37 +00:00
RegisterInfoEmitter.cpp TargetRegisterDesc::Name field is the same as the abstract register name. There is no need for targets to specify register names in addition to their AsmName's. 2008-07-07 22:19:41 +00:00
RegisterInfoEmitter.h remove attributions from utils. 2007-12-29 20:37:13 +00:00
SubtargetEmitter.cpp Fix generation of multi-stage instruction itineraries. Patch by 2008-04-06 17:38:14 +00:00
SubtargetEmitter.h remove attributions from utils. 2007-12-29 20:37:13 +00:00
TableGen.cpp Naming fix: LLVMCCConfigurationEmitter -> LLVMCConfigurationEmitter. 2008-05-06 18:12:03 +00:00
TableGenBackend.cpp change getQualifiedName to be a global function. 2008-01-05 22:25:12 +00:00
TableGenBackend.h change getQualifiedName to be a global function. 2008-01-05 22:25:12 +00:00
TGLexer.cpp Change the MemoryBuffer::getFile* methods to take just a pointer to the 2008-04-01 18:04:03 +00:00
TGLexer.h remove attributions from utils. 2007-12-29 20:37:13 +00:00
TGParser.cpp produce an error on invalid input instead of asserting: 2008-04-10 04:48:34 +00:00
TGParser.h remove attributions from utils. 2007-12-29 20:37:13 +00:00