1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-22 04:22:57 +02:00
llvm-mirror/lib
James Molloy d7cc5c99ef Canonicalize min/max expressions correctly.
This patch introduces a canonical form for min/max idioms where one operand
is extended or truncated. This often happens when the other operand is a
constant. For example:

  %1 = icmp slt i32 %a, i32 0
  %2 = sext i32 %a to i64
  %3 = select i1 %1, i64 %2, i64 0

Would now be canonicalized into:

  %1 = icmp slt i32 %a, i32 0
  %2 = select i1 %1, i32 %a, i32 0
  %3 = sext i32 %2 to i64

This builds upon a patch posted by David Majenemer
(https://www.marc.info/?l=llvm-commits&m=143008038714141&w=2). That pass
passively stopped instcombine from ruining canonical patterns. This
patch additionally actively makes instcombine canonicalize too.

Canonicalization of expressions involving a change in type from int->fp
or fp->int are not yet implemented.

llvm-svn: 237453
2015-05-15 16:10:59 +00:00
..
Analysis Allow min/max detection to see through casts. 2015-05-15 16:04:50 +00:00
AsmParser [opaque pointer type] Use the value type of the GlobalVariable rather than accessing it through the pointee's type 2015-05-13 22:55:01 +00:00
Bitcode [opaque pointer type] Explicit pointee type for GEPOperator/GEPConstantExpr. 2015-05-08 00:42:26 +00:00
CodeGen Add SDNodes for umin, umax, smin and smax. 2015-05-15 09:03:15 +00:00
DebugInfo [DWARF] Add CIE header fields address_size and segment_size when generating dwarf-4 2015-05-12 15:25:08 +00:00
ExecutionEngine Readdress r236990, use of static members on a non-static variable. 2015-05-11 22:20:48 +00:00
Fuzzer [lib/Fuzzer] Add SHA1 implementation from public domain. 2015-05-14 22:41:49 +00:00
IR [opaque pointer type] Use GlobalVariable::getValueType rather than accessing it through the GV's pointee type 2015-05-13 22:54:54 +00:00
IRReader Use ADDITIONAL_HEADER_DIRS in all LLVM CMake projects. 2015-02-11 03:28:02 +00:00
LineEditor Use ADDITIONAL_HEADER_DIRS in all LLVM CMake projects. 2015-02-11 03:28:02 +00:00
Linker [opaque pointer type] Pass GlobalAlias the actual pointer type rather than decomposing it into pointee type + address space 2015-04-29 21:22:39 +00:00
LTO LTO: Add API to choose whether to embed uselists 2015-04-27 23:38:54 +00:00
MC MC: Avoid some UB caused by left shifting a negative value. NFC 2015-05-14 23:54:49 +00:00
Object [llvm-readobj/obj2yaml/yaml2obj] Support MIPS machine ELF header flags 2015-05-08 07:04:59 +00:00
Option Option parsing: properly handle flag aliases for joined options (PR23394) 2015-05-04 18:00:13 +00:00
Passes [PM] Fixup for r231556 where I missed a dependency on intrinsics 2015-03-07 09:08:20 +00:00
ProfileData InstrProf: Treat functions with a coverage map but no profile as unreached 2015-05-13 22:03:04 +00:00
Support YAML: Add support for literal block scalar I/O. 2015-05-14 23:08:22 +00:00
TableGen TableGen: Avoid undefined behaviour by doing this shift in int64 2015-05-14 06:47:02 +00:00
Target [xcore] Only support the 'm' inline assembly memory constraint. NFC. 2015-05-15 12:32:16 +00:00
Transforms Canonicalize min/max expressions correctly. 2015-05-15 16:10:59 +00:00
CMakeLists.txt [PM] Create a separate library for high-level pass management code. 2015-03-07 09:02:36 +00:00
LLVMBuild.txt Reflow long lines of some LLVMBuild files 2015-05-14 15:38:27 +00:00
Makefile [PM] Create a separate library for high-level pass management code. 2015-03-07 09:02:36 +00:00