llvm-project/llvm/lib/CodeGen/SelectionDAG
Simon Pilgrim fb32eea1b4 [SelectionDAG] Improve knownbits handling of UMIN/UMAX (PR31293)
This patch improves the knownbits logic for unsigned integer min/max opcodes.

For UMIN we know that the result will have the maximum of the inputs' known leading zero bits in the result, similarly for UMAX the maximum of the inputs' leading one bits.

This is particularly useful for simplifying clamping patterns,. e.g. as SSE doesn't have a uitofp instruction we want to use sitofp instead where possible and for that we need to confirm that the top bit is not set.

Differential Revision: https://reviews.llvm.org/D28853

llvm-svn: 292528
2017-01-19 22:41:22 +00:00
..
CMakeLists.txt [CMake] NFC. Updating CMake dependency specifications 2016-11-17 04:36:50 +00:00
DAGCombiner.cpp [SelectionDAG] Add support for BITREVERSE constant folding 2017-01-16 13:39:00 +00:00
FastISel.cpp [CodeGen] Rename MachineInstrBuilder::addOperand. NFC 2017-01-13 09:58:52 +00:00
FunctionLoweringInfo.cpp Simplify FunctionLoweringInfo.cpp with range for loops 2016-12-30 00:21:38 +00:00
InstrEmitter.cpp SDAG: Make sure we use an allocatable reg class when we create this vreg 2016-10-28 22:42:54 +00:00
InstrEmitter.h Pass DebugLoc and SDLoc by const ref. 2016-06-12 15:39:02 +00:00
LLVMBuild.txt
LegalizeDAG.cpp DAG: Avoid OOB when legalizing vector indexing 2017-01-10 22:02:30 +00:00
LegalizeFloatTypes.cpp Replace APFloatBase static fltSemantics data members with getter functions 2016-12-14 11:57:17 +00:00
LegalizeIntegerTypes.cpp Remove unused CONVERT_RNDSAT intrinsics 2017-01-10 22:38:02 +00:00
LegalizeTypes.cpp DAG: Avoid OOB when legalizing vector indexing 2017-01-10 22:02:30 +00:00
LegalizeTypes.h Remove unused CONVERT_RNDSAT intrinsics 2017-01-10 22:38:02 +00:00
LegalizeTypesGeneric.cpp Do not assume that FP vector operands are never legalized by expanding 2016-10-26 19:51:35 +00:00
LegalizeVectorOps.cpp [SelectionDAG] Add expansion and promotion of [US]MUL_LOHI 2016-12-08 14:08:14 +00:00
LegalizeVectorTypes.cpp Remove unused CONVERT_RNDSAT intrinsics 2017-01-10 22:38:02 +00:00
ResourcePriorityQueue.cpp Use the range variant of find instead of unpacking begin/end 2016-08-11 22:21:41 +00:00
SDNodeDbgValue.h Apply clang-tidy's misc-move-constructor-init throughout LLVM. 2016-05-27 14:27:24 +00:00
ScheduleDAGFast.cpp Replace uint16_t with the MCPhysReg typedef in many places. A lot of physical register arrays already use this typedef. 2015-12-05 07:13:35 +00:00
ScheduleDAGRRList.cpp Use the range variant of find instead of unpacking begin/end 2016-08-11 22:21:41 +00:00
ScheduleDAGSDNodes.cpp [DAG] Don't increase SDNodeOrder for dbg.value/declare. 2017-01-19 13:55:55 +00:00
ScheduleDAGSDNodes.h [Target] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-01-11 01:45:03 +00:00
ScheduleDAGVLIW.cpp
SelectionDAG.cpp [SelectionDAG] Improve knownbits handling of UMIN/UMAX (PR31293) 2017-01-19 22:41:22 +00:00
SelectionDAGBuilder.cpp [DAG] Don't increase SDNodeOrder for dbg.value/declare. 2017-01-19 13:55:55 +00:00
SelectionDAGBuilder.h Apply clang-tidy's performance-unnecessary-value-param to LLVM. 2017-01-13 14:39:03 +00:00
SelectionDAGDumper.cpp Remove unused CONVERT_RNDSAT intrinsics 2017-01-10 22:38:02 +00:00
SelectionDAGISel.cpp Move most EH from MachineModuleInfo to MachineFunction 2016-12-01 19:32:15 +00:00
SelectionDAGPrinter.cpp
SelectionDAGTargetInfo.cpp Rename TargetSelectionDAGInfo into SelectionDAGTargetInfo and move it to CodeGen/ 2016-01-27 16:32:26 +00:00
StatepointLowering.cpp [Statepoints] Reuse stack slots more than once within a basic block 2016-12-13 01:21:15 +00:00
StatepointLowering.h [NFC] Header cleanup 2016-04-18 09:17:29 +00:00
TargetLowering.cpp DAG: Avoid OOB when legalizing vector indexing 2017-01-10 22:02:30 +00:00