LLVM backend for 6502
Go to file
Chandler Carruth baf868b9b8 Switch this code away from Value::isUsedInBasicBlock. That code either
loops over instructions in the basic block or the use-def list of the
value, neither of which are really efficient when repeatedly querying
about values in the same basic block.

What's more, we already know that the CondBB is small, and so we can do
a much more efficient test by counting the uses in CondBB, and seeing if
those account for all of the uses.

Finally, we shouldn't blanket fail on any such instruction, instead we
should conservatively assume that those instructions are part of the
cost.

Note that this actually fixes a bug in the pass because
isUsedInBasicBlock has a really terrible bug in it. I'll fix that in my
next commit, but the fix for it would make this code suddenly take the
compile time hit I thought it already was taking, so I wanted to go
ahead and migrate this code to a faster & better pattern.

The bug in isUsedInBasicBlock was also causing other tests to test the
wrong thing entirely: for example we weren't actually disabling
speculation for floating point operations as intended (and tested), but
the test passed because we failed to speculate them due to the
isUsedInBasicBlock failure.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@173417 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-25 05:40:09 +00:00
autoconf Disable Uninitialized Use Warnings for Broken gcc Versions 2013-01-15 18:21:15 +00:00
bindings
cmake Add time getters to the process interface for requesting the elapsed 2013-01-04 23:19:55 +00:00
docs Fix small typo 2013-01-23 22:05:19 +00:00
examples Update links to "Itanium C++ ABI: Exception Handling" document 2013-01-13 15:53:09 +00:00
include MISched: Add SchedDFSResult to ScheduleDAGMI to formalize the 2013-01-25 04:01:04 +00:00
lib Switch this code away from Value::isUsedInBasicBlock. That code either 2013-01-25 05:40:09 +00:00
projects
runtime
test Switch this code away from Value::isUsedInBasicBlock. That code either 2013-01-25 05:40:09 +00:00
tools [bugpoint] make tool selection messages unique 2013-01-24 16:49:14 +00:00
unittests unittests/SupportTests/Initialize.MultipleThreads: Enable pthread_attr_setstack(3) only on Linux. 2013-01-24 15:29:27 +00:00
utils Add the IR attribute 'sspstrong'. 2013-01-23 06:41:41 +00:00
.arcconfig
.gitignore
CMakeLists.txt Fix spelling 2012-12-13 15:25:07 +00:00
CODE_OWNERS.TXT Update CODE_OWNERS.TXT. 2013-01-15 09:37:45 +00:00
configure Disable Uninitialized Use Warnings for Broken gcc Versions 2013-01-15 18:21:15 +00:00
CREDITS.TXT
LICENSE.TXT Add LICENSE.TXT covering contributions made by ARM. 2013-01-07 10:04:49 +00:00
llvm.spec.in
LLVMBuild.txt LLVMBuild: Introduce a common section which currently has a list of the 2011-12-12 22:45:54 +00:00
Makefile
Makefile.common
Makefile.config.in Introduce llvm::sys::getProcessTriple() function. 2013-01-16 17:27:22 +00:00
Makefile.rules Pass NO_MISSING_FIELD_INITIALIZERS to Compiler Flags 2013-01-18 23:22:52 +00:00
README.txt Update README.txt to more accurately reflect reality. 2013-01-08 02:35:15 +00:00

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.