llvm-project/llvm
Tom Stellard b162d94871 TableGen: Generate a function for getting operand indices based on their defined names
This patch modifies TableGen to generate a function in
${TARGET}GenInstrInfo.inc called getNamedOperandIdx(), which can be used
to look up indices for operands based on their names.

In order to activate this feature for an instruction, you must set the
UseNamedOperandTable bit.

For example, if you have an instruction like:

def ADD : TargetInstr <(outs GPR:$dst), (ins GPR:$src0, GPR:$src1)>;

You can look up the operand indices using the new function, like this:

Target::getNamedOperandIdx(Target::ADD, Target::OpName::dst)  => 0
Target::getNamedOperandIdx(Target::ADD, Target::OpName::src0) => 1
Target::getNamedOperandIdx(Target::ADD, Target::OpName::src1) => 2

The operand names are case sensitive, so $dst and $DST are considered
different operands.

This change is useful for R600 which has instructions with a large number
of operands, many of which model single bit instruction configuration
values.  These configuration bits are common across most instructions,
but may have a different operand index depending on the instruction type.
It is useful to have a convenient way to look up the operand indices,
so these bits can be generically set on any instruction.

llvm-svn: 184879
2013-06-25 21:22:09 +00:00
..
autoconf Add an autoconf option for turning on -gsplit-dwarf by default 2013-06-25 01:12:25 +00:00
bindings We're in 3.4 land now. 2013-05-07 20:31:28 +00:00
cmake Revert "Cmake: add compiler option in a more idiomatic way" 2013-06-14 19:41:05 +00:00
docs TableGen: Generate a function for getting operand indices based on their defined names 2013-06-25 21:22:09 +00:00
examples ExceptionDemo: Corresponding to r181820, SectionMemoryManager should belong to RTDyldMemoryManager. 2013-05-14 23:05:00 +00:00
include TableGen: Generate a function for getting operand indices based on their defined names 2013-06-25 21:22:09 +00:00
lib X86 cost model: Vectorizing integer division is a bad idea 2013-06-25 19:14:09 +00:00
projects Filter out dragonegg when checked out into a projects subdirectory. 2013-06-24 07:21:35 +00:00
runtime Remove "-Wl,-seg1addr -Wl,0xE0000000" from link options. 2013-06-04 15:26:37 +00:00
test X86 cost model: Vectorizing integer division is a bad idea 2013-06-25 19:14:09 +00:00
tools Move GetEXESuffix to the one place it is used. 2013-06-25 14:42:30 +00:00
unittests [APFloat] Removed trailing whitespace from unittests. 2013-06-24 09:58:09 +00:00
utils TableGen: Generate a function for getting operand indices based on their defined names 2013-06-25 21:22:09 +00:00
.arcconfig
.gitignore
CMakeLists.txt Look for Python 2 before Python 3 in CMakeLists.txt 2013-06-24 13:21:16 +00:00
CODE_OWNERS.TXT Add myself as SystemZ code owner 2013-05-08 14:41:29 +00:00
CREDITS.TXT Identify me on IRC. 2013-06-18 22:09:36 +00:00
LICENSE.TXT Be more specific and capitalize filenames. 2013-05-21 21:22:34 +00:00
LLVMBuild.txt
Makefile Improved svn repo searching for 'make update' 2013-01-28 03:19:57 +00:00
Makefile.common
Makefile.config.in Add an autoconf option for turning on -gsplit-dwarf by default 2013-06-25 01:12:25 +00:00
Makefile.rules Add an autoconf option for turning on -gsplit-dwarf by default 2013-06-25 01:12:25 +00:00
README.txt test 2013-04-17 05:34:03 +00:00
configure Add an autoconf option for turning on -gsplit-dwarf by default 2013-06-25 01:12:25 +00:00
llvm.spec.in

README.txt

Low Level Virtual Machine (LLVM)
================================

This directory and its subdirectories contain source code for the Low Level
Virtual Machine, a toolkit for the construction of highly optimized compilers,
optimizers, and runtime environments.

LLVM is open source software. You may freely distribute it under the terms of
the license agreement found in LICENSE.txt.

Please see the documentation provided in docs/ for further
assistance with LLVM, and in particular docs/GettingStarted.rst for getting
started with LLVM and docs/README.txt for an overview of LLVM's
documentation setup.

If you're writing a package for LLVM, see docs/Packaging.rst for our
suggestions.