LLVM backend for 6502
Go to file
Michael Gottesman 0d92a3c600 [ObjCARC] Strength reduce objc_retainBlock -> objc_retain if the objc_retainBlock is optimizable.
If an objc_retainBlock has the copy_on_escape metadata attached to it
AND if the block pointer argument only escapes down the stack, we are
allowed to strength reduce the objc_retainBlock to to an objc_retain and
thus optimize it.

Current there is logic in the ARC data flow analysis to handle
this case which is complicated and involved making distinctions in
between objc_retainBlock and objc_retain in certain places and
considering them the same in others.

This patch simplifies said code by:

1. Performing the strength reduction in the initial ARC peephole
analysis (ObjCARCOpts::OptimizeIndividualCalls).

2. Changes the ARC dataflow analysis (which runs after the peephole
analysis) to consider all objc_retainBlock calls to not be optimizable
(since if the call was optimizable, we would have strength reduced it
already).

This patch leaves in the infrastructure in the ARC dataflow analysis to
handle this case, which due to 2 will just be dead code. I am doing this
on purpose to separate the removal of the old code from the testing of
the new code.

<rdar://problem/13249661>.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@178284 91177308-0d34-0410-b5e6-96231b3b80d8
2013-03-28 20:11:19 +00:00
autoconf Refine fenv.h handling: check if the desired macros exist, before using 2013-03-25 13:13:33 +00:00
bindings
cmake Add CMake option LLVM_USE_SANITIZER={Address,Memory,MemoryWithOrigins} to simplify bootstrap of LLVM/Clang under ASan/MSan 2013-03-26 07:49:46 +00:00
docs Correct spelling of Git. 2013-03-28 18:06:20 +00:00
examples
include Seciton 24.2.2 of the C++ standard, [iterator.iterators], Table 106 2013-03-28 15:47:50 +00:00
lib [ObjCARC] Strength reduce objc_retainBlock -> objc_retain if the objc_retainBlock is optimizable. 2013-03-28 20:11:19 +00:00
projects Print a warning message if compiler-rt can't be built because of old CMake version to make this requirement more visible to users 2013-03-05 14:43:07 +00:00
runtime Remove GCDAProfiling.c. This copy is old, the copy in compiler-rt is newer and 2013-03-07 02:03:08 +00:00
test [ObjCARC] Strength reduce objc_retainBlock -> objc_retain if the objc_retainBlock is optimizable. 2013-03-28 20:11:19 +00:00
tools Manually update the dependencies in the Makefiles. It turns out that all 2013-03-26 03:45:47 +00:00
unittests Disable JIT/MCJIT tests in unittests/ExecutionEngine for the targets that don't support JIT. 2013-03-28 03:38:29 +00:00
utils Avoid undefined behavior from passing a std::vector's own contents 2013-03-27 18:44:56 +00:00
.arcconfig
.gitignore
CMakeLists.txt Add CMake option LLVM_USE_SANITIZER={Address,Memory,MemoryWithOrigins} to simplify bootstrap of LLVM/Clang under ASan/MSan 2013-03-26 07:49:46 +00:00
CODE_OWNERS.TXT Update 2013-03-18 17:47:33 +00:00
configure Refine fenv.h handling: check if the desired macros exist, before using 2013-03-25 13:13:33 +00:00
CREDITS.TXT Update 2013-03-18 17:47:33 +00:00
LICENSE.TXT
llvm.spec.in
LLVMBuild.txt
Makefile
Makefile.common
Makefile.config.in Turn anonymous type in anonymous union warning back on after cleaning up 2013-03-15 00:43:00 +00:00
Makefile.rules Turn anonymous type in anonymous union warning back on after cleaning up 2013-03-15 00:43:00 +00:00
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.