1 //===-- TargetLowering.cpp - Implement the TargetLowering class -----------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This implements the TargetLowering class. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "llvm/Target/TargetLowering.h" 15 #include "llvm/ADT/BitVector.h" 16 #include "llvm/ADT/STLExtras.h" 17 #include "llvm/CodeGen/Analysis.h" 18 #include "llvm/CodeGen/MachineFrameInfo.h" 19 #include "llvm/CodeGen/MachineFunction.h" 20 #include "llvm/CodeGen/MachineJumpTableInfo.h" 21 #include "llvm/CodeGen/SelectionDAG.h" 22 #include "llvm/IR/DataLayout.h" 23 #include "llvm/IR/DerivedTypes.h" 24 #include "llvm/IR/GlobalVariable.h" 25 #include "llvm/IR/LLVMContext.h" 26 #include "llvm/MC/MCAsmInfo.h" 27 #include "llvm/MC/MCExpr.h" 28 #include "llvm/Support/CommandLine.h" 29 #include "llvm/Support/ErrorHandling.h" 30 #include "llvm/Support/MathExtras.h" 31 #include "llvm/Target/TargetLoweringObjectFile.h" 32 #include "llvm/Target/TargetMachine.h" 33 #include "llvm/Target/TargetRegisterInfo.h" 34 #include "llvm/Target/TargetSubtargetInfo.h" 35 #include <cctype> 36 using namespace llvm; 37 38 /// NOTE: The TargetMachine owns TLOF. 39 TargetLowering::TargetLowering(const TargetMachine &tm) 40 : TargetLoweringBase(tm) {} 41 42 const char *TargetLowering::getTargetNodeName(unsigned Opcode) const { 43 return nullptr; 44 } 45 46 /// Check whether a given call node is in tail position within its function. If 47 /// so, it sets Chain to the input chain of the tail call. 48 bool TargetLowering::isInTailCallPosition(SelectionDAG &DAG, SDNode *Node, 49 SDValue &Chain) const { 50 const Function *F = DAG.getMachineFunction().getFunction(); 51 52 // Conservatively require the attributes of the call to match those of 53 // the return. Ignore noalias because it doesn't affect the call sequence. 54 AttributeSet CallerAttrs = F->getAttributes(); 55 if (AttrBuilder(CallerAttrs, AttributeSet::ReturnIndex) 56 .removeAttribute(Attribute::NoAlias).hasAttributes()) 57 return false; 58 59 // It's not safe to eliminate the sign / zero extension of the return value. 60 if (CallerAttrs.hasAttribute(AttributeSet::ReturnIndex, Attribute::ZExt) || 61 CallerAttrs.hasAttribute(AttributeSet::ReturnIndex, Attribute::SExt)) 62 return false; 63 64 // Check if the only use is a function return node. 65 return isUsedByReturnOnly(Node, Chain); 66 } 67 68 /// \brief Set CallLoweringInfo attribute flags based on a call instruction 69 /// and called function attributes. 70 void TargetLowering::ArgListEntry::setAttributes(ImmutableCallSite *CS, 71 unsigned AttrIdx) { 72 isSExt = CS->paramHasAttr(AttrIdx, Attribute::SExt); 73 isZExt = CS->paramHasAttr(AttrIdx, Attribute::ZExt); 74 isInReg = CS->paramHasAttr(AttrIdx, Attribute::InReg); 75 isSRet = CS->paramHasAttr(AttrIdx, Attribute::StructRet); 76 isNest = CS->paramHasAttr(AttrIdx, Attribute::Nest); 77 isByVal = CS->paramHasAttr(AttrIdx, Attribute::ByVal); 78 isInAlloca = CS->paramHasAttr(AttrIdx, Attribute::InAlloca); 79 isReturned = CS->paramHasAttr(AttrIdx, Attribute::Returned); 80 Alignment = CS->getParamAlignment(AttrIdx); 81 } 82 83 /// Generate a libcall taking the given operands as arguments and returning a 84 /// result of type RetVT. 85 std::pair<SDValue, SDValue> 86 TargetLowering::makeLibCall(SelectionDAG &DAG, 87 RTLIB::Libcall LC, EVT RetVT, 88 ArrayRef<SDValue> Ops, 89 bool isSigned, SDLoc dl, 90 bool doesNotReturn, 91 bool isReturnValueUsed) const { 92 TargetLowering::ArgListTy Args; 93 Args.reserve(Ops.size()); 94 95 TargetLowering::ArgListEntry Entry; 96 for (SDValue Op : Ops) { 97 Entry.Node = Op; 98 Entry.Ty = Entry.Node.getValueType().getTypeForEVT(*DAG.getContext()); 99 Entry.isSExt = shouldSignExtendTypeInLibCall(Op.getValueType(), isSigned); 100 Entry.isZExt = !shouldSignExtendTypeInLibCall(Op.getValueType(), isSigned); 101 Args.push_back(Entry); 102 } 103 104 if (LC == RTLIB::UNKNOWN_LIBCALL) 105 report_fatal_error("Unsupported library call operation!"); 106 SDValue Callee = DAG.getExternalSymbol(getLibcallName(LC), 107 getPointerTy(DAG.getDataLayout())); 108 109 Type *RetTy = RetVT.getTypeForEVT(*DAG.getContext()); 110 TargetLowering::CallLoweringInfo CLI(DAG); 111 bool signExtend = shouldSignExtendTypeInLibCall(RetVT, isSigned); 112 CLI.setDebugLoc(dl).setChain(DAG.getEntryNode()) 113 .setCallee(getLibcallCallingConv(LC), RetTy, Callee, std::move(Args), 0) 114 .setNoReturn(doesNotReturn).setDiscardResult(!isReturnValueUsed) 115 .setSExtResult(signExtend).setZExtResult(!signExtend); 116 return LowerCallTo(CLI); 117 } 118 119 /// Soften the operands of a comparison. This code is shared among BR_CC, 120 /// SELECT_CC, and SETCC handlers. 121 void TargetLowering::softenSetCCOperands(SelectionDAG &DAG, EVT VT, 122 SDValue &NewLHS, SDValue &NewRHS, 123 ISD::CondCode &CCCode, 124 SDLoc dl) const { 125 assert((VT == MVT::f32 || VT == MVT::f64 || VT == MVT::f128 || VT == MVT::ppcf128) 126 && "Unsupported setcc type!"); 127 128 // Expand into one or more soft-fp libcall(s). 129 RTLIB::Libcall LC1 = RTLIB::UNKNOWN_LIBCALL, LC2 = RTLIB::UNKNOWN_LIBCALL; 130 bool ShouldInvertCC = false; 131 switch (CCCode) { 132 case ISD::SETEQ: 133 case ISD::SETOEQ: 134 LC1 = (VT == MVT::f32) ? RTLIB::OEQ_F32 : 135 (VT == MVT::f64) ? RTLIB::OEQ_F64 : 136 (VT == MVT::f128) ? RTLIB::OEQ_F128 : RTLIB::OEQ_PPCF128; 137 break; 138 case ISD::SETNE: 139 case ISD::SETUNE: 140 LC1 = (VT == MVT::f32) ? RTLIB::UNE_F32 : 141 (VT == MVT::f64) ? RTLIB::UNE_F64 : 142 (VT == MVT::f128) ? RTLIB::UNE_F128 : RTLIB::UNE_PPCF128; 143 break; 144 case ISD::SETGE: 145 case ISD::SETOGE: 146 LC1 = (VT == MVT::f32) ? RTLIB::OGE_F32 : 147 (VT == MVT::f64) ? RTLIB::OGE_F64 : 148 (VT == MVT::f128) ? RTLIB::OGE_F128 : RTLIB::OGE_PPCF128; 149 break; 150 case ISD::SETLT: 151 case ISD::SETOLT: 152 LC1 = (VT == MVT::f32) ? RTLIB::OLT_F32 : 153 (VT == MVT::f64) ? RTLIB::OLT_F64 : 154 (VT == MVT::f128) ? RTLIB::OLT_F128 : RTLIB::OLT_PPCF128; 155 break; 156 case ISD::SETLE: 157 case ISD::SETOLE: 158 LC1 = (VT == MVT::f32) ? RTLIB::OLE_F32 : 159 (VT == MVT::f64) ? RTLIB::OLE_F64 : 160 (VT == MVT::f128) ? RTLIB::OLE_F128 : RTLIB::OLE_PPCF128; 161 break; 162 case ISD::SETGT: 163 case ISD::SETOGT: 164 LC1 = (VT == MVT::f32) ? RTLIB::OGT_F32 : 165 (VT == MVT::f64) ? RTLIB::OGT_F64 : 166 (VT == MVT::f128) ? RTLIB::OGT_F128 : RTLIB::OGT_PPCF128; 167 break; 168 case ISD::SETUO: 169 LC1 = (VT == MVT::f32) ? RTLIB::UO_F32 : 170 (VT == MVT::f64) ? RTLIB::UO_F64 : 171 (VT == MVT::f128) ? RTLIB::UO_F128 : RTLIB::UO_PPCF128; 172 break; 173 case ISD::SETO: 174 LC1 = (VT == MVT::f32) ? RTLIB::O_F32 : 175 (VT == MVT::f64) ? RTLIB::O_F64 : 176 (VT == MVT::f128) ? RTLIB::O_F128 : RTLIB::O_PPCF128; 177 break; 178 case ISD::SETONE: 179 // SETONE = SETOLT | SETOGT 180 LC1 = (VT == MVT::f32) ? RTLIB::OLT_F32 : 181 (VT == MVT::f64) ? RTLIB::OLT_F64 : 182 (VT == MVT::f128) ? RTLIB::OLT_F128 : RTLIB::OLT_PPCF128; 183 LC2 = (VT == MVT::f32) ? RTLIB::OGT_F32 : 184 (VT == MVT::f64) ? RTLIB::OGT_F64 : 185 (VT == MVT::f128) ? RTLIB::OGT_F128 : RTLIB::OGT_PPCF128; 186 break; 187 case ISD::SETUEQ: 188 LC1 = (VT == MVT::f32) ? RTLIB::UO_F32 : 189 (VT == MVT::f64) ? RTLIB::UO_F64 : 190 (VT == MVT::f128) ? RTLIB::UO_F64 : RTLIB::UO_PPCF128; 191 LC2 = (VT == MVT::f32) ? RTLIB::OEQ_F32 : 192 (VT == MVT::f64) ? RTLIB::OEQ_F64 : 193 (VT == MVT::f128) ? RTLIB::OEQ_F128 : RTLIB::OEQ_PPCF128; 194 break; 195 default: 196 // Invert CC for unordered comparisons 197 ShouldInvertCC = true; 198 switch (CCCode) { 199 case ISD::SETULT: 200 LC1 = (VT == MVT::f32) ? RTLIB::OGE_F32 : 201 (VT == MVT::f64) ? RTLIB::OGE_F64 : 202 (VT == MVT::f128) ? RTLIB::OGE_F128 : RTLIB::OGE_PPCF128; 203 break; 204 case ISD::SETULE: 205 LC1 = (VT == MVT::f32) ? RTLIB::OGT_F32 : 206 (VT == MVT::f64) ? RTLIB::OGT_F64 : 207 (VT == MVT::f128) ? RTLIB::OGT_F128 : RTLIB::OGT_PPCF128; 208 break; 209 case ISD::SETUGT: 210 LC1 = (VT == MVT::f32) ? RTLIB::OLE_F32 : 211 (VT == MVT::f64) ? RTLIB::OLE_F64 : 212 (VT == MVT::f128) ? RTLIB::OLE_F128 : RTLIB::OLE_PPCF128; 213 break; 214 case ISD::SETUGE: 215 LC1 = (VT == MVT::f32) ? RTLIB::OLT_F32 : 216 (VT == MVT::f64) ? RTLIB::OLT_F64 : 217 (VT == MVT::f128) ? RTLIB::OLT_F128 : RTLIB::OLT_PPCF128; 218 break; 219 default: llvm_unreachable("Do not know how to soften this setcc!"); 220 } 221 } 222 223 // Use the target specific return value for comparions lib calls. 224 EVT RetVT = getCmpLibcallReturnType(); 225 SDValue Ops[2] = {NewLHS, NewRHS}; 226 NewLHS = makeLibCall(DAG, LC1, RetVT, Ops, false /*sign irrelevant*/, 227 dl).first; 228 NewRHS = DAG.getConstant(0, dl, RetVT); 229 230 CCCode = getCmpLibcallCC(LC1); 231 if (ShouldInvertCC) 232 CCCode = getSetCCInverse(CCCode, /*isInteger=*/true); 233 234 if (LC2 != RTLIB::UNKNOWN_LIBCALL) { 235 SDValue Tmp = DAG.getNode( 236 ISD::SETCC, dl, 237 getSetCCResultType(DAG.getDataLayout(), *DAG.getContext(), RetVT), 238 NewLHS, NewRHS, DAG.getCondCode(CCCode)); 239 NewLHS = makeLibCall(DAG, LC2, RetVT, Ops, false/*sign irrelevant*/, 240 dl).first; 241 NewLHS = DAG.getNode( 242 ISD::SETCC, dl, 243 getSetCCResultType(DAG.getDataLayout(), *DAG.getContext(), RetVT), 244 NewLHS, NewRHS, DAG.getCondCode(getCmpLibcallCC(LC2))); 245 NewLHS = DAG.getNode(ISD::OR, dl, Tmp.getValueType(), Tmp, NewLHS); 246 NewRHS = SDValue(); 247 } 248 } 249 250 /// Return the entry encoding for a jump table in the current function. The 251 /// returned value is a member of the MachineJumpTableInfo::JTEntryKind enum. 252 unsigned TargetLowering::getJumpTableEncoding() const { 253 // In non-pic modes, just use the address of a block. 254 if (getTargetMachine().getRelocationModel() != Reloc::PIC_) 255 return MachineJumpTableInfo::EK_BlockAddress; 256 257 // In PIC mode, if the target supports a GPRel32 directive, use it. 258 if (getTargetMachine().getMCAsmInfo()->getGPRel32Directive() != nullptr) 259 return MachineJumpTableInfo::EK_GPRel32BlockAddress; 260 261 // Otherwise, use a label difference. 262 return MachineJumpTableInfo::EK_LabelDifference32; 263 } 264 265 SDValue TargetLowering::getPICJumpTableRelocBase(SDValue Table, 266 SelectionDAG &DAG) const { 267 // If our PIC model is GP relative, use the global offset table as the base. 268 unsigned JTEncoding = getJumpTableEncoding(); 269 270 if ((JTEncoding == MachineJumpTableInfo::EK_GPRel64BlockAddress) || 271 (JTEncoding == MachineJumpTableInfo::EK_GPRel32BlockAddress)) 272 return DAG.getGLOBAL_OFFSET_TABLE(getPointerTy(DAG.getDataLayout())); 273 274 return Table; 275 } 276 277 /// This returns the relocation base for the given PIC jumptable, the same as 278 /// getPICJumpTableRelocBase, but as an MCExpr. 279 const MCExpr * 280 TargetLowering::getPICJumpTableRelocBaseExpr(const MachineFunction *MF, 281 unsigned JTI,MCContext &Ctx) const{ 282 // The normal PIC reloc base is the label at the start of the jump table. 283 return MCSymbolRefExpr::create(MF->getJTISymbol(JTI, Ctx), Ctx); 284 } 285 286 bool 287 TargetLowering::isOffsetFoldingLegal(const GlobalAddressSDNode *GA) const { 288 // Assume that everything is safe in static mode. 289 if (getTargetMachine().getRelocationModel() == Reloc::Static) 290 return true; 291 292 // In dynamic-no-pic mode, assume that known defined values are safe. 293 if (getTargetMachine().getRelocationModel() == Reloc::DynamicNoPIC && 294 GA && GA->getGlobal()->isStrongDefinitionForLinker()) 295 return true; 296 297 // Otherwise assume nothing is safe. 298 return false; 299 } 300 301 //===----------------------------------------------------------------------===// 302 // Optimization Methods 303 //===----------------------------------------------------------------------===// 304 305 /// Check to see if the specified operand of the specified instruction is a 306 /// constant integer. If so, check to see if there are any bits set in the 307 /// constant that are not demanded. If so, shrink the constant and return true. 308 bool TargetLowering::TargetLoweringOpt::ShrinkDemandedConstant(SDValue Op, 309 const APInt &Demanded) { 310 SDLoc dl(Op); 311 312 // FIXME: ISD::SELECT, ISD::SELECT_CC 313 switch (Op.getOpcode()) { 314 default: break; 315 case ISD::XOR: 316 case ISD::AND: 317 case ISD::OR: { 318 ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1)); 319 if (!C) return false; 320 321 if (Op.getOpcode() == ISD::XOR && 322 (C->getAPIntValue() | (~Demanded)).isAllOnesValue()) 323 return false; 324 325 // if we can expand it to have all bits set, do it 326 if (C->getAPIntValue().intersects(~Demanded)) { 327 EVT VT = Op.getValueType(); 328 SDValue New = DAG.getNode(Op.getOpcode(), dl, VT, Op.getOperand(0), 329 DAG.getConstant(Demanded & 330 C->getAPIntValue(), 331 dl, VT)); 332 return CombineTo(Op, New); 333 } 334 335 break; 336 } 337 } 338 339 return false; 340 } 341 342 /// Convert x+y to (VT)((SmallVT)x+(SmallVT)y) if the casts are free. 343 /// This uses isZExtFree and ZERO_EXTEND for the widening cast, but it could be 344 /// generalized for targets with other types of implicit widening casts. 345 bool 346 TargetLowering::TargetLoweringOpt::ShrinkDemandedOp(SDValue Op, 347 unsigned BitWidth, 348 const APInt &Demanded, 349 SDLoc dl) { 350 assert(Op.getNumOperands() == 2 && 351 "ShrinkDemandedOp only supports binary operators!"); 352 assert(Op.getNode()->getNumValues() == 1 && 353 "ShrinkDemandedOp only supports nodes with one result!"); 354 355 // Early return, as this function cannot handle vector types. 356 if (Op.getValueType().isVector()) 357 return false; 358 359 // Don't do this if the node has another user, which may require the 360 // full value. 361 if (!Op.getNode()->hasOneUse()) 362 return false; 363 364 // Search for the smallest integer type with free casts to and from 365 // Op's type. For expedience, just check power-of-2 integer types. 366 const TargetLowering &TLI = DAG.getTargetLoweringInfo(); 367 unsigned DemandedSize = BitWidth - Demanded.countLeadingZeros(); 368 unsigned SmallVTBits = DemandedSize; 369 if (!isPowerOf2_32(SmallVTBits)) 370 SmallVTBits = NextPowerOf2(SmallVTBits); 371 for (; SmallVTBits < BitWidth; SmallVTBits = NextPowerOf2(SmallVTBits)) { 372 EVT SmallVT = EVT::getIntegerVT(*DAG.getContext(), SmallVTBits); 373 if (TLI.isTruncateFree(Op.getValueType(), SmallVT) && 374 TLI.isZExtFree(SmallVT, Op.getValueType())) { 375 // We found a type with free casts. 376 SDValue X = DAG.getNode(Op.getOpcode(), dl, SmallVT, 377 DAG.getNode(ISD::TRUNCATE, dl, SmallVT, 378 Op.getNode()->getOperand(0)), 379 DAG.getNode(ISD::TRUNCATE, dl, SmallVT, 380 Op.getNode()->getOperand(1))); 381 bool NeedZext = DemandedSize > SmallVTBits; 382 SDValue Z = DAG.getNode(NeedZext ? ISD::ZERO_EXTEND : ISD::ANY_EXTEND, 383 dl, Op.getValueType(), X); 384 return CombineTo(Op, Z); 385 } 386 } 387 return false; 388 } 389 390 /// Look at Op. At this point, we know that only the DemandedMask bits of the 391 /// result of Op are ever used downstream. If we can use this information to 392 /// simplify Op, create a new simplified DAG node and return true, returning the 393 /// original and new nodes in Old and New. Otherwise, analyze the expression and 394 /// return a mask of KnownOne and KnownZero bits for the expression (used to 395 /// simplify the caller). The KnownZero/One bits may only be accurate for those 396 /// bits in the DemandedMask. 397 bool TargetLowering::SimplifyDemandedBits(SDValue Op, 398 const APInt &DemandedMask, 399 APInt &KnownZero, 400 APInt &KnownOne, 401 TargetLoweringOpt &TLO, 402 unsigned Depth) const { 403 unsigned BitWidth = DemandedMask.getBitWidth(); 404 assert(Op.getValueType().getScalarType().getSizeInBits() == BitWidth && 405 "Mask size mismatches value type size!"); 406 APInt NewMask = DemandedMask; 407 SDLoc dl(Op); 408 auto &DL = TLO.DAG.getDataLayout(); 409 410 // Don't know anything. 411 KnownZero = KnownOne = APInt(BitWidth, 0); 412 413 // Other users may use these bits. 414 if (!Op.getNode()->hasOneUse()) { 415 if (Depth != 0) { 416 // If not at the root, Just compute the KnownZero/KnownOne bits to 417 // simplify things downstream. 418 TLO.DAG.computeKnownBits(Op, KnownZero, KnownOne, Depth); 419 return false; 420 } 421 // If this is the root being simplified, allow it to have multiple uses, 422 // just set the NewMask to all bits. 423 NewMask = APInt::getAllOnesValue(BitWidth); 424 } else if (DemandedMask == 0) { 425 // Not demanding any bits from Op. 426 if (Op.getOpcode() != ISD::UNDEF) 427 return TLO.CombineTo(Op, TLO.DAG.getUNDEF(Op.getValueType())); 428 return false; 429 } else if (Depth == 6) { // Limit search depth. 430 return false; 431 } 432 433 APInt KnownZero2, KnownOne2, KnownZeroOut, KnownOneOut; 434 switch (Op.getOpcode()) { 435 case ISD::Constant: 436 // We know all of the bits for a constant! 437 KnownOne = cast<ConstantSDNode>(Op)->getAPIntValue(); 438 KnownZero = ~KnownOne; 439 return false; // Don't fall through, will infinitely loop. 440 case ISD::AND: 441 // If the RHS is a constant, check to see if the LHS would be zero without 442 // using the bits from the RHS. Below, we use knowledge about the RHS to 443 // simplify the LHS, here we're using information from the LHS to simplify 444 // the RHS. 445 if (ConstantSDNode *RHSC = dyn_cast<ConstantSDNode>(Op.getOperand(1))) { 446 APInt LHSZero, LHSOne; 447 // Do not increment Depth here; that can cause an infinite loop. 448 TLO.DAG.computeKnownBits(Op.getOperand(0), LHSZero, LHSOne, Depth); 449 // If the LHS already has zeros where RHSC does, this and is dead. 450 if ((LHSZero & NewMask) == (~RHSC->getAPIntValue() & NewMask)) 451 return TLO.CombineTo(Op, Op.getOperand(0)); 452 // If any of the set bits in the RHS are known zero on the LHS, shrink 453 // the constant. 454 if (TLO.ShrinkDemandedConstant(Op, ~LHSZero & NewMask)) 455 return true; 456 } 457 458 if (SimplifyDemandedBits(Op.getOperand(1), NewMask, KnownZero, 459 KnownOne, TLO, Depth+1)) 460 return true; 461 assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 462 if (SimplifyDemandedBits(Op.getOperand(0), ~KnownZero & NewMask, 463 KnownZero2, KnownOne2, TLO, Depth+1)) 464 return true; 465 assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 466 467 // If all of the demanded bits are known one on one side, return the other. 468 // These bits cannot contribute to the result of the 'and'. 469 if ((NewMask & ~KnownZero2 & KnownOne) == (~KnownZero2 & NewMask)) 470 return TLO.CombineTo(Op, Op.getOperand(0)); 471 if ((NewMask & ~KnownZero & KnownOne2) == (~KnownZero & NewMask)) 472 return TLO.CombineTo(Op, Op.getOperand(1)); 473 // If all of the demanded bits in the inputs are known zeros, return zero. 474 if ((NewMask & (KnownZero|KnownZero2)) == NewMask) 475 return TLO.CombineTo(Op, TLO.DAG.getConstant(0, dl, Op.getValueType())); 476 // If the RHS is a constant, see if we can simplify it. 477 if (TLO.ShrinkDemandedConstant(Op, ~KnownZero2 & NewMask)) 478 return true; 479 // If the operation can be done in a smaller type, do so. 480 if (TLO.ShrinkDemandedOp(Op, BitWidth, NewMask, dl)) 481 return true; 482 483 // Output known-1 bits are only known if set in both the LHS & RHS. 484 KnownOne &= KnownOne2; 485 // Output known-0 are known to be clear if zero in either the LHS | RHS. 486 KnownZero |= KnownZero2; 487 break; 488 case ISD::OR: 489 if (SimplifyDemandedBits(Op.getOperand(1), NewMask, KnownZero, 490 KnownOne, TLO, Depth+1)) 491 return true; 492 assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 493 if (SimplifyDemandedBits(Op.getOperand(0), ~KnownOne & NewMask, 494 KnownZero2, KnownOne2, TLO, Depth+1)) 495 return true; 496 assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 497 498 // If all of the demanded bits are known zero on one side, return the other. 499 // These bits cannot contribute to the result of the 'or'. 500 if ((NewMask & ~KnownOne2 & KnownZero) == (~KnownOne2 & NewMask)) 501 return TLO.CombineTo(Op, Op.getOperand(0)); 502 if ((NewMask & ~KnownOne & KnownZero2) == (~KnownOne & NewMask)) 503 return TLO.CombineTo(Op, Op.getOperand(1)); 504 // If all of the potentially set bits on one side are known to be set on 505 // the other side, just use the 'other' side. 506 if ((NewMask & ~KnownZero & KnownOne2) == (~KnownZero & NewMask)) 507 return TLO.CombineTo(Op, Op.getOperand(0)); 508 if ((NewMask & ~KnownZero2 & KnownOne) == (~KnownZero2 & NewMask)) 509 return TLO.CombineTo(Op, Op.getOperand(1)); 510 // If the RHS is a constant, see if we can simplify it. 511 if (TLO.ShrinkDemandedConstant(Op, NewMask)) 512 return true; 513 // If the operation can be done in a smaller type, do so. 514 if (TLO.ShrinkDemandedOp(Op, BitWidth, NewMask, dl)) 515 return true; 516 517 // Output known-0 bits are only known if clear in both the LHS & RHS. 518 KnownZero &= KnownZero2; 519 // Output known-1 are known to be set if set in either the LHS | RHS. 520 KnownOne |= KnownOne2; 521 break; 522 case ISD::XOR: 523 if (SimplifyDemandedBits(Op.getOperand(1), NewMask, KnownZero, 524 KnownOne, TLO, Depth+1)) 525 return true; 526 assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 527 if (SimplifyDemandedBits(Op.getOperand(0), NewMask, KnownZero2, 528 KnownOne2, TLO, Depth+1)) 529 return true; 530 assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 531 532 // If all of the demanded bits are known zero on one side, return the other. 533 // These bits cannot contribute to the result of the 'xor'. 534 if ((KnownZero & NewMask) == NewMask) 535 return TLO.CombineTo(Op, Op.getOperand(0)); 536 if ((KnownZero2 & NewMask) == NewMask) 537 return TLO.CombineTo(Op, Op.getOperand(1)); 538 // If the operation can be done in a smaller type, do so. 539 if (TLO.ShrinkDemandedOp(Op, BitWidth, NewMask, dl)) 540 return true; 541 542 // If all of the unknown bits are known to be zero on one side or the other 543 // (but not both) turn this into an *inclusive* or. 544 // e.g. (A & C1)^(B & C2) -> (A & C1)|(B & C2) iff C1&C2 == 0 545 if ((NewMask & ~KnownZero & ~KnownZero2) == 0) 546 return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::OR, dl, Op.getValueType(), 547 Op.getOperand(0), 548 Op.getOperand(1))); 549 550 // Output known-0 bits are known if clear or set in both the LHS & RHS. 551 KnownZeroOut = (KnownZero & KnownZero2) | (KnownOne & KnownOne2); 552 // Output known-1 are known to be set if set in only one of the LHS, RHS. 553 KnownOneOut = (KnownZero & KnownOne2) | (KnownOne & KnownZero2); 554 555 // If all of the demanded bits on one side are known, and all of the set 556 // bits on that side are also known to be set on the other side, turn this 557 // into an AND, as we know the bits will be cleared. 558 // e.g. (X | C1) ^ C2 --> (X | C1) & ~C2 iff (C1&C2) == C2 559 // NB: it is okay if more bits are known than are requested 560 if ((NewMask & (KnownZero|KnownOne)) == NewMask) { // all known on one side 561 if (KnownOne == KnownOne2) { // set bits are the same on both sides 562 EVT VT = Op.getValueType(); 563 SDValue ANDC = TLO.DAG.getConstant(~KnownOne & NewMask, dl, VT); 564 return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::AND, dl, VT, 565 Op.getOperand(0), ANDC)); 566 } 567 } 568 569 // If the RHS is a constant, see if we can simplify it. 570 // for XOR, we prefer to force bits to 1 if they will make a -1. 571 // if we can't force bits, try to shrink constant 572 if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) { 573 APInt Expanded = C->getAPIntValue() | (~NewMask); 574 // if we can expand it to have all bits set, do it 575 if (Expanded.isAllOnesValue()) { 576 if (Expanded != C->getAPIntValue()) { 577 EVT VT = Op.getValueType(); 578 SDValue New = TLO.DAG.getNode(Op.getOpcode(), dl,VT, Op.getOperand(0), 579 TLO.DAG.getConstant(Expanded, dl, VT)); 580 return TLO.CombineTo(Op, New); 581 } 582 // if it already has all the bits set, nothing to change 583 // but don't shrink either! 584 } else if (TLO.ShrinkDemandedConstant(Op, NewMask)) { 585 return true; 586 } 587 } 588 589 KnownZero = KnownZeroOut; 590 KnownOne = KnownOneOut; 591 break; 592 case ISD::SELECT: 593 if (SimplifyDemandedBits(Op.getOperand(2), NewMask, KnownZero, 594 KnownOne, TLO, Depth+1)) 595 return true; 596 if (SimplifyDemandedBits(Op.getOperand(1), NewMask, KnownZero2, 597 KnownOne2, TLO, Depth+1)) 598 return true; 599 assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 600 assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 601 602 // If the operands are constants, see if we can simplify them. 603 if (TLO.ShrinkDemandedConstant(Op, NewMask)) 604 return true; 605 606 // Only known if known in both the LHS and RHS. 607 KnownOne &= KnownOne2; 608 KnownZero &= KnownZero2; 609 break; 610 case ISD::SELECT_CC: 611 if (SimplifyDemandedBits(Op.getOperand(3), NewMask, KnownZero, 612 KnownOne, TLO, Depth+1)) 613 return true; 614 if (SimplifyDemandedBits(Op.getOperand(2), NewMask, KnownZero2, 615 KnownOne2, TLO, Depth+1)) 616 return true; 617 assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 618 assert((KnownZero2 & KnownOne2) == 0 && "Bits known to be one AND zero?"); 619 620 // If the operands are constants, see if we can simplify them. 621 if (TLO.ShrinkDemandedConstant(Op, NewMask)) 622 return true; 623 624 // Only known if known in both the LHS and RHS. 625 KnownOne &= KnownOne2; 626 KnownZero &= KnownZero2; 627 break; 628 case ISD::SHL: 629 if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) { 630 unsigned ShAmt = SA->getZExtValue(); 631 SDValue InOp = Op.getOperand(0); 632 633 // If the shift count is an invalid immediate, don't do anything. 634 if (ShAmt >= BitWidth) 635 break; 636 637 // If this is ((X >>u C1) << ShAmt), see if we can simplify this into a 638 // single shift. We can do this if the bottom bits (which are shifted 639 // out) are never demanded. 640 if (InOp.getOpcode() == ISD::SRL && 641 isa<ConstantSDNode>(InOp.getOperand(1))) { 642 if (ShAmt && (NewMask & APInt::getLowBitsSet(BitWidth, ShAmt)) == 0) { 643 unsigned C1= cast<ConstantSDNode>(InOp.getOperand(1))->getZExtValue(); 644 unsigned Opc = ISD::SHL; 645 int Diff = ShAmt-C1; 646 if (Diff < 0) { 647 Diff = -Diff; 648 Opc = ISD::SRL; 649 } 650 651 SDValue NewSA = 652 TLO.DAG.getConstant(Diff, dl, Op.getOperand(1).getValueType()); 653 EVT VT = Op.getValueType(); 654 return TLO.CombineTo(Op, TLO.DAG.getNode(Opc, dl, VT, 655 InOp.getOperand(0), NewSA)); 656 } 657 } 658 659 if (SimplifyDemandedBits(InOp, NewMask.lshr(ShAmt), 660 KnownZero, KnownOne, TLO, Depth+1)) 661 return true; 662 663 // Convert (shl (anyext x, c)) to (anyext (shl x, c)) if the high bits 664 // are not demanded. This will likely allow the anyext to be folded away. 665 if (InOp.getNode()->getOpcode() == ISD::ANY_EXTEND) { 666 SDValue InnerOp = InOp.getNode()->getOperand(0); 667 EVT InnerVT = InnerOp.getValueType(); 668 unsigned InnerBits = InnerVT.getSizeInBits(); 669 if (ShAmt < InnerBits && NewMask.lshr(InnerBits) == 0 && 670 isTypeDesirableForOp(ISD::SHL, InnerVT)) { 671 EVT ShTy = getShiftAmountTy(InnerVT, DL); 672 if (!APInt(BitWidth, ShAmt).isIntN(ShTy.getSizeInBits())) 673 ShTy = InnerVT; 674 SDValue NarrowShl = 675 TLO.DAG.getNode(ISD::SHL, dl, InnerVT, InnerOp, 676 TLO.DAG.getConstant(ShAmt, dl, ShTy)); 677 return 678 TLO.CombineTo(Op, 679 TLO.DAG.getNode(ISD::ANY_EXTEND, dl, Op.getValueType(), 680 NarrowShl)); 681 } 682 // Repeat the SHL optimization above in cases where an extension 683 // intervenes: (shl (anyext (shr x, c1)), c2) to 684 // (shl (anyext x), c2-c1). This requires that the bottom c1 bits 685 // aren't demanded (as above) and that the shifted upper c1 bits of 686 // x aren't demanded. 687 if (InOp.hasOneUse() && 688 InnerOp.getOpcode() == ISD::SRL && 689 InnerOp.hasOneUse() && 690 isa<ConstantSDNode>(InnerOp.getOperand(1))) { 691 uint64_t InnerShAmt = cast<ConstantSDNode>(InnerOp.getOperand(1)) 692 ->getZExtValue(); 693 if (InnerShAmt < ShAmt && 694 InnerShAmt < InnerBits && 695 NewMask.lshr(InnerBits - InnerShAmt + ShAmt) == 0 && 696 NewMask.trunc(ShAmt) == 0) { 697 SDValue NewSA = 698 TLO.DAG.getConstant(ShAmt - InnerShAmt, dl, 699 Op.getOperand(1).getValueType()); 700 EVT VT = Op.getValueType(); 701 SDValue NewExt = TLO.DAG.getNode(ISD::ANY_EXTEND, dl, VT, 702 InnerOp.getOperand(0)); 703 return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::SHL, dl, VT, 704 NewExt, NewSA)); 705 } 706 } 707 } 708 709 KnownZero <<= SA->getZExtValue(); 710 KnownOne <<= SA->getZExtValue(); 711 // low bits known zero. 712 KnownZero |= APInt::getLowBitsSet(BitWidth, SA->getZExtValue()); 713 } 714 break; 715 case ISD::SRL: 716 if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) { 717 EVT VT = Op.getValueType(); 718 unsigned ShAmt = SA->getZExtValue(); 719 unsigned VTSize = VT.getSizeInBits(); 720 SDValue InOp = Op.getOperand(0); 721 722 // If the shift count is an invalid immediate, don't do anything. 723 if (ShAmt >= BitWidth) 724 break; 725 726 APInt InDemandedMask = (NewMask << ShAmt); 727 728 // If the shift is exact, then it does demand the low bits (and knows that 729 // they are zero). 730 if (cast<BinaryWithFlagsSDNode>(Op)->Flags.hasExact()) 731 InDemandedMask |= APInt::getLowBitsSet(BitWidth, ShAmt); 732 733 // If this is ((X << C1) >>u ShAmt), see if we can simplify this into a 734 // single shift. We can do this if the top bits (which are shifted out) 735 // are never demanded. 736 if (InOp.getOpcode() == ISD::SHL && 737 isa<ConstantSDNode>(InOp.getOperand(1))) { 738 if (ShAmt && (NewMask & APInt::getHighBitsSet(VTSize, ShAmt)) == 0) { 739 unsigned C1= cast<ConstantSDNode>(InOp.getOperand(1))->getZExtValue(); 740 unsigned Opc = ISD::SRL; 741 int Diff = ShAmt-C1; 742 if (Diff < 0) { 743 Diff = -Diff; 744 Opc = ISD::SHL; 745 } 746 747 SDValue NewSA = 748 TLO.DAG.getConstant(Diff, dl, Op.getOperand(1).getValueType()); 749 return TLO.CombineTo(Op, TLO.DAG.getNode(Opc, dl, VT, 750 InOp.getOperand(0), NewSA)); 751 } 752 } 753 754 // Compute the new bits that are at the top now. 755 if (SimplifyDemandedBits(InOp, InDemandedMask, 756 KnownZero, KnownOne, TLO, Depth+1)) 757 return true; 758 assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 759 KnownZero = KnownZero.lshr(ShAmt); 760 KnownOne = KnownOne.lshr(ShAmt); 761 762 APInt HighBits = APInt::getHighBitsSet(BitWidth, ShAmt); 763 KnownZero |= HighBits; // High bits known zero. 764 } 765 break; 766 case ISD::SRA: 767 // If this is an arithmetic shift right and only the low-bit is set, we can 768 // always convert this into a logical shr, even if the shift amount is 769 // variable. The low bit of the shift cannot be an input sign bit unless 770 // the shift amount is >= the size of the datatype, which is undefined. 771 if (NewMask == 1) 772 return TLO.CombineTo(Op, 773 TLO.DAG.getNode(ISD::SRL, dl, Op.getValueType(), 774 Op.getOperand(0), Op.getOperand(1))); 775 776 if (ConstantSDNode *SA = dyn_cast<ConstantSDNode>(Op.getOperand(1))) { 777 EVT VT = Op.getValueType(); 778 unsigned ShAmt = SA->getZExtValue(); 779 780 // If the shift count is an invalid immediate, don't do anything. 781 if (ShAmt >= BitWidth) 782 break; 783 784 APInt InDemandedMask = (NewMask << ShAmt); 785 786 // If the shift is exact, then it does demand the low bits (and knows that 787 // they are zero). 788 if (cast<BinaryWithFlagsSDNode>(Op)->Flags.hasExact()) 789 InDemandedMask |= APInt::getLowBitsSet(BitWidth, ShAmt); 790 791 // If any of the demanded bits are produced by the sign extension, we also 792 // demand the input sign bit. 793 APInt HighBits = APInt::getHighBitsSet(BitWidth, ShAmt); 794 if (HighBits.intersects(NewMask)) 795 InDemandedMask |= APInt::getSignBit(VT.getScalarType().getSizeInBits()); 796 797 if (SimplifyDemandedBits(Op.getOperand(0), InDemandedMask, 798 KnownZero, KnownOne, TLO, Depth+1)) 799 return true; 800 assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 801 KnownZero = KnownZero.lshr(ShAmt); 802 KnownOne = KnownOne.lshr(ShAmt); 803 804 // Handle the sign bit, adjusted to where it is now in the mask. 805 APInt SignBit = APInt::getSignBit(BitWidth).lshr(ShAmt); 806 807 // If the input sign bit is known to be zero, or if none of the top bits 808 // are demanded, turn this into an unsigned shift right. 809 if (KnownZero.intersects(SignBit) || (HighBits & ~NewMask) == HighBits) { 810 SDNodeFlags Flags; 811 Flags.setExact(cast<BinaryWithFlagsSDNode>(Op)->Flags.hasExact()); 812 return TLO.CombineTo(Op, 813 TLO.DAG.getNode(ISD::SRL, dl, VT, Op.getOperand(0), 814 Op.getOperand(1), &Flags)); 815 } 816 817 int Log2 = NewMask.exactLogBase2(); 818 if (Log2 >= 0) { 819 // The bit must come from the sign. 820 SDValue NewSA = 821 TLO.DAG.getConstant(BitWidth - 1 - Log2, dl, 822 Op.getOperand(1).getValueType()); 823 return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::SRL, dl, VT, 824 Op.getOperand(0), NewSA)); 825 } 826 827 if (KnownOne.intersects(SignBit)) 828 // New bits are known one. 829 KnownOne |= HighBits; 830 } 831 break; 832 case ISD::SIGN_EXTEND_INREG: { 833 EVT ExVT = cast<VTSDNode>(Op.getOperand(1))->getVT(); 834 835 APInt MsbMask = APInt::getHighBitsSet(BitWidth, 1); 836 // If we only care about the highest bit, don't bother shifting right. 837 if (MsbMask == NewMask) { 838 unsigned ShAmt = ExVT.getScalarType().getSizeInBits(); 839 SDValue InOp = Op.getOperand(0); 840 unsigned VTBits = Op->getValueType(0).getScalarType().getSizeInBits(); 841 bool AlreadySignExtended = 842 TLO.DAG.ComputeNumSignBits(InOp) >= VTBits-ShAmt+1; 843 // However if the input is already sign extended we expect the sign 844 // extension to be dropped altogether later and do not simplify. 845 if (!AlreadySignExtended) { 846 // Compute the correct shift amount type, which must be getShiftAmountTy 847 // for scalar types after legalization. 848 EVT ShiftAmtTy = Op.getValueType(); 849 if (TLO.LegalTypes() && !ShiftAmtTy.isVector()) 850 ShiftAmtTy = getShiftAmountTy(ShiftAmtTy, DL); 851 852 SDValue ShiftAmt = TLO.DAG.getConstant(BitWidth - ShAmt, dl, 853 ShiftAmtTy); 854 return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::SHL, dl, 855 Op.getValueType(), InOp, 856 ShiftAmt)); 857 } 858 } 859 860 // Sign extension. Compute the demanded bits in the result that are not 861 // present in the input. 862 APInt NewBits = 863 APInt::getHighBitsSet(BitWidth, 864 BitWidth - ExVT.getScalarType().getSizeInBits()); 865 866 // If none of the extended bits are demanded, eliminate the sextinreg. 867 if ((NewBits & NewMask) == 0) 868 return TLO.CombineTo(Op, Op.getOperand(0)); 869 870 APInt InSignBit = 871 APInt::getSignBit(ExVT.getScalarType().getSizeInBits()).zext(BitWidth); 872 APInt InputDemandedBits = 873 APInt::getLowBitsSet(BitWidth, 874 ExVT.getScalarType().getSizeInBits()) & 875 NewMask; 876 877 // Since the sign extended bits are demanded, we know that the sign 878 // bit is demanded. 879 InputDemandedBits |= InSignBit; 880 881 if (SimplifyDemandedBits(Op.getOperand(0), InputDemandedBits, 882 KnownZero, KnownOne, TLO, Depth+1)) 883 return true; 884 assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 885 886 // If the sign bit of the input is known set or clear, then we know the 887 // top bits of the result. 888 889 // If the input sign bit is known zero, convert this into a zero extension. 890 if (KnownZero.intersects(InSignBit)) 891 return TLO.CombineTo(Op, 892 TLO.DAG.getZeroExtendInReg(Op.getOperand(0),dl,ExVT)); 893 894 if (KnownOne.intersects(InSignBit)) { // Input sign bit known set 895 KnownOne |= NewBits; 896 KnownZero &= ~NewBits; 897 } else { // Input sign bit unknown 898 KnownZero &= ~NewBits; 899 KnownOne &= ~NewBits; 900 } 901 break; 902 } 903 case ISD::BUILD_PAIR: { 904 EVT HalfVT = Op.getOperand(0).getValueType(); 905 unsigned HalfBitWidth = HalfVT.getScalarSizeInBits(); 906 907 APInt MaskLo = NewMask.getLoBits(HalfBitWidth).trunc(HalfBitWidth); 908 APInt MaskHi = NewMask.getHiBits(HalfBitWidth).trunc(HalfBitWidth); 909 910 APInt KnownZeroLo, KnownOneLo; 911 APInt KnownZeroHi, KnownOneHi; 912 913 if (SimplifyDemandedBits(Op.getOperand(0), MaskLo, KnownZeroLo, 914 KnownOneLo, TLO, Depth + 1)) 915 return true; 916 917 if (SimplifyDemandedBits(Op.getOperand(1), MaskHi, KnownZeroHi, 918 KnownOneHi, TLO, Depth + 1)) 919 return true; 920 921 KnownZero = KnownZeroLo.zext(BitWidth) | 922 KnownZeroHi.zext(BitWidth).shl(HalfBitWidth); 923 924 KnownOne = KnownOneLo.zext(BitWidth) | 925 KnownOneHi.zext(BitWidth).shl(HalfBitWidth); 926 break; 927 } 928 case ISD::ZERO_EXTEND: { 929 unsigned OperandBitWidth = 930 Op.getOperand(0).getValueType().getScalarType().getSizeInBits(); 931 APInt InMask = NewMask.trunc(OperandBitWidth); 932 933 // If none of the top bits are demanded, convert this into an any_extend. 934 APInt NewBits = 935 APInt::getHighBitsSet(BitWidth, BitWidth - OperandBitWidth) & NewMask; 936 if (!NewBits.intersects(NewMask)) 937 return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::ANY_EXTEND, dl, 938 Op.getValueType(), 939 Op.getOperand(0))); 940 941 if (SimplifyDemandedBits(Op.getOperand(0), InMask, 942 KnownZero, KnownOne, TLO, Depth+1)) 943 return true; 944 assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 945 KnownZero = KnownZero.zext(BitWidth); 946 KnownOne = KnownOne.zext(BitWidth); 947 KnownZero |= NewBits; 948 break; 949 } 950 case ISD::SIGN_EXTEND: { 951 EVT InVT = Op.getOperand(0).getValueType(); 952 unsigned InBits = InVT.getScalarType().getSizeInBits(); 953 APInt InMask = APInt::getLowBitsSet(BitWidth, InBits); 954 APInt InSignBit = APInt::getBitsSet(BitWidth, InBits - 1, InBits); 955 APInt NewBits = ~InMask & NewMask; 956 957 // If none of the top bits are demanded, convert this into an any_extend. 958 if (NewBits == 0) 959 return TLO.CombineTo(Op,TLO.DAG.getNode(ISD::ANY_EXTEND, dl, 960 Op.getValueType(), 961 Op.getOperand(0))); 962 963 // Since some of the sign extended bits are demanded, we know that the sign 964 // bit is demanded. 965 APInt InDemandedBits = InMask & NewMask; 966 InDemandedBits |= InSignBit; 967 InDemandedBits = InDemandedBits.trunc(InBits); 968 969 if (SimplifyDemandedBits(Op.getOperand(0), InDemandedBits, KnownZero, 970 KnownOne, TLO, Depth+1)) 971 return true; 972 KnownZero = KnownZero.zext(BitWidth); 973 KnownOne = KnownOne.zext(BitWidth); 974 975 // If the sign bit is known zero, convert this to a zero extend. 976 if (KnownZero.intersects(InSignBit)) 977 return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::ZERO_EXTEND, dl, 978 Op.getValueType(), 979 Op.getOperand(0))); 980 981 // If the sign bit is known one, the top bits match. 982 if (KnownOne.intersects(InSignBit)) { 983 KnownOne |= NewBits; 984 assert((KnownZero & NewBits) == 0); 985 } else { // Otherwise, top bits aren't known. 986 assert((KnownOne & NewBits) == 0); 987 assert((KnownZero & NewBits) == 0); 988 } 989 break; 990 } 991 case ISD::ANY_EXTEND: { 992 unsigned OperandBitWidth = 993 Op.getOperand(0).getValueType().getScalarType().getSizeInBits(); 994 APInt InMask = NewMask.trunc(OperandBitWidth); 995 if (SimplifyDemandedBits(Op.getOperand(0), InMask, 996 KnownZero, KnownOne, TLO, Depth+1)) 997 return true; 998 assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 999 KnownZero = KnownZero.zext(BitWidth); 1000 KnownOne = KnownOne.zext(BitWidth); 1001 break; 1002 } 1003 case ISD::TRUNCATE: { 1004 // Simplify the input, using demanded bit information, and compute the known 1005 // zero/one bits live out. 1006 unsigned OperandBitWidth = 1007 Op.getOperand(0).getValueType().getScalarType().getSizeInBits(); 1008 APInt TruncMask = NewMask.zext(OperandBitWidth); 1009 if (SimplifyDemandedBits(Op.getOperand(0), TruncMask, 1010 KnownZero, KnownOne, TLO, Depth+1)) 1011 return true; 1012 KnownZero = KnownZero.trunc(BitWidth); 1013 KnownOne = KnownOne.trunc(BitWidth); 1014 1015 // If the input is only used by this truncate, see if we can shrink it based 1016 // on the known demanded bits. 1017 if (Op.getOperand(0).getNode()->hasOneUse()) { 1018 SDValue In = Op.getOperand(0); 1019 switch (In.getOpcode()) { 1020 default: break; 1021 case ISD::SRL: 1022 // Shrink SRL by a constant if none of the high bits shifted in are 1023 // demanded. 1024 if (TLO.LegalTypes() && 1025 !isTypeDesirableForOp(ISD::SRL, Op.getValueType())) 1026 // Do not turn (vt1 truncate (vt2 srl)) into (vt1 srl) if vt1 is 1027 // undesirable. 1028 break; 1029 ConstantSDNode *ShAmt = dyn_cast<ConstantSDNode>(In.getOperand(1)); 1030 if (!ShAmt) 1031 break; 1032 SDValue Shift = In.getOperand(1); 1033 if (TLO.LegalTypes()) { 1034 uint64_t ShVal = ShAmt->getZExtValue(); 1035 Shift = TLO.DAG.getConstant(ShVal, dl, 1036 getShiftAmountTy(Op.getValueType(), DL)); 1037 } 1038 1039 APInt HighBits = APInt::getHighBitsSet(OperandBitWidth, 1040 OperandBitWidth - BitWidth); 1041 HighBits = HighBits.lshr(ShAmt->getZExtValue()).trunc(BitWidth); 1042 1043 if (ShAmt->getZExtValue() < BitWidth && !(HighBits & NewMask)) { 1044 // None of the shifted in bits are needed. Add a truncate of the 1045 // shift input, then shift it. 1046 SDValue NewTrunc = TLO.DAG.getNode(ISD::TRUNCATE, dl, 1047 Op.getValueType(), 1048 In.getOperand(0)); 1049 return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::SRL, dl, 1050 Op.getValueType(), 1051 NewTrunc, 1052 Shift)); 1053 } 1054 break; 1055 } 1056 } 1057 1058 assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 1059 break; 1060 } 1061 case ISD::AssertZext: { 1062 // AssertZext demands all of the high bits, plus any of the low bits 1063 // demanded by its users. 1064 EVT VT = cast<VTSDNode>(Op.getOperand(1))->getVT(); 1065 APInt InMask = APInt::getLowBitsSet(BitWidth, 1066 VT.getSizeInBits()); 1067 if (SimplifyDemandedBits(Op.getOperand(0), ~InMask | NewMask, 1068 KnownZero, KnownOne, TLO, Depth+1)) 1069 return true; 1070 assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); 1071 1072 KnownZero |= ~InMask & NewMask; 1073 break; 1074 } 1075 case ISD::BITCAST: 1076 // If this is an FP->Int bitcast and if the sign bit is the only 1077 // thing demanded, turn this into a FGETSIGN. 1078 if (!TLO.LegalOperations() && 1079 !Op.getValueType().isVector() && 1080 !Op.getOperand(0).getValueType().isVector() && 1081 NewMask == APInt::getSignBit(Op.getValueType().getSizeInBits()) && 1082 Op.getOperand(0).getValueType().isFloatingPoint()) { 1083 bool OpVTLegal = isOperationLegalOrCustom(ISD::FGETSIGN, Op.getValueType()); 1084 bool i32Legal = isOperationLegalOrCustom(ISD::FGETSIGN, MVT::i32); 1085 if ((OpVTLegal || i32Legal) && Op.getValueType().isSimple() && 1086 Op.getOperand(0).getValueType() != MVT::f128) { 1087 // Cannot eliminate/lower SHL for f128 yet. 1088 EVT Ty = OpVTLegal ? Op.getValueType() : MVT::i32; 1089 // Make a FGETSIGN + SHL to move the sign bit into the appropriate 1090 // place. We expect the SHL to be eliminated by other optimizations. 1091 SDValue Sign = TLO.DAG.getNode(ISD::FGETSIGN, dl, Ty, Op.getOperand(0)); 1092 unsigned OpVTSizeInBits = Op.getValueType().getSizeInBits(); 1093 if (!OpVTLegal && OpVTSizeInBits > 32) 1094 Sign = TLO.DAG.getNode(ISD::ZERO_EXTEND, dl, Op.getValueType(), Sign); 1095 unsigned ShVal = Op.getValueType().getSizeInBits()-1; 1096 SDValue ShAmt = TLO.DAG.getConstant(ShVal, dl, Op.getValueType()); 1097 return TLO.CombineTo(Op, TLO.DAG.getNode(ISD::SHL, dl, 1098 Op.getValueType(), 1099 Sign, ShAmt)); 1100 } 1101 } 1102 break; 1103 case ISD::ADD: 1104 case ISD::MUL: 1105 case ISD::SUB: { 1106 // Add, Sub, and Mul don't demand any bits in positions beyond that 1107 // of the highest bit demanded of them. 1108 APInt LoMask = APInt::getLowBitsSet(BitWidth, 1109 BitWidth - NewMask.countLeadingZeros()); 1110 if (SimplifyDemandedBits(Op.getOperand(0), LoMask, KnownZero2, 1111 KnownOne2, TLO, Depth+1)) 1112 return true; 1113 if (SimplifyDemandedBits(Op.getOperand(1), LoMask, KnownZero2, 1114 KnownOne2, TLO, Depth+1)) 1115 return true; 1116 // See if the operation should be performed at a smaller bit width. 1117 if (TLO.ShrinkDemandedOp(Op, BitWidth, NewMask, dl)) 1118 return true; 1119 } 1120 // FALL THROUGH 1121 default: 1122 // Just use computeKnownBits to compute output bits. 1123 TLO.DAG.computeKnownBits(Op, KnownZero, KnownOne, Depth); 1124 break; 1125 } 1126 1127 // If we know the value of all of the demanded bits, return this as a 1128 // constant. 1129 if ((NewMask & (KnownZero|KnownOne)) == NewMask) { 1130 // Avoid folding to a constant if any OpaqueConstant is involved. 1131 const SDNode *N = Op.getNode(); 1132 for (SDNodeIterator I = SDNodeIterator::begin(N), 1133 E = SDNodeIterator::end(N); I != E; ++I) { 1134 SDNode *Op = *I; 1135 if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op)) 1136 if (C->isOpaque()) 1137 return false; 1138 } 1139 return TLO.CombineTo(Op, 1140 TLO.DAG.getConstant(KnownOne, dl, Op.getValueType())); 1141 } 1142 1143 return false; 1144 } 1145 1146 /// Determine which of the bits specified in Mask are known to be either zero or 1147 /// one and return them in the KnownZero/KnownOne bitsets. 1148 void TargetLowering::computeKnownBitsForTargetNode(const SDValue Op, 1149 APInt &KnownZero, 1150 APInt &KnownOne, 1151 const SelectionDAG &DAG, 1152 unsigned Depth) const { 1153 assert((Op.getOpcode() >= ISD::BUILTIN_OP_END || 1154 Op.getOpcode() == ISD::INTRINSIC_WO_CHAIN || 1155 Op.getOpcode() == ISD::INTRINSIC_W_CHAIN || 1156 Op.getOpcode() == ISD::INTRINSIC_VOID) && 1157 "Should use MaskedValueIsZero if you don't know whether Op" 1158 " is a target node!"); 1159 KnownZero = KnownOne = APInt(KnownOne.getBitWidth(), 0); 1160 } 1161 1162 /// This method can be implemented by targets that want to expose additional 1163 /// information about sign bits to the DAG Combiner. 1164 unsigned TargetLowering::ComputeNumSignBitsForTargetNode(SDValue Op, 1165 const SelectionDAG &, 1166 unsigned Depth) const { 1167 assert((Op.getOpcode() >= ISD::BUILTIN_OP_END || 1168 Op.getOpcode() == ISD::INTRINSIC_WO_CHAIN || 1169 Op.getOpcode() == ISD::INTRINSIC_W_CHAIN || 1170 Op.getOpcode() == ISD::INTRINSIC_VOID) && 1171 "Should use ComputeNumSignBits if you don't know whether Op" 1172 " is a target node!"); 1173 return 1; 1174 } 1175 1176 /// Test if the given value is known to have exactly one bit set. This differs 1177 /// from computeKnownBits in that it doesn't need to determine which bit is set. 1178 static bool ValueHasExactlyOneBitSet(SDValue Val, const SelectionDAG &DAG) { 1179 // A left-shift of a constant one will have exactly one bit set, because 1180 // shifting the bit off the end is undefined. 1181 if (Val.getOpcode() == ISD::SHL) 1182 if (ConstantSDNode *C = 1183 dyn_cast<ConstantSDNode>(Val.getNode()->getOperand(0))) 1184 if (C->getAPIntValue() == 1) 1185 return true; 1186 1187 // Similarly, a right-shift of a constant sign-bit will have exactly 1188 // one bit set. 1189 if (Val.getOpcode() == ISD::SRL) 1190 if (ConstantSDNode *C = 1191 dyn_cast<ConstantSDNode>(Val.getNode()->getOperand(0))) 1192 if (C->getAPIntValue().isSignBit()) 1193 return true; 1194 1195 // More could be done here, though the above checks are enough 1196 // to handle some common cases. 1197 1198 // Fall back to computeKnownBits to catch other known cases. 1199 EVT OpVT = Val.getValueType(); 1200 unsigned BitWidth = OpVT.getScalarType().getSizeInBits(); 1201 APInt KnownZero, KnownOne; 1202 DAG.computeKnownBits(Val, KnownZero, KnownOne); 1203 return (KnownZero.countPopulation() == BitWidth - 1) && 1204 (KnownOne.countPopulation() == 1); 1205 } 1206 1207 bool TargetLowering::isConstTrueVal(const SDNode *N) const { 1208 if (!N) 1209 return false; 1210 1211 const ConstantSDNode *CN = dyn_cast<ConstantSDNode>(N); 1212 if (!CN) { 1213 const BuildVectorSDNode *BV = dyn_cast<BuildVectorSDNode>(N); 1214 if (!BV) 1215 return false; 1216 1217 BitVector UndefElements; 1218 CN = BV->getConstantSplatNode(&UndefElements); 1219 // Only interested in constant splats, and we don't try to handle undef 1220 // elements in identifying boolean constants. 1221 if (!CN || UndefElements.none()) 1222 return false; 1223 } 1224 1225 switch (getBooleanContents(N->getValueType(0))) { 1226 case UndefinedBooleanContent: 1227 return CN->getAPIntValue()[0]; 1228 case ZeroOrOneBooleanContent: 1229 return CN->isOne(); 1230 case ZeroOrNegativeOneBooleanContent: 1231 return CN->isAllOnesValue(); 1232 } 1233 1234 llvm_unreachable("Invalid boolean contents"); 1235 } 1236 1237 bool TargetLowering::isConstFalseVal(const SDNode *N) const { 1238 if (!N) 1239 return false; 1240 1241 const ConstantSDNode *CN = dyn_cast<ConstantSDNode>(N); 1242 if (!CN) { 1243 const BuildVectorSDNode *BV = dyn_cast<BuildVectorSDNode>(N); 1244 if (!BV) 1245 return false; 1246 1247 BitVector UndefElements; 1248 CN = BV->getConstantSplatNode(&UndefElements); 1249 // Only interested in constant splats, and we don't try to handle undef 1250 // elements in identifying boolean constants. 1251 if (!CN || UndefElements.none()) 1252 return false; 1253 } 1254 1255 if (getBooleanContents(N->getValueType(0)) == UndefinedBooleanContent) 1256 return !CN->getAPIntValue()[0]; 1257 1258 return CN->isNullValue(); 1259 } 1260 1261 bool TargetLowering::isExtendedTrueVal(const ConstantSDNode *N, EVT VT, 1262 bool SExt) const { 1263 if (VT == MVT::i1) 1264 return N->isOne(); 1265 1266 TargetLowering::BooleanContent Cnt = getBooleanContents(VT); 1267 switch (Cnt) { 1268 case TargetLowering::ZeroOrOneBooleanContent: 1269 // An extended value of 1 is always true, unless its original type is i1, 1270 // in which case it will be sign extended to -1. 1271 return (N->isOne() && !SExt) || (SExt && (N->getValueType(0) != MVT::i1)); 1272 case TargetLowering::UndefinedBooleanContent: 1273 case TargetLowering::ZeroOrNegativeOneBooleanContent: 1274 return N->isAllOnesValue() && SExt; 1275 } 1276 llvm_unreachable("Unexpected enumeration."); 1277 } 1278 1279 /// Try to simplify a setcc built with the specified operands and cc. If it is 1280 /// unable to simplify it, return a null SDValue. 1281 SDValue 1282 TargetLowering::SimplifySetCC(EVT VT, SDValue N0, SDValue N1, 1283 ISD::CondCode Cond, bool foldBooleans, 1284 DAGCombinerInfo &DCI, SDLoc dl) const { 1285 SelectionDAG &DAG = DCI.DAG; 1286 1287 // These setcc operations always fold. 1288 switch (Cond) { 1289 default: break; 1290 case ISD::SETFALSE: 1291 case ISD::SETFALSE2: return DAG.getConstant(0, dl, VT); 1292 case ISD::SETTRUE: 1293 case ISD::SETTRUE2: { 1294 TargetLowering::BooleanContent Cnt = 1295 getBooleanContents(N0->getValueType(0)); 1296 return DAG.getConstant( 1297 Cnt == TargetLowering::ZeroOrNegativeOneBooleanContent ? -1ULL : 1, dl, 1298 VT); 1299 } 1300 } 1301 1302 // Ensure that the constant occurs on the RHS, and fold constant 1303 // comparisons. 1304 ISD::CondCode SwappedCC = ISD::getSetCCSwappedOperands(Cond); 1305 if (isa<ConstantSDNode>(N0.getNode()) && 1306 (DCI.isBeforeLegalizeOps() || 1307 isCondCodeLegal(SwappedCC, N0.getSimpleValueType()))) 1308 return DAG.getSetCC(dl, VT, N1, N0, SwappedCC); 1309 1310 if (auto *N1C = dyn_cast<ConstantSDNode>(N1.getNode())) { 1311 const APInt &C1 = N1C->getAPIntValue(); 1312 1313 // If the LHS is '(srl (ctlz x), 5)', the RHS is 0/1, and this is an 1314 // equality comparison, then we're just comparing whether X itself is 1315 // zero. 1316 if (N0.getOpcode() == ISD::SRL && (C1 == 0 || C1 == 1) && 1317 N0.getOperand(0).getOpcode() == ISD::CTLZ && 1318 N0.getOperand(1).getOpcode() == ISD::Constant) { 1319 const APInt &ShAmt 1320 = cast<ConstantSDNode>(N0.getOperand(1))->getAPIntValue(); 1321 if ((Cond == ISD::SETEQ || Cond == ISD::SETNE) && 1322 ShAmt == Log2_32(N0.getValueType().getSizeInBits())) { 1323 if ((C1 == 0) == (Cond == ISD::SETEQ)) { 1324 // (srl (ctlz x), 5) == 0 -> X != 0 1325 // (srl (ctlz x), 5) != 1 -> X != 0 1326 Cond = ISD::SETNE; 1327 } else { 1328 // (srl (ctlz x), 5) != 0 -> X == 0 1329 // (srl (ctlz x), 5) == 1 -> X == 0 1330 Cond = ISD::SETEQ; 1331 } 1332 SDValue Zero = DAG.getConstant(0, dl, N0.getValueType()); 1333 return DAG.getSetCC(dl, VT, N0.getOperand(0).getOperand(0), 1334 Zero, Cond); 1335 } 1336 } 1337 1338 SDValue CTPOP = N0; 1339 // Look through truncs that don't change the value of a ctpop. 1340 if (N0.hasOneUse() && N0.getOpcode() == ISD::TRUNCATE) 1341 CTPOP = N0.getOperand(0); 1342 1343 if (CTPOP.hasOneUse() && CTPOP.getOpcode() == ISD::CTPOP && 1344 (N0 == CTPOP || N0.getValueType().getSizeInBits() > 1345 Log2_32_Ceil(CTPOP.getValueType().getSizeInBits()))) { 1346 EVT CTVT = CTPOP.getValueType(); 1347 SDValue CTOp = CTPOP.getOperand(0); 1348 1349 // (ctpop x) u< 2 -> (x & x-1) == 0 1350 // (ctpop x) u> 1 -> (x & x-1) != 0 1351 if ((Cond == ISD::SETULT && C1 == 2) || (Cond == ISD::SETUGT && C1 == 1)){ 1352 SDValue Sub = DAG.getNode(ISD::SUB, dl, CTVT, CTOp, 1353 DAG.getConstant(1, dl, CTVT)); 1354 SDValue And = DAG.getNode(ISD::AND, dl, CTVT, CTOp, Sub); 1355 ISD::CondCode CC = Cond == ISD::SETULT ? ISD::SETEQ : ISD::SETNE; 1356 return DAG.getSetCC(dl, VT, And, DAG.getConstant(0, dl, CTVT), CC); 1357 } 1358 1359 // TODO: (ctpop x) == 1 -> x && (x & x-1) == 0 iff ctpop is illegal. 1360 } 1361 1362 // (zext x) == C --> x == (trunc C) 1363 // (sext x) == C --> x == (trunc C) 1364 if ((Cond == ISD::SETEQ || Cond == ISD::SETNE) && 1365 DCI.isBeforeLegalize() && N0->hasOneUse()) { 1366 unsigned MinBits = N0.getValueSizeInBits(); 1367 SDValue PreExt; 1368 bool Signed = false; 1369 if (N0->getOpcode() == ISD::ZERO_EXTEND) { 1370 // ZExt 1371 MinBits = N0->getOperand(0).getValueSizeInBits(); 1372 PreExt = N0->getOperand(0); 1373 } else if (N0->getOpcode() == ISD::AND) { 1374 // DAGCombine turns costly ZExts into ANDs 1375 if (auto *C = dyn_cast<ConstantSDNode>(N0->getOperand(1))) 1376 if ((C->getAPIntValue()+1).isPowerOf2()) { 1377 MinBits = C->getAPIntValue().countTrailingOnes(); 1378 PreExt = N0->getOperand(0); 1379 } 1380 } else if (N0->getOpcode() == ISD::SIGN_EXTEND) { 1381 // SExt 1382 MinBits = N0->getOperand(0).getValueSizeInBits(); 1383 PreExt = N0->getOperand(0); 1384 Signed = true; 1385 } else if (auto *LN0 = dyn_cast<LoadSDNode>(N0)) { 1386 // ZEXTLOAD / SEXTLOAD 1387 if (LN0->getExtensionType() == ISD::ZEXTLOAD) { 1388 MinBits = LN0->getMemoryVT().getSizeInBits(); 1389 PreExt = N0; 1390 } else if (LN0->getExtensionType() == ISD::SEXTLOAD) { 1391 Signed = true; 1392 MinBits = LN0->getMemoryVT().getSizeInBits(); 1393 PreExt = N0; 1394 } 1395 } 1396 1397 // Figure out how many bits we need to preserve this constant. 1398 unsigned ReqdBits = Signed ? 1399 C1.getBitWidth() - C1.getNumSignBits() + 1 : 1400 C1.getActiveBits(); 1401 1402 // Make sure we're not losing bits from the constant. 1403 if (MinBits > 0 && 1404 MinBits < C1.getBitWidth() && 1405 MinBits >= ReqdBits) { 1406 EVT MinVT = EVT::getIntegerVT(*DAG.getContext(), MinBits); 1407 if (isTypeDesirableForOp(ISD::SETCC, MinVT)) { 1408 // Will get folded away. 1409 SDValue Trunc = DAG.getNode(ISD::TRUNCATE, dl, MinVT, PreExt); 1410 SDValue C = DAG.getConstant(C1.trunc(MinBits), dl, MinVT); 1411 return DAG.getSetCC(dl, VT, Trunc, C, Cond); 1412 } 1413 1414 // If truncating the setcc operands is not desirable, we can still 1415 // simplify the expression in some cases: 1416 // setcc ([sz]ext (setcc x, y, cc)), 0, setne) -> setcc (x, y, cc) 1417 // setcc ([sz]ext (setcc x, y, cc)), 0, seteq) -> setcc (x, y, inv(cc)) 1418 // setcc (zext (setcc x, y, cc)), 1, setne) -> setcc (x, y, inv(cc)) 1419 // setcc (zext (setcc x, y, cc)), 1, seteq) -> setcc (x, y, cc) 1420 // setcc (sext (setcc x, y, cc)), -1, setne) -> setcc (x, y, inv(cc)) 1421 // setcc (sext (setcc x, y, cc)), -1, seteq) -> setcc (x, y, cc) 1422 SDValue TopSetCC = N0->getOperand(0); 1423 unsigned N0Opc = N0->getOpcode(); 1424 bool SExt = (N0Opc == ISD::SIGN_EXTEND); 1425 if (TopSetCC.getValueType() == MVT::i1 && VT == MVT::i1 && 1426 TopSetCC.getOpcode() == ISD::SETCC && 1427 (N0Opc == ISD::ZERO_EXTEND || N0Opc == ISD::SIGN_EXTEND) && 1428 (isConstFalseVal(N1C) || 1429 isExtendedTrueVal(N1C, N0->getValueType(0), SExt))) { 1430 1431 bool Inverse = (N1C->isNullValue() && Cond == ISD::SETEQ) || 1432 (!N1C->isNullValue() && Cond == ISD::SETNE); 1433 1434 if (!Inverse) 1435 return TopSetCC; 1436 1437 ISD::CondCode InvCond = ISD::getSetCCInverse( 1438 cast<CondCodeSDNode>(TopSetCC.getOperand(2))->get(), 1439 TopSetCC.getOperand(0).getValueType().isInteger()); 1440 return DAG.getSetCC(dl, VT, TopSetCC.getOperand(0), 1441 TopSetCC.getOperand(1), 1442 InvCond); 1443 1444 } 1445 } 1446 } 1447 1448 // If the LHS is '(and load, const)', the RHS is 0, 1449 // the test is for equality or unsigned, and all 1 bits of the const are 1450 // in the same partial word, see if we can shorten the load. 1451 if (DCI.isBeforeLegalize() && 1452 !ISD::isSignedIntSetCC(Cond) && 1453 N0.getOpcode() == ISD::AND && C1 == 0 && 1454 N0.getNode()->hasOneUse() && 1455 isa<LoadSDNode>(N0.getOperand(0)) && 1456 N0.getOperand(0).getNode()->hasOneUse() && 1457 isa<ConstantSDNode>(N0.getOperand(1))) { 1458 LoadSDNode *Lod = cast<LoadSDNode>(N0.getOperand(0)); 1459 APInt bestMask; 1460 unsigned bestWidth = 0, bestOffset = 0; 1461 if (!Lod->isVolatile() && Lod->isUnindexed()) { 1462 unsigned origWidth = N0.getValueType().getSizeInBits(); 1463 unsigned maskWidth = origWidth; 1464 // We can narrow (e.g.) 16-bit extending loads on 32-bit target to 1465 // 8 bits, but have to be careful... 1466 if (Lod->getExtensionType() != ISD::NON_EXTLOAD) 1467 origWidth = Lod->getMemoryVT().getSizeInBits(); 1468 const APInt &Mask = 1469 cast<ConstantSDNode>(N0.getOperand(1))->getAPIntValue(); 1470 for (unsigned width = origWidth / 2; width>=8; width /= 2) { 1471 APInt newMask = APInt::getLowBitsSet(maskWidth, width); 1472 for (unsigned offset=0; offset<origWidth/width; offset++) { 1473 if ((newMask & Mask) == Mask) { 1474 if (!DAG.getDataLayout().isLittleEndian()) 1475 bestOffset = (origWidth/width - offset - 1) * (width/8); 1476 else 1477 bestOffset = (uint64_t)offset * (width/8); 1478 bestMask = Mask.lshr(offset * (width/8) * 8); 1479 bestWidth = width; 1480 break; 1481 } 1482 newMask = newMask << width; 1483 } 1484 } 1485 } 1486 if (bestWidth) { 1487 EVT newVT = EVT::getIntegerVT(*DAG.getContext(), bestWidth); 1488 if (newVT.isRound()) { 1489 EVT PtrType = Lod->getOperand(1).getValueType(); 1490 SDValue Ptr = Lod->getBasePtr(); 1491 if (bestOffset != 0) 1492 Ptr = DAG.getNode(ISD::ADD, dl, PtrType, Lod->getBasePtr(), 1493 DAG.getConstant(bestOffset, dl, PtrType)); 1494 unsigned NewAlign = MinAlign(Lod->getAlignment(), bestOffset); 1495 SDValue NewLoad = DAG.getLoad(newVT, dl, Lod->getChain(), Ptr, 1496 Lod->getPointerInfo().getWithOffset(bestOffset), 1497 false, false, false, NewAlign); 1498 return DAG.getSetCC(dl, VT, 1499 DAG.getNode(ISD::AND, dl, newVT, NewLoad, 1500 DAG.getConstant(bestMask.trunc(bestWidth), 1501 dl, newVT)), 1502 DAG.getConstant(0LL, dl, newVT), Cond); 1503 } 1504 } 1505 } 1506 1507 // If the LHS is a ZERO_EXTEND, perform the comparison on the input. 1508 if (N0.getOpcode() == ISD::ZERO_EXTEND) { 1509 unsigned InSize = N0.getOperand(0).getValueType().getSizeInBits(); 1510 1511 // If the comparison constant has bits in the upper part, the 1512 // zero-extended value could never match. 1513 if (C1.intersects(APInt::getHighBitsSet(C1.getBitWidth(), 1514 C1.getBitWidth() - InSize))) { 1515 switch (Cond) { 1516 case ISD::SETUGT: 1517 case ISD::SETUGE: 1518 case ISD::SETEQ: return DAG.getConstant(0, dl, VT); 1519 case ISD::SETULT: 1520 case ISD::SETULE: 1521 case ISD::SETNE: return DAG.getConstant(1, dl, VT); 1522 case ISD::SETGT: 1523 case ISD::SETGE: 1524 // True if the sign bit of C1 is set. 1525 return DAG.getConstant(C1.isNegative(), dl, VT); 1526 case ISD::SETLT: 1527 case ISD::SETLE: 1528 // True if the sign bit of C1 isn't set. 1529 return DAG.getConstant(C1.isNonNegative(), dl, VT); 1530 default: 1531 break; 1532 } 1533 } 1534 1535 // Otherwise, we can perform the comparison with the low bits. 1536 switch (Cond) { 1537 case ISD::SETEQ: 1538 case ISD::SETNE: 1539 case ISD::SETUGT: 1540 case ISD::SETUGE: 1541 case ISD::SETULT: 1542 case ISD::SETULE: { 1543 EVT newVT = N0.getOperand(0).getValueType(); 1544 if (DCI.isBeforeLegalizeOps() || 1545 (isOperationLegal(ISD::SETCC, newVT) && 1546 getCondCodeAction(Cond, newVT.getSimpleVT()) == Legal)) { 1547 EVT NewSetCCVT = 1548 getSetCCResultType(DAG.getDataLayout(), *DAG.getContext(), newVT); 1549 SDValue NewConst = DAG.getConstant(C1.trunc(InSize), dl, newVT); 1550 1551 SDValue NewSetCC = DAG.getSetCC(dl, NewSetCCVT, N0.getOperand(0), 1552 NewConst, Cond); 1553 return DAG.getBoolExtOrTrunc(NewSetCC, dl, VT, N0.getValueType()); 1554 } 1555 break; 1556 } 1557 default: 1558 break; // todo, be more careful with signed comparisons 1559 } 1560 } else if (N0.getOpcode() == ISD::SIGN_EXTEND_INREG && 1561 (Cond == ISD::SETEQ || Cond == ISD::SETNE)) { 1562 EVT ExtSrcTy = cast<VTSDNode>(N0.getOperand(1))->getVT(); 1563 unsigned ExtSrcTyBits = ExtSrcTy.getSizeInBits(); 1564 EVT ExtDstTy = N0.getValueType(); 1565 unsigned ExtDstTyBits = ExtDstTy.getSizeInBits(); 1566 1567 // If the constant doesn't fit into the number of bits for the source of 1568 // the sign extension, it is impossible for both sides to be equal. 1569 if (C1.getMinSignedBits() > ExtSrcTyBits) 1570 return DAG.getConstant(Cond == ISD::SETNE, dl, VT); 1571 1572 SDValue ZextOp; 1573 EVT Op0Ty = N0.getOperand(0).getValueType(); 1574 if (Op0Ty == ExtSrcTy) { 1575 ZextOp = N0.getOperand(0); 1576 } else { 1577 APInt Imm = APInt::getLowBitsSet(ExtDstTyBits, ExtSrcTyBits); 1578 ZextOp = DAG.getNode(ISD::AND, dl, Op0Ty, N0.getOperand(0), 1579 DAG.getConstant(Imm, dl, Op0Ty)); 1580 } 1581 if (!DCI.isCalledByLegalizer()) 1582 DCI.AddToWorklist(ZextOp.getNode()); 1583 // Otherwise, make this a use of a zext. 1584 return DAG.getSetCC(dl, VT, ZextOp, 1585 DAG.getConstant(C1 & APInt::getLowBitsSet( 1586 ExtDstTyBits, 1587 ExtSrcTyBits), 1588 dl, ExtDstTy), 1589 Cond); 1590 } else if ((N1C->isNullValue() || N1C->getAPIntValue() == 1) && 1591 (Cond == ISD::SETEQ || Cond == ISD::SETNE)) { 1592 // SETCC (SETCC), [0|1], [EQ|NE] -> SETCC 1593 if (N0.getOpcode() == ISD::SETCC && 1594 isTypeLegal(VT) && VT.bitsLE(N0.getValueType())) { 1595 bool TrueWhenTrue = (Cond == ISD::SETEQ) ^ (N1C->getAPIntValue() != 1); 1596 if (TrueWhenTrue) 1597 return DAG.getNode(ISD::TRUNCATE, dl, VT, N0); 1598 // Invert the condition. 1599 ISD::CondCode CC = cast<CondCodeSDNode>(N0.getOperand(2))->get(); 1600 CC = ISD::getSetCCInverse(CC, 1601 N0.getOperand(0).getValueType().isInteger()); 1602 if (DCI.isBeforeLegalizeOps() || 1603 isCondCodeLegal(CC, N0.getOperand(0).getSimpleValueType())) 1604 return DAG.getSetCC(dl, VT, N0.getOperand(0), N0.getOperand(1), CC); 1605 } 1606 1607 if ((N0.getOpcode() == ISD::XOR || 1608 (N0.getOpcode() == ISD::AND && 1609 N0.getOperand(0).getOpcode() == ISD::XOR && 1610 N0.getOperand(1) == N0.getOperand(0).getOperand(1))) && 1611 isa<ConstantSDNode>(N0.getOperand(1)) && 1612 cast<ConstantSDNode>(N0.getOperand(1))->getAPIntValue() == 1) { 1613 // If this is (X^1) == 0/1, swap the RHS and eliminate the xor. We 1614 // can only do this if the top bits are known zero. 1615 unsigned BitWidth = N0.getValueSizeInBits(); 1616 if (DAG.MaskedValueIsZero(N0, 1617 APInt::getHighBitsSet(BitWidth, 1618 BitWidth-1))) { 1619 // Okay, get the un-inverted input value. 1620 SDValue Val; 1621 if (N0.getOpcode() == ISD::XOR) 1622 Val = N0.getOperand(0); 1623 else { 1624 assert(N0.getOpcode() == ISD::AND && 1625 N0.getOperand(0).getOpcode() == ISD::XOR); 1626 // ((X^1)&1)^1 -> X & 1 1627 Val = DAG.getNode(ISD::AND, dl, N0.getValueType(), 1628 N0.getOperand(0).getOperand(0), 1629 N0.getOperand(1)); 1630 } 1631 1632 return DAG.getSetCC(dl, VT, Val, N1, 1633 Cond == ISD::SETEQ ? ISD::SETNE : ISD::SETEQ); 1634 } 1635 } else if (N1C->getAPIntValue() == 1 && 1636 (VT == MVT::i1 || 1637 getBooleanContents(N0->getValueType(0)) == 1638 ZeroOrOneBooleanContent)) { 1639 SDValue Op0 = N0; 1640 if (Op0.getOpcode() == ISD::TRUNCATE) 1641 Op0 = Op0.getOperand(0); 1642 1643 if ((Op0.getOpcode() == ISD::XOR) && 1644 Op0.getOperand(0).getOpcode() == ISD::SETCC && 1645 Op0.getOperand(1).getOpcode() == ISD::SETCC) { 1646 // (xor (setcc), (setcc)) == / != 1 -> (setcc) != / == (setcc) 1647 Cond = (Cond == ISD::SETEQ) ? ISD::SETNE : ISD::SETEQ; 1648 return DAG.getSetCC(dl, VT, Op0.getOperand(0), Op0.getOperand(1), 1649 Cond); 1650 } 1651 if (Op0.getOpcode() == ISD::AND && 1652 isa<ConstantSDNode>(Op0.getOperand(1)) && 1653 cast<ConstantSDNode>(Op0.getOperand(1))->getAPIntValue() == 1) { 1654 // If this is (X&1) == / != 1, normalize it to (X&1) != / == 0. 1655 if (Op0.getValueType().bitsGT(VT)) 1656 Op0 = DAG.getNode(ISD::AND, dl, VT, 1657 DAG.getNode(ISD::TRUNCATE, dl, VT, Op0.getOperand(0)), 1658 DAG.getConstant(1, dl, VT)); 1659 else if (Op0.getValueType().bitsLT(VT)) 1660 Op0 = DAG.getNode(ISD::AND, dl, VT, 1661 DAG.getNode(ISD::ANY_EXTEND, dl, VT, Op0.getOperand(0)), 1662 DAG.getConstant(1, dl, VT)); 1663 1664 return DAG.getSetCC(dl, VT, Op0, 1665 DAG.getConstant(0, dl, Op0.getValueType()), 1666 Cond == ISD::SETEQ ? ISD::SETNE : ISD::SETEQ); 1667 } 1668 if (Op0.getOpcode() == ISD::AssertZext && 1669 cast<VTSDNode>(Op0.getOperand(1))->getVT() == MVT::i1) 1670 return DAG.getSetCC(dl, VT, Op0, 1671 DAG.getConstant(0, dl, Op0.getValueType()), 1672 Cond == ISD::SETEQ ? ISD::SETNE : ISD::SETEQ); 1673 } 1674 } 1675 1676 APInt MinVal, MaxVal; 1677 unsigned OperandBitSize = N1C->getValueType(0).getSizeInBits(); 1678 if (ISD::isSignedIntSetCC(Cond)) { 1679 MinVal = APInt::getSignedMinValue(OperandBitSize); 1680 MaxVal = APInt::getSignedMaxValue(OperandBitSize); 1681 } else { 1682 MinVal = APInt::getMinValue(OperandBitSize); 1683 MaxVal = APInt::getMaxValue(OperandBitSize); 1684 } 1685 1686 // Canonicalize GE/LE comparisons to use GT/LT comparisons. 1687 if (Cond == ISD::SETGE || Cond == ISD::SETUGE) { 1688 if (C1 == MinVal) return DAG.getConstant(1, dl, VT); // X >= MIN --> true 1689 // X >= C0 --> X > (C0 - 1) 1690 APInt C = C1 - 1; 1691 ISD::CondCode NewCC = (Cond == ISD::SETGE) ? ISD::SETGT : ISD::SETUGT; 1692 if ((DCI.isBeforeLegalizeOps() || 1693 isCondCodeLegal(NewCC, VT.getSimpleVT())) && 1694 (!N1C->isOpaque() || (N1C->isOpaque() && C.getBitWidth() <= 64 && 1695 isLegalICmpImmediate(C.getSExtValue())))) { 1696 return DAG.getSetCC(dl, VT, N0, 1697 DAG.getConstant(C, dl, N1.getValueType()), 1698 NewCC); 1699 } 1700 } 1701 1702 if (Cond == ISD::SETLE || Cond == ISD::SETULE) { 1703 if (C1 == MaxVal) return DAG.getConstant(1, dl, VT); // X <= MAX --> true 1704 // X <= C0 --> X < (C0 + 1) 1705 APInt C = C1 + 1; 1706 ISD::CondCode NewCC = (Cond == ISD::SETLE) ? ISD::SETLT : ISD::SETULT; 1707 if ((DCI.isBeforeLegalizeOps() || 1708 isCondCodeLegal(NewCC, VT.getSimpleVT())) && 1709 (!N1C->isOpaque() || (N1C->isOpaque() && C.getBitWidth() <= 64 && 1710 isLegalICmpImmediate(C.getSExtValue())))) { 1711 return DAG.getSetCC(dl, VT, N0, 1712 DAG.getConstant(C, dl, N1.getValueType()), 1713 NewCC); 1714 } 1715 } 1716 1717 if ((Cond == ISD::SETLT || Cond == ISD::SETULT) && C1 == MinVal) 1718 return DAG.getConstant(0, dl, VT); // X < MIN --> false 1719 if ((Cond == ISD::SETGE || Cond == ISD::SETUGE) && C1 == MinVal) 1720 return DAG.getConstant(1, dl, VT); // X >= MIN --> true 1721 if ((Cond == ISD::SETGT || Cond == ISD::SETUGT) && C1 == MaxVal) 1722 return DAG.getConstant(0, dl, VT); // X > MAX --> false 1723 if ((Cond == ISD::SETLE || Cond == ISD::SETULE) && C1 == MaxVal) 1724 return DAG.getConstant(1, dl, VT); // X <= MAX --> true 1725 1726 // Canonicalize setgt X, Min --> setne X, Min 1727 if ((Cond == ISD::SETGT || Cond == ISD::SETUGT) && C1 == MinVal) 1728 return DAG.getSetCC(dl, VT, N0, N1, ISD::SETNE); 1729 // Canonicalize setlt X, Max --> setne X, Max 1730 if ((Cond == ISD::SETLT || Cond == ISD::SETULT) && C1 == MaxVal) 1731 return DAG.getSetCC(dl, VT, N0, N1, ISD::SETNE); 1732 1733 // If we have setult X, 1, turn it into seteq X, 0 1734 if ((Cond == ISD::SETLT || Cond == ISD::SETULT) && C1 == MinVal+1) 1735 return DAG.getSetCC(dl, VT, N0, 1736 DAG.getConstant(MinVal, dl, N0.getValueType()), 1737 ISD::SETEQ); 1738 // If we have setugt X, Max-1, turn it into seteq X, Max 1739 if ((Cond == ISD::SETGT || Cond == ISD::SETUGT) && C1 == MaxVal-1) 1740 return DAG.getSetCC(dl, VT, N0, 1741 DAG.getConstant(MaxVal, dl, N0.getValueType()), 1742 ISD::SETEQ); 1743 1744 // If we have "setcc X, C0", check to see if we can shrink the immediate 1745 // by changing cc. 1746 1747 // SETUGT X, SINTMAX -> SETLT X, 0 1748 if (Cond == ISD::SETUGT && 1749 C1 == APInt::getSignedMaxValue(OperandBitSize)) 1750 return DAG.getSetCC(dl, VT, N0, 1751 DAG.getConstant(0, dl, N1.getValueType()), 1752 ISD::SETLT); 1753 1754 // SETULT X, SINTMIN -> SETGT X, -1 1755 if (Cond == ISD::SETULT && 1756 C1 == APInt::getSignedMinValue(OperandBitSize)) { 1757 SDValue ConstMinusOne = 1758 DAG.getConstant(APInt::getAllOnesValue(OperandBitSize), dl, 1759 N1.getValueType()); 1760 return DAG.getSetCC(dl, VT, N0, ConstMinusOne, ISD::SETGT); 1761 } 1762 1763 // Fold bit comparisons when we can. 1764 if ((Cond == ISD::SETEQ || Cond == ISD::SETNE) && 1765 (VT == N0.getValueType() || 1766 (isTypeLegal(VT) && VT.bitsLE(N0.getValueType()))) && 1767 N0.getOpcode() == ISD::AND) { 1768 auto &DL = DAG.getDataLayout(); 1769 if (auto *AndRHS = dyn_cast<ConstantSDNode>(N0.getOperand(1))) { 1770 EVT ShiftTy = DCI.isBeforeLegalize() 1771 ? getPointerTy(DL) 1772 : getShiftAmountTy(N0.getValueType(), DL); 1773 if (Cond == ISD::SETNE && C1 == 0) {// (X & 8) != 0 --> (X & 8) >> 3 1774 // Perform the xform if the AND RHS is a single bit. 1775 if (AndRHS->getAPIntValue().isPowerOf2()) { 1776 return DAG.getNode(ISD::TRUNCATE, dl, VT, 1777 DAG.getNode(ISD::SRL, dl, N0.getValueType(), N0, 1778 DAG.getConstant(AndRHS->getAPIntValue().logBase2(), dl, 1779 ShiftTy))); 1780 } 1781 } else if (Cond == ISD::SETEQ && C1 == AndRHS->getAPIntValue()) { 1782 // (X & 8) == 8 --> (X & 8) >> 3 1783 // Perform the xform if C1 is a single bit. 1784 if (C1.isPowerOf2()) { 1785 return DAG.getNode(ISD::TRUNCATE, dl, VT, 1786 DAG.getNode(ISD::SRL, dl, N0.getValueType(), N0, 1787 DAG.getConstant(C1.logBase2(), dl, 1788 ShiftTy))); 1789 } 1790 } 1791 } 1792 } 1793 1794 if (C1.getMinSignedBits() <= 64 && 1795 !isLegalICmpImmediate(C1.getSExtValue())) { 1796 // (X & -256) == 256 -> (X >> 8) == 1 1797 if ((Cond == ISD::SETEQ || Cond == ISD::SETNE) && 1798 N0.getOpcode() == ISD::AND && N0.hasOneUse()) { 1799 if (auto *AndRHS = dyn_cast<ConstantSDNode>(N0.getOperand(1))) { 1800 const APInt &AndRHSC = AndRHS->getAPIntValue(); 1801 if ((-AndRHSC).isPowerOf2() && (AndRHSC & C1) == C1) { 1802 unsigned ShiftBits = AndRHSC.countTrailingZeros(); 1803 auto &DL = DAG.getDataLayout(); 1804 EVT ShiftTy = DCI.isBeforeLegalize() 1805 ? getPointerTy(DL) 1806 : getShiftAmountTy(N0.getValueType(), DL); 1807 EVT CmpTy = N0.getValueType(); 1808 SDValue Shift = DAG.getNode(ISD::SRL, dl, CmpTy, N0.getOperand(0), 1809 DAG.getConstant(ShiftBits, dl, 1810 ShiftTy)); 1811 SDValue CmpRHS = DAG.getConstant(C1.lshr(ShiftBits), dl, CmpTy); 1812 return DAG.getSetCC(dl, VT, Shift, CmpRHS, Cond); 1813 } 1814 } 1815 } else if (Cond == ISD::SETULT || Cond == ISD::SETUGE || 1816 Cond == ISD::SETULE || Cond == ISD::SETUGT) { 1817 bool AdjOne = (Cond == ISD::SETULE || Cond == ISD::SETUGT); 1818 // X < 0x100000000 -> (X >> 32) < 1 1819 // X >= 0x100000000 -> (X >> 32) >= 1 1820 // X <= 0x0ffffffff -> (X >> 32) < 1 1821 // X > 0x0ffffffff -> (X >> 32) >= 1 1822 unsigned ShiftBits; 1823 APInt NewC = C1; 1824 ISD::CondCode NewCond = Cond; 1825 if (AdjOne) { 1826 ShiftBits = C1.countTrailingOnes(); 1827 NewC = NewC + 1; 1828 NewCond = (Cond == ISD::SETULE) ? ISD::SETULT : ISD::SETUGE; 1829 } else { 1830 ShiftBits = C1.countTrailingZeros(); 1831 } 1832 NewC = NewC.lshr(ShiftBits); 1833 if (ShiftBits && NewC.getMinSignedBits() <= 64 && 1834 isLegalICmpImmediate(NewC.getSExtValue())) { 1835 auto &DL = DAG.getDataLayout(); 1836 EVT ShiftTy = DCI.isBeforeLegalize() 1837 ? getPointerTy(DL) 1838 : getShiftAmountTy(N0.getValueType(), DL); 1839 EVT CmpTy = N0.getValueType(); 1840 SDValue Shift = DAG.getNode(ISD::SRL, dl, CmpTy, N0, 1841 DAG.getConstant(ShiftBits, dl, ShiftTy)); 1842 SDValue CmpRHS = DAG.getConstant(NewC, dl, CmpTy); 1843 return DAG.getSetCC(dl, VT, Shift, CmpRHS, NewCond); 1844 } 1845 } 1846 } 1847 } 1848 1849 if (isa<ConstantFPSDNode>(N0.getNode())) { 1850 // Constant fold or commute setcc. 1851 SDValue O = DAG.FoldSetCC(VT, N0, N1, Cond, dl); 1852 if (O.getNode()) return O; 1853 } else if (auto *CFP = dyn_cast<ConstantFPSDNode>(N1.getNode())) { 1854 // If the RHS of an FP comparison is a constant, simplify it away in 1855 // some cases. 1856 if (CFP->getValueAPF().isNaN()) { 1857 // If an operand is known to be a nan, we can fold it. 1858 switch (ISD::getUnorderedFlavor(Cond)) { 1859 default: llvm_unreachable("Unknown flavor!"); 1860 case 0: // Known false. 1861 return DAG.getConstant(0, dl, VT); 1862 case 1: // Known true. 1863 return DAG.getConstant(1, dl, VT); 1864 case 2: // Undefined. 1865 return DAG.getUNDEF(VT); 1866 } 1867 } 1868 1869 // Otherwise, we know the RHS is not a NaN. Simplify the node to drop the 1870 // constant if knowing that the operand is non-nan is enough. We prefer to 1871 // have SETO(x,x) instead of SETO(x, 0.0) because this avoids having to 1872 // materialize 0.0. 1873 if (Cond == ISD::SETO || Cond == ISD::SETUO) 1874 return DAG.getSetCC(dl, VT, N0, N0, Cond); 1875 1876 // If the condition is not legal, see if we can find an equivalent one 1877 // which is legal. 1878 if (!isCondCodeLegal(Cond, N0.getSimpleValueType())) { 1879 // If the comparison was an awkward floating-point == or != and one of 1880 // the comparison operands is infinity or negative infinity, convert the 1881 // condition to a less-awkward <= or >=. 1882 if (CFP->getValueAPF().isInfinity()) { 1883 if (CFP->getValueAPF().isNegative()) { 1884 if (Cond == ISD::SETOEQ && 1885 isCondCodeLegal(ISD::SETOLE, N0.getSimpleValueType())) 1886 return DAG.getSetCC(dl, VT, N0, N1, ISD::SETOLE); 1887 if (Cond == ISD::SETUEQ && 1888 isCondCodeLegal(ISD::SETOLE, N0.getSimpleValueType())) 1889 return DAG.getSetCC(dl, VT, N0, N1, ISD::SETULE); 1890 if (Cond == ISD::SETUNE && 1891 isCondCodeLegal(ISD::SETUGT, N0.getSimpleValueType())) 1892 return DAG.getSetCC(dl, VT, N0, N1, ISD::SETUGT); 1893 if (Cond == ISD::SETONE && 1894 isCondCodeLegal(ISD::SETUGT, N0.getSimpleValueType())) 1895 return DAG.getSetCC(dl, VT, N0, N1, ISD::SETOGT); 1896 } else { 1897 if (Cond == ISD::SETOEQ && 1898 isCondCodeLegal(ISD::SETOGE, N0.getSimpleValueType())) 1899 return DAG.getSetCC(dl, VT, N0, N1, ISD::SETOGE); 1900 if (Cond == ISD::SETUEQ && 1901 isCondCodeLegal(ISD::SETOGE, N0.getSimpleValueType())) 1902 return DAG.getSetCC(dl, VT, N0, N1, ISD::SETUGE); 1903 if (Cond == ISD::SETUNE && 1904 isCondCodeLegal(ISD::SETULT, N0.getSimpleValueType())) 1905 return DAG.getSetCC(dl, VT, N0, N1, ISD::SETULT); 1906 if (Cond == ISD::SETONE && 1907 isCondCodeLegal(ISD::SETULT, N0.getSimpleValueType())) 1908 return DAG.getSetCC(dl, VT, N0, N1, ISD::SETOLT); 1909 } 1910 } 1911 } 1912 } 1913 1914 if (N0 == N1) { 1915 // The sext(setcc()) => setcc() optimization relies on the appropriate 1916 // constant being emitted. 1917 uint64_t EqVal = 0; 1918 switch (getBooleanContents(N0.getValueType())) { 1919 case UndefinedBooleanContent: 1920 case ZeroOrOneBooleanContent: 1921 EqVal = ISD::isTrueWhenEqual(Cond); 1922 break; 1923 case ZeroOrNegativeOneBooleanContent: 1924 EqVal = ISD::isTrueWhenEqual(Cond) ? -1 : 0; 1925 break; 1926 } 1927 1928 // We can always fold X == X for integer setcc's. 1929 if (N0.getValueType().isInteger()) { 1930 return DAG.getConstant(EqVal, dl, VT); 1931 } 1932 unsigned UOF = ISD::getUnorderedFlavor(Cond); 1933 if (UOF == 2) // FP operators that are undefined on NaNs. 1934 return DAG.getConstant(EqVal, dl, VT); 1935 if (UOF == unsigned(ISD::isTrueWhenEqual(Cond))) 1936 return DAG.getConstant(EqVal, dl, VT); 1937 // Otherwise, we can't fold it. However, we can simplify it to SETUO/SETO 1938 // if it is not already. 1939 ISD::CondCode NewCond = UOF == 0 ? ISD::SETO : ISD::SETUO; 1940 if (NewCond != Cond && (DCI.isBeforeLegalizeOps() || 1941 getCondCodeAction(NewCond, N0.getSimpleValueType()) == Legal)) 1942 return DAG.getSetCC(dl, VT, N0, N1, NewCond); 1943 } 1944 1945 if ((Cond == ISD::SETEQ || Cond == ISD::SETNE) && 1946 N0.getValueType().isInteger()) { 1947 if (N0.getOpcode() == ISD::ADD || N0.getOpcode() == ISD::SUB || 1948 N0.getOpcode() == ISD::XOR) { 1949 // Simplify (X+Y) == (X+Z) --> Y == Z 1950 if (N0.getOpcode() == N1.getOpcode()) { 1951 if (N0.getOperand(0) == N1.getOperand(0)) 1952 return DAG.getSetCC(dl, VT, N0.getOperand(1), N1.getOperand(1), Cond); 1953 if (N0.getOperand(1) == N1.getOperand(1)) 1954 return DAG.getSetCC(dl, VT, N0.getOperand(0), N1.getOperand(0), Cond); 1955 if (DAG.isCommutativeBinOp(N0.getOpcode())) { 1956 // If X op Y == Y op X, try other combinations. 1957 if (N0.getOperand(0) == N1.getOperand(1)) 1958 return DAG.getSetCC(dl, VT, N0.getOperand(1), N1.getOperand(0), 1959 Cond); 1960 if (N0.getOperand(1) == N1.getOperand(0)) 1961 return DAG.getSetCC(dl, VT, N0.getOperand(0), N1.getOperand(1), 1962 Cond); 1963 } 1964 } 1965 1966 // If RHS is a legal immediate value for a compare instruction, we need 1967 // to be careful about increasing register pressure needlessly. 1968 bool LegalRHSImm = false; 1969 1970 if (auto *RHSC = dyn_cast<ConstantSDNode>(N1)) { 1971 if (auto *LHSR = dyn_cast<ConstantSDNode>(N0.getOperand(1))) { 1972 // Turn (X+C1) == C2 --> X == C2-C1 1973 if (N0.getOpcode() == ISD::ADD && N0.getNode()->hasOneUse()) { 1974 return DAG.getSetCC(dl, VT, N0.getOperand(0), 1975 DAG.getConstant(RHSC->getAPIntValue()- 1976 LHSR->getAPIntValue(), 1977 dl, N0.getValueType()), Cond); 1978 } 1979 1980 // Turn (X^C1) == C2 into X == C1^C2 iff X&~C1 = 0. 1981 if (N0.getOpcode() == ISD::XOR) 1982 // If we know that all of the inverted bits are zero, don't bother 1983 // performing the inversion. 1984 if (DAG.MaskedValueIsZero(N0.getOperand(0), ~LHSR->getAPIntValue())) 1985 return 1986 DAG.getSetCC(dl, VT, N0.getOperand(0), 1987 DAG.getConstant(LHSR->getAPIntValue() ^ 1988 RHSC->getAPIntValue(), 1989 dl, N0.getValueType()), 1990 Cond); 1991 } 1992 1993 // Turn (C1-X) == C2 --> X == C1-C2 1994 if (auto *SUBC = dyn_cast<ConstantSDNode>(N0.getOperand(0))) { 1995 if (N0.getOpcode() == ISD::SUB && N0.getNode()->hasOneUse()) { 1996 return 1997 DAG.getSetCC(dl, VT, N0.getOperand(1), 1998 DAG.getConstant(SUBC->getAPIntValue() - 1999 RHSC->getAPIntValue(), 2000 dl, N0.getValueType()), 2001 Cond); 2002 } 2003 } 2004 2005 // Could RHSC fold directly into a compare? 2006 if (RHSC->getValueType(0).getSizeInBits() <= 64) 2007 LegalRHSImm = isLegalICmpImmediate(RHSC->getSExtValue()); 2008 } 2009 2010 // Simplify (X+Z) == X --> Z == 0 2011 // Don't do this if X is an immediate that can fold into a cmp 2012 // instruction and X+Z has other uses. It could be an induction variable 2013 // chain, and the transform would increase register pressure. 2014 if (!LegalRHSImm || N0.getNode()->hasOneUse()) { 2015 if (N0.getOperand(0) == N1) 2016 return DAG.getSetCC(dl, VT, N0.getOperand(1), 2017 DAG.getConstant(0, dl, N0.getValueType()), Cond); 2018 if (N0.getOperand(1) == N1) { 2019 if (DAG.isCommutativeBinOp(N0.getOpcode())) 2020 return DAG.getSetCC(dl, VT, N0.getOperand(0), 2021 DAG.getConstant(0, dl, N0.getValueType()), 2022 Cond); 2023 if (N0.getNode()->hasOneUse()) { 2024 assert(N0.getOpcode() == ISD::SUB && "Unexpected operation!"); 2025 auto &DL = DAG.getDataLayout(); 2026 // (Z-X) == X --> Z == X<<1 2027 SDValue SH = DAG.getNode( 2028 ISD::SHL, dl, N1.getValueType(), N1, 2029 DAG.getConstant(1, dl, 2030 getShiftAmountTy(N1.getValueType(), DL))); 2031 if (!DCI.isCalledByLegalizer()) 2032 DCI.AddToWorklist(SH.getNode()); 2033 return DAG.getSetCC(dl, VT, N0.getOperand(0), SH, Cond); 2034 } 2035 } 2036 } 2037 } 2038 2039 if (N1.getOpcode() == ISD::ADD || N1.getOpcode() == ISD::SUB || 2040 N1.getOpcode() == ISD::XOR) { 2041 // Simplify X == (X+Z) --> Z == 0 2042 if (N1.getOperand(0) == N0) 2043 return DAG.getSetCC(dl, VT, N1.getOperand(1), 2044 DAG.getConstant(0, dl, N1.getValueType()), Cond); 2045 if (N1.getOperand(1) == N0) { 2046 if (DAG.isCommutativeBinOp(N1.getOpcode())) 2047 return DAG.getSetCC(dl, VT, N1.getOperand(0), 2048 DAG.getConstant(0, dl, N1.getValueType()), Cond); 2049 if (N1.getNode()->hasOneUse()) { 2050 assert(N1.getOpcode() == ISD::SUB && "Unexpected operation!"); 2051 auto &DL = DAG.getDataLayout(); 2052 // X == (Z-X) --> X<<1 == Z 2053 SDValue SH = DAG.getNode( 2054 ISD::SHL, dl, N1.getValueType(), N0, 2055 DAG.getConstant(1, dl, getShiftAmountTy(N0.getValueType(), DL))); 2056 if (!DCI.isCalledByLegalizer()) 2057 DCI.AddToWorklist(SH.getNode()); 2058 return DAG.getSetCC(dl, VT, SH, N1.getOperand(0), Cond); 2059 } 2060 } 2061 } 2062 2063 // Simplify x&y == y to x&y != 0 if y has exactly one bit set. 2064 // Note that where y is variable and is known to have at most 2065 // one bit set (for example, if it is z&1) we cannot do this; 2066 // the expressions are not equivalent when y==0. 2067 if (N0.getOpcode() == ISD::AND) 2068 if (N0.getOperand(0) == N1 || N0.getOperand(1) == N1) { 2069 if (ValueHasExactlyOneBitSet(N1, DAG)) { 2070 Cond = ISD::getSetCCInverse(Cond, /*isInteger=*/true); 2071 if (DCI.isBeforeLegalizeOps() || 2072 isCondCodeLegal(Cond, N0.getSimpleValueType())) { 2073 SDValue Zero = DAG.getConstant(0, dl, N1.getValueType()); 2074 return DAG.getSetCC(dl, VT, N0, Zero, Cond); 2075 } 2076 } 2077 } 2078 if (N1.getOpcode() == ISD::AND) 2079 if (N1.getOperand(0) == N0 || N1.getOperand(1) == N0) { 2080 if (ValueHasExactlyOneBitSet(N0, DAG)) { 2081 Cond = ISD::getSetCCInverse(Cond, /*isInteger=*/true); 2082 if (DCI.isBeforeLegalizeOps() || 2083 isCondCodeLegal(Cond, N1.getSimpleValueType())) { 2084 SDValue Zero = DAG.getConstant(0, dl, N0.getValueType()); 2085 return DAG.getSetCC(dl, VT, N1, Zero, Cond); 2086 } 2087 } 2088 } 2089 } 2090 2091 // Fold away ALL boolean setcc's. 2092 SDValue Temp; 2093 if (N0.getValueType() == MVT::i1 && foldBooleans) { 2094 switch (Cond) { 2095 default: llvm_unreachable("Unknown integer setcc!"); 2096 case ISD::SETEQ: // X == Y -> ~(X^Y) 2097 Temp = DAG.getNode(ISD::XOR, dl, MVT::i1, N0, N1); 2098 N0 = DAG.getNOT(dl, Temp, MVT::i1); 2099 if (!DCI.isCalledByLegalizer()) 2100 DCI.AddToWorklist(Temp.getNode()); 2101 break; 2102 case ISD::SETNE: // X != Y --> (X^Y) 2103 N0 = DAG.getNode(ISD::XOR, dl, MVT::i1, N0, N1); 2104 break; 2105 case ISD::SETGT: // X >s Y --> X == 0 & Y == 1 --> ~X & Y 2106 case ISD::SETULT: // X <u Y --> X == 0 & Y == 1 --> ~X & Y 2107 Temp = DAG.getNOT(dl, N0, MVT::i1); 2108 N0 = DAG.getNode(ISD::AND, dl, MVT::i1, N1, Temp); 2109 if (!DCI.isCalledByLegalizer()) 2110 DCI.AddToWorklist(Temp.getNode()); 2111 break; 2112 case ISD::SETLT: // X <s Y --> X == 1 & Y == 0 --> ~Y & X 2113 case ISD::SETUGT: // X >u Y --> X == 1 & Y == 0 --> ~Y & X 2114 Temp = DAG.getNOT(dl, N1, MVT::i1); 2115 N0 = DAG.getNode(ISD::AND, dl, MVT::i1, N0, Temp); 2116 if (!DCI.isCalledByLegalizer()) 2117 DCI.AddToWorklist(Temp.getNode()); 2118 break; 2119 case ISD::SETULE: // X <=u Y --> X == 0 | Y == 1 --> ~X | Y 2120 case ISD::SETGE: // X >=s Y --> X == 0 | Y == 1 --> ~X | Y 2121 Temp = DAG.getNOT(dl, N0, MVT::i1); 2122 N0 = DAG.getNode(ISD::OR, dl, MVT::i1, N1, Temp); 2123 if (!DCI.isCalledByLegalizer()) 2124 DCI.AddToWorklist(Temp.getNode()); 2125 break; 2126 case ISD::SETUGE: // X >=u Y --> X == 1 | Y == 0 --> ~Y | X 2127 case ISD::SETLE: // X <=s Y --> X == 1 | Y == 0 --> ~Y | X 2128 Temp = DAG.getNOT(dl, N1, MVT::i1); 2129 N0 = DAG.getNode(ISD::OR, dl, MVT::i1, N0, Temp); 2130 break; 2131 } 2132 if (VT != MVT::i1) { 2133 if (!DCI.isCalledByLegalizer()) 2134 DCI.AddToWorklist(N0.getNode()); 2135 // FIXME: If running after legalize, we probably can't do this. 2136 N0 = DAG.getNode(ISD::ZERO_EXTEND, dl, VT, N0); 2137 } 2138 return N0; 2139 } 2140 2141 // Could not fold it. 2142 return SDValue(); 2143 } 2144 2145 /// Returns true (and the GlobalValue and the offset) if the node is a 2146 /// GlobalAddress + offset. 2147 bool TargetLowering::isGAPlusOffset(SDNode *N, const GlobalValue *&GA, 2148 int64_t &Offset) const { 2149 if (auto *GASD = dyn_cast<GlobalAddressSDNode>(N)) { 2150 GA = GASD->getGlobal(); 2151 Offset += GASD->getOffset(); 2152 return true; 2153 } 2154 2155 if (N->getOpcode() == ISD::ADD) { 2156 SDValue N1 = N->getOperand(0); 2157 SDValue N2 = N->getOperand(1); 2158 if (isGAPlusOffset(N1.getNode(), GA, Offset)) { 2159 if (auto *V = dyn_cast<ConstantSDNode>(N2)) { 2160 Offset += V->getSExtValue(); 2161 return true; 2162 } 2163 } else if (isGAPlusOffset(N2.getNode(), GA, Offset)) { 2164 if (auto *V = dyn_cast<ConstantSDNode>(N1)) { 2165 Offset += V->getSExtValue(); 2166 return true; 2167 } 2168 } 2169 } 2170 2171 return false; 2172 } 2173 2174 SDValue TargetLowering::PerformDAGCombine(SDNode *N, 2175 DAGCombinerInfo &DCI) const { 2176 // Default implementation: no optimization. 2177 return SDValue(); 2178 } 2179 2180 //===----------------------------------------------------------------------===// 2181 // Inline Assembler Implementation Methods 2182 //===----------------------------------------------------------------------===// 2183 2184 TargetLowering::ConstraintType 2185 TargetLowering::getConstraintType(StringRef Constraint) const { 2186 unsigned S = Constraint.size(); 2187 2188 if (S == 1) { 2189 switch (Constraint[0]) { 2190 default: break; 2191 case 'r': return C_RegisterClass; 2192 case 'm': // memory 2193 case 'o': // offsetable 2194 case 'V': // not offsetable 2195 return C_Memory; 2196 case 'i': // Simple Integer or Relocatable Constant 2197 case 'n': // Simple Integer 2198 case 'E': // Floating Point Constant 2199 case 'F': // Floating Point Constant 2200 case 's': // Relocatable Constant 2201 case 'p': // Address. 2202 case 'X': // Allow ANY value. 2203 case 'I': // Target registers. 2204 case 'J': 2205 case 'K': 2206 case 'L': 2207 case 'M': 2208 case 'N': 2209 case 'O': 2210 case 'P': 2211 case '<': 2212 case '>': 2213 return C_Other; 2214 } 2215 } 2216 2217 if (S > 1 && Constraint[0] == '{' && Constraint[S-1] == '}') { 2218 if (S == 8 && Constraint.substr(1, 6) == "memory") // "{memory}" 2219 return C_Memory; 2220 return C_Register; 2221 } 2222 return C_Unknown; 2223 } 2224 2225 /// Try to replace an X constraint, which matches anything, with another that 2226 /// has more specific requirements based on the type of the corresponding 2227 /// operand. 2228 const char *TargetLowering::LowerXConstraint(EVT ConstraintVT) const{ 2229 if (ConstraintVT.isInteger()) 2230 return "r"; 2231 if (ConstraintVT.isFloatingPoint()) 2232 return "f"; // works for many targets 2233 return nullptr; 2234 } 2235 2236 /// Lower the specified operand into the Ops vector. 2237 /// If it is invalid, don't add anything to Ops. 2238 void TargetLowering::LowerAsmOperandForConstraint(SDValue Op, 2239 std::string &Constraint, 2240 std::vector<SDValue> &Ops, 2241 SelectionDAG &DAG) const { 2242 2243 if (Constraint.length() > 1) return; 2244 2245 char ConstraintLetter = Constraint[0]; 2246 switch (ConstraintLetter) { 2247 default: break; 2248 case 'X': // Allows any operand; labels (basic block) use this. 2249 if (Op.getOpcode() == ISD::BasicBlock) { 2250 Ops.push_back(Op); 2251 return; 2252 } 2253 // fall through 2254 case 'i': // Simple Integer or Relocatable Constant 2255 case 'n': // Simple Integer 2256 case 's': { // Relocatable Constant 2257 // These operands are interested in values of the form (GV+C), where C may 2258 // be folded in as an offset of GV, or it may be explicitly added. Also, it 2259 // is possible and fine if either GV or C are missing. 2260 ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op); 2261 GlobalAddressSDNode *GA = dyn_cast<GlobalAddressSDNode>(Op); 2262 2263 // If we have "(add GV, C)", pull out GV/C 2264 if (Op.getOpcode() == ISD::ADD) { 2265 C = dyn_cast<ConstantSDNode>(Op.getOperand(1)); 2266 GA = dyn_cast<GlobalAddressSDNode>(Op.getOperand(0)); 2267 if (!C || !GA) { 2268 C = dyn_cast<ConstantSDNode>(Op.getOperand(0)); 2269 GA = dyn_cast<GlobalAddressSDNode>(Op.getOperand(1)); 2270 } 2271 if (!C || !GA) { 2272 C = nullptr; 2273 GA = nullptr; 2274 } 2275 } 2276 2277 // If we find a valid operand, map to the TargetXXX version so that the 2278 // value itself doesn't get selected. 2279 if (GA) { // Either &GV or &GV+C 2280 if (ConstraintLetter != 'n') { 2281 int64_t Offs = GA->getOffset(); 2282 if (C) Offs += C->getZExtValue(); 2283 Ops.push_back(DAG.getTargetGlobalAddress(GA->getGlobal(), 2284 C ? SDLoc(C) : SDLoc(), 2285 Op.getValueType(), Offs)); 2286 } 2287 return; 2288 } 2289 if (C) { // just C, no GV. 2290 // Simple constants are not allowed for 's'. 2291 if (ConstraintLetter != 's') { 2292 // gcc prints these as sign extended. Sign extend value to 64 bits 2293 // now; without this it would get ZExt'd later in 2294 // ScheduleDAGSDNodes::EmitNode, which is very generic. 2295 Ops.push_back(DAG.getTargetConstant(C->getAPIntValue().getSExtValue(), 2296 SDLoc(C), MVT::i64)); 2297 } 2298 return; 2299 } 2300 break; 2301 } 2302 } 2303 } 2304 2305 std::pair<unsigned, const TargetRegisterClass *> 2306 TargetLowering::getRegForInlineAsmConstraint(const TargetRegisterInfo *RI, 2307 StringRef Constraint, 2308 MVT VT) const { 2309 if (Constraint.empty() || Constraint[0] != '{') 2310 return std::make_pair(0u, static_cast<TargetRegisterClass*>(nullptr)); 2311 assert(*(Constraint.end()-1) == '}' && "Not a brace enclosed constraint?"); 2312 2313 // Remove the braces from around the name. 2314 StringRef RegName(Constraint.data()+1, Constraint.size()-2); 2315 2316 std::pair<unsigned, const TargetRegisterClass*> R = 2317 std::make_pair(0u, static_cast<const TargetRegisterClass*>(nullptr)); 2318 2319 // Figure out which register class contains this reg. 2320 for (TargetRegisterInfo::regclass_iterator RCI = RI->regclass_begin(), 2321 E = RI->regclass_end(); RCI != E; ++RCI) { 2322 const TargetRegisterClass *RC = *RCI; 2323 2324 // If none of the value types for this register class are valid, we 2325 // can't use it. For example, 64-bit reg classes on 32-bit targets. 2326 if (!isLegalRC(RC)) 2327 continue; 2328 2329 for (TargetRegisterClass::iterator I = RC->begin(), E = RC->end(); 2330 I != E; ++I) { 2331 if (RegName.equals_lower(RI->getName(*I))) { 2332 std::pair<unsigned, const TargetRegisterClass*> S = 2333 std::make_pair(*I, RC); 2334 2335 // If this register class has the requested value type, return it, 2336 // otherwise keep searching and return the first class found 2337 // if no other is found which explicitly has the requested type. 2338 if (RC->hasType(VT)) 2339 return S; 2340 else if (!R.second) 2341 R = S; 2342 } 2343 } 2344 } 2345 2346 return R; 2347 } 2348 2349 //===----------------------------------------------------------------------===// 2350 // Constraint Selection. 2351 2352 /// Return true of this is an input operand that is a matching constraint like 2353 /// "4". 2354 bool TargetLowering::AsmOperandInfo::isMatchingInputConstraint() const { 2355 assert(!ConstraintCode.empty() && "No known constraint!"); 2356 return isdigit(static_cast<unsigned char>(ConstraintCode[0])); 2357 } 2358 2359 /// If this is an input matching constraint, this method returns the output 2360 /// operand it matches. 2361 unsigned TargetLowering::AsmOperandInfo::getMatchedOperand() const { 2362 assert(!ConstraintCode.empty() && "No known constraint!"); 2363 return atoi(ConstraintCode.c_str()); 2364 } 2365 2366 /// Split up the constraint string from the inline assembly value into the 2367 /// specific constraints and their prefixes, and also tie in the associated 2368 /// operand values. 2369 /// If this returns an empty vector, and if the constraint string itself 2370 /// isn't empty, there was an error parsing. 2371 TargetLowering::AsmOperandInfoVector 2372 TargetLowering::ParseConstraints(const DataLayout &DL, 2373 const TargetRegisterInfo *TRI, 2374 ImmutableCallSite CS) const { 2375 /// Information about all of the constraints. 2376 AsmOperandInfoVector ConstraintOperands; 2377 const InlineAsm *IA = cast<InlineAsm>(CS.getCalledValue()); 2378 unsigned maCount = 0; // Largest number of multiple alternative constraints. 2379 2380 // Do a prepass over the constraints, canonicalizing them, and building up the 2381 // ConstraintOperands list. 2382 unsigned ArgNo = 0; // ArgNo - The argument of the CallInst. 2383 unsigned ResNo = 0; // ResNo - The result number of the next output. 2384 2385 for (InlineAsm::ConstraintInfo &CI : IA->ParseConstraints()) { 2386 ConstraintOperands.emplace_back(std::move(CI)); 2387 AsmOperandInfo &OpInfo = ConstraintOperands.back(); 2388 2389 // Update multiple alternative constraint count. 2390 if (OpInfo.multipleAlternatives.size() > maCount) 2391 maCount = OpInfo.multipleAlternatives.size(); 2392 2393 OpInfo.ConstraintVT = MVT::Other; 2394 2395 // Compute the value type for each operand. 2396 switch (OpInfo.Type) { 2397 case InlineAsm::isOutput: 2398 // Indirect outputs just consume an argument. 2399 if (OpInfo.isIndirect) { 2400 OpInfo.CallOperandVal = const_cast<Value *>(CS.getArgument(ArgNo++)); 2401 break; 2402 } 2403 2404 // The return value of the call is this value. As such, there is no 2405 // corresponding argument. 2406 assert(!CS.getType()->isVoidTy() && 2407 "Bad inline asm!"); 2408 if (StructType *STy = dyn_cast<StructType>(CS.getType())) { 2409 OpInfo.ConstraintVT = 2410 getSimpleValueType(DL, STy->getElementType(ResNo)); 2411 } else { 2412 assert(ResNo == 0 && "Asm only has one result!"); 2413 OpInfo.ConstraintVT = getSimpleValueType(DL, CS.getType()); 2414 } 2415 ++ResNo; 2416 break; 2417 case InlineAsm::isInput: 2418 OpInfo.CallOperandVal = const_cast<Value *>(CS.getArgument(ArgNo++)); 2419 break; 2420 case InlineAsm::isClobber: 2421 // Nothing to do. 2422 break; 2423 } 2424 2425 if (OpInfo.CallOperandVal) { 2426 llvm::Type *OpTy = OpInfo.CallOperandVal->getType(); 2427 if (OpInfo.isIndirect) { 2428 llvm::PointerType *PtrTy = dyn_cast<PointerType>(OpTy); 2429 if (!PtrTy) 2430 report_fatal_error("Indirect operand for inline asm not a pointer!"); 2431 OpTy = PtrTy->getElementType(); 2432 } 2433 2434 // Look for vector wrapped in a struct. e.g. { <16 x i8> }. 2435 if (StructType *STy = dyn_cast<StructType>(OpTy)) 2436 if (STy->getNumElements() == 1) 2437 OpTy = STy->getElementType(0); 2438 2439 // If OpTy is not a single value, it may be a struct/union that we 2440 // can tile with integers. 2441 if (!OpTy->isSingleValueType() && OpTy->isSized()) { 2442 unsigned BitSize = DL.getTypeSizeInBits(OpTy); 2443 switch (BitSize) { 2444 default: break; 2445 case 1: 2446 case 8: 2447 case 16: 2448 case 32: 2449 case 64: 2450 case 128: 2451 OpInfo.ConstraintVT = 2452 MVT::getVT(IntegerType::get(OpTy->getContext(), BitSize), true); 2453 break; 2454 } 2455 } else if (PointerType *PT = dyn_cast<PointerType>(OpTy)) { 2456 unsigned PtrSize = DL.getPointerSizeInBits(PT->getAddressSpace()); 2457 OpInfo.ConstraintVT = MVT::getIntegerVT(PtrSize); 2458 } else { 2459 OpInfo.ConstraintVT = MVT::getVT(OpTy, true); 2460 } 2461 } 2462 } 2463 2464 // If we have multiple alternative constraints, select the best alternative. 2465 if (!ConstraintOperands.empty()) { 2466 if (maCount) { 2467 unsigned bestMAIndex = 0; 2468 int bestWeight = -1; 2469 // weight: -1 = invalid match, and 0 = so-so match to 5 = good match. 2470 int weight = -1; 2471 unsigned maIndex; 2472 // Compute the sums of the weights for each alternative, keeping track 2473 // of the best (highest weight) one so far. 2474 for (maIndex = 0; maIndex < maCount; ++maIndex) { 2475 int weightSum = 0; 2476 for (unsigned cIndex = 0, eIndex = ConstraintOperands.size(); 2477 cIndex != eIndex; ++cIndex) { 2478 AsmOperandInfo& OpInfo = ConstraintOperands[cIndex]; 2479 if (OpInfo.Type == InlineAsm::isClobber) 2480 continue; 2481 2482 // If this is an output operand with a matching input operand, 2483 // look up the matching input. If their types mismatch, e.g. one 2484 // is an integer, the other is floating point, or their sizes are 2485 // different, flag it as an maCantMatch. 2486 if (OpInfo.hasMatchingInput()) { 2487 AsmOperandInfo &Input = ConstraintOperands[OpInfo.MatchingInput]; 2488 if (OpInfo.ConstraintVT != Input.ConstraintVT) { 2489 if ((OpInfo.ConstraintVT.isInteger() != 2490 Input.ConstraintVT.isInteger()) || 2491 (OpInfo.ConstraintVT.getSizeInBits() != 2492 Input.ConstraintVT.getSizeInBits())) { 2493 weightSum = -1; // Can't match. 2494 break; 2495 } 2496 } 2497 } 2498 weight = getMultipleConstraintMatchWeight(OpInfo, maIndex); 2499 if (weight == -1) { 2500 weightSum = -1; 2501 break; 2502 } 2503 weightSum += weight; 2504 } 2505 // Update best. 2506 if (weightSum > bestWeight) { 2507 bestWeight = weightSum; 2508 bestMAIndex = maIndex; 2509 } 2510 } 2511 2512 // Now select chosen alternative in each constraint. 2513 for (unsigned cIndex = 0, eIndex = ConstraintOperands.size(); 2514 cIndex != eIndex; ++cIndex) { 2515 AsmOperandInfo& cInfo = ConstraintOperands[cIndex]; 2516 if (cInfo.Type == InlineAsm::isClobber) 2517 continue; 2518 cInfo.selectAlternative(bestMAIndex); 2519 } 2520 } 2521 } 2522 2523 // Check and hook up tied operands, choose constraint code to use. 2524 for (unsigned cIndex = 0, eIndex = ConstraintOperands.size(); 2525 cIndex != eIndex; ++cIndex) { 2526 AsmOperandInfo& OpInfo = ConstraintOperands[cIndex]; 2527 2528 // If this is an output operand with a matching input operand, look up the 2529 // matching input. If their types mismatch, e.g. one is an integer, the 2530 // other is floating point, or their sizes are different, flag it as an 2531 // error. 2532 if (OpInfo.hasMatchingInput()) { 2533 AsmOperandInfo &Input = ConstraintOperands[OpInfo.MatchingInput]; 2534 2535 if (OpInfo.ConstraintVT != Input.ConstraintVT) { 2536 std::pair<unsigned, const TargetRegisterClass *> MatchRC = 2537 getRegForInlineAsmConstraint(TRI, OpInfo.ConstraintCode, 2538 OpInfo.ConstraintVT); 2539 std::pair<unsigned, const TargetRegisterClass *> InputRC = 2540 getRegForInlineAsmConstraint(TRI, Input.ConstraintCode, 2541 Input.ConstraintVT); 2542 if ((OpInfo.ConstraintVT.isInteger() != 2543 Input.ConstraintVT.isInteger()) || 2544 (MatchRC.second != InputRC.second)) { 2545 report_fatal_error("Unsupported asm: input constraint" 2546 " with a matching output constraint of" 2547 " incompatible type!"); 2548 } 2549 } 2550 } 2551 } 2552 2553 return ConstraintOperands; 2554 } 2555 2556 /// Return an integer indicating how general CT is. 2557 static unsigned getConstraintGenerality(TargetLowering::ConstraintType CT) { 2558 switch (CT) { 2559 case TargetLowering::C_Other: 2560 case TargetLowering::C_Unknown: 2561 return 0; 2562 case TargetLowering::C_Register: 2563 return 1; 2564 case TargetLowering::C_RegisterClass: 2565 return 2; 2566 case TargetLowering::C_Memory: 2567 return 3; 2568 } 2569 llvm_unreachable("Invalid constraint type"); 2570 } 2571 2572 /// Examine constraint type and operand type and determine a weight value. 2573 /// This object must already have been set up with the operand type 2574 /// and the current alternative constraint selected. 2575 TargetLowering::ConstraintWeight 2576 TargetLowering::getMultipleConstraintMatchWeight( 2577 AsmOperandInfo &info, int maIndex) const { 2578 InlineAsm::ConstraintCodeVector *rCodes; 2579 if (maIndex >= (int)info.multipleAlternatives.size()) 2580 rCodes = &info.Codes; 2581 else 2582 rCodes = &info.multipleAlternatives[maIndex].Codes; 2583 ConstraintWeight BestWeight = CW_Invalid; 2584 2585 // Loop over the options, keeping track of the most general one. 2586 for (unsigned i = 0, e = rCodes->size(); i != e; ++i) { 2587 ConstraintWeight weight = 2588 getSingleConstraintMatchWeight(info, (*rCodes)[i].c_str()); 2589 if (weight > BestWeight) 2590 BestWeight = weight; 2591 } 2592 2593 return BestWeight; 2594 } 2595 2596 /// Examine constraint type and operand type and determine a weight value. 2597 /// This object must already have been set up with the operand type 2598 /// and the current alternative constraint selected. 2599 TargetLowering::ConstraintWeight 2600 TargetLowering::getSingleConstraintMatchWeight( 2601 AsmOperandInfo &info, const char *constraint) const { 2602 ConstraintWeight weight = CW_Invalid; 2603 Value *CallOperandVal = info.CallOperandVal; 2604 // If we don't have a value, we can't do a match, 2605 // but allow it at the lowest weight. 2606 if (!CallOperandVal) 2607 return CW_Default; 2608 // Look at the constraint type. 2609 switch (*constraint) { 2610 case 'i': // immediate integer. 2611 case 'n': // immediate integer with a known value. 2612 if (isa<ConstantInt>(CallOperandVal)) 2613 weight = CW_Constant; 2614 break; 2615 case 's': // non-explicit intregal immediate. 2616 if (isa<GlobalValue>(CallOperandVal)) 2617 weight = CW_Constant; 2618 break; 2619 case 'E': // immediate float if host format. 2620 case 'F': // immediate float. 2621 if (isa<ConstantFP>(CallOperandVal)) 2622 weight = CW_Constant; 2623 break; 2624 case '<': // memory operand with autodecrement. 2625 case '>': // memory operand with autoincrement. 2626 case 'm': // memory operand. 2627 case 'o': // offsettable memory operand 2628 case 'V': // non-offsettable memory operand 2629 weight = CW_Memory; 2630 break; 2631 case 'r': // general register. 2632 case 'g': // general register, memory operand or immediate integer. 2633 // note: Clang converts "g" to "imr". 2634 if (CallOperandVal->getType()->isIntegerTy()) 2635 weight = CW_Register; 2636 break; 2637 case 'X': // any operand. 2638 default: 2639 weight = CW_Default; 2640 break; 2641 } 2642 return weight; 2643 } 2644 2645 /// If there are multiple different constraints that we could pick for this 2646 /// operand (e.g. "imr") try to pick the 'best' one. 2647 /// This is somewhat tricky: constraints fall into four classes: 2648 /// Other -> immediates and magic values 2649 /// Register -> one specific register 2650 /// RegisterClass -> a group of regs 2651 /// Memory -> memory 2652 /// Ideally, we would pick the most specific constraint possible: if we have 2653 /// something that fits into a register, we would pick it. The problem here 2654 /// is that if we have something that could either be in a register or in 2655 /// memory that use of the register could cause selection of *other* 2656 /// operands to fail: they might only succeed if we pick memory. Because of 2657 /// this the heuristic we use is: 2658 /// 2659 /// 1) If there is an 'other' constraint, and if the operand is valid for 2660 /// that constraint, use it. This makes us take advantage of 'i' 2661 /// constraints when available. 2662 /// 2) Otherwise, pick the most general constraint present. This prefers 2663 /// 'm' over 'r', for example. 2664 /// 2665 static void ChooseConstraint(TargetLowering::AsmOperandInfo &OpInfo, 2666 const TargetLowering &TLI, 2667 SDValue Op, SelectionDAG *DAG) { 2668 assert(OpInfo.Codes.size() > 1 && "Doesn't have multiple constraint options"); 2669 unsigned BestIdx = 0; 2670 TargetLowering::ConstraintType BestType = TargetLowering::C_Unknown; 2671 int BestGenerality = -1; 2672 2673 // Loop over the options, keeping track of the most general one. 2674 for (unsigned i = 0, e = OpInfo.Codes.size(); i != e; ++i) { 2675 TargetLowering::ConstraintType CType = 2676 TLI.getConstraintType(OpInfo.Codes[i]); 2677 2678 // If this is an 'other' constraint, see if the operand is valid for it. 2679 // For example, on X86 we might have an 'rI' constraint. If the operand 2680 // is an integer in the range [0..31] we want to use I (saving a load 2681 // of a register), otherwise we must use 'r'. 2682 if (CType == TargetLowering::C_Other && Op.getNode()) { 2683 assert(OpInfo.Codes[i].size() == 1 && 2684 "Unhandled multi-letter 'other' constraint"); 2685 std::vector<SDValue> ResultOps; 2686 TLI.LowerAsmOperandForConstraint(Op, OpInfo.Codes[i], 2687 ResultOps, *DAG); 2688 if (!ResultOps.empty()) { 2689 BestType = CType; 2690 BestIdx = i; 2691 break; 2692 } 2693 } 2694 2695 // Things with matching constraints can only be registers, per gcc 2696 // documentation. This mainly affects "g" constraints. 2697 if (CType == TargetLowering::C_Memory && OpInfo.hasMatchingInput()) 2698 continue; 2699 2700 // This constraint letter is more general than the previous one, use it. 2701 int Generality = getConstraintGenerality(CType); 2702 if (Generality > BestGenerality) { 2703 BestType = CType; 2704 BestIdx = i; 2705 BestGenerality = Generality; 2706 } 2707 } 2708 2709 OpInfo.ConstraintCode = OpInfo.Codes[BestIdx]; 2710 OpInfo.ConstraintType = BestType; 2711 } 2712 2713 /// Determines the constraint code and constraint type to use for the specific 2714 /// AsmOperandInfo, setting OpInfo.ConstraintCode and OpInfo.ConstraintType. 2715 void TargetLowering::ComputeConstraintToUse(AsmOperandInfo &OpInfo, 2716 SDValue Op, 2717 SelectionDAG *DAG) const { 2718 assert(!OpInfo.Codes.empty() && "Must have at least one constraint"); 2719 2720 // Single-letter constraints ('r') are very common. 2721 if (OpInfo.Codes.size() == 1) { 2722 OpInfo.ConstraintCode = OpInfo.Codes[0]; 2723 OpInfo.ConstraintType = getConstraintType(OpInfo.ConstraintCode); 2724 } else { 2725 ChooseConstraint(OpInfo, *this, Op, DAG); 2726 } 2727 2728 // 'X' matches anything. 2729 if (OpInfo.ConstraintCode == "X" && OpInfo.CallOperandVal) { 2730 // Labels and constants are handled elsewhere ('X' is the only thing 2731 // that matches labels). For Functions, the type here is the type of 2732 // the result, which is not what we want to look at; leave them alone. 2733 Value *v = OpInfo.CallOperandVal; 2734 if (isa<BasicBlock>(v) || isa<ConstantInt>(v) || isa<Function>(v)) { 2735 OpInfo.CallOperandVal = v; 2736 return; 2737 } 2738 2739 // Otherwise, try to resolve it to something we know about by looking at 2740 // the actual operand type. 2741 if (const char *Repl = LowerXConstraint(OpInfo.ConstraintVT)) { 2742 OpInfo.ConstraintCode = Repl; 2743 OpInfo.ConstraintType = getConstraintType(OpInfo.ConstraintCode); 2744 } 2745 } 2746 } 2747 2748 /// \brief Given an exact SDIV by a constant, create a multiplication 2749 /// with the multiplicative inverse of the constant. 2750 static SDValue BuildExactSDIV(const TargetLowering &TLI, SDValue Op1, APInt d, 2751 SDLoc dl, SelectionDAG &DAG, 2752 std::vector<SDNode *> &Created) { 2753 assert(d != 0 && "Division by zero!"); 2754 2755 // Shift the value upfront if it is even, so the LSB is one. 2756 unsigned ShAmt = d.countTrailingZeros(); 2757 if (ShAmt) { 2758 // TODO: For UDIV use SRL instead of SRA. 2759 SDValue Amt = 2760 DAG.getConstant(ShAmt, dl, TLI.getShiftAmountTy(Op1.getValueType(), 2761 DAG.getDataLayout())); 2762 SDNodeFlags Flags; 2763 Flags.setExact(true); 2764 Op1 = DAG.getNode(ISD::SRA, dl, Op1.getValueType(), Op1, Amt, &Flags); 2765 Created.push_back(Op1.getNode()); 2766 d = d.ashr(ShAmt); 2767 } 2768 2769 // Calculate the multiplicative inverse, using Newton's method. 2770 APInt t, xn = d; 2771 while ((t = d*xn) != 1) 2772 xn *= APInt(d.getBitWidth(), 2) - t; 2773 2774 SDValue Op2 = DAG.getConstant(xn, dl, Op1.getValueType()); 2775 SDValue Mul = DAG.getNode(ISD::MUL, dl, Op1.getValueType(), Op1, Op2); 2776 Created.push_back(Mul.getNode()); 2777 return Mul; 2778 } 2779 2780 SDValue TargetLowering::BuildSDIVPow2(SDNode *N, const APInt &Divisor, 2781 SelectionDAG &DAG, 2782 std::vector<SDNode *> *Created) const { 2783 AttributeSet Attr = DAG.getMachineFunction().getFunction()->getAttributes(); 2784 const TargetLowering &TLI = DAG.getTargetLoweringInfo(); 2785 if (TLI.isIntDivCheap(N->getValueType(0), Attr)) 2786 return SDValue(N,0); // Lower SDIV as SDIV 2787 return SDValue(); 2788 } 2789 2790 /// \brief Given an ISD::SDIV node expressing a divide by constant, 2791 /// return a DAG expression to select that will generate the same value by 2792 /// multiplying by a magic number. 2793 /// Ref: "Hacker's Delight" or "The PowerPC Compiler Writer's Guide". 2794 SDValue TargetLowering::BuildSDIV(SDNode *N, const APInt &Divisor, 2795 SelectionDAG &DAG, bool IsAfterLegalization, 2796 std::vector<SDNode *> *Created) const { 2797 assert(Created && "No vector to hold sdiv ops."); 2798 2799 EVT VT = N->getValueType(0); 2800 SDLoc dl(N); 2801 2802 // Check to see if we can do this. 2803 // FIXME: We should be more aggressive here. 2804 if (!isTypeLegal(VT)) 2805 return SDValue(); 2806 2807 // If the sdiv has an 'exact' bit we can use a simpler lowering. 2808 if (cast<BinaryWithFlagsSDNode>(N)->Flags.hasExact()) 2809 return BuildExactSDIV(*this, N->getOperand(0), Divisor, dl, DAG, *Created); 2810 2811 APInt::ms magics = Divisor.magic(); 2812 2813 // Multiply the numerator (operand 0) by the magic value 2814 // FIXME: We should support doing a MUL in a wider type 2815 SDValue Q; 2816 if (IsAfterLegalization ? isOperationLegal(ISD::MULHS, VT) : 2817 isOperationLegalOrCustom(ISD::MULHS, VT)) 2818 Q = DAG.getNode(ISD::MULHS, dl, VT, N->getOperand(0), 2819 DAG.getConstant(magics.m, dl, VT)); 2820 else if (IsAfterLegalization ? isOperationLegal(ISD::SMUL_LOHI, VT) : 2821 isOperationLegalOrCustom(ISD::SMUL_LOHI, VT)) 2822 Q = SDValue(DAG.getNode(ISD::SMUL_LOHI, dl, DAG.getVTList(VT, VT), 2823 N->getOperand(0), 2824 DAG.getConstant(magics.m, dl, VT)).getNode(), 1); 2825 else 2826 return SDValue(); // No mulhs or equvialent 2827 // If d > 0 and m < 0, add the numerator 2828 if (Divisor.isStrictlyPositive() && magics.m.isNegative()) { 2829 Q = DAG.getNode(ISD::ADD, dl, VT, Q, N->getOperand(0)); 2830 Created->push_back(Q.getNode()); 2831 } 2832 // If d < 0 and m > 0, subtract the numerator. 2833 if (Divisor.isNegative() && magics.m.isStrictlyPositive()) { 2834 Q = DAG.getNode(ISD::SUB, dl, VT, Q, N->getOperand(0)); 2835 Created->push_back(Q.getNode()); 2836 } 2837 auto &DL = DAG.getDataLayout(); 2838 // Shift right algebraic if shift value is nonzero 2839 if (magics.s > 0) { 2840 Q = DAG.getNode( 2841 ISD::SRA, dl, VT, Q, 2842 DAG.getConstant(magics.s, dl, getShiftAmountTy(Q.getValueType(), DL))); 2843 Created->push_back(Q.getNode()); 2844 } 2845 // Extract the sign bit and add it to the quotient 2846 SDValue T = 2847 DAG.getNode(ISD::SRL, dl, VT, Q, 2848 DAG.getConstant(VT.getScalarSizeInBits() - 1, dl, 2849 getShiftAmountTy(Q.getValueType(), DL))); 2850 Created->push_back(T.getNode()); 2851 return DAG.getNode(ISD::ADD, dl, VT, Q, T); 2852 } 2853 2854 /// \brief Given an ISD::UDIV node expressing a divide by constant, 2855 /// return a DAG expression to select that will generate the same value by 2856 /// multiplying by a magic number. 2857 /// Ref: "Hacker's Delight" or "The PowerPC Compiler Writer's Guide". 2858 SDValue TargetLowering::BuildUDIV(SDNode *N, const APInt &Divisor, 2859 SelectionDAG &DAG, bool IsAfterLegalization, 2860 std::vector<SDNode *> *Created) const { 2861 assert(Created && "No vector to hold udiv ops."); 2862 2863 EVT VT = N->getValueType(0); 2864 SDLoc dl(N); 2865 auto &DL = DAG.getDataLayout(); 2866 2867 // Check to see if we can do this. 2868 // FIXME: We should be more aggressive here. 2869 if (!isTypeLegal(VT)) 2870 return SDValue(); 2871 2872 // FIXME: We should use a narrower constant when the upper 2873 // bits are known to be zero. 2874 APInt::mu magics = Divisor.magicu(); 2875 2876 SDValue Q = N->getOperand(0); 2877 2878 // If the divisor is even, we can avoid using the expensive fixup by shifting 2879 // the divided value upfront. 2880 if (magics.a != 0 && !Divisor[0]) { 2881 unsigned Shift = Divisor.countTrailingZeros(); 2882 Q = DAG.getNode( 2883 ISD::SRL, dl, VT, Q, 2884 DAG.getConstant(Shift, dl, getShiftAmountTy(Q.getValueType(), DL))); 2885 Created->push_back(Q.getNode()); 2886 2887 // Get magic number for the shifted divisor. 2888 magics = Divisor.lshr(Shift).magicu(Shift); 2889 assert(magics.a == 0 && "Should use cheap fixup now"); 2890 } 2891 2892 // Multiply the numerator (operand 0) by the magic value 2893 // FIXME: We should support doing a MUL in a wider type 2894 if (IsAfterLegalization ? isOperationLegal(ISD::MULHU, VT) : 2895 isOperationLegalOrCustom(ISD::MULHU, VT)) 2896 Q = DAG.getNode(ISD::MULHU, dl, VT, Q, DAG.getConstant(magics.m, dl, VT)); 2897 else if (IsAfterLegalization ? isOperationLegal(ISD::UMUL_LOHI, VT) : 2898 isOperationLegalOrCustom(ISD::UMUL_LOHI, VT)) 2899 Q = SDValue(DAG.getNode(ISD::UMUL_LOHI, dl, DAG.getVTList(VT, VT), Q, 2900 DAG.getConstant(magics.m, dl, VT)).getNode(), 1); 2901 else 2902 return SDValue(); // No mulhu or equvialent 2903 2904 Created->push_back(Q.getNode()); 2905 2906 if (magics.a == 0) { 2907 assert(magics.s < Divisor.getBitWidth() && 2908 "We shouldn't generate an undefined shift!"); 2909 return DAG.getNode( 2910 ISD::SRL, dl, VT, Q, 2911 DAG.getConstant(magics.s, dl, getShiftAmountTy(Q.getValueType(), DL))); 2912 } else { 2913 SDValue NPQ = DAG.getNode(ISD::SUB, dl, VT, N->getOperand(0), Q); 2914 Created->push_back(NPQ.getNode()); 2915 NPQ = DAG.getNode( 2916 ISD::SRL, dl, VT, NPQ, 2917 DAG.getConstant(1, dl, getShiftAmountTy(NPQ.getValueType(), DL))); 2918 Created->push_back(NPQ.getNode()); 2919 NPQ = DAG.getNode(ISD::ADD, dl, VT, NPQ, Q); 2920 Created->push_back(NPQ.getNode()); 2921 return DAG.getNode( 2922 ISD::SRL, dl, VT, NPQ, 2923 DAG.getConstant(magics.s - 1, dl, 2924 getShiftAmountTy(NPQ.getValueType(), DL))); 2925 } 2926 } 2927 2928 bool TargetLowering:: 2929 verifyReturnAddressArgumentIsConstant(SDValue Op, SelectionDAG &DAG) const { 2930 if (!isa<ConstantSDNode>(Op.getOperand(0))) { 2931 DAG.getContext()->emitError("argument to '__builtin_return_address' must " 2932 "be a constant integer"); 2933 return true; 2934 } 2935 2936 return false; 2937 } 2938 2939 //===----------------------------------------------------------------------===// 2940 // Legalization Utilities 2941 //===----------------------------------------------------------------------===// 2942 2943 bool TargetLowering::expandMUL(SDNode *N, SDValue &Lo, SDValue &Hi, EVT HiLoVT, 2944 SelectionDAG &DAG, SDValue LL, SDValue LH, 2945 SDValue RL, SDValue RH) const { 2946 EVT VT = N->getValueType(0); 2947 SDLoc dl(N); 2948 2949 bool HasMULHS = isOperationLegalOrCustom(ISD::MULHS, HiLoVT); 2950 bool HasMULHU = isOperationLegalOrCustom(ISD::MULHU, HiLoVT); 2951 bool HasSMUL_LOHI = isOperationLegalOrCustom(ISD::SMUL_LOHI, HiLoVT); 2952 bool HasUMUL_LOHI = isOperationLegalOrCustom(ISD::UMUL_LOHI, HiLoVT); 2953 if (HasMULHU || HasMULHS || HasUMUL_LOHI || HasSMUL_LOHI) { 2954 unsigned OuterBitSize = VT.getSizeInBits(); 2955 unsigned InnerBitSize = HiLoVT.getSizeInBits(); 2956 unsigned LHSSB = DAG.ComputeNumSignBits(N->getOperand(0)); 2957 unsigned RHSSB = DAG.ComputeNumSignBits(N->getOperand(1)); 2958 2959 // LL, LH, RL, and RH must be either all NULL or all set to a value. 2960 assert((LL.getNode() && LH.getNode() && RL.getNode() && RH.getNode()) || 2961 (!LL.getNode() && !LH.getNode() && !RL.getNode() && !RH.getNode())); 2962 2963 if (!LL.getNode() && !RL.getNode() && 2964 isOperationLegalOrCustom(ISD::TRUNCATE, HiLoVT)) { 2965 LL = DAG.getNode(ISD::TRUNCATE, dl, HiLoVT, N->getOperand(0)); 2966 RL = DAG.getNode(ISD::TRUNCATE, dl, HiLoVT, N->getOperand(1)); 2967 } 2968 2969 if (!LL.getNode()) 2970 return false; 2971 2972 APInt HighMask = APInt::getHighBitsSet(OuterBitSize, InnerBitSize); 2973 if (DAG.MaskedValueIsZero(N->getOperand(0), HighMask) && 2974 DAG.MaskedValueIsZero(N->getOperand(1), HighMask)) { 2975 // The inputs are both zero-extended. 2976 if (HasUMUL_LOHI) { 2977 // We can emit a umul_lohi. 2978 Lo = DAG.getNode(ISD::UMUL_LOHI, dl, DAG.getVTList(HiLoVT, HiLoVT), LL, 2979 RL); 2980 Hi = SDValue(Lo.getNode(), 1); 2981 return true; 2982 } 2983 if (HasMULHU) { 2984 // We can emit a mulhu+mul. 2985 Lo = DAG.getNode(ISD::MUL, dl, HiLoVT, LL, RL); 2986 Hi = DAG.getNode(ISD::MULHU, dl, HiLoVT, LL, RL); 2987 return true; 2988 } 2989 } 2990 if (LHSSB > InnerBitSize && RHSSB > InnerBitSize) { 2991 // The input values are both sign-extended. 2992 if (HasSMUL_LOHI) { 2993 // We can emit a smul_lohi. 2994 Lo = DAG.getNode(ISD::SMUL_LOHI, dl, DAG.getVTList(HiLoVT, HiLoVT), LL, 2995 RL); 2996 Hi = SDValue(Lo.getNode(), 1); 2997 return true; 2998 } 2999 if (HasMULHS) { 3000 // We can emit a mulhs+mul. 3001 Lo = DAG.getNode(ISD::MUL, dl, HiLoVT, LL, RL); 3002 Hi = DAG.getNode(ISD::MULHS, dl, HiLoVT, LL, RL); 3003 return true; 3004 } 3005 } 3006 3007 if (!LH.getNode() && !RH.getNode() && 3008 isOperationLegalOrCustom(ISD::SRL, VT) && 3009 isOperationLegalOrCustom(ISD::TRUNCATE, HiLoVT)) { 3010 auto &DL = DAG.getDataLayout(); 3011 unsigned ShiftAmt = VT.getSizeInBits() - HiLoVT.getSizeInBits(); 3012 SDValue Shift = DAG.getConstant(ShiftAmt, dl, getShiftAmountTy(VT, DL)); 3013 LH = DAG.getNode(ISD::SRL, dl, VT, N->getOperand(0), Shift); 3014 LH = DAG.getNode(ISD::TRUNCATE, dl, HiLoVT, LH); 3015 RH = DAG.getNode(ISD::SRL, dl, VT, N->getOperand(1), Shift); 3016 RH = DAG.getNode(ISD::TRUNCATE, dl, HiLoVT, RH); 3017 } 3018 3019 if (!LH.getNode()) 3020 return false; 3021 3022 if (HasUMUL_LOHI) { 3023 // Lo,Hi = umul LHS, RHS. 3024 SDValue UMulLOHI = DAG.getNode(ISD::UMUL_LOHI, dl, 3025 DAG.getVTList(HiLoVT, HiLoVT), LL, RL); 3026 Lo = UMulLOHI; 3027 Hi = UMulLOHI.getValue(1); 3028 RH = DAG.getNode(ISD::MUL, dl, HiLoVT, LL, RH); 3029 LH = DAG.getNode(ISD::MUL, dl, HiLoVT, LH, RL); 3030 Hi = DAG.getNode(ISD::ADD, dl, HiLoVT, Hi, RH); 3031 Hi = DAG.getNode(ISD::ADD, dl, HiLoVT, Hi, LH); 3032 return true; 3033 } 3034 if (HasMULHU) { 3035 Lo = DAG.getNode(ISD::MUL, dl, HiLoVT, LL, RL); 3036 Hi = DAG.getNode(ISD::MULHU, dl, HiLoVT, LL, RL); 3037 RH = DAG.getNode(ISD::MUL, dl, HiLoVT, LL, RH); 3038 LH = DAG.getNode(ISD::MUL, dl, HiLoVT, LH, RL); 3039 Hi = DAG.getNode(ISD::ADD, dl, HiLoVT, Hi, RH); 3040 Hi = DAG.getNode(ISD::ADD, dl, HiLoVT, Hi, LH); 3041 return true; 3042 } 3043 } 3044 return false; 3045 } 3046 3047 bool TargetLowering::expandFP_TO_SINT(SDNode *Node, SDValue &Result, 3048 SelectionDAG &DAG) const { 3049 EVT VT = Node->getOperand(0).getValueType(); 3050 EVT NVT = Node->getValueType(0); 3051 SDLoc dl(SDValue(Node, 0)); 3052 3053 // FIXME: Only f32 to i64 conversions are supported. 3054 if (VT != MVT::f32 || NVT != MVT::i64) 3055 return false; 3056 3057 // Expand f32 -> i64 conversion 3058 // This algorithm comes from compiler-rt's implementation of fixsfdi: 3059 // https://github.com/llvm-mirror/compiler-rt/blob/master/lib/builtins/fixsfdi.c 3060 EVT IntVT = EVT::getIntegerVT(*DAG.getContext(), 3061 VT.getSizeInBits()); 3062 SDValue ExponentMask = DAG.getConstant(0x7F800000, dl, IntVT); 3063 SDValue ExponentLoBit = DAG.getConstant(23, dl, IntVT); 3064 SDValue Bias = DAG.getConstant(127, dl, IntVT); 3065 SDValue SignMask = DAG.getConstant(APInt::getSignBit(VT.getSizeInBits()), dl, 3066 IntVT); 3067 SDValue SignLowBit = DAG.getConstant(VT.getSizeInBits() - 1, dl, IntVT); 3068 SDValue MantissaMask = DAG.getConstant(0x007FFFFF, dl, IntVT); 3069 3070 SDValue Bits = DAG.getNode(ISD::BITCAST, dl, IntVT, Node->getOperand(0)); 3071 3072 auto &DL = DAG.getDataLayout(); 3073 SDValue ExponentBits = DAG.getNode( 3074 ISD::SRL, dl, IntVT, DAG.getNode(ISD::AND, dl, IntVT, Bits, ExponentMask), 3075 DAG.getZExtOrTrunc(ExponentLoBit, dl, getShiftAmountTy(IntVT, DL))); 3076 SDValue Exponent = DAG.getNode(ISD::SUB, dl, IntVT, ExponentBits, Bias); 3077 3078 SDValue Sign = DAG.getNode( 3079 ISD::SRA, dl, IntVT, DAG.getNode(ISD::AND, dl, IntVT, Bits, SignMask), 3080 DAG.getZExtOrTrunc(SignLowBit, dl, getShiftAmountTy(IntVT, DL))); 3081 Sign = DAG.getSExtOrTrunc(Sign, dl, NVT); 3082 3083 SDValue R = DAG.getNode(ISD::OR, dl, IntVT, 3084 DAG.getNode(ISD::AND, dl, IntVT, Bits, MantissaMask), 3085 DAG.getConstant(0x00800000, dl, IntVT)); 3086 3087 R = DAG.getZExtOrTrunc(R, dl, NVT); 3088 3089 R = DAG.getSelectCC( 3090 dl, Exponent, ExponentLoBit, 3091 DAG.getNode(ISD::SHL, dl, NVT, R, 3092 DAG.getZExtOrTrunc( 3093 DAG.getNode(ISD::SUB, dl, IntVT, Exponent, ExponentLoBit), 3094 dl, getShiftAmountTy(IntVT, DL))), 3095 DAG.getNode(ISD::SRL, dl, NVT, R, 3096 DAG.getZExtOrTrunc( 3097 DAG.getNode(ISD::SUB, dl, IntVT, ExponentLoBit, Exponent), 3098 dl, getShiftAmountTy(IntVT, DL))), 3099 ISD::SETGT); 3100 3101 SDValue Ret = DAG.getNode(ISD::SUB, dl, NVT, 3102 DAG.getNode(ISD::XOR, dl, NVT, R, Sign), 3103 Sign); 3104 3105 Result = DAG.getSelectCC(dl, Exponent, DAG.getConstant(0, dl, IntVT), 3106 DAG.getConstant(0, dl, NVT), Ret, ISD::SETLT); 3107 return true; 3108 } 3109 3110 //===----------------------------------------------------------------------===// 3111 // Implementation of Emulated TLS Model 3112 //===----------------------------------------------------------------------===// 3113 3114 SDValue TargetLowering::LowerToTLSEmulatedModel(const GlobalAddressSDNode *GA, 3115 SelectionDAG &DAG) const { 3116 // Access to address of TLS varialbe xyz is lowered to a function call: 3117 // __emutls_get_address( address of global variable named "__emutls_v.xyz" ) 3118 EVT PtrVT = getPointerTy(DAG.getDataLayout()); 3119 PointerType *VoidPtrType = Type::getInt8PtrTy(*DAG.getContext()); 3120 SDLoc dl(GA); 3121 3122 ArgListTy Args; 3123 ArgListEntry Entry; 3124 std::string NameString = ("__emutls_v." + GA->getGlobal()->getName()).str(); 3125 Module *VariableModule = const_cast<Module*>(GA->getGlobal()->getParent()); 3126 StringRef EmuTlsVarName(NameString); 3127 GlobalVariable *EmuTlsVar = VariableModule->getNamedGlobal(EmuTlsVarName); 3128 assert(EmuTlsVar && "Cannot find EmuTlsVar "); 3129 Entry.Node = DAG.getGlobalAddress(EmuTlsVar, dl, PtrVT); 3130 Entry.Ty = VoidPtrType; 3131 Args.push_back(Entry); 3132 3133 SDValue EmuTlsGetAddr = DAG.getExternalSymbol("__emutls_get_address", PtrVT); 3134 3135 TargetLowering::CallLoweringInfo CLI(DAG); 3136 CLI.setDebugLoc(dl).setChain(DAG.getEntryNode()); 3137 CLI.setCallee(CallingConv::C, VoidPtrType, EmuTlsGetAddr, std::move(Args), 0); 3138 std::pair<SDValue, SDValue> CallResult = LowerCallTo(CLI); 3139 3140 // TLSADDR will be codegen'ed as call. Inform MFI that function has calls. 3141 // At last for X86 targets, maybe good for other targets too? 3142 MachineFrameInfo *MFI = DAG.getMachineFunction().getFrameInfo(); 3143 MFI->setAdjustsStack(true); // Is this only for X86 target? 3144 MFI->setHasCalls(true); 3145 3146 assert((GA->getOffset() == 0) && 3147 "Emulated TLS must have zero offset in GlobalAddressSDNode"); 3148 return CallResult.first; 3149 } 3150