llvm-6502/utils
Petr Pavlu d2e1e42c1a [TableGen] Improve decoding options for non-orthogonal instructions
When FixedLenDecoder matches an input bitpattern of form [01]+ with an
instruction bitpattern of form [01?]+ (where 0/1 are static bits and ? are
mixed/variable bits) it passes the input bitpattern to a specific instruction
decoder method which then makes a final decision whether the bitpattern is a
valid instruction or not. This means the decoder must handle all possible
values of the variable bits which sometimes leads to opcode rewrites in the
decoder method when the instructions are not fully orthogonal.

The patch provides a way for the decoder method to say that when it returns
Fail it does not necessarily mean the bitpattern is invalid, but rather that
the bitpattern is definitely not an instruction that is recognized by the
decoder method. The decoder can then try to match the input bitpattern with
other possible instruction bitpatterns.

For example, this allows to solve a situation on AArch64 where the `MSR
(immediate)` instruction has form:
1101 0101 0000 0??? 0100 ???? ???1 1111
but not all values of the ? bits are allowed. The rejected values should be
handled by the `extended MSR (register)` instruction:
1101 0101 000? ???? ???? ???? ???? ????

The decoder will first try to decode an input bitpattern that matches both
bitpatterns as `MSR (immediate)` but currently this puts the decoder method of
`MSR (immediate)` into a situation when it must be able to decode all possible
values of the ? bits, i.e. it would need to rewrite the instruction to `MSR
(register)` when it is not `MSR (immediate)`.

The patch allows to specify that the decoder method cannot determine if the
instruction is valid for all variable values. The decoder method can simply
return Fail when it knows it is definitely not `MSR (immediate)`. The decoder
will then backtrack the decoding and find that it can match the input
bitpattern with the more generic `MSR (register)` bitpattern too.

Differential Revision: http://reviews.llvm.org/D7174


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242274 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-15 08:04:27 +00:00
..
bugpoint
buildit ARM64: initial backend import 2014-03-29 10:18:08 +00:00
count Install three utils, "FileCheck", "count", and "not", for now to appease llvmlab dragonegg builder. 2013-12-20 06:25:37 +00:00
crosstool
emacs [emacs] Get llvm-mode to font-lock "personality" 2015-02-09 00:30:03 +00:00
FileCheck Replace push_back(Constructor(foo)) with emplace_back(foo) for non-trivial types 2015-05-29 19:43:39 +00:00
fpcmp
git
git-svn Improve check on git-svnrevert, better error message 2015-05-16 10:23:48 +00:00
jedit
kate Remove the linker_private and linker_private_weak linkages. 2014-03-13 23:18:37 +00:00
KillTheDoctor More missing includes only visible to MSVC. 2015-03-23 18:23:08 +00:00
lint
lit Pass 2 more variables to lit tests. 2015-06-23 20:57:26 +00:00
llvm-build Teach llvm-build to avoid touching LibraryDependencies.inc unless the contents 2014-11-19 03:34:20 +00:00
llvm-lit Revert r229224: Make the 'llvm-lit' utility defend against a system where Python3 2015-02-14 07:11:25 +00:00
Misc
not Add a small "usage:" comment at the top of not.cpp 2014-11-26 22:53:46 +00:00
PerfectShuffle [C++11] Use 'nullptr'. 2014-06-08 22:29:17 +00:00
release test-release.sh: Remove the InstallDir parameter from configure_llvmCore 2015-07-14 20:15:15 +00:00
TableGen [TableGen] Improve decoding options for non-orthogonal instructions 2015-07-15 08:04:27 +00:00
Target/ARM
testgen
textmate
unittest Make UnitTestMain/TestMain.cpp free from llvm/Config/config.h. 2015-07-06 23:51:40 +00:00
valgrind valgrind/x86_64-pc-linux-gnu.supp: Suppress also /bin/bash. 2014-09-24 04:38:20 +00:00
vim [vim] Update the syntax to mark REQUIRES lines and not talk about 2015-07-15 01:48:40 +00:00
yaml-bench YAML: Implement block scalar parsing. 2015-05-13 23:10:51 +00:00
bisect Add a small utility called bisect that enables commandline bisecting on a counter. 2014-08-02 01:39:08 +00:00
check-each-file
clang-parse-diagnostics-file
codegen-diff
countloc.sh
create_ladder_graph.py Add ladder graph utility 2015-04-14 18:14:38 +00:00
DSAclean.py
DSAextract.py
findmisopt Delete -std-compile-opts. 2014-10-16 20:00:02 +00:00
findoptdiff
findsym.pl
GenLibDeps.pl
GetRepositoryPath
GetSourceVersion
getsrcs.sh
lldbDataFormatters.py utils: Teach lldbDataFormatters about llvm::Optional 2015-02-20 02:55:22 +00:00
llvm-compilers-check Remove bogus configure check 2014-06-19 19:31:11 +00:00
llvm-native-gxx
llvm.grm Remove the linker_private and linker_private_weak linkages. 2014-03-13 23:18:37 +00:00
llvm.natvis Use correct memeber when displaying StringMap's size. 2014-07-09 05:34:24 +00:00
LLVMBuild.txt
llvmdo
llvmgrep
Makefile Fix r236754: Add the missing yaml-bench dir to the makefile for utils. 2015-05-07 18:48:48 +00:00
makellvm
shuffle_fuzz.py [shuffles] Tweak my shufflevector fuzz test generation script to produce 2015-02-18 01:36:45 +00:00
sort_includes.py Add polly support to sort_includes.py 2015-05-09 09:08:56 +00:00
test_debuginfo.pl test_debuginfo.pl: Make failures easier to debug by printing the debugger 2014-02-20 19:55:44 +00:00
update_llc_test_checks.py [x86] Teach my test updating script about another quirk of the printed 2015-02-15 00:08:01 +00:00
UpdateCMakeLists.pl
wciia.py Fix known typos 2014-01-24 17:20:08 +00:00