TargetLowering.cpp revision 065421f99fc155c3910a77c3a47de99f3f6af4d0
148486893f46d2e12e926682a3ecb908716bc66c4Chris Lattner//===-- TargetLowering.cpp - Implement the TargetLowering class -----------===//
234695381d626485a560594f162701088079589dfMisha Brukman//
36fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell//                     The LLVM Compiler Infrastructure
46fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell//
56fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell// This file was developed by the LLVM research group and is distributed under
66fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell// the University of Illinois Open Source License. See LICENSE.TXT for details.
734695381d626485a560594f162701088079589dfMisha Brukman//
86fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell//===----------------------------------------------------------------------===//
9a578a6d054e8219c730840700d8d5fd29f15a962Vikram S. Adve//
10a578a6d054e8219c730840700d8d5fd29f15a962Vikram S. Adve// This implements the TargetLowering class.
11a578a6d054e8219c730840700d8d5fd29f15a962Vikram S. Adve//
12a578a6d054e8219c730840700d8d5fd29f15a962Vikram S. Adve//===----------------------------------------------------------------------===//
13a578a6d054e8219c730840700d8d5fd29f15a962Vikram S. Adve
14a578a6d054e8219c730840700d8d5fd29f15a962Vikram S. Adve#include "llvm/Target/TargetLowering.h"
15a578a6d054e8219c730840700d8d5fd29f15a962Vikram S. Adve#include "llvm/Target/TargetData.h"
16a578a6d054e8219c730840700d8d5fd29f15a962Vikram S. Adve#include "llvm/Target/TargetMachine.h"
17a578a6d054e8219c730840700d8d5fd29f15a962Vikram S. Adve#include "llvm/Target/MRegisterInfo.h"
186cee630070b1a7183ed56a8404e812629f5ca538Jim Laskey#include "llvm/DerivedTypes.h"
19a42649e3dd4c8be2d45451429a41f2b13dbeeb78Brian Gaeke#include "llvm/CodeGen/SelectionDAG.h"
20a578a6d054e8219c730840700d8d5fd29f15a962Vikram S. Adve#include "llvm/ADT/StringExtras.h"
21d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke#include "llvm/Support/MathExtras.h"
22d0fde30ce850b78371fd1386338350591f9ff494Brian Gaekeusing namespace llvm;
23fb5792f416089d8d8d0c6ee62c1f41a55d2cf75dNate Begeman
242584ba5867c06e676519d5c7cccbcd59eb7641bcChris Lattner/// InitLibcallNames - Set default libcall names.
252584ba5867c06e676519d5c7cccbcd59eb7641bcChris Lattner///
261e60a9165dc4d6ce5650dacc026f2942696af920Chris Lattnerstatic void InitLibcallNames(const char **Names) {
27a84b1c7c4efdba050cbf308eb9ac4fd8392b69d9Evan Cheng  Names[RTLIB::SHL_I32] = "__ashlsi3";
28d0f166a4868c957041fa0ca0a35adde97aa10c91Chris Lattner  Names[RTLIB::SHL_I64] = "__ashldi3";
29498231bc601013da055fb8786d091b743c20006aBrian Gaeke  Names[RTLIB::SRL_I32] = "__lshrsi3";
305b927c790ed3baa9b555057c9c0904fc34990ba8Chris Lattner  Names[RTLIB::SRL_I64] = "__lshrdi3";
319f729a30b2e0648209f864da9da8aaa6a4be5e38Chris Lattner  Names[RTLIB::SRA_I32] = "__ashrsi3";
32478df7a7ae3c9aaa753948712d894fade36a8195Chris Lattner  Names[RTLIB::SRA_I64] = "__ashrdi3";
338844a0ba898a3a1db7f5fd91ecf6a5402e3d51a0Brian Gaeke  Names[RTLIB::MUL_I32] = "__mulsi3";
34b6dcbfc6d1d18e9b3a5dcd0df5f00f7ac3d0100fChris Lattner  Names[RTLIB::MUL_I64] = "__muldi3";
35ebc7511e8688f2ec23915570377dd4aaf167560eVikram S. Adve  Names[RTLIB::SDIV_I32] = "__divsi3";
36f70e0c216c074bd2ae2b08178f5512849545db4eChris Lattner  Names[RTLIB::SDIV_I64] = "__divdi3";
37a578a6d054e8219c730840700d8d5fd29f15a962Vikram S. Adve  Names[RTLIB::UDIV_I32] = "__udivsi3";
384c1aa866578f7a358407a22fe55b454f52a24325Evan Cheng  Names[RTLIB::UDIV_I64] = "__udivdi3";
394c1aa866578f7a358407a22fe55b454f52a24325Evan Cheng  Names[RTLIB::SREM_I32] = "__modsi3";
404c1aa866578f7a358407a22fe55b454f52a24325Evan Cheng  Names[RTLIB::SREM_I64] = "__moddi3";
414c1aa866578f7a358407a22fe55b454f52a24325Evan Cheng  Names[RTLIB::UREM_I32] = "__umodsi3";
424c1aa866578f7a358407a22fe55b454f52a24325Evan Cheng  Names[RTLIB::UREM_I64] = "__umoddi3";
434c1aa866578f7a358407a22fe55b454f52a24325Evan Cheng  Names[RTLIB::NEG_I32] = "__negsi2";
444c1aa866578f7a358407a22fe55b454f52a24325Evan Cheng  Names[RTLIB::NEG_I64] = "__negdi2";
454c1aa866578f7a358407a22fe55b454f52a24325Evan Cheng  Names[RTLIB::ADD_F32] = "__addsf3";
464c1aa866578f7a358407a22fe55b454f52a24325Evan Cheng  Names[RTLIB::ADD_F64] = "__adddf3";
474c1aa866578f7a358407a22fe55b454f52a24325Evan Cheng  Names[RTLIB::SUB_F32] = "__subsf3";
485b927c790ed3baa9b555057c9c0904fc34990ba8Chris Lattner  Names[RTLIB::SUB_F64] = "__subdf3";
495b927c790ed3baa9b555057c9c0904fc34990ba8Chris Lattner  Names[RTLIB::MUL_F32] = "__mulsf3";
505b927c790ed3baa9b555057c9c0904fc34990ba8Chris Lattner  Names[RTLIB::MUL_F64] = "__muldf3";
515b927c790ed3baa9b555057c9c0904fc34990ba8Chris Lattner  Names[RTLIB::DIV_F32] = "__divsf3";
525b927c790ed3baa9b555057c9c0904fc34990ba8Chris Lattner  Names[RTLIB::DIV_F64] = "__divdf3";
5334695381d626485a560594f162701088079589dfMisha Brukman  Names[RTLIB::REM_F32] = "fmodf";
5417035c0edf5463fd9edb8496502f4c5a0dc1d7abChris Lattner  Names[RTLIB::REM_F64] = "fmod";
55c56406c236478f718a2257c2b660561ebc855f16Chris Lattner  Names[RTLIB::NEG_F32] = "__negsf2";
56f70e0c216c074bd2ae2b08178f5512849545db4eChris Lattner  Names[RTLIB::NEG_F64] = "__negdf2";
57f70e0c216c074bd2ae2b08178f5512849545db4eChris Lattner  Names[RTLIB::POWI_F32] = "__powisf2";
5834695381d626485a560594f162701088079589dfMisha Brukman  Names[RTLIB::POWI_F64] = "__powidf2";
5917035c0edf5463fd9edb8496502f4c5a0dc1d7abChris Lattner  Names[RTLIB::SQRT_F32] = "sqrtf";
6017035c0edf5463fd9edb8496502f4c5a0dc1d7abChris Lattner  Names[RTLIB::SQRT_F64] = "sqrt";
61f70e0c216c074bd2ae2b08178f5512849545db4eChris Lattner  Names[RTLIB::SIN_F32] = "sinf";
6234695381d626485a560594f162701088079589dfMisha Brukman  Names[RTLIB::SIN_F64] = "sin";
63992dce13ece1748aef8a6fdeef0f4e271165258cMisha Brukman  Names[RTLIB::COS_F32] = "cosf";
64992dce13ece1748aef8a6fdeef0f4e271165258cMisha Brukman  Names[RTLIB::COS_F64] = "cos";
65992dce13ece1748aef8a6fdeef0f4e271165258cMisha Brukman  Names[RTLIB::FPEXT_F32_F64] = "__extendsfdf2";
66992dce13ece1748aef8a6fdeef0f4e271165258cMisha Brukman  Names[RTLIB::FPROUND_F64_F32] = "__truncdfsf2";
67e3fa53ee4df41925c90ad6cc6a4f132284a1ae66Misha Brukman  Names[RTLIB::FPTOSINT_F32_I32] = "__fixsfsi";
68e3fa53ee4df41925c90ad6cc6a4f132284a1ae66Misha Brukman  Names[RTLIB::FPTOSINT_F32_I64] = "__fixsfdi";
692bed9ecc4b5d74e61c997eb2d3877e0ab6257979Chris Lattner  Names[RTLIB::FPTOSINT_F64_I32] = "__fixdfsi";
7034695381d626485a560594f162701088079589dfMisha Brukman  Names[RTLIB::FPTOSINT_F64_I64] = "__fixdfdi";
7180b90cd1914ced00a58ed9ac4b9dce06e573c8ebMisha Brukman  Names[RTLIB::FPTOUINT_F32_I32] = "__fixunssfsi";
7280b90cd1914ced00a58ed9ac4b9dce06e573c8ebMisha Brukman  Names[RTLIB::FPTOUINT_F32_I64] = "__fixunssfdi";
73992dce13ece1748aef8a6fdeef0f4e271165258cMisha Brukman  Names[RTLIB::FPTOUINT_F64_I32] = "__fixunsdfsi";
74992dce13ece1748aef8a6fdeef0f4e271165258cMisha Brukman  Names[RTLIB::FPTOUINT_F64_I64] = "__fixunsdfdi";
75992dce13ece1748aef8a6fdeef0f4e271165258cMisha Brukman  Names[RTLIB::SINTTOFP_I32_F32] = "__floatsisf";
76992dce13ece1748aef8a6fdeef0f4e271165258cMisha Brukman  Names[RTLIB::SINTTOFP_I32_F64] = "__floatsidf";
772bed9ecc4b5d74e61c997eb2d3877e0ab6257979Chris Lattner  Names[RTLIB::SINTTOFP_I64_F32] = "__floatdisf";
782bed9ecc4b5d74e61c997eb2d3877e0ab6257979Chris Lattner  Names[RTLIB::SINTTOFP_I64_F64] = "__floatdidf";
798d2623d49a7b53f2bb25f2b61c14aecb91e19154Nate Begeman  Names[RTLIB::UINTTOFP_I32_F32] = "__floatunsisf";
808d2623d49a7b53f2bb25f2b61c14aecb91e19154Nate Begeman  Names[RTLIB::UINTTOFP_I32_F64] = "__floatunsidf";
818d2623d49a7b53f2bb25f2b61c14aecb91e19154Nate Begeman  Names[RTLIB::UINTTOFP_I64_F32] = "__floatundisf";
828d2623d49a7b53f2bb25f2b61c14aecb91e19154Nate Begeman  Names[RTLIB::UINTTOFP_I64_F64] = "__floatundidf";
83a578a6d054e8219c730840700d8d5fd29f15a962Vikram S. Adve  Names[RTLIB::OEQ_F32] = "__eqsf2";
84f70e0c216c074bd2ae2b08178f5512849545db4eChris Lattner  Names[RTLIB::OEQ_F64] = "__eqdf2";
856334205cb5c626d2b35e42dd4c710b857bf0a126Chris Lattner  Names[RTLIB::UNE_F32] = "__nesf2";
86a51e273a764b2a3e8fe856c3bd47b09f9446f380Chris Lattner  Names[RTLIB::UNE_F64] = "__nedf2";
87a51e273a764b2a3e8fe856c3bd47b09f9446f380Chris Lattner  Names[RTLIB::OGE_F32] = "__gesf2";
88a51e273a764b2a3e8fe856c3bd47b09f9446f380Chris Lattner  Names[RTLIB::OGE_F64] = "__gedf2";
89a51e273a764b2a3e8fe856c3bd47b09f9446f380Chris Lattner  Names[RTLIB::OLT_F32] = "__ltsf2";
90a51e273a764b2a3e8fe856c3bd47b09f9446f380Chris Lattner  Names[RTLIB::OLT_F64] = "__ltdf2";
91a51e273a764b2a3e8fe856c3bd47b09f9446f380Chris Lattner  Names[RTLIB::OLE_F32] = "__lesf2";
92a51e273a764b2a3e8fe856c3bd47b09f9446f380Chris Lattner  Names[RTLIB::OLE_F64] = "__ledf2";
93a51e273a764b2a3e8fe856c3bd47b09f9446f380Chris Lattner  Names[RTLIB::OGT_F32] = "__gtsf2";
94a51e273a764b2a3e8fe856c3bd47b09f9446f380Chris Lattner  Names[RTLIB::OGT_F64] = "__gtdf2";
95a51e273a764b2a3e8fe856c3bd47b09f9446f380Chris Lattner  Names[RTLIB::UO_F32] = "__unordsf2";
96a51e273a764b2a3e8fe856c3bd47b09f9446f380Chris Lattner  Names[RTLIB::UO_F64] = "__unorddf2";
97a51e273a764b2a3e8fe856c3bd47b09f9446f380Chris Lattner  Names[RTLIB::O_F32] = "__unordsf2";
98a51e273a764b2a3e8fe856c3bd47b09f9446f380Chris Lattner  Names[RTLIB::O_F64] = "__unorddf2";
99a51e273a764b2a3e8fe856c3bd47b09f9446f380Chris Lattner}
100c56406c236478f718a2257c2b660561ebc855f16Chris Lattner
101f70e0c216c074bd2ae2b08178f5512849545db4eChris Lattner/// InitCmpLibcallCCs - Set default comparison libcall CC.
102992dce13ece1748aef8a6fdeef0f4e271165258cMisha Brukman///
103992dce13ece1748aef8a6fdeef0f4e271165258cMisha Brukmanstatic void InitCmpLibcallCCs(ISD::CondCode *CCs) {
104992dce13ece1748aef8a6fdeef0f4e271165258cMisha Brukman  memset(CCs, ISD::SETCC_INVALID, sizeof(ISD::CondCode)*RTLIB::UNKNOWN_LIBCALL);
105992dce13ece1748aef8a6fdeef0f4e271165258cMisha Brukman  CCs[RTLIB::OEQ_F32] = ISD::SETEQ;
106f70e0c216c074bd2ae2b08178f5512849545db4eChris Lattner  CCs[RTLIB::OEQ_F64] = ISD::SETEQ;
10734695381d626485a560594f162701088079589dfMisha Brukman  CCs[RTLIB::UNE_F32] = ISD::SETNE;
108a578a6d054e8219c730840700d8d5fd29f15a962Vikram S. Adve  CCs[RTLIB::UNE_F64] = ISD::SETNE;
109a578a6d054e8219c730840700d8d5fd29f15a962Vikram S. Adve  CCs[RTLIB::OGE_F32] = ISD::SETGE;
110a578a6d054e8219c730840700d8d5fd29f15a962Vikram S. Adve  CCs[RTLIB::OGE_F64] = ISD::SETGE;
111d55697cf136150b697b9bbddce9088e87a1be963Vikram S. Adve  CCs[RTLIB::OLT_F32] = ISD::SETLT;
112a84b1c7c4efdba050cbf308eb9ac4fd8392b69d9Evan Cheng  CCs[RTLIB::OLT_F64] = ISD::SETLT;
11334695381d626485a560594f162701088079589dfMisha Brukman  CCs[RTLIB::OLE_F32] = ISD::SETLE;
11436c2a0593509da714bea6457dd1b00a7417ce342Chris Lattner  CCs[RTLIB::OLE_F64] = ISD::SETLE;
11536c2a0593509da714bea6457dd1b00a7417ce342Chris Lattner  CCs[RTLIB::OGT_F32] = ISD::SETGT;
116a84b1c7c4efdba050cbf308eb9ac4fd8392b69d9Evan Cheng  CCs[RTLIB::OGT_F64] = ISD::SETGT;
11708053e46be0c7f2024b3df7bfad822f71ac94de3Chris Lattner  CCs[RTLIB::UO_F32] = ISD::SETNE;
118d55697cf136150b697b9bbddce9088e87a1be963Vikram S. Adve  CCs[RTLIB::UO_F64] = ISD::SETNE;
1199eb59ec548b861d6ede05b4e6dc22aabf645e665Jeff Cohen  CCs[RTLIB::O_F32] = ISD::SETEQ;
1208d2623d49a7b53f2bb25f2b61c14aecb91e19154Nate Begeman  CCs[RTLIB::O_F64] = ISD::SETEQ;
1218d2623d49a7b53f2bb25f2b61c14aecb91e19154Nate Begeman}
1225ab83632066071413841af43bc5d1edcced18076Chris Lattner
1238d2623d49a7b53f2bb25f2b61c14aecb91e19154Nate BegemanTargetLowering::TargetLowering(TargetMachine &tm)
1245ab83632066071413841af43bc5d1edcced18076Chris Lattner  : TM(tm), TD(TM.getTargetData()) {
125fb5792f416089d8d8d0c6ee62c1f41a55d2cf75dNate Begeman  assert(ISD::BUILTIN_OP_END <= 156 &&
1265ab83632066071413841af43bc5d1edcced18076Chris Lattner         "Fixed size array in TargetLowering is not large enough!");
127fb5792f416089d8d8d0c6ee62c1f41a55d2cf75dNate Begeman  // All operations default to being supported.
128fb5792f416089d8d8d0c6ee62c1f41a55d2cf75dNate Begeman  memset(OpActions, 0, sizeof(OpActions));
129478df7a7ae3c9aaa753948712d894fade36a8195Chris Lattner  memset(LoadXActions, 0, sizeof(LoadXActions));
1305b927c790ed3baa9b555057c9c0904fc34990ba8Chris Lattner  memset(&StoreXActions, 0, sizeof(StoreXActions));
1315b927c790ed3baa9b555057c9c0904fc34990ba8Chris Lattner  // Initialize all indexed load / store to expand.
132478df7a7ae3c9aaa753948712d894fade36a8195Chris Lattner  for (unsigned VT = 0; VT != (unsigned)MVT::LAST_VALUETYPE; ++VT) {
133478df7a7ae3c9aaa753948712d894fade36a8195Chris Lattner    for (unsigned IM = (unsigned)ISD::PRE_INC;
134478df7a7ae3c9aaa753948712d894fade36a8195Chris Lattner         IM != (unsigned)ISD::LAST_INDEXED_MODE; ++IM) {
1351e60a9165dc4d6ce5650dacc026f2942696af920Chris Lattner      setIndexedLoadAction(IM, (MVT::ValueType)VT, Expand);
1361e60a9165dc4d6ce5650dacc026f2942696af920Chris Lattner      setIndexedStoreAction(IM, (MVT::ValueType)VT, Expand);
1371e60a9165dc4d6ce5650dacc026f2942696af920Chris Lattner    }
1381e60a9165dc4d6ce5650dacc026f2942696af920Chris Lattner  }
1396cee630070b1a7183ed56a8404e812629f5ca538Jim Laskey
1406cee630070b1a7183ed56a8404e812629f5ca538Jim Laskey  IsLittleEndian = TD->isLittleEndian();
1416cee630070b1a7183ed56a8404e812629f5ca538Jim Laskey  UsesGlobalOffsetTable = false;
1426cee630070b1a7183ed56a8404e812629f5ca538Jim Laskey  ShiftAmountTy = SetCCResultTy = PointerTy = getValueType(TD->getIntPtrType());
1436cee630070b1a7183ed56a8404e812629f5ca538Jim Laskey  ShiftAmtHandling = Undefined;
1446cee630070b1a7183ed56a8404e812629f5ca538Jim Laskey  memset(RegClassForVT, 0,MVT::LAST_VALUETYPE*sizeof(TargetRegisterClass*));
1456cee630070b1a7183ed56a8404e812629f5ca538Jim Laskey  memset(TargetDAGCombineArray, 0,
1461e60a9165dc4d6ce5650dacc026f2942696af920Chris Lattner         sizeof(TargetDAGCombineArray)/sizeof(TargetDAGCombineArray[0]));
14736c2a0593509da714bea6457dd1b00a7417ce342Chris Lattner  maxStoresPerMemset = maxStoresPerMemcpy = maxStoresPerMemmove = 8;
14836c2a0593509da714bea6457dd1b00a7417ce342Chris Lattner  allowUnalignedMemoryAccesses = false;
149498231bc601013da055fb8786d091b743c20006aBrian Gaeke  UseUnderscoreSetJmp = false;
15036c2a0593509da714bea6457dd1b00a7417ce342Chris Lattner  UseUnderscoreLongJmp = false;
1514c1aa866578f7a358407a22fe55b454f52a24325Evan Cheng  SelectIsExpensive = false;
1524c1aa866578f7a358407a22fe55b454f52a24325Evan Cheng  IntDivIsCheap = false;
1534c1aa866578f7a358407a22fe55b454f52a24325Evan Cheng  Pow2DivIsCheap = false;
1544c1aa866578f7a358407a22fe55b454f52a24325Evan Cheng  StackPointerRegisterToSaveRestore = 0;
1554c1aa866578f7a358407a22fe55b454f52a24325Evan Cheng  ExceptionPointerRegister = 0;
1564c1aa866578f7a358407a22fe55b454f52a24325Evan Cheng  ExceptionSelectorRegister = 0;
1574c1aa866578f7a358407a22fe55b454f52a24325Evan Cheng  SchedPreferenceInfo = SchedulingForLatency;
15811f14c8be0946a8fb95189156ff1d64a01ff7da3Chris Lattner  JumpBufSize = 0;
15911f14c8be0946a8fb95189156ff1d64a01ff7da3Chris Lattner  JumpBufAlignment = 0;
16011f14c8be0946a8fb95189156ff1d64a01ff7da3Chris Lattner
16133f80a87230f61b85f62cbc956b6f521b6e2063cChris Lattner  InitLibcallNames(LibcallRoutineNames);
16211f14c8be0946a8fb95189156ff1d64a01ff7da3Chris Lattner  InitCmpLibcallCCs(CmpLibcallCCs);
16311f14c8be0946a8fb95189156ff1d64a01ff7da3Chris Lattner}
16411f14c8be0946a8fb95189156ff1d64a01ff7da3Chris Lattner
16511f14c8be0946a8fb95189156ff1d64a01ff7da3Chris LattnerTargetLowering::~TargetLowering() {}
166df2e425f2a3b64eb17be927539cd39cb1f1c5f77Chris Lattner
167df2e425f2a3b64eb17be927539cd39cb1f1c5f77Chris Lattner/// setValueTypeAction - Set the action for a particular value type.  This
168df2e425f2a3b64eb17be927539cd39cb1f1c5f77Chris Lattner/// assumes an action has not already been set for this value type.
169ebb1af16bea8f163cbb74c55ae41885c396f72cbChris Lattnerstatic void SetValueTypeAction(MVT::ValueType VT,
17011f14c8be0946a8fb95189156ff1d64a01ff7da3Chris Lattner                               TargetLowering::LegalizeAction Action,
171df2e425f2a3b64eb17be927539cd39cb1f1c5f77Chris Lattner                               TargetLowering &TLI,
1726334205cb5c626d2b35e42dd4c710b857bf0a126Chris Lattner                               MVT::ValueType *TransformToType,
1736334205cb5c626d2b35e42dd4c710b857bf0a126Chris Lattner                        TargetLowering::ValueTypeActionImpl &ValueTypeActions) {
174ebc7511e8688f2ec23915570377dd4aaf167560eVikram S. Adve  ValueTypeActions.setTypeAction(VT, Action);
1759f729a30b2e0648209f864da9da8aaa6a4be5e38Chris Lattner  if (Action == TargetLowering::Promote) {
1768844a0ba898a3a1db7f5fd91ecf6a5402e3d51a0Brian Gaeke    MVT::ValueType PromoteTo;
1779f729a30b2e0648209f864da9da8aaa6a4be5e38Chris Lattner    if (VT == MVT::f32)
1789f729a30b2e0648209f864da9da8aaa6a4be5e38Chris Lattner      PromoteTo = MVT::f64;
179b7a2d2256fede467c7f50444eb3cddadcd7d34c9Chris Lattner    else {
1805c1b5244b956a28667bc2a9e7a84fa39697ba715Chris Lattner      unsigned LargerReg = VT+1;
1818844a0ba898a3a1db7f5fd91ecf6a5402e3d51a0Brian Gaeke      while (!TLI.isTypeLegal((MVT::ValueType)LargerReg)) {
182b7a2d2256fede467c7f50444eb3cddadcd7d34c9Chris Lattner        ++LargerReg;
1839f729a30b2e0648209f864da9da8aaa6a4be5e38Chris Lattner        assert(MVT::isInteger((MVT::ValueType)LargerReg) &&
1849f729a30b2e0648209f864da9da8aaa6a4be5e38Chris Lattner               "Nothing to promote to??");
185a578a6d054e8219c730840700d8d5fd29f15a962Vikram S. Adve      }
186a578a6d054e8219c730840700d8d5fd29f15a962Vikram S. Adve      PromoteTo = (MVT::ValueType)LargerReg;
187d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke    }
188d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke
189a578a6d054e8219c730840700d8d5fd29f15a962Vikram S. Adve    assert(MVT::isInteger(VT) == MVT::isInteger(PromoteTo) &&
190           MVT::isFloatingPoint(VT) == MVT::isFloatingPoint(PromoteTo) &&
191           "Can only promote from int->int or fp->fp!");
192    assert(VT < PromoteTo && "Must promote to a larger type!");
193    TransformToType[VT] = PromoteTo;
194  } else if (Action == TargetLowering::Expand) {
195    // f32 and f64 is each expanded to corresponding integer type of same size.
196    if (VT == MVT::f32)
197      TransformToType[VT] = MVT::i32;
198    else if (VT == MVT::f64)
199      TransformToType[VT] = MVT::i64;
200    else {
201      assert((VT == MVT::Vector || MVT::isInteger(VT)) && VT > MVT::i8 &&
202             "Cannot expand this type: target must support SOME integer reg!");
203      // Expand to the next smaller integer type!
204      TransformToType[VT] = (MVT::ValueType)(VT-1);
205    }
206  }
207}
208
209
210/// computeRegisterProperties - Once all of the register classes are added,
211/// this allows us to compute derived properties we expose.
212void TargetLowering::computeRegisterProperties() {
213  assert(MVT::LAST_VALUETYPE <= 32 &&
214         "Too many value types for ValueTypeActions to hold!");
215
216  // Everything defaults to one.
217  for (unsigned i = 0; i != MVT::LAST_VALUETYPE; ++i)
218    NumElementsForVT[i] = 1;
219
220  // Find the largest integer register class.
221  unsigned LargestIntReg = MVT::i128;
222  for (; RegClassForVT[LargestIntReg] == 0; --LargestIntReg)
223    assert(LargestIntReg != MVT::i1 && "No integer registers defined!");
224
225  // Every integer value type larger than this largest register takes twice as
226  // many registers to represent as the previous ValueType.
227  unsigned ExpandedReg = LargestIntReg; ++LargestIntReg;
228  for (++ExpandedReg; MVT::isInteger((MVT::ValueType)ExpandedReg);++ExpandedReg)
229    NumElementsForVT[ExpandedReg] = 2*NumElementsForVT[ExpandedReg-1];
230
231  // Inspect all of the ValueType's possible, deciding how to process them.
232  for (unsigned IntReg = MVT::i1; IntReg <= MVT::i128; ++IntReg)
233    // If we are expanding this type, expand it!
234    if (getNumElements((MVT::ValueType)IntReg) != 1)
235      SetValueTypeAction((MVT::ValueType)IntReg, Expand, *this, TransformToType,
236                         ValueTypeActions);
237    else if (!isTypeLegal((MVT::ValueType)IntReg))
238      // Otherwise, if we don't have native support, we must promote to a
239      // larger type.
240      SetValueTypeAction((MVT::ValueType)IntReg, Promote, *this,
241                         TransformToType, ValueTypeActions);
242    else
243      TransformToType[(MVT::ValueType)IntReg] = (MVT::ValueType)IntReg;
244
245  // If the target does not have native F64 support, expand it to I64. We will
246  // be generating soft float library calls. If the target does not have native
247  // support for F32, promote it to F64 if it is legal. Otherwise, expand it to
248  // I32.
249  if (isTypeLegal(MVT::f64))
250    TransformToType[MVT::f64] = MVT::f64;
251  else {
252    NumElementsForVT[MVT::f64] = NumElementsForVT[MVT::i64];
253    SetValueTypeAction(MVT::f64, Expand, *this, TransformToType,
254                       ValueTypeActions);
255  }
256  if (isTypeLegal(MVT::f32))
257    TransformToType[MVT::f32] = MVT::f32;
258  else if (isTypeLegal(MVT::f64))
259    SetValueTypeAction(MVT::f32, Promote, *this, TransformToType,
260                       ValueTypeActions);
261  else {
262    NumElementsForVT[MVT::f32] = NumElementsForVT[MVT::i32];
263    SetValueTypeAction(MVT::f32, Expand, *this, TransformToType,
264                       ValueTypeActions);
265  }
266
267  // Set MVT::Vector to always be Expanded
268  SetValueTypeAction(MVT::Vector, Expand, *this, TransformToType,
269                     ValueTypeActions);
270
271  // Loop over all of the legal vector value types, specifying an identity type
272  // transformation.
273  for (unsigned i = MVT::FIRST_VECTOR_VALUETYPE;
274       i <= MVT::LAST_VECTOR_VALUETYPE; ++i) {
275    if (isTypeLegal((MVT::ValueType)i))
276      TransformToType[i] = (MVT::ValueType)i;
277  }
278}
279
280const char *TargetLowering::getTargetNodeName(unsigned Opcode) const {
281  return NULL;
282}
283
284/// getVectorTypeBreakdown - Packed types are broken down into some number of
285/// legal first class types. For example, <8 x float> maps to 2 MVT::v4f32
286/// with Altivec or SSE1, or 8 promoted MVT::f64 values with the X86 FP stack.
287///
288/// This method returns the number and type of the resultant breakdown.
289///
290unsigned TargetLowering::getVectorTypeBreakdown(const VectorType *PTy,
291                                                MVT::ValueType &PTyElementVT,
292                                      MVT::ValueType &PTyLegalElementVT) const {
293  // Figure out the right, legal destination reg to copy into.
294  unsigned NumElts = PTy->getNumElements();
295  MVT::ValueType EltTy = getValueType(PTy->getElementType());
296
297  unsigned NumVectorRegs = 1;
298
299  // Divide the input until we get to a supported size.  This will always
300  // end with a scalar if the target doesn't support vectors.
301  while (NumElts > 1 && !isTypeLegal(getVectorType(EltTy, NumElts))) {
302    NumElts >>= 1;
303    NumVectorRegs <<= 1;
304  }
305
306  MVT::ValueType VT;
307  if (NumElts == 1) {
308    VT = EltTy;
309  } else {
310    VT = getVectorType(EltTy, NumElts);
311  }
312  PTyElementVT = VT;
313
314  MVT::ValueType DestVT = getTypeToTransformTo(VT);
315  PTyLegalElementVT = DestVT;
316  if (DestVT < VT) {
317    // Value is expanded, e.g. i64 -> i16.
318    return NumVectorRegs*(MVT::getSizeInBits(VT)/MVT::getSizeInBits(DestVT));
319  } else {
320    // Otherwise, promotion or legal types use the same number of registers as
321    // the vector decimated to the appropriate level.
322    return NumVectorRegs;
323  }
324
325  return 1;
326}
327
328//===----------------------------------------------------------------------===//
329//  Optimization Methods
330//===----------------------------------------------------------------------===//
331
332/// ShrinkDemandedConstant - Check to see if the specified operand of the
333/// specified instruction is a constant integer.  If so, check to see if there
334/// are any bits set in the constant that are not demanded.  If so, shrink the
335/// constant and return true.
336bool TargetLowering::TargetLoweringOpt::ShrinkDemandedConstant(SDOperand Op,
337                                                            uint64_t Demanded) {
338  // FIXME: ISD::SELECT, ISD::SELECT_CC
339  switch(Op.getOpcode()) {
340  default: break;
341  case ISD::AND:
342  case ISD::OR:
343  case ISD::XOR:
344    if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1)))
345      if ((~Demanded & C->getValue()) != 0) {
346        MVT::ValueType VT = Op.getValueType();
347        SDOperand New = DAG.getNode(Op.getOpcode(), VT, Op.getOperand(0),
348                                    DAG.getConstant(Demanded & C->getValue(),
349                                                    VT));
350        return CombineTo(Op, New);
351      }
352    break;
353  }
354  return false;
355}
356
357/// SimplifyDemandedBits - Look at Op.  At this point, we know that only the
358/// DemandedMask bits of the result of Op are ever used downstream.  If we can
359/// use this information to simplify Op, create a new simplified DAG node and
360/// return true, returning the original and new nodes in Old and New. Otherwise,
361/// analyze the expression and return a mask of KnownOne and KnownZero bits for
362/// the expression (used to simplify the caller).  The KnownZero/One bits may
363/// only be accurate for those bits in the DemandedMask.
364bool TargetLowering::SimplifyDemandedBits(SDOperand Op, uint64_t DemandedMask,
365                                          uint64_t &KnownZero,
366                                          uint64_t &KnownOne,
367                                          TargetLoweringOpt &TLO,
368                                          unsigned Depth) const {
369  KnownZero = KnownOne = 0;   // Don't know anything.
370  // Other users may use these bits.
371  if (!Op.Val->hasOneUse()) {
372    if (Depth != 0) {
373      // If not at the root, Just compute the KnownZero/KnownOne bits to
374      // simplify things downstream.
375      ComputeMaskedBits(Op, DemandedMask, KnownZero, KnownOne, Depth);
376      return false;
377    }
378    // If this is the root being simplified, allow it to have multiple uses,
379    // just set the DemandedMask to all bits.
380    DemandedMask = MVT::getIntVTBitMask(Op.getValueType());
381  } else if (DemandedMask == 0) {
382    // Not demanding any bits from Op.
383    if (Op.getOpcode() != ISD::UNDEF)
384      return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::UNDEF, Op.getValueType()));
385    return false;
386  } else if (Depth == 6) {        // Limit search depth.
387    return false;
388  }
389
390  uint64_t KnownZero2, KnownOne2, KnownZeroOut, KnownOneOut;
391  switch (Op.getOpcode()) {
392  case ISD::Constant:
393    // We know all of the bits for a constant!
394    KnownOne = cast<ConstantSDNode>(Op)->getValue() & DemandedMask;
395    KnownZero = ~KnownOne & DemandedMask;
396    return false;   // Don't fall through, will infinitely loop.
397  case ISD::AND:
398    // If the RHS is a constant, check to see if the LHS would be zero without
399    // using the bits from the RHS.  Below, we use knowledge about the RHS to
400    // simplify the LHS, here we're using information from the LHS to simplify
401    // the RHS.
402    if (ConstantSDNode *RHSC = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
403      uint64_t LHSZero, LHSOne;
404      ComputeMaskedBits(Op.getOperand(0), DemandedMask,
405                        LHSZero, LHSOne, Depth+1);
406      // If the LHS already has zeros where RHSC does, this and is dead.
407      if ((LHSZero & DemandedMask) == (~RHSC->getValue() & DemandedMask))
408        return TLO.CombineTo(Op, Op.getOperand(0));
409      // If any of the set bits in the RHS are known zero on the LHS, shrink
410      // the constant.
411      if (TLO.ShrinkDemandedConstant(Op, ~LHSZero & DemandedMask))
412        return true;
413    }
414
415    if (SimplifyDemandedBits(Op.getOperand(1), DemandedMask, KnownZero,
416                             KnownOne, TLO, Depth+1))
417      return true;
418    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
419    if (SimplifyDemandedBits(Op.getOperand(0), DemandedMask & ~KnownZero,
420                             KnownZero2, KnownOne2, TLO, Depth+1))
421      return true;
422    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
423
424    // If all of the demanded bits are known one on one side, return the other.
425    // These bits cannot contribute to the result of the 'and'.
426    if ((DemandedMask & ~KnownZero2 & KnownOne)==(DemandedMask & ~KnownZero2))
427      return TLO.CombineTo(Op, Op.getOperand(0));
428    if ((DemandedMask & ~KnownZero & KnownOne2)==(DemandedMask & ~KnownZero))
429      return TLO.CombineTo(Op, Op.getOperand(1));
430    // If all of the demanded bits in the inputs are known zeros, return zero.
431    if ((DemandedMask & (KnownZero|KnownZero2)) == DemandedMask)
432      return TLO.CombineTo(Op, TLO.DAG.getConstant(0, Op.getValueType()));
433    // If the RHS is a constant, see if we can simplify it.
434    if (TLO.ShrinkDemandedConstant(Op, DemandedMask & ~KnownZero2))
435      return true;
436
437    // Output known-1 bits are only known if set in both the LHS & RHS.
438    KnownOne &= KnownOne2;
439    // Output known-0 are known to be clear if zero in either the LHS | RHS.
440    KnownZero |= KnownZero2;
441    break;
442  case ISD::OR:
443    if (SimplifyDemandedBits(Op.getOperand(1), DemandedMask, KnownZero,
444                             KnownOne, TLO, Depth+1))
445      return true;
446    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
447    if (SimplifyDemandedBits(Op.getOperand(0), DemandedMask & ~KnownOne,
448                             KnownZero2, KnownOne2, TLO, Depth+1))
449      return true;
450    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
451
452    // If all of the demanded bits are known zero on one side, return the other.
453    // These bits cannot contribute to the result of the 'or'.
454    if ((DemandedMask & ~KnownOne2 & KnownZero) == (DemandedMask & ~KnownOne2))
455      return TLO.CombineTo(Op, Op.getOperand(0));
456    if ((DemandedMask & ~KnownOne & KnownZero2) == (DemandedMask & ~KnownOne))
457      return TLO.CombineTo(Op, Op.getOperand(1));
458    // If all of the potentially set bits on one side are known to be set on
459    // the other side, just use the 'other' side.
460    if ((DemandedMask & (~KnownZero) & KnownOne2) ==
461        (DemandedMask & (~KnownZero)))
462      return TLO.CombineTo(Op, Op.getOperand(0));
463    if ((DemandedMask & (~KnownZero2) & KnownOne) ==
464        (DemandedMask & (~KnownZero2)))
465      return TLO.CombineTo(Op, Op.getOperand(1));
466    // If the RHS is a constant, see if we can simplify it.
467    if (TLO.ShrinkDemandedConstant(Op, DemandedMask))
468      return true;
469
470    // Output known-0 bits are only known if clear in both the LHS & RHS.
471    KnownZero &= KnownZero2;
472    // Output known-1 are known to be set if set in either the LHS | RHS.
473    KnownOne |= KnownOne2;
474    break;
475  case ISD::XOR:
476    if (SimplifyDemandedBits(Op.getOperand(1), DemandedMask, KnownZero,
477                             KnownOne, TLO, Depth+1))
478      return true;
479    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
480    if (SimplifyDemandedBits(Op.getOperand(0), DemandedMask, KnownZero2,
481                             KnownOne2, TLO, Depth+1))
482      return true;
483    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
484
485    // If all of the demanded bits are known zero on one side, return the other.
486    // These bits cannot contribute to the result of the 'xor'.
487    if ((DemandedMask & KnownZero) == DemandedMask)
488      return TLO.CombineTo(Op, Op.getOperand(0));
489    if ((DemandedMask & KnownZero2) == DemandedMask)
490      return TLO.CombineTo(Op, Op.getOperand(1));
491
492    // If all of the unknown bits are known to be zero on one side or the other
493    // (but not both) turn this into an *inclusive* or.
494    //    e.g. (A & C1)^(B & C2) -> (A & C1)|(B & C2) iff C1&C2 == 0
495    if ((DemandedMask & ~KnownZero & ~KnownZero2) == 0)
496      return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::OR, Op.getValueType(),
497                                               Op.getOperand(0),
498                                               Op.getOperand(1)));
499
500    // Output known-0 bits are known if clear or set in both the LHS & RHS.
501    KnownZeroOut = (KnownZero & KnownZero2) | (KnownOne & KnownOne2);
502    // Output known-1 are known to be set if set in only one of the LHS, RHS.
503    KnownOneOut = (KnownZero & KnownOne2) | (KnownOne & KnownZero2);
504
505    // If all of the demanded bits on one side are known, and all of the set
506    // bits on that side are also known to be set on the other side, turn this
507    // into an AND, as we know the bits will be cleared.
508    //    e.g. (X | C1) ^ C2 --> (X | C1) & ~C2 iff (C1&C2) == C2
509    if ((DemandedMask & (KnownZero|KnownOne)) == DemandedMask) { // all known
510      if ((KnownOne & KnownOne2) == KnownOne) {
511        MVT::ValueType VT = Op.getValueType();
512        SDOperand ANDC = TLO.DAG.getConstant(~KnownOne & DemandedMask, VT);
513        return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::AND, VT, Op.getOperand(0),
514                                                 ANDC));
515      }
516    }
517
518    // If the RHS is a constant, see if we can simplify it.
519    // FIXME: for XOR, we prefer to force bits to 1 if they will make a -1.
520    if (TLO.ShrinkDemandedConstant(Op, DemandedMask))
521      return true;
522
523    KnownZero = KnownZeroOut;
524    KnownOne  = KnownOneOut;
525    break;
526  case ISD::SETCC:
527    // If we know the result of a setcc has the top bits zero, use this info.
528    if (getSetCCResultContents() == TargetLowering::ZeroOrOneSetCCResult)
529      KnownZero |= (MVT::getIntVTBitMask(Op.getValueType()) ^ 1ULL);
530    break;
531  case ISD::SELECT:
532    if (SimplifyDemandedBits(Op.getOperand(2), DemandedMask, KnownZero,
533                             KnownOne, TLO, Depth+1))
534      return true;
535    if (SimplifyDemandedBits(Op.getOperand(1), DemandedMask, KnownZero2,
536                             KnownOne2, TLO, Depth+1))
537      return true;
538    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
539    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
540
541    // If the operands are constants, see if we can simplify them.
542    if (TLO.ShrinkDemandedConstant(Op, DemandedMask))
543      return true;
544
545    // Only known if known in both the LHS and RHS.
546    KnownOne &= KnownOne2;
547    KnownZero &= KnownZero2;
548    break;
549  case ISD::SELECT_CC:
550    if (SimplifyDemandedBits(Op.getOperand(3), DemandedMask, KnownZero,
551                             KnownOne, TLO, Depth+1))
552      return true;
553    if (SimplifyDemandedBits(Op.getOperand(2), DemandedMask, KnownZero2,
554                             KnownOne2, TLO, Depth+1))
555      return true;
556    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
557    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
558
559    // If the operands are constants, see if we can simplify them.
560    if (TLO.ShrinkDemandedConstant(Op, DemandedMask))
561      return true;
562
563    // Only known if known in both the LHS and RHS.
564    KnownOne &= KnownOne2;
565    KnownZero &= KnownZero2;
566    break;
567  case ISD::SHL:
568    if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
569      if (SimplifyDemandedBits(Op.getOperand(0), DemandedMask >> SA->getValue(),
570                               KnownZero, KnownOne, TLO, Depth+1))
571        return true;
572      KnownZero <<= SA->getValue();
573      KnownOne  <<= SA->getValue();
574      KnownZero |= (1ULL << SA->getValue())-1;  // low bits known zero.
575    }
576    break;
577  case ISD::SRL:
578    if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
579      MVT::ValueType VT = Op.getValueType();
580      unsigned ShAmt = SA->getValue();
581
582      // Compute the new bits that are at the top now.
583      uint64_t TypeMask = MVT::getIntVTBitMask(VT);
584      if (SimplifyDemandedBits(Op.getOperand(0),
585                               (DemandedMask << ShAmt) & TypeMask,
586                               KnownZero, KnownOne, TLO, Depth+1))
587        return true;
588      assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
589      KnownZero &= TypeMask;
590      KnownOne  &= TypeMask;
591      KnownZero >>= ShAmt;
592      KnownOne  >>= ShAmt;
593
594      uint64_t HighBits = (1ULL << ShAmt)-1;
595      HighBits <<= MVT::getSizeInBits(VT) - ShAmt;
596      KnownZero |= HighBits;  // High bits known zero.
597    }
598    break;
599  case ISD::SRA:
600    if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
601      MVT::ValueType VT = Op.getValueType();
602      unsigned ShAmt = SA->getValue();
603
604      // Compute the new bits that are at the top now.
605      uint64_t TypeMask = MVT::getIntVTBitMask(VT);
606
607      uint64_t InDemandedMask = (DemandedMask << ShAmt) & TypeMask;
608
609      // If any of the demanded bits are produced by the sign extension, we also
610      // demand the input sign bit.
611      uint64_t HighBits = (1ULL << ShAmt)-1;
612      HighBits <<= MVT::getSizeInBits(VT) - ShAmt;
613      if (HighBits & DemandedMask)
614        InDemandedMask |= MVT::getIntVTSignBit(VT);
615
616      if (SimplifyDemandedBits(Op.getOperand(0), InDemandedMask,
617                               KnownZero, KnownOne, TLO, Depth+1))
618        return true;
619      assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
620      KnownZero &= TypeMask;
621      KnownOne  &= TypeMask;
622      KnownZero >>= ShAmt;
623      KnownOne  >>= ShAmt;
624
625      // Handle the sign bits.
626      uint64_t SignBit = MVT::getIntVTSignBit(VT);
627      SignBit >>= ShAmt;  // Adjust to where it is now in the mask.
628
629      // If the input sign bit is known to be zero, or if none of the top bits
630      // are demanded, turn this into an unsigned shift right.
631      if ((KnownZero & SignBit) || (HighBits & ~DemandedMask) == HighBits) {
632        return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::SRL, VT, Op.getOperand(0),
633                                                 Op.getOperand(1)));
634      } else if (KnownOne & SignBit) { // New bits are known one.
635        KnownOne |= HighBits;
636      }
637    }
638    break;
639  case ISD::SIGN_EXTEND_INREG: {
640    MVT::ValueType EVT = cast<VTSDNode>(Op.getOperand(1))->getVT();
641
642    // Sign extension.  Compute the demanded bits in the result that are not
643    // present in the input.
644    uint64_t NewBits = ~MVT::getIntVTBitMask(EVT) & DemandedMask;
645
646    // If none of the extended bits are demanded, eliminate the sextinreg.
647    if (NewBits == 0)
648      return TLO.CombineTo(Op, Op.getOperand(0));
649
650    uint64_t InSignBit = MVT::getIntVTSignBit(EVT);
651    int64_t InputDemandedBits = DemandedMask & MVT::getIntVTBitMask(EVT);
652
653    // Since the sign extended bits are demanded, we know that the sign
654    // bit is demanded.
655    InputDemandedBits |= InSignBit;
656
657    if (SimplifyDemandedBits(Op.getOperand(0), InputDemandedBits,
658                             KnownZero, KnownOne, TLO, Depth+1))
659      return true;
660    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
661
662    // If the sign bit of the input is known set or clear, then we know the
663    // top bits of the result.
664
665    // If the input sign bit is known zero, convert this into a zero extension.
666    if (KnownZero & InSignBit)
667      return TLO.CombineTo(Op,
668                           TLO.DAG.getZeroExtendInReg(Op.getOperand(0), EVT));
669
670    if (KnownOne & InSignBit) {    // Input sign bit known set
671      KnownOne |= NewBits;
672      KnownZero &= ~NewBits;
673    } else {                       // Input sign bit unknown
674      KnownZero &= ~NewBits;
675      KnownOne &= ~NewBits;
676    }
677    break;
678  }
679  case ISD::CTTZ:
680  case ISD::CTLZ:
681  case ISD::CTPOP: {
682    MVT::ValueType VT = Op.getValueType();
683    unsigned LowBits = Log2_32(MVT::getSizeInBits(VT))+1;
684    KnownZero = ~((1ULL << LowBits)-1) & MVT::getIntVTBitMask(VT);
685    KnownOne  = 0;
686    break;
687  }
688  case ISD::LOAD: {
689    if (ISD::isZEXTLoad(Op.Val)) {
690      LoadSDNode *LD = cast<LoadSDNode>(Op);
691      MVT::ValueType VT = LD->getLoadedVT();
692      KnownZero |= ~MVT::getIntVTBitMask(VT) & DemandedMask;
693    }
694    break;
695  }
696  case ISD::ZERO_EXTEND: {
697    uint64_t InMask = MVT::getIntVTBitMask(Op.getOperand(0).getValueType());
698
699    // If none of the top bits are demanded, convert this into an any_extend.
700    uint64_t NewBits = (~InMask) & DemandedMask;
701    if (NewBits == 0)
702      return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::ANY_EXTEND,
703                                               Op.getValueType(),
704                                               Op.getOperand(0)));
705
706    if (SimplifyDemandedBits(Op.getOperand(0), DemandedMask & InMask,
707                             KnownZero, KnownOne, TLO, Depth+1))
708      return true;
709    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
710    KnownZero |= NewBits;
711    break;
712  }
713  case ISD::SIGN_EXTEND: {
714    MVT::ValueType InVT = Op.getOperand(0).getValueType();
715    uint64_t InMask    = MVT::getIntVTBitMask(InVT);
716    uint64_t InSignBit = MVT::getIntVTSignBit(InVT);
717    uint64_t NewBits   = (~InMask) & DemandedMask;
718
719    // If none of the top bits are demanded, convert this into an any_extend.
720    if (NewBits == 0)
721      return TLO.CombineTo(Op,TLO.DAG.getNode(ISD::ANY_EXTEND,Op.getValueType(),
722                                           Op.getOperand(0)));
723
724    // Since some of the sign extended bits are demanded, we know that the sign
725    // bit is demanded.
726    uint64_t InDemandedBits = DemandedMask & InMask;
727    InDemandedBits |= InSignBit;
728
729    if (SimplifyDemandedBits(Op.getOperand(0), InDemandedBits, KnownZero,
730                             KnownOne, TLO, Depth+1))
731      return true;
732
733    // If the sign bit is known zero, convert this to a zero extend.
734    if (KnownZero & InSignBit)
735      return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::ZERO_EXTEND,
736                                               Op.getValueType(),
737                                               Op.getOperand(0)));
738
739    // If the sign bit is known one, the top bits match.
740    if (KnownOne & InSignBit) {
741      KnownOne  |= NewBits;
742      KnownZero &= ~NewBits;
743    } else {   // Otherwise, top bits aren't known.
744      KnownOne  &= ~NewBits;
745      KnownZero &= ~NewBits;
746    }
747    break;
748  }
749  case ISD::ANY_EXTEND: {
750    uint64_t InMask = MVT::getIntVTBitMask(Op.getOperand(0).getValueType());
751    if (SimplifyDemandedBits(Op.getOperand(0), DemandedMask & InMask,
752                             KnownZero, KnownOne, TLO, Depth+1))
753      return true;
754    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
755    break;
756  }
757  case ISD::TRUNCATE: {
758    // Simplify the input, using demanded bit information, and compute the known
759    // zero/one bits live out.
760    if (SimplifyDemandedBits(Op.getOperand(0), DemandedMask,
761                             KnownZero, KnownOne, TLO, Depth+1))
762      return true;
763
764    // If the input is only used by this truncate, see if we can shrink it based
765    // on the known demanded bits.
766    if (Op.getOperand(0).Val->hasOneUse()) {
767      SDOperand In = Op.getOperand(0);
768      switch (In.getOpcode()) {
769      default: break;
770      case ISD::SRL:
771        // Shrink SRL by a constant if none of the high bits shifted in are
772        // demanded.
773        if (ConstantSDNode *ShAmt = dyn_cast<ConstantSDNode>(In.getOperand(1))){
774          uint64_t HighBits = MVT::getIntVTBitMask(In.getValueType());
775          HighBits &= ~MVT::getIntVTBitMask(Op.getValueType());
776          HighBits >>= ShAmt->getValue();
777
778          if (ShAmt->getValue() < MVT::getSizeInBits(Op.getValueType()) &&
779              (DemandedMask & HighBits) == 0) {
780            // None of the shifted in bits are needed.  Add a truncate of the
781            // shift input, then shift it.
782            SDOperand NewTrunc = TLO.DAG.getNode(ISD::TRUNCATE,
783                                                 Op.getValueType(),
784                                                 In.getOperand(0));
785            return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::SRL,Op.getValueType(),
786                                                   NewTrunc, In.getOperand(1)));
787          }
788        }
789        break;
790      }
791    }
792
793    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
794    uint64_t OutMask = MVT::getIntVTBitMask(Op.getValueType());
795    KnownZero &= OutMask;
796    KnownOne &= OutMask;
797    break;
798  }
799  case ISD::AssertZext: {
800    MVT::ValueType VT = cast<VTSDNode>(Op.getOperand(1))->getVT();
801    uint64_t InMask = MVT::getIntVTBitMask(VT);
802    if (SimplifyDemandedBits(Op.getOperand(0), DemandedMask & InMask,
803                             KnownZero, KnownOne, TLO, Depth+1))
804      return true;
805    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
806    KnownZero |= ~InMask & DemandedMask;
807    break;
808  }
809  case ISD::ADD:
810  case ISD::SUB:
811  case ISD::INTRINSIC_WO_CHAIN:
812  case ISD::INTRINSIC_W_CHAIN:
813  case ISD::INTRINSIC_VOID:
814    // Just use ComputeMaskedBits to compute output bits.
815    ComputeMaskedBits(Op, DemandedMask, KnownZero, KnownOne, Depth);
816    break;
817  }
818
819  // If we know the value of all of the demanded bits, return this as a
820  // constant.
821  if ((DemandedMask & (KnownZero|KnownOne)) == DemandedMask)
822    return TLO.CombineTo(Op, TLO.DAG.getConstant(KnownOne, Op.getValueType()));
823
824  return false;
825}
826
827/// MaskedValueIsZero - Return true if 'V & Mask' is known to be zero.  We use
828/// this predicate to simplify operations downstream.  Mask is known to be zero
829/// for bits that V cannot have.
830bool TargetLowering::MaskedValueIsZero(SDOperand Op, uint64_t Mask,
831                                       unsigned Depth) const {
832  uint64_t KnownZero, KnownOne;
833  ComputeMaskedBits(Op, Mask, KnownZero, KnownOne, Depth);
834  assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
835  return (KnownZero & Mask) == Mask;
836}
837
838/// ComputeMaskedBits - Determine which of the bits specified in Mask are
839/// known to be either zero or one and return them in the KnownZero/KnownOne
840/// bitsets.  This code only analyzes bits in Mask, in order to short-circuit
841/// processing.
842void TargetLowering::ComputeMaskedBits(SDOperand Op, uint64_t Mask,
843                                       uint64_t &KnownZero, uint64_t &KnownOne,
844                                       unsigned Depth) const {
845  KnownZero = KnownOne = 0;   // Don't know anything.
846  if (Depth == 6 || Mask == 0)
847    return;  // Limit search depth.
848
849  uint64_t KnownZero2, KnownOne2;
850
851  switch (Op.getOpcode()) {
852  case ISD::Constant:
853    // We know all of the bits for a constant!
854    KnownOne = cast<ConstantSDNode>(Op)->getValue() & Mask;
855    KnownZero = ~KnownOne & Mask;
856    return;
857  case ISD::AND:
858    // If either the LHS or the RHS are Zero, the result is zero.
859    ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
860    Mask &= ~KnownZero;
861    ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero2, KnownOne2, Depth+1);
862    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
863    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
864
865    // Output known-1 bits are only known if set in both the LHS & RHS.
866    KnownOne &= KnownOne2;
867    // Output known-0 are known to be clear if zero in either the LHS | RHS.
868    KnownZero |= KnownZero2;
869    return;
870  case ISD::OR:
871    ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
872    Mask &= ~KnownOne;
873    ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero2, KnownOne2, Depth+1);
874    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
875    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
876
877    // Output known-0 bits are only known if clear in both the LHS & RHS.
878    KnownZero &= KnownZero2;
879    // Output known-1 are known to be set if set in either the LHS | RHS.
880    KnownOne |= KnownOne2;
881    return;
882  case ISD::XOR: {
883    ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
884    ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero2, KnownOne2, Depth+1);
885    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
886    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
887
888    // Output known-0 bits are known if clear or set in both the LHS & RHS.
889    uint64_t KnownZeroOut = (KnownZero & KnownZero2) | (KnownOne & KnownOne2);
890    // Output known-1 are known to be set if set in only one of the LHS, RHS.
891    KnownOne = (KnownZero & KnownOne2) | (KnownOne & KnownZero2);
892    KnownZero = KnownZeroOut;
893    return;
894  }
895  case ISD::SELECT:
896    ComputeMaskedBits(Op.getOperand(2), Mask, KnownZero, KnownOne, Depth+1);
897    ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero2, KnownOne2, Depth+1);
898    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
899    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
900
901    // Only known if known in both the LHS and RHS.
902    KnownOne &= KnownOne2;
903    KnownZero &= KnownZero2;
904    return;
905  case ISD::SELECT_CC:
906    ComputeMaskedBits(Op.getOperand(3), Mask, KnownZero, KnownOne, Depth+1);
907    ComputeMaskedBits(Op.getOperand(2), Mask, KnownZero2, KnownOne2, Depth+1);
908    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
909    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
910
911    // Only known if known in both the LHS and RHS.
912    KnownOne &= KnownOne2;
913    KnownZero &= KnownZero2;
914    return;
915  case ISD::SETCC:
916    // If we know the result of a setcc has the top bits zero, use this info.
917    if (getSetCCResultContents() == TargetLowering::ZeroOrOneSetCCResult)
918      KnownZero |= (MVT::getIntVTBitMask(Op.getValueType()) ^ 1ULL);
919    return;
920  case ISD::SHL:
921    // (shl X, C1) & C2 == 0   iff   (X & C2 >>u C1) == 0
922    if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
923      ComputeMaskedBits(Op.getOperand(0), Mask >> SA->getValue(),
924                        KnownZero, KnownOne, Depth+1);
925      assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
926      KnownZero <<= SA->getValue();
927      KnownOne  <<= SA->getValue();
928      KnownZero |= (1ULL << SA->getValue())-1;  // low bits known zero.
929    }
930    return;
931  case ISD::SRL:
932    // (ushr X, C1) & C2 == 0   iff  (-1 >> C1) & C2 == 0
933    if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
934      MVT::ValueType VT = Op.getValueType();
935      unsigned ShAmt = SA->getValue();
936
937      uint64_t TypeMask = MVT::getIntVTBitMask(VT);
938      ComputeMaskedBits(Op.getOperand(0), (Mask << ShAmt) & TypeMask,
939                        KnownZero, KnownOne, Depth+1);
940      assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
941      KnownZero &= TypeMask;
942      KnownOne  &= TypeMask;
943      KnownZero >>= ShAmt;
944      KnownOne  >>= ShAmt;
945
946      uint64_t HighBits = (1ULL << ShAmt)-1;
947      HighBits <<= MVT::getSizeInBits(VT)-ShAmt;
948      KnownZero |= HighBits;  // High bits known zero.
949    }
950    return;
951  case ISD::SRA:
952    if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
953      MVT::ValueType VT = Op.getValueType();
954      unsigned ShAmt = SA->getValue();
955
956      // Compute the new bits that are at the top now.
957      uint64_t TypeMask = MVT::getIntVTBitMask(VT);
958
959      uint64_t InDemandedMask = (Mask << ShAmt) & TypeMask;
960      // If any of the demanded bits are produced by the sign extension, we also
961      // demand the input sign bit.
962      uint64_t HighBits = (1ULL << ShAmt)-1;
963      HighBits <<= MVT::getSizeInBits(VT) - ShAmt;
964      if (HighBits & Mask)
965        InDemandedMask |= MVT::getIntVTSignBit(VT);
966
967      ComputeMaskedBits(Op.getOperand(0), InDemandedMask, KnownZero, KnownOne,
968                        Depth+1);
969      assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
970      KnownZero &= TypeMask;
971      KnownOne  &= TypeMask;
972      KnownZero >>= ShAmt;
973      KnownOne  >>= ShAmt;
974
975      // Handle the sign bits.
976      uint64_t SignBit = MVT::getIntVTSignBit(VT);
977      SignBit >>= ShAmt;  // Adjust to where it is now in the mask.
978
979      if (KnownZero & SignBit) {
980        KnownZero |= HighBits;  // New bits are known zero.
981      } else if (KnownOne & SignBit) {
982        KnownOne  |= HighBits;  // New bits are known one.
983      }
984    }
985    return;
986  case ISD::SIGN_EXTEND_INREG: {
987    MVT::ValueType EVT = cast<VTSDNode>(Op.getOperand(1))->getVT();
988
989    // Sign extension.  Compute the demanded bits in the result that are not
990    // present in the input.
991    uint64_t NewBits = ~MVT::getIntVTBitMask(EVT) & Mask;
992
993    uint64_t InSignBit = MVT::getIntVTSignBit(EVT);
994    int64_t InputDemandedBits = Mask & MVT::getIntVTBitMask(EVT);
995
996    // If the sign extended bits are demanded, we know that the sign
997    // bit is demanded.
998    if (NewBits)
999      InputDemandedBits |= InSignBit;
1000
1001    ComputeMaskedBits(Op.getOperand(0), InputDemandedBits,
1002                      KnownZero, KnownOne, Depth+1);
1003    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
1004
1005    // If the sign bit of the input is known set or clear, then we know the
1006    // top bits of the result.
1007    if (KnownZero & InSignBit) {          // Input sign bit known clear
1008      KnownZero |= NewBits;
1009      KnownOne  &= ~NewBits;
1010    } else if (KnownOne & InSignBit) {    // Input sign bit known set
1011      KnownOne  |= NewBits;
1012      KnownZero &= ~NewBits;
1013    } else {                              // Input sign bit unknown
1014      KnownZero &= ~NewBits;
1015      KnownOne  &= ~NewBits;
1016    }
1017    return;
1018  }
1019  case ISD::CTTZ:
1020  case ISD::CTLZ:
1021  case ISD::CTPOP: {
1022    MVT::ValueType VT = Op.getValueType();
1023    unsigned LowBits = Log2_32(MVT::getSizeInBits(VT))+1;
1024    KnownZero = ~((1ULL << LowBits)-1) & MVT::getIntVTBitMask(VT);
1025    KnownOne  = 0;
1026    return;
1027  }
1028  case ISD::LOAD: {
1029    if (ISD::isZEXTLoad(Op.Val)) {
1030      LoadSDNode *LD = cast<LoadSDNode>(Op);
1031      MVT::ValueType VT = LD->getLoadedVT();
1032      KnownZero |= ~MVT::getIntVTBitMask(VT) & Mask;
1033    }
1034    return;
1035  }
1036  case ISD::ZERO_EXTEND: {
1037    uint64_t InMask  = MVT::getIntVTBitMask(Op.getOperand(0).getValueType());
1038    uint64_t NewBits = (~InMask) & Mask;
1039    ComputeMaskedBits(Op.getOperand(0), Mask & InMask, KnownZero,
1040                      KnownOne, Depth+1);
1041    KnownZero |= NewBits & Mask;
1042    KnownOne  &= ~NewBits;
1043    return;
1044  }
1045  case ISD::SIGN_EXTEND: {
1046    MVT::ValueType InVT = Op.getOperand(0).getValueType();
1047    unsigned InBits    = MVT::getSizeInBits(InVT);
1048    uint64_t InMask    = MVT::getIntVTBitMask(InVT);
1049    uint64_t InSignBit = 1ULL << (InBits-1);
1050    uint64_t NewBits   = (~InMask) & Mask;
1051    uint64_t InDemandedBits = Mask & InMask;
1052
1053    // If any of the sign extended bits are demanded, we know that the sign
1054    // bit is demanded.
1055    if (NewBits & Mask)
1056      InDemandedBits |= InSignBit;
1057
1058    ComputeMaskedBits(Op.getOperand(0), InDemandedBits, KnownZero,
1059                      KnownOne, Depth+1);
1060    // If the sign bit is known zero or one, the  top bits match.
1061    if (KnownZero & InSignBit) {
1062      KnownZero |= NewBits;
1063      KnownOne  &= ~NewBits;
1064    } else if (KnownOne & InSignBit) {
1065      KnownOne  |= NewBits;
1066      KnownZero &= ~NewBits;
1067    } else {   // Otherwise, top bits aren't known.
1068      KnownOne  &= ~NewBits;
1069      KnownZero &= ~NewBits;
1070    }
1071    return;
1072  }
1073  case ISD::ANY_EXTEND: {
1074    MVT::ValueType VT = Op.getOperand(0).getValueType();
1075    ComputeMaskedBits(Op.getOperand(0), Mask & MVT::getIntVTBitMask(VT),
1076                      KnownZero, KnownOne, Depth+1);
1077    return;
1078  }
1079  case ISD::TRUNCATE: {
1080    ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero, KnownOne, Depth+1);
1081    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
1082    uint64_t OutMask = MVT::getIntVTBitMask(Op.getValueType());
1083    KnownZero &= OutMask;
1084    KnownOne &= OutMask;
1085    break;
1086  }
1087  case ISD::AssertZext: {
1088    MVT::ValueType VT = cast<VTSDNode>(Op.getOperand(1))->getVT();
1089    uint64_t InMask = MVT::getIntVTBitMask(VT);
1090    ComputeMaskedBits(Op.getOperand(0), Mask & InMask, KnownZero,
1091                      KnownOne, Depth+1);
1092    KnownZero |= (~InMask) & Mask;
1093    return;
1094  }
1095  case ISD::ADD: {
1096    // If either the LHS or the RHS are Zero, the result is zero.
1097    ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
1098    ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero2, KnownOne2, Depth+1);
1099    assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
1100    assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?");
1101
1102    // Output known-0 bits are known if clear or set in both the low clear bits
1103    // common to both LHS & RHS.  For example, 8+(X<<3) is known to have the
1104    // low 3 bits clear.
1105    uint64_t KnownZeroOut = std::min(CountTrailingZeros_64(~KnownZero),
1106                                     CountTrailingZeros_64(~KnownZero2));
1107
1108    KnownZero = (1ULL << KnownZeroOut) - 1;
1109    KnownOne = 0;
1110    return;
1111  }
1112  case ISD::SUB: {
1113    ConstantSDNode *CLHS = dyn_cast<ConstantSDNode>(Op.getOperand(0));
1114    if (!CLHS) return;
1115
1116    // We know that the top bits of C-X are clear if X contains less bits
1117    // than C (i.e. no wrap-around can happen).  For example, 20-X is
1118    // positive if we can prove that X is >= 0 and < 16.
1119    MVT::ValueType VT = CLHS->getValueType(0);
1120    if ((CLHS->getValue() & MVT::getIntVTSignBit(VT)) == 0) {  // sign bit clear
1121      unsigned NLZ = CountLeadingZeros_64(CLHS->getValue()+1);
1122      uint64_t MaskV = (1ULL << (63-NLZ))-1; // NLZ can't be 64 with no sign bit
1123      MaskV = ~MaskV & MVT::getIntVTBitMask(VT);
1124      ComputeMaskedBits(Op.getOperand(1), MaskV, KnownZero, KnownOne, Depth+1);
1125
1126      // If all of the MaskV bits are known to be zero, then we know the output
1127      // top bits are zero, because we now know that the output is from [0-C].
1128      if ((KnownZero & MaskV) == MaskV) {
1129        unsigned NLZ2 = CountLeadingZeros_64(CLHS->getValue());
1130        KnownZero = ~((1ULL << (64-NLZ2))-1) & Mask;  // Top bits known zero.
1131        KnownOne = 0;   // No one bits known.
1132      } else {
1133        KnownZero = KnownOne = 0;  // Otherwise, nothing known.
1134      }
1135    }
1136    return;
1137  }
1138  default:
1139    // Allow the target to implement this method for its nodes.
1140    if (Op.getOpcode() >= ISD::BUILTIN_OP_END) {
1141  case ISD::INTRINSIC_WO_CHAIN:
1142  case ISD::INTRINSIC_W_CHAIN:
1143  case ISD::INTRINSIC_VOID:
1144      computeMaskedBitsForTargetNode(Op, Mask, KnownZero, KnownOne);
1145    }
1146    return;
1147  }
1148}
1149
1150/// computeMaskedBitsForTargetNode - Determine which of the bits specified
1151/// in Mask are known to be either zero or one and return them in the
1152/// KnownZero/KnownOne bitsets.
1153void TargetLowering::computeMaskedBitsForTargetNode(const SDOperand Op,
1154                                                    uint64_t Mask,
1155                                                    uint64_t &KnownZero,
1156                                                    uint64_t &KnownOne,
1157                                                    unsigned Depth) const {
1158  assert((Op.getOpcode() >= ISD::BUILTIN_OP_END ||
1159          Op.getOpcode() == ISD::INTRINSIC_WO_CHAIN ||
1160          Op.getOpcode() == ISD::INTRINSIC_W_CHAIN ||
1161          Op.getOpcode() == ISD::INTRINSIC_VOID) &&
1162         "Should use MaskedValueIsZero if you don't know whether Op"
1163         " is a target node!");
1164  KnownZero = 0;
1165  KnownOne = 0;
1166}
1167
1168/// ComputeNumSignBits - Return the number of times the sign bit of the
1169/// register is replicated into the other bits.  We know that at least 1 bit
1170/// is always equal to the sign bit (itself), but other cases can give us
1171/// information.  For example, immediately after an "SRA X, 2", we know that
1172/// the top 3 bits are all equal to each other, so we return 3.
1173unsigned TargetLowering::ComputeNumSignBits(SDOperand Op, unsigned Depth) const{
1174  MVT::ValueType VT = Op.getValueType();
1175  assert(MVT::isInteger(VT) && "Invalid VT!");
1176  unsigned VTBits = MVT::getSizeInBits(VT);
1177  unsigned Tmp, Tmp2;
1178
1179  if (Depth == 6)
1180    return 1;  // Limit search depth.
1181
1182  switch (Op.getOpcode()) {
1183  default: break;
1184  case ISD::AssertSext:
1185    Tmp = MVT::getSizeInBits(cast<VTSDNode>(Op.getOperand(1))->getVT());
1186    return VTBits-Tmp+1;
1187  case ISD::AssertZext:
1188    Tmp = MVT::getSizeInBits(cast<VTSDNode>(Op.getOperand(1))->getVT());
1189    return VTBits-Tmp;
1190
1191  case ISD::Constant: {
1192    uint64_t Val = cast<ConstantSDNode>(Op)->getValue();
1193    // If negative, invert the bits, then look at it.
1194    if (Val & MVT::getIntVTSignBit(VT))
1195      Val = ~Val;
1196
1197    // Shift the bits so they are the leading bits in the int64_t.
1198    Val <<= 64-VTBits;
1199
1200    // Return # leading zeros.  We use 'min' here in case Val was zero before
1201    // shifting.  We don't want to return '64' as for an i32 "0".
1202    return std::min(VTBits, CountLeadingZeros_64(Val));
1203  }
1204
1205  case ISD::SIGN_EXTEND:
1206    Tmp = VTBits-MVT::getSizeInBits(Op.getOperand(0).getValueType());
1207    return ComputeNumSignBits(Op.getOperand(0), Depth+1) + Tmp;
1208
1209  case ISD::SIGN_EXTEND_INREG:
1210    // Max of the input and what this extends.
1211    Tmp = MVT::getSizeInBits(cast<VTSDNode>(Op.getOperand(1))->getVT());
1212    Tmp = VTBits-Tmp+1;
1213
1214    Tmp2 = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1215    return std::max(Tmp, Tmp2);
1216
1217  case ISD::SRA:
1218    Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1219    // SRA X, C   -> adds C sign bits.
1220    if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
1221      Tmp += C->getValue();
1222      if (Tmp > VTBits) Tmp = VTBits;
1223    }
1224    return Tmp;
1225  case ISD::SHL:
1226    if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
1227      // shl destroys sign bits.
1228      Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1229      if (C->getValue() >= VTBits ||      // Bad shift.
1230          C->getValue() >= Tmp) break;    // Shifted all sign bits out.
1231      return Tmp - C->getValue();
1232    }
1233    break;
1234  case ISD::AND:
1235  case ISD::OR:
1236  case ISD::XOR:    // NOT is handled here.
1237    // Logical binary ops preserve the number of sign bits.
1238    Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1239    if (Tmp == 1) return 1;  // Early out.
1240    Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth+1);
1241    return std::min(Tmp, Tmp2);
1242
1243  case ISD::SELECT:
1244    Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1245    if (Tmp == 1) return 1;  // Early out.
1246    Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth+1);
1247    return std::min(Tmp, Tmp2);
1248
1249  case ISD::SETCC:
1250    // If setcc returns 0/-1, all bits are sign bits.
1251    if (getSetCCResultContents() == ZeroOrNegativeOneSetCCResult)
1252      return VTBits;
1253    break;
1254  case ISD::ROTL:
1255  case ISD::ROTR:
1256    if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
1257      unsigned RotAmt = C->getValue() & (VTBits-1);
1258
1259      // Handle rotate right by N like a rotate left by 32-N.
1260      if (Op.getOpcode() == ISD::ROTR)
1261        RotAmt = (VTBits-RotAmt) & (VTBits-1);
1262
1263      // If we aren't rotating out all of the known-in sign bits, return the
1264      // number that are left.  This handles rotl(sext(x), 1) for example.
1265      Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1266      if (Tmp > RotAmt+1) return Tmp-RotAmt;
1267    }
1268    break;
1269  case ISD::ADD:
1270    // Add can have at most one carry bit.  Thus we know that the output
1271    // is, at worst, one more bit than the inputs.
1272    Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1273    if (Tmp == 1) return 1;  // Early out.
1274
1275    // Special case decrementing a value (ADD X, -1):
1276    if (ConstantSDNode *CRHS = dyn_cast<ConstantSDNode>(Op.getOperand(0)))
1277      if (CRHS->isAllOnesValue()) {
1278        uint64_t KnownZero, KnownOne;
1279        uint64_t Mask = MVT::getIntVTBitMask(VT);
1280        ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero, KnownOne, Depth+1);
1281
1282        // If the input is known to be 0 or 1, the output is 0/-1, which is all
1283        // sign bits set.
1284        if ((KnownZero|1) == Mask)
1285          return VTBits;
1286
1287        // If we are subtracting one from a positive number, there is no carry
1288        // out of the result.
1289        if (KnownZero & MVT::getIntVTSignBit(VT))
1290          return Tmp;
1291      }
1292
1293    Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth+1);
1294    if (Tmp2 == 1) return 1;
1295      return std::min(Tmp, Tmp2)-1;
1296    break;
1297
1298  case ISD::SUB:
1299    Tmp2 = ComputeNumSignBits(Op.getOperand(1), Depth+1);
1300    if (Tmp2 == 1) return 1;
1301
1302    // Handle NEG.
1303    if (ConstantSDNode *CLHS = dyn_cast<ConstantSDNode>(Op.getOperand(0)))
1304      if (CLHS->getValue() == 0) {
1305        uint64_t KnownZero, KnownOne;
1306        uint64_t Mask = MVT::getIntVTBitMask(VT);
1307        ComputeMaskedBits(Op.getOperand(1), Mask, KnownZero, KnownOne, Depth+1);
1308        // If the input is known to be 0 or 1, the output is 0/-1, which is all
1309        // sign bits set.
1310        if ((KnownZero|1) == Mask)
1311          return VTBits;
1312
1313        // If the input is known to be positive (the sign bit is known clear),
1314        // the output of the NEG has the same number of sign bits as the input.
1315        if (KnownZero & MVT::getIntVTSignBit(VT))
1316          return Tmp2;
1317
1318        // Otherwise, we treat this like a SUB.
1319      }
1320
1321    // Sub can have at most one carry bit.  Thus we know that the output
1322    // is, at worst, one more bit than the inputs.
1323    Tmp = ComputeNumSignBits(Op.getOperand(0), Depth+1);
1324    if (Tmp == 1) return 1;  // Early out.
1325      return std::min(Tmp, Tmp2)-1;
1326    break;
1327  case ISD::TRUNCATE:
1328    // FIXME: it's tricky to do anything useful for this, but it is an important
1329    // case for targets like X86.
1330    break;
1331  }
1332
1333  // Handle LOADX separately here. EXTLOAD case will fallthrough.
1334  if (Op.getOpcode() == ISD::LOAD) {
1335    LoadSDNode *LD = cast<LoadSDNode>(Op);
1336    unsigned ExtType = LD->getExtensionType();
1337    switch (ExtType) {
1338    default: break;
1339    case ISD::SEXTLOAD:    // '17' bits known
1340      Tmp = MVT::getSizeInBits(LD->getLoadedVT());
1341      return VTBits-Tmp+1;
1342    case ISD::ZEXTLOAD:    // '16' bits known
1343      Tmp = MVT::getSizeInBits(LD->getLoadedVT());
1344      return VTBits-Tmp;
1345    }
1346  }
1347
1348  // Allow the target to implement this method for its nodes.
1349  if (Op.getOpcode() >= ISD::BUILTIN_OP_END ||
1350      Op.getOpcode() == ISD::INTRINSIC_WO_CHAIN ||
1351      Op.getOpcode() == ISD::INTRINSIC_W_CHAIN ||
1352      Op.getOpcode() == ISD::INTRINSIC_VOID) {
1353    unsigned NumBits = ComputeNumSignBitsForTargetNode(Op, Depth);
1354    if (NumBits > 1) return NumBits;
1355  }
1356
1357  // Finally, if we can prove that the top bits of the result are 0's or 1's,
1358  // use this information.
1359  uint64_t KnownZero, KnownOne;
1360  uint64_t Mask = MVT::getIntVTBitMask(VT);
1361  ComputeMaskedBits(Op, Mask, KnownZero, KnownOne, Depth);
1362
1363  uint64_t SignBit = MVT::getIntVTSignBit(VT);
1364  if (KnownZero & SignBit) {        // SignBit is 0
1365    Mask = KnownZero;
1366  } else if (KnownOne & SignBit) {  // SignBit is 1;
1367    Mask = KnownOne;
1368  } else {
1369    // Nothing known.
1370    return 1;
1371  }
1372
1373  // Okay, we know that the sign bit in Mask is set.  Use CLZ to determine
1374  // the number of identical bits in the top of the input value.
1375  Mask ^= ~0ULL;
1376  Mask <<= 64-VTBits;
1377  // Return # leading zeros.  We use 'min' here in case Val was zero before
1378  // shifting.  We don't want to return '64' as for an i32 "0".
1379  return std::min(VTBits, CountLeadingZeros_64(Mask));
1380}
1381
1382
1383
1384/// ComputeNumSignBitsForTargetNode - This method can be implemented by
1385/// targets that want to expose additional information about sign bits to the
1386/// DAG Combiner.
1387unsigned TargetLowering::ComputeNumSignBitsForTargetNode(SDOperand Op,
1388                                                         unsigned Depth) const {
1389  assert((Op.getOpcode() >= ISD::BUILTIN_OP_END ||
1390          Op.getOpcode() == ISD::INTRINSIC_WO_CHAIN ||
1391          Op.getOpcode() == ISD::INTRINSIC_W_CHAIN ||
1392          Op.getOpcode() == ISD::INTRINSIC_VOID) &&
1393         "Should use ComputeNumSignBits if you don't know whether Op"
1394         " is a target node!");
1395  return 1;
1396}
1397
1398
1399/// SimplifySetCC - Try to simplify a setcc built with the specified operands
1400/// and cc. If it is unable to simplify it, return a null SDOperand.
1401SDOperand
1402TargetLowering::SimplifySetCC(MVT::ValueType VT, SDOperand N0, SDOperand N1,
1403                              ISD::CondCode Cond, bool foldBooleans,
1404                              DAGCombinerInfo &DCI) const {
1405  SelectionDAG &DAG = DCI.DAG;
1406
1407  // These setcc operations always fold.
1408  switch (Cond) {
1409  default: break;
1410  case ISD::SETFALSE:
1411  case ISD::SETFALSE2: return DAG.getConstant(0, VT);
1412  case ISD::SETTRUE:
1413  case ISD::SETTRUE2:  return DAG.getConstant(1, VT);
1414  }
1415
1416  if (ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1.Val)) {
1417    uint64_t C1 = N1C->getValue();
1418    if (isa<ConstantSDNode>(N0.Val)) {
1419      return DAG.FoldSetCC(VT, N0, N1, Cond);
1420    } else {
1421      // If the LHS is '(srl (ctlz x), 5)', the RHS is 0/1, and this is an
1422      // equality comparison, then we're just comparing whether X itself is
1423      // zero.
1424      if (N0.getOpcode() == ISD::SRL && (C1 == 0 || C1 == 1) &&
1425          N0.getOperand(0).getOpcode() == ISD::CTLZ &&
1426          N0.getOperand(1).getOpcode() == ISD::Constant) {
1427        unsigned ShAmt = cast<ConstantSDNode>(N0.getOperand(1))->getValue();
1428        if ((Cond == ISD::SETEQ || Cond == ISD::SETNE) &&
1429            ShAmt == Log2_32(MVT::getSizeInBits(N0.getValueType()))) {
1430          if ((C1 == 0) == (Cond == ISD::SETEQ)) {
1431            // (srl (ctlz x), 5) == 0  -> X != 0
1432            // (srl (ctlz x), 5) != 1  -> X != 0
1433            Cond = ISD::SETNE;
1434          } else {
1435            // (srl (ctlz x), 5) != 0  -> X == 0
1436            // (srl (ctlz x), 5) == 1  -> X == 0
1437            Cond = ISD::SETEQ;
1438          }
1439          SDOperand Zero = DAG.getConstant(0, N0.getValueType());
1440          return DAG.getSetCC(VT, N0.getOperand(0).getOperand(0),
1441                              Zero, Cond);
1442        }
1443      }
1444
1445      // If the LHS is a ZERO_EXTEND, perform the comparison on the input.
1446      if (N0.getOpcode() == ISD::ZERO_EXTEND) {
1447        unsigned InSize = MVT::getSizeInBits(N0.getOperand(0).getValueType());
1448
1449        // If the comparison constant has bits in the upper part, the
1450        // zero-extended value could never match.
1451        if (C1 & (~0ULL << InSize)) {
1452          unsigned VSize = MVT::getSizeInBits(N0.getValueType());
1453          switch (Cond) {
1454          case ISD::SETUGT:
1455          case ISD::SETUGE:
1456          case ISD::SETEQ: return DAG.getConstant(0, VT);
1457          case ISD::SETULT:
1458          case ISD::SETULE:
1459          case ISD::SETNE: return DAG.getConstant(1, VT);
1460          case ISD::SETGT:
1461          case ISD::SETGE:
1462            // True if the sign bit of C1 is set.
1463            return DAG.getConstant((C1 & (1ULL << (VSize-1))) != 0, VT);
1464          case ISD::SETLT:
1465          case ISD::SETLE:
1466            // True if the sign bit of C1 isn't set.
1467            return DAG.getConstant((C1 & (1ULL << (VSize-1))) == 0, VT);
1468          default:
1469            break;
1470          }
1471        }
1472
1473        // Otherwise, we can perform the comparison with the low bits.
1474        switch (Cond) {
1475        case ISD::SETEQ:
1476        case ISD::SETNE:
1477        case ISD::SETUGT:
1478        case ISD::SETUGE:
1479        case ISD::SETULT:
1480        case ISD::SETULE:
1481          return DAG.getSetCC(VT, N0.getOperand(0),
1482                          DAG.getConstant(C1, N0.getOperand(0).getValueType()),
1483                          Cond);
1484        default:
1485          break;   // todo, be more careful with signed comparisons
1486        }
1487      } else if (N0.getOpcode() == ISD::SIGN_EXTEND_INREG &&
1488                 (Cond == ISD::SETEQ || Cond == ISD::SETNE)) {
1489        MVT::ValueType ExtSrcTy = cast<VTSDNode>(N0.getOperand(1))->getVT();
1490        unsigned ExtSrcTyBits = MVT::getSizeInBits(ExtSrcTy);
1491        MVT::ValueType ExtDstTy = N0.getValueType();
1492        unsigned ExtDstTyBits = MVT::getSizeInBits(ExtDstTy);
1493
1494        // If the extended part has any inconsistent bits, it cannot ever
1495        // compare equal.  In other words, they have to be all ones or all
1496        // zeros.
1497        uint64_t ExtBits =
1498          (~0ULL >> (64-ExtSrcTyBits)) & (~0ULL << (ExtDstTyBits-1));
1499        if ((C1 & ExtBits) != 0 && (C1 & ExtBits) != ExtBits)
1500          return DAG.getConstant(Cond == ISD::SETNE, VT);
1501
1502        SDOperand ZextOp;
1503        MVT::ValueType Op0Ty = N0.getOperand(0).getValueType();
1504        if (Op0Ty == ExtSrcTy) {
1505          ZextOp = N0.getOperand(0);
1506        } else {
1507          int64_t Imm = ~0ULL >> (64-ExtSrcTyBits);
1508          ZextOp = DAG.getNode(ISD::AND, Op0Ty, N0.getOperand(0),
1509                               DAG.getConstant(Imm, Op0Ty));
1510        }
1511        if (!DCI.isCalledByLegalizer())
1512          DCI.AddToWorklist(ZextOp.Val);
1513        // Otherwise, make this a use of a zext.
1514        return DAG.getSetCC(VT, ZextOp,
1515                            DAG.getConstant(C1 & (~0ULL>>(64-ExtSrcTyBits)),
1516                                            ExtDstTy),
1517                            Cond);
1518      } else if ((N1C->getValue() == 0 || N1C->getValue() == 1) &&
1519                 (Cond == ISD::SETEQ || Cond == ISD::SETNE)) {
1520
1521        // SETCC (SETCC), [0|1], [EQ|NE]  -> SETCC
1522        if (N0.getOpcode() == ISD::SETCC) {
1523          bool TrueWhenTrue = (Cond == ISD::SETEQ) ^ (N1C->getValue() != 1);
1524          if (TrueWhenTrue)
1525            return N0;
1526
1527          // Invert the condition.
1528          ISD::CondCode CC = cast<CondCodeSDNode>(N0.getOperand(2))->get();
1529          CC = ISD::getSetCCInverse(CC,
1530                               MVT::isInteger(N0.getOperand(0).getValueType()));
1531          return DAG.getSetCC(VT, N0.getOperand(0), N0.getOperand(1), CC);
1532        }
1533
1534        if ((N0.getOpcode() == ISD::XOR ||
1535             (N0.getOpcode() == ISD::AND &&
1536              N0.getOperand(0).getOpcode() == ISD::XOR &&
1537              N0.getOperand(1) == N0.getOperand(0).getOperand(1))) &&
1538            isa<ConstantSDNode>(N0.getOperand(1)) &&
1539            cast<ConstantSDNode>(N0.getOperand(1))->getValue() == 1) {
1540          // If this is (X^1) == 0/1, swap the RHS and eliminate the xor.  We
1541          // can only do this if the top bits are known zero.
1542          if (MaskedValueIsZero(N0, MVT::getIntVTBitMask(N0.getValueType())-1)){
1543            // Okay, get the un-inverted input value.
1544            SDOperand Val;
1545            if (N0.getOpcode() == ISD::XOR)
1546              Val = N0.getOperand(0);
1547            else {
1548              assert(N0.getOpcode() == ISD::AND &&
1549                     N0.getOperand(0).getOpcode() == ISD::XOR);
1550              // ((X^1)&1)^1 -> X & 1
1551              Val = DAG.getNode(ISD::AND, N0.getValueType(),
1552                                N0.getOperand(0).getOperand(0),
1553                                N0.getOperand(1));
1554            }
1555            return DAG.getSetCC(VT, Val, N1,
1556                                Cond == ISD::SETEQ ? ISD::SETNE : ISD::SETEQ);
1557          }
1558        }
1559      }
1560
1561      uint64_t MinVal, MaxVal;
1562      unsigned OperandBitSize = MVT::getSizeInBits(N1C->getValueType(0));
1563      if (ISD::isSignedIntSetCC(Cond)) {
1564        MinVal = 1ULL << (OperandBitSize-1);
1565        if (OperandBitSize != 1)   // Avoid X >> 64, which is undefined.
1566          MaxVal = ~0ULL >> (65-OperandBitSize);
1567        else
1568          MaxVal = 0;
1569      } else {
1570        MinVal = 0;
1571        MaxVal = ~0ULL >> (64-OperandBitSize);
1572      }
1573
1574      // Canonicalize GE/LE comparisons to use GT/LT comparisons.
1575      if (Cond == ISD::SETGE || Cond == ISD::SETUGE) {
1576        if (C1 == MinVal) return DAG.getConstant(1, VT);   // X >= MIN --> true
1577        --C1;                                          // X >= C0 --> X > (C0-1)
1578        return DAG.getSetCC(VT, N0, DAG.getConstant(C1, N1.getValueType()),
1579                        (Cond == ISD::SETGE) ? ISD::SETGT : ISD::SETUGT);
1580      }
1581
1582      if (Cond == ISD::SETLE || Cond == ISD::SETULE) {
1583        if (C1 == MaxVal) return DAG.getConstant(1, VT);   // X <= MAX --> true
1584        ++C1;                                          // X <= C0 --> X < (C0+1)
1585        return DAG.getSetCC(VT, N0, DAG.getConstant(C1, N1.getValueType()),
1586                        (Cond == ISD::SETLE) ? ISD::SETLT : ISD::SETULT);
1587      }
1588
1589      if ((Cond == ISD::SETLT || Cond == ISD::SETULT) && C1 == MinVal)
1590        return DAG.getConstant(0, VT);      // X < MIN --> false
1591      if ((Cond == ISD::SETGE || Cond == ISD::SETUGE) && C1 == MinVal)
1592        return DAG.getConstant(1, VT);      // X >= MIN --> true
1593      if ((Cond == ISD::SETGT || Cond == ISD::SETUGT) && C1 == MaxVal)
1594        return DAG.getConstant(0, VT);      // X > MAX --> false
1595      if ((Cond == ISD::SETLE || Cond == ISD::SETULE) && C1 == MaxVal)
1596        return DAG.getConstant(1, VT);      // X <= MAX --> true
1597
1598      // Canonicalize setgt X, Min --> setne X, Min
1599      if ((Cond == ISD::SETGT || Cond == ISD::SETUGT) && C1 == MinVal)
1600        return DAG.getSetCC(VT, N0, N1, ISD::SETNE);
1601      // Canonicalize setlt X, Max --> setne X, Max
1602      if ((Cond == ISD::SETLT || Cond == ISD::SETULT) && C1 == MaxVal)
1603        return DAG.getSetCC(VT, N0, N1, ISD::SETNE);
1604
1605      // If we have setult X, 1, turn it into seteq X, 0
1606      if ((Cond == ISD::SETLT || Cond == ISD::SETULT) && C1 == MinVal+1)
1607        return DAG.getSetCC(VT, N0, DAG.getConstant(MinVal, N0.getValueType()),
1608                        ISD::SETEQ);
1609      // If we have setugt X, Max-1, turn it into seteq X, Max
1610      else if ((Cond == ISD::SETGT || Cond == ISD::SETUGT) && C1 == MaxVal-1)
1611        return DAG.getSetCC(VT, N0, DAG.getConstant(MaxVal, N0.getValueType()),
1612                        ISD::SETEQ);
1613
1614      // If we have "setcc X, C0", check to see if we can shrink the immediate
1615      // by changing cc.
1616
1617      // SETUGT X, SINTMAX  -> SETLT X, 0
1618      if (Cond == ISD::SETUGT && OperandBitSize != 1 &&
1619          C1 == (~0ULL >> (65-OperandBitSize)))
1620        return DAG.getSetCC(VT, N0, DAG.getConstant(0, N1.getValueType()),
1621                            ISD::SETLT);
1622
1623      // FIXME: Implement the rest of these.
1624
1625      // Fold bit comparisons when we can.
1626      if ((Cond == ISD::SETEQ || Cond == ISD::SETNE) &&
1627          VT == N0.getValueType() && N0.getOpcode() == ISD::AND)
1628        if (ConstantSDNode *AndRHS =
1629                    dyn_cast<ConstantSDNode>(N0.getOperand(1))) {
1630          if (Cond == ISD::SETNE && C1 == 0) {// (X & 8) != 0  -->  (X & 8) >> 3
1631            // Perform the xform if the AND RHS is a single bit.
1632            if (isPowerOf2_64(AndRHS->getValue())) {
1633              return DAG.getNode(ISD::SRL, VT, N0,
1634                             DAG.getConstant(Log2_64(AndRHS->getValue()),
1635                                             getShiftAmountTy()));
1636            }
1637          } else if (Cond == ISD::SETEQ && C1 == AndRHS->getValue()) {
1638            // (X & 8) == 8  -->  (X & 8) >> 3
1639            // Perform the xform if C1 is a single bit.
1640            if (isPowerOf2_64(C1)) {
1641              return DAG.getNode(ISD::SRL, VT, N0,
1642                          DAG.getConstant(Log2_64(C1), getShiftAmountTy()));
1643            }
1644          }
1645        }
1646    }
1647  } else if (isa<ConstantSDNode>(N0.Val)) {
1648      // Ensure that the constant occurs on the RHS.
1649    return DAG.getSetCC(VT, N1, N0, ISD::getSetCCSwappedOperands(Cond));
1650  }
1651
1652  if (isa<ConstantFPSDNode>(N0.Val)) {
1653    // Constant fold or commute setcc.
1654    SDOperand O = DAG.FoldSetCC(VT, N0, N1, Cond);
1655    if (O.Val) return O;
1656  }
1657
1658  if (N0 == N1) {
1659    // We can always fold X == X for integer setcc's.
1660    if (MVT::isInteger(N0.getValueType()))
1661      return DAG.getConstant(ISD::isTrueWhenEqual(Cond), VT);
1662    unsigned UOF = ISD::getUnorderedFlavor(Cond);
1663    if (UOF == 2)   // FP operators that are undefined on NaNs.
1664      return DAG.getConstant(ISD::isTrueWhenEqual(Cond), VT);
1665    if (UOF == unsigned(ISD::isTrueWhenEqual(Cond)))
1666      return DAG.getConstant(UOF, VT);
1667    // Otherwise, we can't fold it.  However, we can simplify it to SETUO/SETO
1668    // if it is not already.
1669    ISD::CondCode NewCond = UOF == 0 ? ISD::SETO : ISD::SETUO;
1670    if (NewCond != Cond)
1671      return DAG.getSetCC(VT, N0, N1, NewCond);
1672  }
1673
1674  if ((Cond == ISD::SETEQ || Cond == ISD::SETNE) &&
1675      MVT::isInteger(N0.getValueType())) {
1676    if (N0.getOpcode() == ISD::ADD || N0.getOpcode() == ISD::SUB ||
1677        N0.getOpcode() == ISD::XOR) {
1678      // Simplify (X+Y) == (X+Z) -->  Y == Z
1679      if (N0.getOpcode() == N1.getOpcode()) {
1680        if (N0.getOperand(0) == N1.getOperand(0))
1681          return DAG.getSetCC(VT, N0.getOperand(1), N1.getOperand(1), Cond);
1682        if (N0.getOperand(1) == N1.getOperand(1))
1683          return DAG.getSetCC(VT, N0.getOperand(0), N1.getOperand(0), Cond);
1684        if (DAG.isCommutativeBinOp(N0.getOpcode())) {
1685          // If X op Y == Y op X, try other combinations.
1686          if (N0.getOperand(0) == N1.getOperand(1))
1687            return DAG.getSetCC(VT, N0.getOperand(1), N1.getOperand(0), Cond);
1688          if (N0.getOperand(1) == N1.getOperand(0))
1689            return DAG.getSetCC(VT, N0.getOperand(0), N1.getOperand(1), Cond);
1690        }
1691      }
1692
1693      if (ConstantSDNode *RHSC = dyn_cast<ConstantSDNode>(N1)) {
1694        if (ConstantSDNode *LHSR = dyn_cast<ConstantSDNode>(N0.getOperand(1))) {
1695          // Turn (X+C1) == C2 --> X == C2-C1
1696          if (N0.getOpcode() == ISD::ADD && N0.Val->hasOneUse()) {
1697            return DAG.getSetCC(VT, N0.getOperand(0),
1698                              DAG.getConstant(RHSC->getValue()-LHSR->getValue(),
1699                                N0.getValueType()), Cond);
1700          }
1701
1702          // Turn (X^C1) == C2 into X == C1^C2 iff X&~C1 = 0.
1703          if (N0.getOpcode() == ISD::XOR)
1704            // If we know that all of the inverted bits are zero, don't bother
1705            // performing the inversion.
1706            if (MaskedValueIsZero(N0.getOperand(0), ~LHSR->getValue()))
1707              return DAG.getSetCC(VT, N0.getOperand(0),
1708                              DAG.getConstant(LHSR->getValue()^RHSC->getValue(),
1709                                              N0.getValueType()), Cond);
1710        }
1711
1712        // Turn (C1-X) == C2 --> X == C1-C2
1713        if (ConstantSDNode *SUBC = dyn_cast<ConstantSDNode>(N0.getOperand(0))) {
1714          if (N0.getOpcode() == ISD::SUB && N0.Val->hasOneUse()) {
1715            return DAG.getSetCC(VT, N0.getOperand(1),
1716                             DAG.getConstant(SUBC->getValue()-RHSC->getValue(),
1717                                             N0.getValueType()), Cond);
1718          }
1719        }
1720      }
1721
1722      // Simplify (X+Z) == X -->  Z == 0
1723      if (N0.getOperand(0) == N1)
1724        return DAG.getSetCC(VT, N0.getOperand(1),
1725                        DAG.getConstant(0, N0.getValueType()), Cond);
1726      if (N0.getOperand(1) == N1) {
1727        if (DAG.isCommutativeBinOp(N0.getOpcode()))
1728          return DAG.getSetCC(VT, N0.getOperand(0),
1729                          DAG.getConstant(0, N0.getValueType()), Cond);
1730        else {
1731          assert(N0.getOpcode() == ISD::SUB && "Unexpected operation!");
1732          // (Z-X) == X  --> Z == X<<1
1733          SDOperand SH = DAG.getNode(ISD::SHL, N1.getValueType(),
1734                                     N1,
1735                                     DAG.getConstant(1, getShiftAmountTy()));
1736          if (!DCI.isCalledByLegalizer())
1737            DCI.AddToWorklist(SH.Val);
1738          return DAG.getSetCC(VT, N0.getOperand(0), SH, Cond);
1739        }
1740      }
1741    }
1742
1743    if (N1.getOpcode() == ISD::ADD || N1.getOpcode() == ISD::SUB ||
1744        N1.getOpcode() == ISD::XOR) {
1745      // Simplify  X == (X+Z) -->  Z == 0
1746      if (N1.getOperand(0) == N0) {
1747        return DAG.getSetCC(VT, N1.getOperand(1),
1748                        DAG.getConstant(0, N1.getValueType()), Cond);
1749      } else if (N1.getOperand(1) == N0) {
1750        if (DAG.isCommutativeBinOp(N1.getOpcode())) {
1751          return DAG.getSetCC(VT, N1.getOperand(0),
1752                          DAG.getConstant(0, N1.getValueType()), Cond);
1753        } else {
1754          assert(N1.getOpcode() == ISD::SUB && "Unexpected operation!");
1755          // X == (Z-X)  --> X<<1 == Z
1756          SDOperand SH = DAG.getNode(ISD::SHL, N1.getValueType(), N0,
1757                                     DAG.getConstant(1, getShiftAmountTy()));
1758          if (!DCI.isCalledByLegalizer())
1759            DCI.AddToWorklist(SH.Val);
1760          return DAG.getSetCC(VT, SH, N1.getOperand(0), Cond);
1761        }
1762      }
1763    }
1764  }
1765
1766  // Fold away ALL boolean setcc's.
1767  SDOperand Temp;
1768  if (N0.getValueType() == MVT::i1 && foldBooleans) {
1769    switch (Cond) {
1770    default: assert(0 && "Unknown integer setcc!");
1771    case ISD::SETEQ:  // X == Y  -> (X^Y)^1
1772      Temp = DAG.getNode(ISD::XOR, MVT::i1, N0, N1);
1773      N0 = DAG.getNode(ISD::XOR, MVT::i1, Temp, DAG.getConstant(1, MVT::i1));
1774      if (!DCI.isCalledByLegalizer())
1775        DCI.AddToWorklist(Temp.Val);
1776      break;
1777    case ISD::SETNE:  // X != Y   -->  (X^Y)
1778      N0 = DAG.getNode(ISD::XOR, MVT::i1, N0, N1);
1779      break;
1780    case ISD::SETGT:  // X >s Y   -->  X == 0 & Y == 1  -->  X^1 & Y
1781    case ISD::SETULT: // X <u Y   -->  X == 0 & Y == 1  -->  X^1 & Y
1782      Temp = DAG.getNode(ISD::XOR, MVT::i1, N0, DAG.getConstant(1, MVT::i1));
1783      N0 = DAG.getNode(ISD::AND, MVT::i1, N1, Temp);
1784      if (!DCI.isCalledByLegalizer())
1785        DCI.AddToWorklist(Temp.Val);
1786      break;
1787    case ISD::SETLT:  // X <s Y   --> X == 1 & Y == 0  -->  Y^1 & X
1788    case ISD::SETUGT: // X >u Y   --> X == 1 & Y == 0  -->  Y^1 & X
1789      Temp = DAG.getNode(ISD::XOR, MVT::i1, N1, DAG.getConstant(1, MVT::i1));
1790      N0 = DAG.getNode(ISD::AND, MVT::i1, N0, Temp);
1791      if (!DCI.isCalledByLegalizer())
1792        DCI.AddToWorklist(Temp.Val);
1793      break;
1794    case ISD::SETULE: // X <=u Y  --> X == 0 | Y == 1  -->  X^1 | Y
1795    case ISD::SETGE:  // X >=s Y  --> X == 0 | Y == 1  -->  X^1 | Y
1796      Temp = DAG.getNode(ISD::XOR, MVT::i1, N0, DAG.getConstant(1, MVT::i1));
1797      N0 = DAG.getNode(ISD::OR, MVT::i1, N1, Temp);
1798      if (!DCI.isCalledByLegalizer())
1799        DCI.AddToWorklist(Temp.Val);
1800      break;
1801    case ISD::SETUGE: // X >=u Y  --> X == 1 | Y == 0  -->  Y^1 | X
1802    case ISD::SETLE:  // X <=s Y  --> X == 1 | Y == 0  -->  Y^1 | X
1803      Temp = DAG.getNode(ISD::XOR, MVT::i1, N1, DAG.getConstant(1, MVT::i1));
1804      N0 = DAG.getNode(ISD::OR, MVT::i1, N0, Temp);
1805      break;
1806    }
1807    if (VT != MVT::i1) {
1808      if (!DCI.isCalledByLegalizer())
1809        DCI.AddToWorklist(N0.Val);
1810      // FIXME: If running after legalize, we probably can't do this.
1811      N0 = DAG.getNode(ISD::ZERO_EXTEND, VT, N0);
1812    }
1813    return N0;
1814  }
1815
1816  // Could not fold it.
1817  return SDOperand();
1818}
1819
1820SDOperand TargetLowering::
1821PerformDAGCombine(SDNode *N, DAGCombinerInfo &DCI) const {
1822  // Default implementation: no optimization.
1823  return SDOperand();
1824}
1825
1826//===----------------------------------------------------------------------===//
1827//  Inline Assembler Implementation Methods
1828//===----------------------------------------------------------------------===//
1829
1830TargetLowering::ConstraintType
1831TargetLowering::getConstraintType(const std::string &Constraint) const {
1832  // FIXME: lots more standard ones to handle.
1833  if (Constraint.size() == 1) {
1834    switch (Constraint[0]) {
1835    default: break;
1836    case 'r': return C_RegisterClass;
1837    case 'm':    // memory
1838    case 'o':    // offsetable
1839    case 'V':    // not offsetable
1840      return C_Memory;
1841    case 'i':    // Simple Integer or Relocatable Constant
1842    case 'n':    // Simple Integer
1843    case 's':    // Relocatable Constant
1844    case 'I':    // Target registers.
1845    case 'J':
1846    case 'K':
1847    case 'L':
1848    case 'M':
1849    case 'N':
1850    case 'O':
1851    case 'P':
1852      return C_Other;
1853    }
1854  }
1855
1856  if (Constraint.size() > 1 && Constraint[0] == '{' &&
1857      Constraint[Constraint.size()-1] == '}')
1858    return C_Register;
1859  return C_Unknown;
1860}
1861
1862/// isOperandValidForConstraint - Return the specified operand (possibly
1863/// modified) if the specified SDOperand is valid for the specified target
1864/// constraint letter, otherwise return null.
1865SDOperand TargetLowering::isOperandValidForConstraint(SDOperand Op,
1866                                                      char ConstraintLetter,
1867                                                      SelectionDAG &DAG) {
1868  switch (ConstraintLetter) {
1869  default: break;
1870  case 'i':    // Simple Integer or Relocatable Constant
1871  case 'n':    // Simple Integer
1872  case 's':    // Relocatable Constant
1873    // These are okay if the operand is either a global variable address or a
1874    // simple immediate value.  If we have one of these, map to the TargetXXX
1875    // version so that the value itself doesn't get selected.
1876    if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op)) {
1877      // Simple constants are not allowed for 's'.
1878      if (ConstraintLetter != 's')
1879        return DAG.getTargetConstant(C->getValue(), Op.getValueType());
1880    }
1881    if (GlobalAddressSDNode *GA = dyn_cast<GlobalAddressSDNode>(Op)) {
1882      if (ConstraintLetter != 'n')
1883        return DAG.getTargetGlobalAddress(GA->getGlobal(), Op.getValueType(),
1884                                          GA->getOffset());
1885    }
1886    break;
1887  }
1888  return SDOperand(0,0);
1889}
1890
1891std::vector<unsigned> TargetLowering::
1892getRegClassForInlineAsmConstraint(const std::string &Constraint,
1893                                  MVT::ValueType VT) const {
1894  return std::vector<unsigned>();
1895}
1896
1897
1898std::pair<unsigned, const TargetRegisterClass*> TargetLowering::
1899getRegForInlineAsmConstraint(const std::string &Constraint,
1900                             MVT::ValueType VT) const {
1901  if (Constraint[0] != '{')
1902    return std::pair<unsigned, const TargetRegisterClass*>(0, 0);
1903  assert(*(Constraint.end()-1) == '}' && "Not a brace enclosed constraint?");
1904
1905  // Remove the braces from around the name.
1906  std::string RegName(Constraint.begin()+1, Constraint.end()-1);
1907
1908  // Figure out which register class contains this reg.
1909  const MRegisterInfo *RI = TM.getRegisterInfo();
1910  for (MRegisterInfo::regclass_iterator RCI = RI->regclass_begin(),
1911       E = RI->regclass_end(); RCI != E; ++RCI) {
1912    const TargetRegisterClass *RC = *RCI;
1913
1914    // If none of the the value types for this register class are valid, we
1915    // can't use it.  For example, 64-bit reg classes on 32-bit targets.
1916    bool isLegal = false;
1917    for (TargetRegisterClass::vt_iterator I = RC->vt_begin(), E = RC->vt_end();
1918         I != E; ++I) {
1919      if (isTypeLegal(*I)) {
1920        isLegal = true;
1921        break;
1922      }
1923    }
1924
1925    if (!isLegal) continue;
1926
1927    for (TargetRegisterClass::iterator I = RC->begin(), E = RC->end();
1928         I != E; ++I) {
1929      if (StringsEqualNoCase(RegName, RI->get(*I).Name))
1930        return std::make_pair(*I, RC);
1931    }
1932  }
1933
1934  return std::pair<unsigned, const TargetRegisterClass*>(0, 0);
1935}
1936
1937//===----------------------------------------------------------------------===//
1938//  Loop Strength Reduction hooks
1939//===----------------------------------------------------------------------===//
1940
1941/// isLegalAddressExpression - Return true if the binary expression made up of
1942/// specified opcode, operands, and type can be folded into target addressing
1943/// mode for load / store of the given type.
1944bool TargetLowering::isLegalAddressExpression(unsigned Opc, Value *Op0,
1945                                             Value *Op1, const Type *Ty) const {
1946  return false;
1947}
1948
1949/// isLegalAddressImmediate - Return true if the integer value can be used as
1950/// the offset of the target addressing mode for load / store of the given
1951/// type.
1952bool TargetLowering::isLegalAddressImmediate(int64_t V, const Type *Ty) const {
1953  return false;
1954}
1955
1956/// isLegalAddressImmediate - Return true if the GlobalValue can be used as
1957/// the offset of the target addressing mode.
1958bool TargetLowering::isLegalAddressImmediate(GlobalValue *GV) const {
1959  return false;
1960}
1961
1962/// isLegalAddressScale - Return true if the integer value can be used as the
1963/// scale of the target addressing mode for load / store of the given type.
1964bool TargetLowering::isLegalAddressScale(int64_t S, const Type *Ty) const {
1965  return false;
1966}
1967
1968/// isLegalAddressScaleAndImm - Return true if S works for IsLegalAddressScale
1969/// and V works for isLegalAddressImmediate _and_ both can be applied
1970/// simultaneously to the same instruction.
1971bool TargetLowering::isLegalAddressScaleAndImm(int64_t S, int64_t V,
1972                                               const Type* Ty) const {
1973  return false;
1974}
1975
1976/// isLegalAddressScaleAndImm - Return true if S works for IsLegalAddressScale
1977/// and GV works for isLegalAddressImmediate _and_ both can be applied
1978/// simultaneously to the same instruction.
1979bool TargetLowering::isLegalAddressScaleAndImm(int64_t S, GlobalValue *GV,
1980                                               const Type* Ty) const {
1981
1982  return false;
1983}
1984
1985// Magic for divide replacement
1986
1987struct ms {
1988  int64_t m;  // magic number
1989  int64_t s;  // shift amount
1990};
1991
1992struct mu {
1993  uint64_t m; // magic number
1994  int64_t a;  // add indicator
1995  int64_t s;  // shift amount
1996};
1997
1998/// magic - calculate the magic numbers required to codegen an integer sdiv as
1999/// a sequence of multiply and shifts.  Requires that the divisor not be 0, 1,
2000/// or -1.
2001static ms magic32(int32_t d) {
2002  int32_t p;
2003  uint32_t ad, anc, delta, q1, r1, q2, r2, t;
2004  const uint32_t two31 = 0x80000000U;
2005  struct ms mag;
2006
2007  ad = abs(d);
2008  t = two31 + ((uint32_t)d >> 31);
2009  anc = t - 1 - t%ad;   // absolute value of nc
2010  p = 31;               // initialize p
2011  q1 = two31/anc;       // initialize q1 = 2p/abs(nc)
2012  r1 = two31 - q1*anc;  // initialize r1 = rem(2p,abs(nc))
2013  q2 = two31/ad;        // initialize q2 = 2p/abs(d)
2014  r2 = two31 - q2*ad;   // initialize r2 = rem(2p,abs(d))
2015  do {
2016    p = p + 1;
2017    q1 = 2*q1;        // update q1 = 2p/abs(nc)
2018    r1 = 2*r1;        // update r1 = rem(2p/abs(nc))
2019    if (r1 >= anc) {  // must be unsigned comparison
2020      q1 = q1 + 1;
2021      r1 = r1 - anc;
2022    }
2023    q2 = 2*q2;        // update q2 = 2p/abs(d)
2024    r2 = 2*r2;        // update r2 = rem(2p/abs(d))
2025    if (r2 >= ad) {   // must be unsigned comparison
2026      q2 = q2 + 1;
2027      r2 = r2 - ad;
2028    }
2029    delta = ad - r2;
2030  } while (q1 < delta || (q1 == delta && r1 == 0));
2031
2032  mag.m = (int32_t)(q2 + 1); // make sure to sign extend
2033  if (d < 0) mag.m = -mag.m; // resulting magic number
2034  mag.s = p - 32;            // resulting shift
2035  return mag;
2036}
2037
2038/// magicu - calculate the magic numbers required to codegen an integer udiv as
2039/// a sequence of multiply, add and shifts.  Requires that the divisor not be 0.
2040static mu magicu32(uint32_t d) {
2041  int32_t p;
2042  uint32_t nc, delta, q1, r1, q2, r2;
2043  struct mu magu;
2044  magu.a = 0;               // initialize "add" indicator
2045  nc = - 1 - (-d)%d;
2046  p = 31;                   // initialize p
2047  q1 = 0x80000000/nc;       // initialize q1 = 2p/nc
2048  r1 = 0x80000000 - q1*nc;  // initialize r1 = rem(2p,nc)
2049  q2 = 0x7FFFFFFF/d;        // initialize q2 = (2p-1)/d
2050  r2 = 0x7FFFFFFF - q2*d;   // initialize r2 = rem((2p-1),d)
2051  do {
2052    p = p + 1;
2053    if (r1 >= nc - r1 ) {
2054      q1 = 2*q1 + 1;  // update q1
2055      r1 = 2*r1 - nc; // update r1
2056    }
2057    else {
2058      q1 = 2*q1; // update q1
2059      r1 = 2*r1; // update r1
2060    }
2061    if (r2 + 1 >= d - r2) {
2062      if (q2 >= 0x7FFFFFFF) magu.a = 1;
2063      q2 = 2*q2 + 1;     // update q2
2064      r2 = 2*r2 + 1 - d; // update r2
2065    }
2066    else {
2067      if (q2 >= 0x80000000) magu.a = 1;
2068      q2 = 2*q2;     // update q2
2069      r2 = 2*r2 + 1; // update r2
2070    }
2071    delta = d - 1 - r2;
2072  } while (p < 64 && (q1 < delta || (q1 == delta && r1 == 0)));
2073  magu.m = q2 + 1; // resulting magic number
2074  magu.s = p - 32;  // resulting shift
2075  return magu;
2076}
2077
2078/// magic - calculate the magic numbers required to codegen an integer sdiv as
2079/// a sequence of multiply and shifts.  Requires that the divisor not be 0, 1,
2080/// or -1.
2081static ms magic64(int64_t d) {
2082  int64_t p;
2083  uint64_t ad, anc, delta, q1, r1, q2, r2, t;
2084  const uint64_t two63 = 9223372036854775808ULL; // 2^63
2085  struct ms mag;
2086
2087  ad = d >= 0 ? d : -d;
2088  t = two63 + ((uint64_t)d >> 63);
2089  anc = t - 1 - t%ad;   // absolute value of nc
2090  p = 63;               // initialize p
2091  q1 = two63/anc;       // initialize q1 = 2p/abs(nc)
2092  r1 = two63 - q1*anc;  // initialize r1 = rem(2p,abs(nc))
2093  q2 = two63/ad;        // initialize q2 = 2p/abs(d)
2094  r2 = two63 - q2*ad;   // initialize r2 = rem(2p,abs(d))
2095  do {
2096    p = p + 1;
2097    q1 = 2*q1;        // update q1 = 2p/abs(nc)
2098    r1 = 2*r1;        // update r1 = rem(2p/abs(nc))
2099    if (r1 >= anc) {  // must be unsigned comparison
2100      q1 = q1 + 1;
2101      r1 = r1 - anc;
2102    }
2103    q2 = 2*q2;        // update q2 = 2p/abs(d)
2104    r2 = 2*r2;        // update r2 = rem(2p/abs(d))
2105    if (r2 >= ad) {   // must be unsigned comparison
2106      q2 = q2 + 1;
2107      r2 = r2 - ad;
2108    }
2109    delta = ad - r2;
2110  } while (q1 < delta || (q1 == delta && r1 == 0));
2111
2112  mag.m = q2 + 1;
2113  if (d < 0) mag.m = -mag.m; // resulting magic number
2114  mag.s = p - 64;            // resulting shift
2115  return mag;
2116}
2117
2118/// magicu - calculate the magic numbers required to codegen an integer udiv as
2119/// a sequence of multiply, add and shifts.  Requires that the divisor not be 0.
2120static mu magicu64(uint64_t d)
2121{
2122  int64_t p;
2123  uint64_t nc, delta, q1, r1, q2, r2;
2124  struct mu magu;
2125  magu.a = 0;               // initialize "add" indicator
2126  nc = - 1 - (-d)%d;
2127  p = 63;                   // initialize p
2128  q1 = 0x8000000000000000ull/nc;       // initialize q1 = 2p/nc
2129  r1 = 0x8000000000000000ull - q1*nc;  // initialize r1 = rem(2p,nc)
2130  q2 = 0x7FFFFFFFFFFFFFFFull/d;        // initialize q2 = (2p-1)/d
2131  r2 = 0x7FFFFFFFFFFFFFFFull - q2*d;   // initialize r2 = rem((2p-1),d)
2132  do {
2133    p = p + 1;
2134    if (r1 >= nc - r1 ) {
2135      q1 = 2*q1 + 1;  // update q1
2136      r1 = 2*r1 - nc; // update r1
2137    }
2138    else {
2139      q1 = 2*q1; // update q1
2140      r1 = 2*r1; // update r1
2141    }
2142    if (r2 + 1 >= d - r2) {
2143      if (q2 >= 0x7FFFFFFFFFFFFFFFull) magu.a = 1;
2144      q2 = 2*q2 + 1;     // update q2
2145      r2 = 2*r2 + 1 - d; // update r2
2146    }
2147    else {
2148      if (q2 >= 0x8000000000000000ull) magu.a = 1;
2149      q2 = 2*q2;     // update q2
2150      r2 = 2*r2 + 1; // update r2
2151    }
2152    delta = d - 1 - r2;
2153  } while (p < 128 && (q1 < delta || (q1 == delta && r1 == 0)));
2154  magu.m = q2 + 1; // resulting magic number
2155  magu.s = p - 64;  // resulting shift
2156  return magu;
2157}
2158
2159/// BuildSDIVSequence - Given an ISD::SDIV node expressing a divide by constant,
2160/// return a DAG expression to select that will generate the same value by
2161/// multiplying by a magic number.  See:
2162/// <http://the.wall.riscom.net/books/proc/ppc/cwg/code2.html>
2163SDOperand TargetLowering::BuildSDIV(SDNode *N, SelectionDAG &DAG,
2164				    std::vector<SDNode*>* Created) const {
2165  MVT::ValueType VT = N->getValueType(0);
2166
2167  // Check to see if we can do this.
2168  if (!isTypeLegal(VT) || (VT != MVT::i32 && VT != MVT::i64))
2169    return SDOperand();       // BuildSDIV only operates on i32 or i64
2170  if (!isOperationLegal(ISD::MULHS, VT))
2171    return SDOperand();       // Make sure the target supports MULHS.
2172
2173  int64_t d = cast<ConstantSDNode>(N->getOperand(1))->getSignExtended();
2174  ms magics = (VT == MVT::i32) ? magic32(d) : magic64(d);
2175
2176  // Multiply the numerator (operand 0) by the magic value
2177  SDOperand Q = DAG.getNode(ISD::MULHS, VT, N->getOperand(0),
2178                            DAG.getConstant(magics.m, VT));
2179  // If d > 0 and m < 0, add the numerator
2180  if (d > 0 && magics.m < 0) {
2181    Q = DAG.getNode(ISD::ADD, VT, Q, N->getOperand(0));
2182    if (Created)
2183      Created->push_back(Q.Val);
2184  }
2185  // If d < 0 and m > 0, subtract the numerator.
2186  if (d < 0 && magics.m > 0) {
2187    Q = DAG.getNode(ISD::SUB, VT, Q, N->getOperand(0));
2188    if (Created)
2189      Created->push_back(Q.Val);
2190  }
2191  // Shift right algebraic if shift value is nonzero
2192  if (magics.s > 0) {
2193    Q = DAG.getNode(ISD::SRA, VT, Q,
2194                    DAG.getConstant(magics.s, getShiftAmountTy()));
2195    if (Created)
2196      Created->push_back(Q.Val);
2197  }
2198  // Extract the sign bit and add it to the quotient
2199  SDOperand T =
2200    DAG.getNode(ISD::SRL, VT, Q, DAG.getConstant(MVT::getSizeInBits(VT)-1,
2201                                                 getShiftAmountTy()));
2202  if (Created)
2203    Created->push_back(T.Val);
2204  return DAG.getNode(ISD::ADD, VT, Q, T);
2205}
2206
2207/// BuildUDIVSequence - Given an ISD::UDIV node expressing a divide by constant,
2208/// return a DAG expression to select that will generate the same value by
2209/// multiplying by a magic number.  See:
2210/// <http://the.wall.riscom.net/books/proc/ppc/cwg/code2.html>
2211SDOperand TargetLowering::BuildUDIV(SDNode *N, SelectionDAG &DAG,
2212				    std::vector<SDNode*>* Created) const {
2213  MVT::ValueType VT = N->getValueType(0);
2214
2215  // Check to see if we can do this.
2216  if (!isTypeLegal(VT) || (VT != MVT::i32 && VT != MVT::i64))
2217    return SDOperand();       // BuildUDIV only operates on i32 or i64
2218  if (!isOperationLegal(ISD::MULHU, VT))
2219    return SDOperand();       // Make sure the target supports MULHU.
2220
2221  uint64_t d = cast<ConstantSDNode>(N->getOperand(1))->getValue();
2222  mu magics = (VT == MVT::i32) ? magicu32(d) : magicu64(d);
2223
2224  // Multiply the numerator (operand 0) by the magic value
2225  SDOperand Q = DAG.getNode(ISD::MULHU, VT, N->getOperand(0),
2226                            DAG.getConstant(magics.m, VT));
2227  if (Created)
2228    Created->push_back(Q.Val);
2229
2230  if (magics.a == 0) {
2231    return DAG.getNode(ISD::SRL, VT, Q,
2232                       DAG.getConstant(magics.s, getShiftAmountTy()));
2233  } else {
2234    SDOperand NPQ = DAG.getNode(ISD::SUB, VT, N->getOperand(0), Q);
2235    if (Created)
2236      Created->push_back(NPQ.Val);
2237    NPQ = DAG.getNode(ISD::SRL, VT, NPQ,
2238                      DAG.getConstant(1, getShiftAmountTy()));
2239    if (Created)
2240      Created->push_back(NPQ.Val);
2241    NPQ = DAG.getNode(ISD::ADD, VT, NPQ, Q);
2242    if (Created)
2243      Created->push_back(NPQ.Val);
2244    return DAG.getNode(ISD::SRL, VT, NPQ,
2245                       DAG.getConstant(magics.s-1, getShiftAmountTy()));
2246  }
2247}
2248
2249MVT::ValueType TargetLowering::getValueType(const Type *Ty) const {
2250  switch (Ty->getTypeID()) {
2251  default: assert(0 && "Unknown type!");
2252  case Type::VoidTyID:    return MVT::isVoid;
2253  case Type::IntegerTyID:
2254    switch (cast<IntegerType>(Ty)->getBitWidth()) {
2255      default: assert(0 && "Invalid width for value type");
2256      case 1:    return MVT::i1;
2257      case 8:    return MVT::i8;
2258      case 16:   return MVT::i16;
2259      case 32:   return MVT::i32;
2260      case 64:   return MVT::i64;
2261      case 128:  return MVT::i128;
2262    }
2263    break;
2264  case Type::FloatTyID:   return MVT::f32;
2265  case Type::DoubleTyID:  return MVT::f64;
2266  case Type::PointerTyID: return PointerTy;
2267  case Type::VectorTyID:  return MVT::Vector;
2268  }
2269}
2270