llvm-project/llvm
Sanjay Patel d802270808 [InstSimplify] fold select with implied condition
This is an almost direct move of the functionality from InstCombine to 
InstSimplify. There's no reason not to do this in InstSimplify because 
we never create a new value with this transform.

(There's a question of whether any dominance-based transform belongs in
either of these passes, but that's a separate issue.)

I've changed 1 of the conditions for the fold (1 of the blocks for the 
branch must be the block we started with) into an assert because I'm not 
sure how that could ever be false.

We need 1 extra check to make sure that the instruction itself is in a
basic block because passes other than InstCombine may be using InstSimplify
as an analysis on values that are not wired up yet.

The 3-way compare changes show that InstCombine has some kind of 
phase-ordering hole. Otherwise, we would have already gotten the intended
final result that we now show here.

llvm-svn: 347896
2018-11-29 18:44:39 +00:00
..
benchmarks
bindings [bindings/go] Add Go bindings to LLVMGetIndices 2018-11-08 04:04:04 +00:00
cmake [Support/FileSystem] Add sub-second precision for atime/mtime of sys::fs::file_status on unix platforms 2018-11-26 00:03:39 +00:00
docs [clang][slh] add attribute for speculative load hardening 2018-11-27 19:56:46 +00:00
examples Fix build break from r347239 2018-11-19 18:51:11 +00:00
include [GlobalISel] LegalizationArtifactCombiner: Combine aext([asz]ext x) -> [asz]ext x 2018-11-29 18:19:24 +00:00
lib [InstSimplify] fold select with implied condition 2018-11-29 18:44:39 +00:00
projects
resources
runtimes
test [InstSimplify] fold select with implied condition 2018-11-29 18:44:39 +00:00
tools [llvm-objcopy] Delete redundant !Config.xx.empty() when followed by positive is_contained() check 2018-11-29 17:32:51 +00:00
unittests Revert r347823 "[TextAPI] Switch back to a custom Platform enum." 2018-11-29 15:47:24 +00:00
utils [TableGen] Examine entire subreg compositions to detect ambiguity 2018-11-29 18:20:08 +00:00
.arcconfig
.clang-format
.clang-tidy
.gitattributes
.gitignore [git/svn] Ignore Visual Studio's CMakeSettings.json. 2018-10-29 14:51:02 +00:00
CMakeLists.txt [LLVM] Allow modulemap installation 2018-11-21 20:46:50 +00:00
CODE_OWNERS.TXT [CODE_OWNERS] Add myself as code owner for MinGW 2018-11-29 10:58:15 +00:00
CREDITS.TXT add Kang Zhang(shkzhang@cn.ibm.com) to the CREDITS.TXT 2018-11-25 02:56:49 +00:00
LICENSE.TXT
LLVMBuild.txt
README.txt
RELEASE_TESTERS.TXT Adding Yvan as release test backup for Diana 2018-11-08 11:51:27 +00:00
configure
llvm.spec.in

README.txt

The LLVM Compiler Infrastructure
================================

This directory and its subdirectories contain source code for LLVM,
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 are writing a package for LLVM, see docs/Packaging.rst for our
suggestions.