hanchenye-llvm-project/llvm
Arnold Schwaighofer 6eb32b31bd Revert "SimplifyCFG: If convert single conditional stores"
There is the temptation to make this tranform dependent on target information as
it is not going to be beneficial on all (sub)targets. Therefore, we should
probably do this in MI Early-Ifconversion.

This reverts commit r179957. Original commit message:

"SimplifyCFG: If convert single conditional stores

This transformation will transform a conditional store with a preceeding
uncondtional store to the same location:

a[i] =
may-alias with a[i] load
if (cond)
    a[i] = Y
into an unconditional store.

a[i] = X
may-alias with a[i] load
tmp = cond ? Y : X;
a[i] = tmp

We assume that on average the cost of a mispredicted branch is going to be
higher than the cost of a second store to the same location, and that the
secondary benefits of creating a bigger basic block for other optimizations to
work on outway the potential case were the branch would be correctly predicted
and the cost of the executing the second store would be noticably reflected in
performance.

hmmer's execution time improves by 30% on an imac12,2 on ref data sets. With
this change we are on par with gcc's performance (gcc also performs this
transformation). There was a 1.2 % performance improvement on a ARM swift chip.
Other tests in the test-suite+external seem to be mostly uninfluenced in my
experiments:
This optimization was triggered on 41 tests such that the executable was
different before/after the patch. Only 1 out of the 40 tests (dealII) was
reproducable below 100% (by about .4%). Given that hmmer benefits so much I
believe this to be a fair trade off.

I am going to watch performance numbers across the builtbots and will revert
this if anything unexpected comes up."

llvm-svn: 179980
2013-04-21 13:09:04 +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 Remove the executable bit on cmake files 2013-04-21 09:04:59 +00:00
docs Add CodeGen support for functions that always return arguments via a new parameter attribute 'returned', which is taken advantage of in target-independent tail call opportunity detection and in ARM call lowering (when placed on an integral first parameter). 2013-04-20 05:14:40 +00:00
examples
include Remove unused ShouldFoldAtomicFences flag. 2013-04-20 12:32:43 +00:00
lib Revert "SimplifyCFG: If convert single conditional stores" 2013-04-21 13:09:04 +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 Revert "SimplifyCFG: If convert single conditional stores" 2013-04-21 13:09:04 +00:00
tools Remove dead code. 2013-04-20 11:06:34 +00:00
unittests Create a stub for DWARF parser unittests 2013-04-17 08:29:02 +00:00
utils [asm parser] Add support for predicating MnemonicAlias based on the assembler 2013-04-18 22:35:36 +00:00
.arcconfig
.gitignore
CMakeLists.txt Enable all targets by default on Visual Studio. 2013-04-15 11:53:05 +00:00
CODE_OWNERS.TXT Fix random typo. 2013-04-17 03:18:49 +00:00
CREDITS.TXT Add myself in the CREDITS.TXT 2013-04-11 13:15:39 +00:00
LICENSE.TXT
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 Make check depend on all. 2013-04-09 19:42:12 +00:00
README.txt test 2013-04-17 05:34:03 +00:00
configure Refine fenv.h handling: check if the desired macros exist, before using 2013-03-25 13:13:33 +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.