1 //===-- PPCISelLowering.cpp - PPC DAG Lowering Implementation -------------===// 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 file implements the PPCISelLowering class. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "PPCISelLowering.h" 15 #include "MCTargetDesc/PPCPredicates.h" 16 #include "PPCMachineFunctionInfo.h" 17 #include "PPCPerfectShuffle.h" 18 #include "PPCTargetMachine.h" 19 #include "PPCTargetObjectFile.h" 20 #include "llvm/ADT/STLExtras.h" 21 #include "llvm/ADT/StringSwitch.h" 22 #include "llvm/CodeGen/CallingConvLower.h" 23 #include "llvm/CodeGen/MachineFrameInfo.h" 24 #include "llvm/CodeGen/MachineFunction.h" 25 #include "llvm/CodeGen/MachineInstrBuilder.h" 26 #include "llvm/CodeGen/MachineRegisterInfo.h" 27 #include "llvm/CodeGen/SelectionDAG.h" 28 #include "llvm/CodeGen/TargetLoweringObjectFileImpl.h" 29 #include "llvm/IR/CallingConv.h" 30 #include "llvm/IR/Constants.h" 31 #include "llvm/IR/DerivedTypes.h" 32 #include "llvm/IR/Function.h" 33 #include "llvm/IR/Intrinsics.h" 34 #include "llvm/Support/CommandLine.h" 35 #include "llvm/Support/ErrorHandling.h" 36 #include "llvm/Support/MathExtras.h" 37 #include "llvm/Support/raw_ostream.h" 38 #include "llvm/Target/TargetOptions.h" 39 using namespace llvm; 40 41 static cl::opt<bool> DisablePPCPreinc("disable-ppc-preinc", 42 cl::desc("disable preincrement load/store generation on PPC"), cl::Hidden); 43 44 static cl::opt<bool> DisableILPPref("disable-ppc-ilp-pref", 45 cl::desc("disable setting the node scheduling preference to ILP on PPC"), cl::Hidden); 46 47 static cl::opt<bool> DisablePPCUnaligned("disable-ppc-unaligned", 48 cl::desc("disable unaligned load/store generation on PPC"), cl::Hidden); 49 50 // FIXME: Remove this once the bug has been fixed! 51 extern cl::opt<bool> ANDIGlueBug; 52 53 static TargetLoweringObjectFile *CreateTLOF(const PPCTargetMachine &TM) { 54 if (TM.getSubtargetImpl()->isDarwin()) 55 return new TargetLoweringObjectFileMachO(); 56 57 if (TM.getSubtargetImpl()->isSVR4ABI()) 58 return new PPC64LinuxTargetObjectFile(); 59 60 return new TargetLoweringObjectFileELF(); 61 } 62 63 PPCTargetLowering::PPCTargetLowering(PPCTargetMachine &TM) 64 : TargetLowering(TM, CreateTLOF(TM)), PPCSubTarget(*TM.getSubtargetImpl()) { 65 const PPCSubtarget *Subtarget = &TM.getSubtarget<PPCSubtarget>(); 66 67 setPow2DivIsCheap(); 68 69 // Use _setjmp/_longjmp instead of setjmp/longjmp. 70 setUseUnderscoreSetJmp(true); 71 setUseUnderscoreLongJmp(true); 72 73 // On PPC32/64, arguments smaller than 4/8 bytes are extended, so all 74 // arguments are at least 4/8 bytes aligned. 75 bool isPPC64 = Subtarget->isPPC64(); 76 setMinStackArgumentAlignment(isPPC64 ? 8:4); 77 78 // Set up the register classes. 79 addRegisterClass(MVT::i32, &PPC::GPRCRegClass); 80 addRegisterClass(MVT::f32, &PPC::F4RCRegClass); 81 addRegisterClass(MVT::f64, &PPC::F8RCRegClass); 82 83 // PowerPC has an i16 but no i8 (or i1) SEXTLOAD 84 setLoadExtAction(ISD::SEXTLOAD, MVT::i1, Promote); 85 setLoadExtAction(ISD::SEXTLOAD, MVT::i8, Expand); 86 87 setTruncStoreAction(MVT::f64, MVT::f32, Expand); 88 89 // PowerPC has pre-inc load and store's. 90 setIndexedLoadAction(ISD::PRE_INC, MVT::i1, Legal); 91 setIndexedLoadAction(ISD::PRE_INC, MVT::i8, Legal); 92 setIndexedLoadAction(ISD::PRE_INC, MVT::i16, Legal); 93 setIndexedLoadAction(ISD::PRE_INC, MVT::i32, Legal); 94 setIndexedLoadAction(ISD::PRE_INC, MVT::i64, Legal); 95 setIndexedStoreAction(ISD::PRE_INC, MVT::i1, Legal); 96 setIndexedStoreAction(ISD::PRE_INC, MVT::i8, Legal); 97 setIndexedStoreAction(ISD::PRE_INC, MVT::i16, Legal); 98 setIndexedStoreAction(ISD::PRE_INC, MVT::i32, Legal); 99 setIndexedStoreAction(ISD::PRE_INC, MVT::i64, Legal); 100 101 if (Subtarget->useCRBits()) { 102 setOperationAction(ISD::SIGN_EXTEND_INREG, MVT::i1, Expand); 103 104 if (isPPC64 || Subtarget->hasFPCVT()) { 105 setOperationAction(ISD::SINT_TO_FP, MVT::i1, Promote); 106 AddPromotedToType (ISD::SINT_TO_FP, MVT::i1, 107 isPPC64 ? MVT::i64 : MVT::i32); 108 setOperationAction(ISD::UINT_TO_FP, MVT::i1, Promote); 109 AddPromotedToType (ISD::UINT_TO_FP, MVT::i1, 110 isPPC64 ? MVT::i64 : MVT::i32); 111 } else { 112 setOperationAction(ISD::SINT_TO_FP, MVT::i1, Custom); 113 setOperationAction(ISD::UINT_TO_FP, MVT::i1, Custom); 114 } 115 116 // PowerPC does not support direct load / store of condition registers 117 setOperationAction(ISD::LOAD, MVT::i1, Custom); 118 setOperationAction(ISD::STORE, MVT::i1, Custom); 119 120 // FIXME: Remove this once the ANDI glue bug is fixed: 121 if (ANDIGlueBug) 122 setOperationAction(ISD::TRUNCATE, MVT::i1, Custom); 123 124 setLoadExtAction(ISD::SEXTLOAD, MVT::i1, Promote); 125 setLoadExtAction(ISD::ZEXTLOAD, MVT::i1, Promote); 126 setTruncStoreAction(MVT::i64, MVT::i1, Expand); 127 setTruncStoreAction(MVT::i32, MVT::i1, Expand); 128 setTruncStoreAction(MVT::i16, MVT::i1, Expand); 129 setTruncStoreAction(MVT::i8, MVT::i1, Expand); 130 131 addRegisterClass(MVT::i1, &PPC::CRBITRCRegClass); 132 } 133 134 // This is used in the ppcf128->int sequence. Note it has different semantics 135 // from FP_ROUND: that rounds to nearest, this rounds to zero. 136 setOperationAction(ISD::FP_ROUND_INREG, MVT::ppcf128, Custom); 137 138 // We do not currently implement these libm ops for PowerPC. 139 setOperationAction(ISD::FFLOOR, MVT::ppcf128, Expand); 140 setOperationAction(ISD::FCEIL, MVT::ppcf128, Expand); 141 setOperationAction(ISD::FTRUNC, MVT::ppcf128, Expand); 142 setOperationAction(ISD::FRINT, MVT::ppcf128, Expand); 143 setOperationAction(ISD::FNEARBYINT, MVT::ppcf128, Expand); 144 setOperationAction(ISD::FREM, MVT::ppcf128, Expand); 145 146 // PowerPC has no SREM/UREM instructions 147 setOperationAction(ISD::SREM, MVT::i32, Expand); 148 setOperationAction(ISD::UREM, MVT::i32, Expand); 149 setOperationAction(ISD::SREM, MVT::i64, Expand); 150 setOperationAction(ISD::UREM, MVT::i64, Expand); 151 152 // Don't use SMUL_LOHI/UMUL_LOHI or SDIVREM/UDIVREM to lower SREM/UREM. 153 setOperationAction(ISD::UMUL_LOHI, MVT::i32, Expand); 154 setOperationAction(ISD::SMUL_LOHI, MVT::i32, Expand); 155 setOperationAction(ISD::UMUL_LOHI, MVT::i64, Expand); 156 setOperationAction(ISD::SMUL_LOHI, MVT::i64, Expand); 157 setOperationAction(ISD::UDIVREM, MVT::i32, Expand); 158 setOperationAction(ISD::SDIVREM, MVT::i32, Expand); 159 setOperationAction(ISD::UDIVREM, MVT::i64, Expand); 160 setOperationAction(ISD::SDIVREM, MVT::i64, Expand); 161 162 // We don't support sin/cos/sqrt/fmod/pow 163 setOperationAction(ISD::FSIN , MVT::f64, Expand); 164 setOperationAction(ISD::FCOS , MVT::f64, Expand); 165 setOperationAction(ISD::FSINCOS, MVT::f64, Expand); 166 setOperationAction(ISD::FREM , MVT::f64, Expand); 167 setOperationAction(ISD::FPOW , MVT::f64, Expand); 168 setOperationAction(ISD::FMA , MVT::f64, Legal); 169 setOperationAction(ISD::FSIN , MVT::f32, Expand); 170 setOperationAction(ISD::FCOS , MVT::f32, Expand); 171 setOperationAction(ISD::FSINCOS, MVT::f32, Expand); 172 setOperationAction(ISD::FREM , MVT::f32, Expand); 173 setOperationAction(ISD::FPOW , MVT::f32, Expand); 174 setOperationAction(ISD::FMA , MVT::f32, Legal); 175 176 setOperationAction(ISD::FLT_ROUNDS_, MVT::i32, Custom); 177 178 // If we're enabling GP optimizations, use hardware square root 179 if (!Subtarget->hasFSQRT() && 180 !(TM.Options.UnsafeFPMath && 181 Subtarget->hasFRSQRTE() && Subtarget->hasFRE())) 182 setOperationAction(ISD::FSQRT, MVT::f64, Expand); 183 184 if (!Subtarget->hasFSQRT() && 185 !(TM.Options.UnsafeFPMath && 186 Subtarget->hasFRSQRTES() && Subtarget->hasFRES())) 187 setOperationAction(ISD::FSQRT, MVT::f32, Expand); 188 189 if (Subtarget->hasFCPSGN()) { 190 setOperationAction(ISD::FCOPYSIGN, MVT::f64, Legal); 191 setOperationAction(ISD::FCOPYSIGN, MVT::f32, Legal); 192 } else { 193 setOperationAction(ISD::FCOPYSIGN, MVT::f64, Expand); 194 setOperationAction(ISD::FCOPYSIGN, MVT::f32, Expand); 195 } 196 197 if (Subtarget->hasFPRND()) { 198 setOperationAction(ISD::FFLOOR, MVT::f64, Legal); 199 setOperationAction(ISD::FCEIL, MVT::f64, Legal); 200 setOperationAction(ISD::FTRUNC, MVT::f64, Legal); 201 setOperationAction(ISD::FROUND, MVT::f64, Legal); 202 203 setOperationAction(ISD::FFLOOR, MVT::f32, Legal); 204 setOperationAction(ISD::FCEIL, MVT::f32, Legal); 205 setOperationAction(ISD::FTRUNC, MVT::f32, Legal); 206 setOperationAction(ISD::FROUND, MVT::f32, Legal); 207 } 208 209 // PowerPC does not have BSWAP, CTPOP or CTTZ 210 setOperationAction(ISD::BSWAP, MVT::i32 , Expand); 211 setOperationAction(ISD::CTTZ , MVT::i32 , Expand); 212 setOperationAction(ISD::CTTZ_ZERO_UNDEF, MVT::i32, Expand); 213 setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::i32, Expand); 214 setOperationAction(ISD::BSWAP, MVT::i64 , Expand); 215 setOperationAction(ISD::CTTZ , MVT::i64 , Expand); 216 setOperationAction(ISD::CTTZ_ZERO_UNDEF, MVT::i64, Expand); 217 setOperationAction(ISD::CTLZ_ZERO_UNDEF, MVT::i64, Expand); 218 219 if (Subtarget->hasPOPCNTD()) { 220 setOperationAction(ISD::CTPOP, MVT::i32 , Legal); 221 setOperationAction(ISD::CTPOP, MVT::i64 , Legal); 222 } else { 223 setOperationAction(ISD::CTPOP, MVT::i32 , Expand); 224 setOperationAction(ISD::CTPOP, MVT::i64 , Expand); 225 } 226 227 // PowerPC does not have ROTR 228 setOperationAction(ISD::ROTR, MVT::i32 , Expand); 229 setOperationAction(ISD::ROTR, MVT::i64 , Expand); 230 231 if (!Subtarget->useCRBits()) { 232 // PowerPC does not have Select 233 setOperationAction(ISD::SELECT, MVT::i32, Expand); 234 setOperationAction(ISD::SELECT, MVT::i64, Expand); 235 setOperationAction(ISD::SELECT, MVT::f32, Expand); 236 setOperationAction(ISD::SELECT, MVT::f64, Expand); 237 } 238 239 // PowerPC wants to turn select_cc of FP into fsel when possible. 240 setOperationAction(ISD::SELECT_CC, MVT::f32, Custom); 241 setOperationAction(ISD::SELECT_CC, MVT::f64, Custom); 242 243 // PowerPC wants to optimize integer setcc a bit 244 if (!Subtarget->useCRBits()) 245 setOperationAction(ISD::SETCC, MVT::i32, Custom); 246 247 // PowerPC does not have BRCOND which requires SetCC 248 if (!Subtarget->useCRBits()) 249 setOperationAction(ISD::BRCOND, MVT::Other, Expand); 250 251 setOperationAction(ISD::BR_JT, MVT::Other, Expand); 252 253 // PowerPC turns FP_TO_SINT into FCTIWZ and some load/stores. 254 setOperationAction(ISD::FP_TO_SINT, MVT::i32, Custom); 255 256 // PowerPC does not have [U|S]INT_TO_FP 257 setOperationAction(ISD::SINT_TO_FP, MVT::i32, Expand); 258 setOperationAction(ISD::UINT_TO_FP, MVT::i32, Expand); 259 260 setOperationAction(ISD::BITCAST, MVT::f32, Expand); 261 setOperationAction(ISD::BITCAST, MVT::i32, Expand); 262 setOperationAction(ISD::BITCAST, MVT::i64, Expand); 263 setOperationAction(ISD::BITCAST, MVT::f64, Expand); 264 265 // We cannot sextinreg(i1). Expand to shifts. 266 setOperationAction(ISD::SIGN_EXTEND_INREG, MVT::i1, Expand); 267 268 // NOTE: EH_SJLJ_SETJMP/_LONGJMP supported here is NOT intended to support 269 // SjLj exception handling but a light-weight setjmp/longjmp replacement to 270 // support continuation, user-level threading, and etc.. As a result, no 271 // other SjLj exception interfaces are implemented and please don't build 272 // your own exception handling based on them. 273 // LLVM/Clang supports zero-cost DWARF exception handling. 274 setOperationAction(ISD::EH_SJLJ_SETJMP, MVT::i32, Custom); 275 setOperationAction(ISD::EH_SJLJ_LONGJMP, MVT::Other, Custom); 276 277 // We want to legalize GlobalAddress and ConstantPool nodes into the 278 // appropriate instructions to materialize the address. 279 setOperationAction(ISD::GlobalAddress, MVT::i32, Custom); 280 setOperationAction(ISD::GlobalTLSAddress, MVT::i32, Custom); 281 setOperationAction(ISD::BlockAddress, MVT::i32, Custom); 282 setOperationAction(ISD::ConstantPool, MVT::i32, Custom); 283 setOperationAction(ISD::JumpTable, MVT::i32, Custom); 284 setOperationAction(ISD::GlobalAddress, MVT::i64, Custom); 285 setOperationAction(ISD::GlobalTLSAddress, MVT::i64, Custom); 286 setOperationAction(ISD::BlockAddress, MVT::i64, Custom); 287 setOperationAction(ISD::ConstantPool, MVT::i64, Custom); 288 setOperationAction(ISD::JumpTable, MVT::i64, Custom); 289 290 // TRAP is legal. 291 setOperationAction(ISD::TRAP, MVT::Other, Legal); 292 293 // TRAMPOLINE is custom lowered. 294 setOperationAction(ISD::INIT_TRAMPOLINE, MVT::Other, Custom); 295 setOperationAction(ISD::ADJUST_TRAMPOLINE, MVT::Other, Custom); 296 297 // VASTART needs to be custom lowered to use the VarArgsFrameIndex 298 setOperationAction(ISD::VASTART , MVT::Other, Custom); 299 300 if (Subtarget->isSVR4ABI()) { 301 if (isPPC64) { 302 // VAARG always uses double-word chunks, so promote anything smaller. 303 setOperationAction(ISD::VAARG, MVT::i1, Promote); 304 AddPromotedToType (ISD::VAARG, MVT::i1, MVT::i64); 305 setOperationAction(ISD::VAARG, MVT::i8, Promote); 306 AddPromotedToType (ISD::VAARG, MVT::i8, MVT::i64); 307 setOperationAction(ISD::VAARG, MVT::i16, Promote); 308 AddPromotedToType (ISD::VAARG, MVT::i16, MVT::i64); 309 setOperationAction(ISD::VAARG, MVT::i32, Promote); 310 AddPromotedToType (ISD::VAARG, MVT::i32, MVT::i64); 311 setOperationAction(ISD::VAARG, MVT::Other, Expand); 312 } else { 313 // VAARG is custom lowered with the 32-bit SVR4 ABI. 314 setOperationAction(ISD::VAARG, MVT::Other, Custom); 315 setOperationAction(ISD::VAARG, MVT::i64, Custom); 316 } 317 } else 318 setOperationAction(ISD::VAARG, MVT::Other, Expand); 319 320 if (Subtarget->isSVR4ABI() && !isPPC64) 321 // VACOPY is custom lowered with the 32-bit SVR4 ABI. 322 setOperationAction(ISD::VACOPY , MVT::Other, Custom); 323 else 324 setOperationAction(ISD::VACOPY , MVT::Other, Expand); 325 326 // Use the default implementation. 327 setOperationAction(ISD::VAEND , MVT::Other, Expand); 328 setOperationAction(ISD::STACKSAVE , MVT::Other, Expand); 329 setOperationAction(ISD::STACKRESTORE , MVT::Other, Custom); 330 setOperationAction(ISD::DYNAMIC_STACKALLOC, MVT::i32 , Custom); 331 setOperationAction(ISD::DYNAMIC_STACKALLOC, MVT::i64 , Custom); 332 333 // We want to custom lower some of our intrinsics. 334 setOperationAction(ISD::INTRINSIC_WO_CHAIN, MVT::Other, Custom); 335 336 // To handle counter-based loop conditions. 337 setOperationAction(ISD::INTRINSIC_W_CHAIN, MVT::i1, Custom); 338 339 // Comparisons that require checking two conditions. 340 setCondCodeAction(ISD::SETULT, MVT::f32, Expand); 341 setCondCodeAction(ISD::SETULT, MVT::f64, Expand); 342 setCondCodeAction(ISD::SETUGT, MVT::f32, Expand); 343 setCondCodeAction(ISD::SETUGT, MVT::f64, Expand); 344 setCondCodeAction(ISD::SETUEQ, MVT::f32, Expand); 345 setCondCodeAction(ISD::SETUEQ, MVT::f64, Expand); 346 setCondCodeAction(ISD::SETOGE, MVT::f32, Expand); 347 setCondCodeAction(ISD::SETOGE, MVT::f64, Expand); 348 setCondCodeAction(ISD::SETOLE, MVT::f32, Expand); 349 setCondCodeAction(ISD::SETOLE, MVT::f64, Expand); 350 setCondCodeAction(ISD::SETONE, MVT::f32, Expand); 351 setCondCodeAction(ISD::SETONE, MVT::f64, Expand); 352 353 if (Subtarget->has64BitSupport()) { 354 // They also have instructions for converting between i64 and fp. 355 setOperationAction(ISD::FP_TO_SINT, MVT::i64, Custom); 356 setOperationAction(ISD::FP_TO_UINT, MVT::i64, Expand); 357 setOperationAction(ISD::SINT_TO_FP, MVT::i64, Custom); 358 setOperationAction(ISD::UINT_TO_FP, MVT::i64, Expand); 359 // This is just the low 32 bits of a (signed) fp->i64 conversion. 360 // We cannot do this with Promote because i64 is not a legal type. 361 setOperationAction(ISD::FP_TO_UINT, MVT::i32, Custom); 362 363 if (PPCSubTarget.hasLFIWAX() || Subtarget->isPPC64()) 364 setOperationAction(ISD::SINT_TO_FP, MVT::i32, Custom); 365 } else { 366 // PowerPC does not have FP_TO_UINT on 32-bit implementations. 367 setOperationAction(ISD::FP_TO_UINT, MVT::i32, Expand); 368 } 369 370 // With the instructions enabled under FPCVT, we can do everything. 371 if (PPCSubTarget.hasFPCVT()) { 372 if (Subtarget->has64BitSupport()) { 373 setOperationAction(ISD::FP_TO_SINT, MVT::i64, Custom); 374 setOperationAction(ISD::FP_TO_UINT, MVT::i64, Custom); 375 setOperationAction(ISD::SINT_TO_FP, MVT::i64, Custom); 376 setOperationAction(ISD::UINT_TO_FP, MVT::i64, Custom); 377 } 378 379 setOperationAction(ISD::FP_TO_SINT, MVT::i32, Custom); 380 setOperationAction(ISD::FP_TO_UINT, MVT::i32, Custom); 381 setOperationAction(ISD::SINT_TO_FP, MVT::i32, Custom); 382 setOperationAction(ISD::UINT_TO_FP, MVT::i32, Custom); 383 } 384 385 if (Subtarget->use64BitRegs()) { 386 // 64-bit PowerPC implementations can support i64 types directly 387 addRegisterClass(MVT::i64, &PPC::G8RCRegClass); 388 // BUILD_PAIR can't be handled natively, and should be expanded to shl/or 389 setOperationAction(ISD::BUILD_PAIR, MVT::i64, Expand); 390 // 64-bit PowerPC wants to expand i128 shifts itself. 391 setOperationAction(ISD::SHL_PARTS, MVT::i64, Custom); 392 setOperationAction(ISD::SRA_PARTS, MVT::i64, Custom); 393 setOperationAction(ISD::SRL_PARTS, MVT::i64, Custom); 394 } else { 395 // 32-bit PowerPC wants to expand i64 shifts itself. 396 setOperationAction(ISD::SHL_PARTS, MVT::i32, Custom); 397 setOperationAction(ISD::SRA_PARTS, MVT::i32, Custom); 398 setOperationAction(ISD::SRL_PARTS, MVT::i32, Custom); 399 } 400 401 if (Subtarget->hasAltivec()) { 402 // First set operation action for all vector types to expand. Then we 403 // will selectively turn on ones that can be effectively codegen'd. 404 for (unsigned i = (unsigned)MVT::FIRST_VECTOR_VALUETYPE; 405 i <= (unsigned)MVT::LAST_VECTOR_VALUETYPE; ++i) { 406 MVT::SimpleValueType VT = (MVT::SimpleValueType)i; 407 408 // add/sub are legal for all supported vector VT's. 409 setOperationAction(ISD::ADD , VT, Legal); 410 setOperationAction(ISD::SUB , VT, Legal); 411 412 // We promote all shuffles to v16i8. 413 setOperationAction(ISD::VECTOR_SHUFFLE, VT, Promote); 414 AddPromotedToType (ISD::VECTOR_SHUFFLE, VT, MVT::v16i8); 415 416 // We promote all non-typed operations to v4i32. 417 setOperationAction(ISD::AND , VT, Promote); 418 AddPromotedToType (ISD::AND , VT, MVT::v4i32); 419 setOperationAction(ISD::OR , VT, Promote); 420 AddPromotedToType (ISD::OR , VT, MVT::v4i32); 421 setOperationAction(ISD::XOR , VT, Promote); 422 AddPromotedToType (ISD::XOR , VT, MVT::v4i32); 423 setOperationAction(ISD::LOAD , VT, Promote); 424 AddPromotedToType (ISD::LOAD , VT, MVT::v4i32); 425 setOperationAction(ISD::SELECT, VT, Promote); 426 AddPromotedToType (ISD::SELECT, VT, MVT::v4i32); 427 setOperationAction(ISD::STORE, VT, Promote); 428 AddPromotedToType (ISD::STORE, VT, MVT::v4i32); 429 430 // No other operations are legal. 431 setOperationAction(ISD::MUL , VT, Expand); 432 setOperationAction(ISD::SDIV, VT, Expand); 433 setOperationAction(ISD::SREM, VT, Expand); 434 setOperationAction(ISD::UDIV, VT, Expand); 435 setOperationAction(ISD::UREM, VT, Expand); 436 setOperationAction(ISD::FDIV, VT, Expand); 437 setOperationAction(ISD::FREM, VT, Expand); 438 setOperationAction(ISD::FNEG, VT, Expand); 439 setOperationAction(ISD::FSQRT, VT, Expand); 440 setOperationAction(ISD::FLOG, VT, Expand); 441 setOperationAction(ISD::FLOG10, VT, Expand); 442 setOperationAction(ISD::FLOG2, VT, Expand); 443 setOperationAction(ISD::FEXP, VT, Expand); 444 setOperationAction(ISD::FEXP2, VT, Expand); 445 setOperationAction(ISD::FSIN, VT, Expand); 446 setOperationAction(ISD::FCOS, VT, Expand); 447 setOperationAction(ISD::FABS, VT, Expand); 448 setOperationAction(ISD::FPOWI, VT, Expand); 449 setOperationAction(ISD::FFLOOR, VT, Expand); 450 setOperationAction(ISD::FCEIL, VT, Expand); 451 setOperationAction(ISD::FTRUNC, VT, Expand); 452 setOperationAction(ISD::FRINT, VT, Expand); 453 setOperationAction(ISD::FNEARBYINT, VT, Expand); 454 setOperationAction(ISD::EXTRACT_VECTOR_ELT, VT, Expand); 455 setOperationAction(ISD::INSERT_VECTOR_ELT, VT, Expand); 456 setOperationAction(ISD::BUILD_VECTOR, VT, Expand); 457 setOperationAction(ISD::UMUL_LOHI, VT, Expand); 458 setOperationAction(ISD::SMUL_LOHI, VT, Expand); 459 setOperationAction(ISD::UDIVREM, VT, Expand); 460 setOperationAction(ISD::SDIVREM, VT, Expand); 461 setOperationAction(ISD::SCALAR_TO_VECTOR, VT, Expand); 462 setOperationAction(ISD::FPOW, VT, Expand); 463 setOperationAction(ISD::CTPOP, VT, Expand); 464 setOperationAction(ISD::CTLZ, VT, Expand); 465 setOperationAction(ISD::CTLZ_ZERO_UNDEF, VT, Expand); 466 setOperationAction(ISD::CTTZ, VT, Expand); 467 setOperationAction(ISD::CTTZ_ZERO_UNDEF, VT, Expand); 468 setOperationAction(ISD::VSELECT, VT, Expand); 469 setOperationAction(ISD::SIGN_EXTEND_INREG, VT, Expand); 470 471 for (unsigned j = (unsigned)MVT::FIRST_VECTOR_VALUETYPE; 472 j <= (unsigned)MVT::LAST_VECTOR_VALUETYPE; ++j) { 473 MVT::SimpleValueType InnerVT = (MVT::SimpleValueType)j; 474 setTruncStoreAction(VT, InnerVT, Expand); 475 } 476 setLoadExtAction(ISD::SEXTLOAD, VT, Expand); 477 setLoadExtAction(ISD::ZEXTLOAD, VT, Expand); 478 setLoadExtAction(ISD::EXTLOAD, VT, Expand); 479 } 480 481 // We can custom expand all VECTOR_SHUFFLEs to VPERM, others we can handle 482 // with merges, splats, etc. 483 setOperationAction(ISD::VECTOR_SHUFFLE, MVT::v16i8, Custom); 484 485 setOperationAction(ISD::AND , MVT::v4i32, Legal); 486 setOperationAction(ISD::OR , MVT::v4i32, Legal); 487 setOperationAction(ISD::XOR , MVT::v4i32, Legal); 488 setOperationAction(ISD::LOAD , MVT::v4i32, Legal); 489 setOperationAction(ISD::SELECT, MVT::v4i32, 490 Subtarget->useCRBits() ? Legal : Expand); 491 setOperationAction(ISD::STORE , MVT::v4i32, Legal); 492 setOperationAction(ISD::FP_TO_SINT, MVT::v4i32, Legal); 493 setOperationAction(ISD::FP_TO_UINT, MVT::v4i32, Legal); 494 setOperationAction(ISD::SINT_TO_FP, MVT::v4i32, Legal); 495 setOperationAction(ISD::UINT_TO_FP, MVT::v4i32, Legal); 496 setOperationAction(ISD::FFLOOR, MVT::v4f32, Legal); 497 setOperationAction(ISD::FCEIL, MVT::v4f32, Legal); 498 setOperationAction(ISD::FTRUNC, MVT::v4f32, Legal); 499 setOperationAction(ISD::FNEARBYINT, MVT::v4f32, Legal); 500 501 addRegisterClass(MVT::v4f32, &PPC::VRRCRegClass); 502 addRegisterClass(MVT::v4i32, &PPC::VRRCRegClass); 503 addRegisterClass(MVT::v8i16, &PPC::VRRCRegClass); 504 addRegisterClass(MVT::v16i8, &PPC::VRRCRegClass); 505 506 setOperationAction(ISD::MUL, MVT::v4f32, Legal); 507 setOperationAction(ISD::FMA, MVT::v4f32, Legal); 508 509 if (TM.Options.UnsafeFPMath || Subtarget->hasVSX()) { 510 setOperationAction(ISD::FDIV, MVT::v4f32, Legal); 511 setOperationAction(ISD::FSQRT, MVT::v4f32, Legal); 512 } 513 514 setOperationAction(ISD::MUL, MVT::v4i32, Custom); 515 setOperationAction(ISD::MUL, MVT::v8i16, Custom); 516 setOperationAction(ISD::MUL, MVT::v16i8, Custom); 517 518 setOperationAction(ISD::SCALAR_TO_VECTOR, MVT::v4f32, Custom); 519 setOperationAction(ISD::SCALAR_TO_VECTOR, MVT::v4i32, Custom); 520 521 setOperationAction(ISD::BUILD_VECTOR, MVT::v16i8, Custom); 522 setOperationAction(ISD::BUILD_VECTOR, MVT::v8i16, Custom); 523 setOperationAction(ISD::BUILD_VECTOR, MVT::v4i32, Custom); 524 setOperationAction(ISD::BUILD_VECTOR, MVT::v4f32, Custom); 525 526 // Altivec does not contain unordered floating-point compare instructions 527 setCondCodeAction(ISD::SETUO, MVT::v4f32, Expand); 528 setCondCodeAction(ISD::SETUEQ, MVT::v4f32, Expand); 529 setCondCodeAction(ISD::SETUGT, MVT::v4f32, Expand); 530 setCondCodeAction(ISD::SETUGE, MVT::v4f32, Expand); 531 setCondCodeAction(ISD::SETULT, MVT::v4f32, Expand); 532 setCondCodeAction(ISD::SETULE, MVT::v4f32, Expand); 533 534 setCondCodeAction(ISD::SETO, MVT::v4f32, Expand); 535 setCondCodeAction(ISD::SETONE, MVT::v4f32, Expand); 536 537 if (Subtarget->hasVSX()) { 538 setOperationAction(ISD::SCALAR_TO_VECTOR, MVT::v2f64, Legal); 539 setOperationAction(ISD::EXTRACT_VECTOR_ELT, MVT::v2f64, Legal); 540 541 setOperationAction(ISD::FFLOOR, MVT::v2f64, Legal); 542 setOperationAction(ISD::FCEIL, MVT::v2f64, Legal); 543 setOperationAction(ISD::FTRUNC, MVT::v2f64, Legal); 544 setOperationAction(ISD::FNEARBYINT, MVT::v2f64, Legal); 545 setOperationAction(ISD::FROUND, MVT::v2f64, Legal); 546 547 setOperationAction(ISD::FROUND, MVT::v4f32, Legal); 548 549 setOperationAction(ISD::MUL, MVT::v2f64, Legal); 550 setOperationAction(ISD::FMA, MVT::v2f64, Legal); 551 552 setOperationAction(ISD::FDIV, MVT::v2f64, Legal); 553 setOperationAction(ISD::FSQRT, MVT::v2f64, Legal); 554 555 setOperationAction(ISD::VSELECT, MVT::v16i8, Legal); 556 setOperationAction(ISD::VSELECT, MVT::v8i16, Legal); 557 setOperationAction(ISD::VSELECT, MVT::v4i32, Legal); 558 setOperationAction(ISD::VSELECT, MVT::v4f32, Legal); 559 setOperationAction(ISD::VSELECT, MVT::v2f64, Legal); 560 561 // Share the Altivec comparison restrictions. 562 setCondCodeAction(ISD::SETUO, MVT::v2f64, Expand); 563 setCondCodeAction(ISD::SETUEQ, MVT::v2f64, Expand); 564 setCondCodeAction(ISD::SETUGT, MVT::v2f64, Expand); 565 setCondCodeAction(ISD::SETUGE, MVT::v2f64, Expand); 566 setCondCodeAction(ISD::SETULT, MVT::v2f64, Expand); 567 setCondCodeAction(ISD::SETULE, MVT::v2f64, Expand); 568 569 setCondCodeAction(ISD::SETO, MVT::v2f64, Expand); 570 setCondCodeAction(ISD::SETONE, MVT::v2f64, Expand); 571 572 setOperationAction(ISD::LOAD, MVT::v2f64, Legal); 573 setOperationAction(ISD::STORE, MVT::v2f64, Legal); 574 575 setOperationAction(ISD::VECTOR_SHUFFLE, MVT::v2f64, Legal); 576 577 addRegisterClass(MVT::f64, &PPC::VSFRCRegClass); 578 579 addRegisterClass(MVT::v4f32, &PPC::VSRCRegClass); 580 addRegisterClass(MVT::v2f64, &PPC::VSRCRegClass); 581 582 // VSX v2i64 only supports non-arithmetic operations. 583 setOperationAction(ISD::ADD, MVT::v2i64, Expand); 584 setOperationAction(ISD::SUB, MVT::v2i64, Expand); 585 586 setOperationAction(ISD::SHL, MVT::v2i64, Expand); 587 setOperationAction(ISD::SRA, MVT::v2i64, Expand); 588 setOperationAction(ISD::SRL, MVT::v2i64, Expand); 589 590 setOperationAction(ISD::SETCC, MVT::v2i64, Custom); 591 592 setOperationAction(ISD::LOAD, MVT::v2i64, Promote); 593 AddPromotedToType (ISD::LOAD, MVT::v2i64, MVT::v2f64); 594 setOperationAction(ISD::STORE, MVT::v2i64, Promote); 595 AddPromotedToType (ISD::STORE, MVT::v2i64, MVT::v2f64); 596 597 setOperationAction(ISD::VECTOR_SHUFFLE, MVT::v2i64, Legal); 598 599 setOperationAction(ISD::SINT_TO_FP, MVT::v2i64, Legal); 600 setOperationAction(ISD::UINT_TO_FP, MVT::v2i64, Legal); 601 setOperationAction(ISD::FP_TO_SINT, MVT::v2i64, Legal); 602 setOperationAction(ISD::FP_TO_UINT, MVT::v2i64, Legal); 603 604 // Vector operation legalization checks the result type of 605 // SIGN_EXTEND_INREG, overall legalization checks the inner type. 606 setOperationAction(ISD::SIGN_EXTEND_INREG, MVT::v2i64, Legal); 607 setOperationAction(ISD::SIGN_EXTEND_INREG, MVT::v2i32, Legal); 608 setOperationAction(ISD::SIGN_EXTEND_INREG, MVT::v2i16, Custom); 609 setOperationAction(ISD::SIGN_EXTEND_INREG, MVT::v2i8, Custom); 610 611 addRegisterClass(MVT::v2i64, &PPC::VSRCRegClass); 612 } 613 } 614 615 if (Subtarget->has64BitSupport()) { 616 setOperationAction(ISD::PREFETCH, MVT::Other, Legal); 617 setOperationAction(ISD::READCYCLECOUNTER, MVT::i64, Legal); 618 } 619 620 setOperationAction(ISD::ATOMIC_LOAD, MVT::i32, Expand); 621 setOperationAction(ISD::ATOMIC_STORE, MVT::i32, Expand); 622 setOperationAction(ISD::ATOMIC_LOAD, MVT::i64, Expand); 623 setOperationAction(ISD::ATOMIC_STORE, MVT::i64, Expand); 624 625 setBooleanContents(ZeroOrOneBooleanContent); 626 // Altivec instructions set fields to all zeros or all ones. 627 setBooleanVectorContents(ZeroOrNegativeOneBooleanContent); 628 629 if (isPPC64) { 630 setStackPointerRegisterToSaveRestore(PPC::X1); 631 setExceptionPointerRegister(PPC::X3); 632 setExceptionSelectorRegister(PPC::X4); 633 } else { 634 setStackPointerRegisterToSaveRestore(PPC::R1); 635 setExceptionPointerRegister(PPC::R3); 636 setExceptionSelectorRegister(PPC::R4); 637 } 638 639 // We have target-specific dag combine patterns for the following nodes: 640 setTargetDAGCombine(ISD::SINT_TO_FP); 641 setTargetDAGCombine(ISD::LOAD); 642 setTargetDAGCombine(ISD::STORE); 643 setTargetDAGCombine(ISD::BR_CC); 644 if (Subtarget->useCRBits()) 645 setTargetDAGCombine(ISD::BRCOND); 646 setTargetDAGCombine(ISD::BSWAP); 647 setTargetDAGCombine(ISD::INTRINSIC_WO_CHAIN); 648 649 setTargetDAGCombine(ISD::SIGN_EXTEND); 650 setTargetDAGCombine(ISD::ZERO_EXTEND); 651 setTargetDAGCombine(ISD::ANY_EXTEND); 652 653 if (Subtarget->useCRBits()) { 654 setTargetDAGCombine(ISD::TRUNCATE); 655 setTargetDAGCombine(ISD::SETCC); 656 setTargetDAGCombine(ISD::SELECT_CC); 657 } 658 659 // Use reciprocal estimates. 660 if (TM.Options.UnsafeFPMath) { 661 setTargetDAGCombine(ISD::FDIV); 662 setTargetDAGCombine(ISD::FSQRT); 663 } 664 665 // Darwin long double math library functions have $LDBL128 appended. 666 if (Subtarget->isDarwin()) { 667 setLibcallName(RTLIB::COS_PPCF128, "cosl$LDBL128"); 668 setLibcallName(RTLIB::POW_PPCF128, "powl$LDBL128"); 669 setLibcallName(RTLIB::REM_PPCF128, "fmodl$LDBL128"); 670 setLibcallName(RTLIB::SIN_PPCF128, "sinl$LDBL128"); 671 setLibcallName(RTLIB::SQRT_PPCF128, "sqrtl$LDBL128"); 672 setLibcallName(RTLIB::LOG_PPCF128, "logl$LDBL128"); 673 setLibcallName(RTLIB::LOG2_PPCF128, "log2l$LDBL128"); 674 setLibcallName(RTLIB::LOG10_PPCF128, "log10l$LDBL128"); 675 setLibcallName(RTLIB::EXP_PPCF128, "expl$LDBL128"); 676 setLibcallName(RTLIB::EXP2_PPCF128, "exp2l$LDBL128"); 677 } 678 679 // With 32 condition bits, we don't need to sink (and duplicate) compares 680 // aggressively in CodeGenPrep. 681 if (Subtarget->useCRBits()) 682 setHasMultipleConditionRegisters(); 683 684 setMinFunctionAlignment(2); 685 if (PPCSubTarget.isDarwin()) 686 setPrefFunctionAlignment(4); 687 688 if (isPPC64 && Subtarget->isJITCodeModel()) 689 // Temporary workaround for the inability of PPC64 JIT to handle jump 690 // tables. 691 setSupportJumpTables(false); 692 693 setInsertFencesForAtomic(true); 694 695 if (Subtarget->enableMachineScheduler()) 696 setSchedulingPreference(Sched::Source); 697 else 698 setSchedulingPreference(Sched::Hybrid); 699 700 computeRegisterProperties(); 701 702 // The Freescale cores does better with aggressive inlining of memcpy and 703 // friends. Gcc uses same threshold of 128 bytes (= 32 word stores). 704 if (Subtarget->getDarwinDirective() == PPC::DIR_E500mc || 705 Subtarget->getDarwinDirective() == PPC::DIR_E5500) { 706 MaxStoresPerMemset = 32; 707 MaxStoresPerMemsetOptSize = 16; 708 MaxStoresPerMemcpy = 32; 709 MaxStoresPerMemcpyOptSize = 8; 710 MaxStoresPerMemmove = 32; 711 MaxStoresPerMemmoveOptSize = 8; 712 713 setPrefFunctionAlignment(4); 714 } 715 } 716 717 /// getMaxByValAlign - Helper for getByValTypeAlignment to determine 718 /// the desired ByVal argument alignment. 719 static void getMaxByValAlign(Type *Ty, unsigned &MaxAlign, 720 unsigned MaxMaxAlign) { 721 if (MaxAlign == MaxMaxAlign) 722 return; 723 if (VectorType *VTy = dyn_cast<VectorType>(Ty)) { 724 if (MaxMaxAlign >= 32 && VTy->getBitWidth() >= 256) 725 MaxAlign = 32; 726 else if (VTy->getBitWidth() >= 128 && MaxAlign < 16) 727 MaxAlign = 16; 728 } else if (ArrayType *ATy = dyn_cast<ArrayType>(Ty)) { 729 unsigned EltAlign = 0; 730 getMaxByValAlign(ATy->getElementType(), EltAlign, MaxMaxAlign); 731 if (EltAlign > MaxAlign) 732 MaxAlign = EltAlign; 733 } else if (StructType *STy = dyn_cast<StructType>(Ty)) { 734 for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i) { 735 unsigned EltAlign = 0; 736 getMaxByValAlign(STy->getElementType(i), EltAlign, MaxMaxAlign); 737 if (EltAlign > MaxAlign) 738 MaxAlign = EltAlign; 739 if (MaxAlign == MaxMaxAlign) 740 break; 741 } 742 } 743 } 744 745 /// getByValTypeAlignment - Return the desired alignment for ByVal aggregate 746 /// function arguments in the caller parameter area. 747 unsigned PPCTargetLowering::getByValTypeAlignment(Type *Ty) const { 748 // Darwin passes everything on 4 byte boundary. 749 if (PPCSubTarget.isDarwin()) 750 return 4; 751 752 // 16byte and wider vectors are passed on 16byte boundary. 753 // The rest is 8 on PPC64 and 4 on PPC32 boundary. 754 unsigned Align = PPCSubTarget.isPPC64() ? 8 : 4; 755 if (PPCSubTarget.hasAltivec() || PPCSubTarget.hasQPX()) 756 getMaxByValAlign(Ty, Align, PPCSubTarget.hasQPX() ? 32 : 16); 757 return Align; 758 } 759 760 const char *PPCTargetLowering::getTargetNodeName(unsigned Opcode) const { 761 switch (Opcode) { 762 default: return nullptr; 763 case PPCISD::FSEL: return "PPCISD::FSEL"; 764 case PPCISD::FCFID: return "PPCISD::FCFID"; 765 case PPCISD::FCTIDZ: return "PPCISD::FCTIDZ"; 766 case PPCISD::FCTIWZ: return "PPCISD::FCTIWZ"; 767 case PPCISD::FRE: return "PPCISD::FRE"; 768 case PPCISD::FRSQRTE: return "PPCISD::FRSQRTE"; 769 case PPCISD::STFIWX: return "PPCISD::STFIWX"; 770 case PPCISD::VMADDFP: return "PPCISD::VMADDFP"; 771 case PPCISD::VNMSUBFP: return "PPCISD::VNMSUBFP"; 772 case PPCISD::VPERM: return "PPCISD::VPERM"; 773 case PPCISD::Hi: return "PPCISD::Hi"; 774 case PPCISD::Lo: return "PPCISD::Lo"; 775 case PPCISD::TOC_ENTRY: return "PPCISD::TOC_ENTRY"; 776 case PPCISD::TOC_RESTORE: return "PPCISD::TOC_RESTORE"; 777 case PPCISD::LOAD: return "PPCISD::LOAD"; 778 case PPCISD::LOAD_TOC: return "PPCISD::LOAD_TOC"; 779 case PPCISD::DYNALLOC: return "PPCISD::DYNALLOC"; 780 case PPCISD::GlobalBaseReg: return "PPCISD::GlobalBaseReg"; 781 case PPCISD::SRL: return "PPCISD::SRL"; 782 case PPCISD::SRA: return "PPCISD::SRA"; 783 case PPCISD::SHL: return "PPCISD::SHL"; 784 case PPCISD::CALL: return "PPCISD::CALL"; 785 case PPCISD::CALL_NOP: return "PPCISD::CALL_NOP"; 786 case PPCISD::MTCTR: return "PPCISD::MTCTR"; 787 case PPCISD::BCTRL: return "PPCISD::BCTRL"; 788 case PPCISD::RET_FLAG: return "PPCISD::RET_FLAG"; 789 case PPCISD::EH_SJLJ_SETJMP: return "PPCISD::EH_SJLJ_SETJMP"; 790 case PPCISD::EH_SJLJ_LONGJMP: return "PPCISD::EH_SJLJ_LONGJMP"; 791 case PPCISD::MFOCRF: return "PPCISD::MFOCRF"; 792 case PPCISD::VCMP: return "PPCISD::VCMP"; 793 case PPCISD::VCMPo: return "PPCISD::VCMPo"; 794 case PPCISD::LBRX: return "PPCISD::LBRX"; 795 case PPCISD::STBRX: return "PPCISD::STBRX"; 796 case PPCISD::LARX: return "PPCISD::LARX"; 797 case PPCISD::STCX: return "PPCISD::STCX"; 798 case PPCISD::COND_BRANCH: return "PPCISD::COND_BRANCH"; 799 case PPCISD::BDNZ: return "PPCISD::BDNZ"; 800 case PPCISD::BDZ: return "PPCISD::BDZ"; 801 case PPCISD::MFFS: return "PPCISD::MFFS"; 802 case PPCISD::FADDRTZ: return "PPCISD::FADDRTZ"; 803 case PPCISD::TC_RETURN: return "PPCISD::TC_RETURN"; 804 case PPCISD::CR6SET: return "PPCISD::CR6SET"; 805 case PPCISD::CR6UNSET: return "PPCISD::CR6UNSET"; 806 case PPCISD::ADDIS_TOC_HA: return "PPCISD::ADDIS_TOC_HA"; 807 case PPCISD::LD_TOC_L: return "PPCISD::LD_TOC_L"; 808 case PPCISD::ADDI_TOC_L: return "PPCISD::ADDI_TOC_L"; 809 case PPCISD::PPC32_GOT: return "PPCISD::PPC32_GOT"; 810 case PPCISD::ADDIS_GOT_TPREL_HA: return "PPCISD::ADDIS_GOT_TPREL_HA"; 811 case PPCISD::LD_GOT_TPREL_L: return "PPCISD::LD_GOT_TPREL_L"; 812 case PPCISD::ADD_TLS: return "PPCISD::ADD_TLS"; 813 case PPCISD::ADDIS_TLSGD_HA: return "PPCISD::ADDIS_TLSGD_HA"; 814 case PPCISD::ADDI_TLSGD_L: return "PPCISD::ADDI_TLSGD_L"; 815 case PPCISD::GET_TLS_ADDR: return "PPCISD::GET_TLS_ADDR"; 816 case PPCISD::ADDIS_TLSLD_HA: return "PPCISD::ADDIS_TLSLD_HA"; 817 case PPCISD::ADDI_TLSLD_L: return "PPCISD::ADDI_TLSLD_L"; 818 case PPCISD::GET_TLSLD_ADDR: return "PPCISD::GET_TLSLD_ADDR"; 819 case PPCISD::ADDIS_DTPREL_HA: return "PPCISD::ADDIS_DTPREL_HA"; 820 case PPCISD::ADDI_DTPREL_L: return "PPCISD::ADDI_DTPREL_L"; 821 case PPCISD::VADD_SPLAT: return "PPCISD::VADD_SPLAT"; 822 case PPCISD::SC: return "PPCISD::SC"; 823 } 824 } 825 826 EVT PPCTargetLowering::getSetCCResultType(LLVMContext &, EVT VT) const { 827 if (!VT.isVector()) 828 return PPCSubTarget.useCRBits() ? MVT::i1 : MVT::i32; 829 return VT.changeVectorElementTypeToInteger(); 830 } 831 832 //===----------------------------------------------------------------------===// 833 // Node matching predicates, for use by the tblgen matching code. 834 //===----------------------------------------------------------------------===// 835 836 /// isFloatingPointZero - Return true if this is 0.0 or -0.0. 837 static bool isFloatingPointZero(SDValue Op) { 838 if (ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(Op)) 839 return CFP->getValueAPF().isZero(); 840 else if (ISD::isEXTLoad(Op.getNode()) || ISD::isNON_EXTLoad(Op.getNode())) { 841 // Maybe this has already been legalized into the constant pool? 842 if (ConstantPoolSDNode *CP = dyn_cast<ConstantPoolSDNode>(Op.getOperand(1))) 843 if (const ConstantFP *CFP = dyn_cast<ConstantFP>(CP->getConstVal())) 844 return CFP->getValueAPF().isZero(); 845 } 846 return false; 847 } 848 849 /// isConstantOrUndef - Op is either an undef node or a ConstantSDNode. Return 850 /// true if Op is undef or if it matches the specified value. 851 static bool isConstantOrUndef(int Op, int Val) { 852 return Op < 0 || Op == Val; 853 } 854 855 /// isVPKUHUMShuffleMask - Return true if this is the shuffle mask for a 856 /// VPKUHUM instruction. 857 bool PPC::isVPKUHUMShuffleMask(ShuffleVectorSDNode *N, bool isUnary) { 858 if (!isUnary) { 859 for (unsigned i = 0; i != 16; ++i) 860 if (!isConstantOrUndef(N->getMaskElt(i), i*2+1)) 861 return false; 862 } else { 863 for (unsigned i = 0; i != 8; ++i) 864 if (!isConstantOrUndef(N->getMaskElt(i), i*2+1) || 865 !isConstantOrUndef(N->getMaskElt(i+8), i*2+1)) 866 return false; 867 } 868 return true; 869 } 870 871 /// isVPKUWUMShuffleMask - Return true if this is the shuffle mask for a 872 /// VPKUWUM instruction. 873 bool PPC::isVPKUWUMShuffleMask(ShuffleVectorSDNode *N, bool isUnary) { 874 if (!isUnary) { 875 for (unsigned i = 0; i != 16; i += 2) 876 if (!isConstantOrUndef(N->getMaskElt(i ), i*2+2) || 877 !isConstantOrUndef(N->getMaskElt(i+1), i*2+3)) 878 return false; 879 } else { 880 for (unsigned i = 0; i != 8; i += 2) 881 if (!isConstantOrUndef(N->getMaskElt(i ), i*2+2) || 882 !isConstantOrUndef(N->getMaskElt(i+1), i*2+3) || 883 !isConstantOrUndef(N->getMaskElt(i+8), i*2+2) || 884 !isConstantOrUndef(N->getMaskElt(i+9), i*2+3)) 885 return false; 886 } 887 return true; 888 } 889 890 /// isVMerge - Common function, used to match vmrg* shuffles. 891 /// 892 static bool isVMerge(ShuffleVectorSDNode *N, unsigned UnitSize, 893 unsigned LHSStart, unsigned RHSStart) { 894 if (N->getValueType(0) != MVT::v16i8) 895 return false; 896 assert((UnitSize == 1 || UnitSize == 2 || UnitSize == 4) && 897 "Unsupported merge size!"); 898 899 for (unsigned i = 0; i != 8/UnitSize; ++i) // Step over units 900 for (unsigned j = 0; j != UnitSize; ++j) { // Step over bytes within unit 901 if (!isConstantOrUndef(N->getMaskElt(i*UnitSize*2+j), 902 LHSStart+j+i*UnitSize) || 903 !isConstantOrUndef(N->getMaskElt(i*UnitSize*2+UnitSize+j), 904 RHSStart+j+i*UnitSize)) 905 return false; 906 } 907 return true; 908 } 909 910 /// isVMRGLShuffleMask - Return true if this is a shuffle mask suitable for 911 /// a VRGL* instruction with the specified unit size (1,2 or 4 bytes). 912 bool PPC::isVMRGLShuffleMask(ShuffleVectorSDNode *N, unsigned UnitSize, 913 bool isUnary) { 914 if (!isUnary) 915 return isVMerge(N, UnitSize, 8, 24); 916 return isVMerge(N, UnitSize, 8, 8); 917 } 918 919 /// isVMRGHShuffleMask - Return true if this is a shuffle mask suitable for 920 /// a VRGH* instruction with the specified unit size (1,2 or 4 bytes). 921 bool PPC::isVMRGHShuffleMask(ShuffleVectorSDNode *N, unsigned UnitSize, 922 bool isUnary) { 923 if (!isUnary) 924 return isVMerge(N, UnitSize, 0, 16); 925 return isVMerge(N, UnitSize, 0, 0); 926 } 927 928 929 /// isVSLDOIShuffleMask - If this is a vsldoi shuffle mask, return the shift 930 /// amount, otherwise return -1. 931 int PPC::isVSLDOIShuffleMask(SDNode *N, bool isUnary) { 932 if (N->getValueType(0) != MVT::v16i8) 933 return -1; 934 935 ShuffleVectorSDNode *SVOp = cast<ShuffleVectorSDNode>(N); 936 937 // Find the first non-undef value in the shuffle mask. 938 unsigned i; 939 for (i = 0; i != 16 && SVOp->getMaskElt(i) < 0; ++i) 940 /*search*/; 941 942 if (i == 16) return -1; // all undef. 943 944 // Otherwise, check to see if the rest of the elements are consecutively 945 // numbered from this value. 946 unsigned ShiftAmt = SVOp->getMaskElt(i); 947 if (ShiftAmt < i) return -1; 948 ShiftAmt -= i; 949 950 if (!isUnary) { 951 // Check the rest of the elements to see if they are consecutive. 952 for (++i; i != 16; ++i) 953 if (!isConstantOrUndef(SVOp->getMaskElt(i), ShiftAmt+i)) 954 return -1; 955 } else { 956 // Check the rest of the elements to see if they are consecutive. 957 for (++i; i != 16; ++i) 958 if (!isConstantOrUndef(SVOp->getMaskElt(i), (ShiftAmt+i) & 15)) 959 return -1; 960 } 961 return ShiftAmt; 962 } 963 964 /// isSplatShuffleMask - Return true if the specified VECTOR_SHUFFLE operand 965 /// specifies a splat of a single element that is suitable for input to 966 /// VSPLTB/VSPLTH/VSPLTW. 967 bool PPC::isSplatShuffleMask(ShuffleVectorSDNode *N, unsigned EltSize) { 968 assert(N->getValueType(0) == MVT::v16i8 && 969 (EltSize == 1 || EltSize == 2 || EltSize == 4)); 970 971 // This is a splat operation if each element of the permute is the same, and 972 // if the value doesn't reference the second vector. 973 unsigned ElementBase = N->getMaskElt(0); 974 975 // FIXME: Handle UNDEF elements too! 976 if (ElementBase >= 16) 977 return false; 978 979 // Check that the indices are consecutive, in the case of a multi-byte element 980 // splatted with a v16i8 mask. 981 for (unsigned i = 1; i != EltSize; ++i) 982 if (N->getMaskElt(i) < 0 || N->getMaskElt(i) != (int)(i+ElementBase)) 983 return false; 984 985 for (unsigned i = EltSize, e = 16; i != e; i += EltSize) { 986 if (N->getMaskElt(i) < 0) continue; 987 for (unsigned j = 0; j != EltSize; ++j) 988 if (N->getMaskElt(i+j) != N->getMaskElt(j)) 989 return false; 990 } 991 return true; 992 } 993 994 /// isAllNegativeZeroVector - Returns true if all elements of build_vector 995 /// are -0.0. 996 bool PPC::isAllNegativeZeroVector(SDNode *N) { 997 BuildVectorSDNode *BV = cast<BuildVectorSDNode>(N); 998 999 APInt APVal, APUndef; 1000 unsigned BitSize; 1001 bool HasAnyUndefs; 1002 1003 if (BV->isConstantSplat(APVal, APUndef, BitSize, HasAnyUndefs, 32, true)) 1004 if (ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(N->getOperand(0))) 1005 return CFP->getValueAPF().isNegZero(); 1006 1007 return false; 1008 } 1009 1010 /// getVSPLTImmediate - Return the appropriate VSPLT* immediate to splat the 1011 /// specified isSplatShuffleMask VECTOR_SHUFFLE mask. 1012 unsigned PPC::getVSPLTImmediate(SDNode *N, unsigned EltSize) { 1013 ShuffleVectorSDNode *SVOp = cast<ShuffleVectorSDNode>(N); 1014 assert(isSplatShuffleMask(SVOp, EltSize)); 1015 return SVOp->getMaskElt(0) / EltSize; 1016 } 1017 1018 /// get_VSPLTI_elt - If this is a build_vector of constants which can be formed 1019 /// by using a vspltis[bhw] instruction of the specified element size, return 1020 /// the constant being splatted. The ByteSize field indicates the number of 1021 /// bytes of each element [124] -> [bhw]. 1022 SDValue PPC::get_VSPLTI_elt(SDNode *N, unsigned ByteSize, SelectionDAG &DAG) { 1023 SDValue OpVal(nullptr, 0); 1024 1025 // If ByteSize of the splat is bigger than the element size of the 1026 // build_vector, then we have a case where we are checking for a splat where 1027 // multiple elements of the buildvector are folded together into a single 1028 // logical element of the splat (e.g. "vsplish 1" to splat {0,1}*8). 1029 unsigned EltSize = 16/N->getNumOperands(); 1030 if (EltSize < ByteSize) { 1031 unsigned Multiple = ByteSize/EltSize; // Number of BV entries per spltval. 1032 SDValue UniquedVals[4]; 1033 assert(Multiple > 1 && Multiple <= 4 && "How can this happen?"); 1034 1035 // See if all of the elements in the buildvector agree across. 1036 for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) { 1037 if (N->getOperand(i).getOpcode() == ISD::UNDEF) continue; 1038 // If the element isn't a constant, bail fully out. 1039 if (!isa<ConstantSDNode>(N->getOperand(i))) return SDValue(); 1040 1041 1042 if (!UniquedVals[i&(Multiple-1)].getNode()) 1043 UniquedVals[i&(Multiple-1)] = N->getOperand(i); 1044 else if (UniquedVals[i&(Multiple-1)] != N->getOperand(i)) 1045 return SDValue(); // no match. 1046 } 1047 1048 // Okay, if we reached this point, UniquedVals[0..Multiple-1] contains 1049 // either constant or undef values that are identical for each chunk. See 1050 // if these chunks can form into a larger vspltis*. 1051 1052 // Check to see if all of the leading entries are either 0 or -1. If 1053 // neither, then this won't fit into the immediate field. 1054 bool LeadingZero = true; 1055 bool LeadingOnes = true; 1056 for (unsigned i = 0; i != Multiple-1; ++i) { 1057 if (!UniquedVals[i].getNode()) continue; // Must have been undefs. 1058 1059 LeadingZero &= cast<ConstantSDNode>(UniquedVals[i])->isNullValue(); 1060 LeadingOnes &= cast<ConstantSDNode>(UniquedVals[i])->isAllOnesValue(); 1061 } 1062 // Finally, check the least significant entry. 1063 if (LeadingZero) { 1064 if (!UniquedVals[Multiple-1].getNode()) 1065 return DAG.getTargetConstant(0, MVT::i32); // 0,0,0,undef 1066 int Val = cast<ConstantSDNode>(UniquedVals[Multiple-1])->getZExtValue(); 1067 if (Val < 16) 1068 return DAG.getTargetConstant(Val, MVT::i32); // 0,0,0,4 -> vspltisw(4) 1069 } 1070 if (LeadingOnes) { 1071 if (!UniquedVals[Multiple-1].getNode()) 1072 return DAG.getTargetConstant(~0U, MVT::i32); // -1,-1,-1,undef 1073 int Val =cast<ConstantSDNode>(UniquedVals[Multiple-1])->getSExtValue(); 1074 if (Val >= -16) // -1,-1,-1,-2 -> vspltisw(-2) 1075 return DAG.getTargetConstant(Val, MVT::i32); 1076 } 1077 1078 return SDValue(); 1079 } 1080 1081 // Check to see if this buildvec has a single non-undef value in its elements. 1082 for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) { 1083 if (N->getOperand(i).getOpcode() == ISD::UNDEF) continue; 1084 if (!OpVal.getNode()) 1085 OpVal = N->getOperand(i); 1086 else if (OpVal != N->getOperand(i)) 1087 return SDValue(); 1088 } 1089 1090 if (!OpVal.getNode()) return SDValue(); // All UNDEF: use implicit def. 1091 1092 unsigned ValSizeInBytes = EltSize; 1093 uint64_t Value = 0; 1094 if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(OpVal)) { 1095 Value = CN->getZExtValue(); 1096 } else if (ConstantFPSDNode *CN = dyn_cast<ConstantFPSDNode>(OpVal)) { 1097 assert(CN->getValueType(0) == MVT::f32 && "Only one legal FP vector type!"); 1098 Value = FloatToBits(CN->getValueAPF().convertToFloat()); 1099 } 1100 1101 // If the splat value is larger than the element value, then we can never do 1102 // this splat. The only case that we could fit the replicated bits into our 1103 // immediate field for would be zero, and we prefer to use vxor for it. 1104 if (ValSizeInBytes < ByteSize) return SDValue(); 1105 1106 // If the element value is larger than the splat value, cut it in half and 1107 // check to see if the two halves are equal. Continue doing this until we 1108 // get to ByteSize. This allows us to handle 0x01010101 as 0x01. 1109 while (ValSizeInBytes > ByteSize) { 1110 ValSizeInBytes >>= 1; 1111 1112 // If the top half equals the bottom half, we're still ok. 1113 if (((Value >> (ValSizeInBytes*8)) & ((1 << (8*ValSizeInBytes))-1)) != 1114 (Value & ((1 << (8*ValSizeInBytes))-1))) 1115 return SDValue(); 1116 } 1117 1118 // Properly sign extend the value. 1119 int MaskVal = SignExtend32(Value, ByteSize * 8); 1120 1121 // If this is zero, don't match, zero matches ISD::isBuildVectorAllZeros. 1122 if (MaskVal == 0) return SDValue(); 1123 1124 // Finally, if this value fits in a 5 bit sext field, return it 1125 if (SignExtend32<5>(MaskVal) == MaskVal) 1126 return DAG.getTargetConstant(MaskVal, MVT::i32); 1127 return SDValue(); 1128 } 1129 1130 //===----------------------------------------------------------------------===// 1131 // Addressing Mode Selection 1132 //===----------------------------------------------------------------------===// 1133 1134 /// isIntS16Immediate - This method tests to see if the node is either a 32-bit 1135 /// or 64-bit immediate, and if the value can be accurately represented as a 1136 /// sign extension from a 16-bit value. If so, this returns true and the 1137 /// immediate. 1138 static bool isIntS16Immediate(SDNode *N, short &Imm) { 1139 if (N->getOpcode() != ISD::Constant) 1140 return false; 1141 1142 Imm = (short)cast<ConstantSDNode>(N)->getZExtValue(); 1143 if (N->getValueType(0) == MVT::i32) 1144 return Imm == (int32_t)cast<ConstantSDNode>(N)->getZExtValue(); 1145 else 1146 return Imm == (int64_t)cast<ConstantSDNode>(N)->getZExtValue(); 1147 } 1148 static bool isIntS16Immediate(SDValue Op, short &Imm) { 1149 return isIntS16Immediate(Op.getNode(), Imm); 1150 } 1151 1152 1153 /// SelectAddressRegReg - Given the specified addressed, check to see if it 1154 /// can be represented as an indexed [r+r] operation. Returns false if it 1155 /// can be more efficiently represented with [r+imm]. 1156 bool PPCTargetLowering::SelectAddressRegReg(SDValue N, SDValue &Base, 1157 SDValue &Index, 1158 SelectionDAG &DAG) const { 1159 short imm = 0; 1160 if (N.getOpcode() == ISD::ADD) { 1161 if (isIntS16Immediate(N.getOperand(1), imm)) 1162 return false; // r+i 1163 if (N.getOperand(1).getOpcode() == PPCISD::Lo) 1164 return false; // r+i 1165 1166 Base = N.getOperand(0); 1167 Index = N.getOperand(1); 1168 return true; 1169 } else if (N.getOpcode() == ISD::OR) { 1170 if (isIntS16Immediate(N.getOperand(1), imm)) 1171 return false; // r+i can fold it if we can. 1172 1173 // If this is an or of disjoint bitfields, we can codegen this as an add 1174 // (for better address arithmetic) if the LHS and RHS of the OR are provably 1175 // disjoint. 1176 APInt LHSKnownZero, LHSKnownOne; 1177 APInt RHSKnownZero, RHSKnownOne; 1178 DAG.computeKnownBits(N.getOperand(0), 1179 LHSKnownZero, LHSKnownOne); 1180 1181 if (LHSKnownZero.getBoolValue()) { 1182 DAG.computeKnownBits(N.getOperand(1), 1183 RHSKnownZero, RHSKnownOne); 1184 // If all of the bits are known zero on the LHS or RHS, the add won't 1185 // carry. 1186 if (~(LHSKnownZero | RHSKnownZero) == 0) { 1187 Base = N.getOperand(0); 1188 Index = N.getOperand(1); 1189 return true; 1190 } 1191 } 1192 } 1193 1194 return false; 1195 } 1196 1197 // If we happen to be doing an i64 load or store into a stack slot that has 1198 // less than a 4-byte alignment, then the frame-index elimination may need to 1199 // use an indexed load or store instruction (because the offset may not be a 1200 // multiple of 4). The extra register needed to hold the offset comes from the 1201 // register scavenger, and it is possible that the scavenger will need to use 1202 // an emergency spill slot. As a result, we need to make sure that a spill slot 1203 // is allocated when doing an i64 load/store into a less-than-4-byte-aligned 1204 // stack slot. 1205 static void fixupFuncForFI(SelectionDAG &DAG, int FrameIdx, EVT VT) { 1206 // FIXME: This does not handle the LWA case. 1207 if (VT != MVT::i64) 1208 return; 1209 1210 // NOTE: We'll exclude negative FIs here, which come from argument 1211 // lowering, because there are no known test cases triggering this problem 1212 // using packed structures (or similar). We can remove this exclusion if 1213 // we find such a test case. The reason why this is so test-case driven is 1214 // because this entire 'fixup' is only to prevent crashes (from the 1215 // register scavenger) on not-really-valid inputs. For example, if we have: 1216 // %a = alloca i1 1217 // %b = bitcast i1* %a to i64* 1218 // store i64* a, i64 b 1219 // then the store should really be marked as 'align 1', but is not. If it 1220 // were marked as 'align 1' then the indexed form would have been 1221 // instruction-selected initially, and the problem this 'fixup' is preventing 1222 // won't happen regardless. 1223 if (FrameIdx < 0) 1224 return; 1225 1226 MachineFunction &MF = DAG.getMachineFunction(); 1227 MachineFrameInfo *MFI = MF.getFrameInfo(); 1228 1229 unsigned Align = MFI->getObjectAlignment(FrameIdx); 1230 if (Align >= 4) 1231 return; 1232 1233 PPCFunctionInfo *FuncInfo = MF.getInfo<PPCFunctionInfo>(); 1234 FuncInfo->setHasNonRISpills(); 1235 } 1236 1237 /// Returns true if the address N can be represented by a base register plus 1238 /// a signed 16-bit displacement [r+imm], and if it is not better 1239 /// represented as reg+reg. If Aligned is true, only accept displacements 1240 /// suitable for STD and friends, i.e. multiples of 4. 1241 bool PPCTargetLowering::SelectAddressRegImm(SDValue N, SDValue &Disp, 1242 SDValue &Base, 1243 SelectionDAG &DAG, 1244 bool Aligned) const { 1245 // FIXME dl should come from parent load or store, not from address 1246 SDLoc dl(N); 1247 // If this can be more profitably realized as r+r, fail. 1248 if (SelectAddressRegReg(N, Disp, Base, DAG)) 1249 return false; 1250 1251 if (N.getOpcode() == ISD::ADD) { 1252 short imm = 0; 1253 if (isIntS16Immediate(N.getOperand(1), imm) && 1254 (!Aligned || (imm & 3) == 0)) { 1255 Disp = DAG.getTargetConstant(imm, N.getValueType()); 1256 if (FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(N.getOperand(0))) { 1257 Base = DAG.getTargetFrameIndex(FI->getIndex(), N.getValueType()); 1258 fixupFuncForFI(DAG, FI->getIndex(), N.getValueType()); 1259 } else { 1260 Base = N.getOperand(0); 1261 } 1262 return true; // [r+i] 1263 } else if (N.getOperand(1).getOpcode() == PPCISD::Lo) { 1264 // Match LOAD (ADD (X, Lo(G))). 1265 assert(!cast<ConstantSDNode>(N.getOperand(1).getOperand(1))->getZExtValue() 1266 && "Cannot handle constant offsets yet!"); 1267 Disp = N.getOperand(1).getOperand(0); // The global address. 1268 assert(Disp.getOpcode() == ISD::TargetGlobalAddress || 1269 Disp.getOpcode() == ISD::TargetGlobalTLSAddress || 1270 Disp.getOpcode() == ISD::TargetConstantPool || 1271 Disp.getOpcode() == ISD::TargetJumpTable); 1272 Base = N.getOperand(0); 1273 return true; // [&g+r] 1274 } 1275 } else if (N.getOpcode() == ISD::OR) { 1276 short imm = 0; 1277 if (isIntS16Immediate(N.getOperand(1), imm) && 1278 (!Aligned || (imm & 3) == 0)) { 1279 // If this is an or of disjoint bitfields, we can codegen this as an add 1280 // (for better address arithmetic) if the LHS and RHS of the OR are 1281 // provably disjoint. 1282 APInt LHSKnownZero, LHSKnownOne; 1283 DAG.computeKnownBits(N.getOperand(0), LHSKnownZero, LHSKnownOne); 1284 1285 if ((LHSKnownZero.getZExtValue()|~(uint64_t)imm) == ~0ULL) { 1286 // If all of the bits are known zero on the LHS or RHS, the add won't 1287 // carry. 1288 Base = N.getOperand(0); 1289 Disp = DAG.getTargetConstant(imm, N.getValueType()); 1290 return true; 1291 } 1292 } 1293 } else if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(N)) { 1294 // Loading from a constant address. 1295 1296 // If this address fits entirely in a 16-bit sext immediate field, codegen 1297 // this as "d, 0" 1298 short Imm; 1299 if (isIntS16Immediate(CN, Imm) && (!Aligned || (Imm & 3) == 0)) { 1300 Disp = DAG.getTargetConstant(Imm, CN->getValueType(0)); 1301 Base = DAG.getRegister(PPCSubTarget.isPPC64() ? PPC::ZERO8 : PPC::ZERO, 1302 CN->getValueType(0)); 1303 return true; 1304 } 1305 1306 // Handle 32-bit sext immediates with LIS + addr mode. 1307 if ((CN->getValueType(0) == MVT::i32 || 1308 (int64_t)CN->getZExtValue() == (int)CN->getZExtValue()) && 1309 (!Aligned || (CN->getZExtValue() & 3) == 0)) { 1310 int Addr = (int)CN->getZExtValue(); 1311 1312 // Otherwise, break this down into an LIS + disp. 1313 Disp = DAG.getTargetConstant((short)Addr, MVT::i32); 1314 1315 Base = DAG.getTargetConstant((Addr - (signed short)Addr) >> 16, MVT::i32); 1316 unsigned Opc = CN->getValueType(0) == MVT::i32 ? PPC::LIS : PPC::LIS8; 1317 Base = SDValue(DAG.getMachineNode(Opc, dl, CN->getValueType(0), Base), 0); 1318 return true; 1319 } 1320 } 1321 1322 Disp = DAG.getTargetConstant(0, getPointerTy()); 1323 if (FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(N)) { 1324 Base = DAG.getTargetFrameIndex(FI->getIndex(), N.getValueType()); 1325 fixupFuncForFI(DAG, FI->getIndex(), N.getValueType()); 1326 } else 1327 Base = N; 1328 return true; // [r+0] 1329 } 1330 1331 /// SelectAddressRegRegOnly - Given the specified addressed, force it to be 1332 /// represented as an indexed [r+r] operation. 1333 bool PPCTargetLowering::SelectAddressRegRegOnly(SDValue N, SDValue &Base, 1334 SDValue &Index, 1335 SelectionDAG &DAG) const { 1336 // Check to see if we can easily represent this as an [r+r] address. This 1337 // will fail if it thinks that the address is more profitably represented as 1338 // reg+imm, e.g. where imm = 0. 1339 if (SelectAddressRegReg(N, Base, Index, DAG)) 1340 return true; 1341 1342 // If the operand is an addition, always emit this as [r+r], since this is 1343 // better (for code size, and execution, as the memop does the add for free) 1344 // than emitting an explicit add. 1345 if (N.getOpcode() == ISD::ADD) { 1346 Base = N.getOperand(0); 1347 Index = N.getOperand(1); 1348 return true; 1349 } 1350 1351 // Otherwise, do it the hard way, using R0 as the base register. 1352 Base = DAG.getRegister(PPCSubTarget.isPPC64() ? PPC::ZERO8 : PPC::ZERO, 1353 N.getValueType()); 1354 Index = N; 1355 return true; 1356 } 1357 1358 /// getPreIndexedAddressParts - returns true by value, base pointer and 1359 /// offset pointer and addressing mode by reference if the node's address 1360 /// can be legally represented as pre-indexed load / store address. 1361 bool PPCTargetLowering::getPreIndexedAddressParts(SDNode *N, SDValue &Base, 1362 SDValue &Offset, 1363 ISD::MemIndexedMode &AM, 1364 SelectionDAG &DAG) const { 1365 if (DisablePPCPreinc) return false; 1366 1367 bool isLoad = true; 1368 SDValue Ptr; 1369 EVT VT; 1370 unsigned Alignment; 1371 if (LoadSDNode *LD = dyn_cast<LoadSDNode>(N)) { 1372 Ptr = LD->getBasePtr(); 1373 VT = LD->getMemoryVT(); 1374 Alignment = LD->getAlignment(); 1375 } else if (StoreSDNode *ST = dyn_cast<StoreSDNode>(N)) { 1376 Ptr = ST->getBasePtr(); 1377 VT = ST->getMemoryVT(); 1378 Alignment = ST->getAlignment(); 1379 isLoad = false; 1380 } else 1381 return false; 1382 1383 // PowerPC doesn't have preinc load/store instructions for vectors. 1384 if (VT.isVector()) 1385 return false; 1386 1387 if (SelectAddressRegReg(Ptr, Base, Offset, DAG)) { 1388 1389 // Common code will reject creating a pre-inc form if the base pointer 1390 // is a frame index, or if N is a store and the base pointer is either 1391 // the same as or a predecessor of the value being stored. Check for 1392 // those situations here, and try with swapped Base/Offset instead. 1393 bool Swap = false; 1394 1395 if (isa<FrameIndexSDNode>(Base) || isa<RegisterSDNode>(Base)) 1396 Swap = true; 1397 else if (!isLoad) { 1398 SDValue Val = cast<StoreSDNode>(N)->getValue(); 1399 if (Val == Base || Base.getNode()->isPredecessorOf(Val.getNode())) 1400 Swap = true; 1401 } 1402 1403 if (Swap) 1404 std::swap(Base, Offset); 1405 1406 AM = ISD::PRE_INC; 1407 return true; 1408 } 1409 1410 // LDU/STU can only handle immediates that are a multiple of 4. 1411 if (VT != MVT::i64) { 1412 if (!SelectAddressRegImm(Ptr, Offset, Base, DAG, false)) 1413 return false; 1414 } else { 1415 // LDU/STU need an address with at least 4-byte alignment. 1416 if (Alignment < 4) 1417 return false; 1418 1419 if (!SelectAddressRegImm(Ptr, Offset, Base, DAG, true)) 1420 return false; 1421 } 1422 1423 if (LoadSDNode *LD = dyn_cast<LoadSDNode>(N)) { 1424 // PPC64 doesn't have lwau, but it does have lwaux. Reject preinc load of 1425 // sext i32 to i64 when addr mode is r+i. 1426 if (LD->getValueType(0) == MVT::i64 && LD->getMemoryVT() == MVT::i32 && 1427 LD->getExtensionType() == ISD::SEXTLOAD && 1428 isa<ConstantSDNode>(Offset)) 1429 return false; 1430 } 1431 1432 AM = ISD::PRE_INC; 1433 return true; 1434 } 1435 1436 //===----------------------------------------------------------------------===// 1437 // LowerOperation implementation 1438 //===----------------------------------------------------------------------===// 1439 1440 /// GetLabelAccessInfo - Return true if we should reference labels using a 1441 /// PICBase, set the HiOpFlags and LoOpFlags to the target MO flags. 1442 static bool GetLabelAccessInfo(const TargetMachine &TM, unsigned &HiOpFlags, 1443 unsigned &LoOpFlags, 1444 const GlobalValue *GV = nullptr) { 1445 HiOpFlags = PPCII::MO_HA; 1446 LoOpFlags = PPCII::MO_LO; 1447 1448 // Don't use the pic base if not in PIC relocation model. Or if we are on a 1449 // non-darwin platform. We don't support PIC on other platforms yet. 1450 bool isPIC = TM.getRelocationModel() == Reloc::PIC_ && 1451 TM.getSubtarget<PPCSubtarget>().isDarwin(); 1452 if (isPIC) { 1453 HiOpFlags |= PPCII::MO_PIC_FLAG; 1454 LoOpFlags |= PPCII::MO_PIC_FLAG; 1455 } 1456 1457 // If this is a reference to a global value that requires a non-lazy-ptr, make 1458 // sure that instruction lowering adds it. 1459 if (GV && TM.getSubtarget<PPCSubtarget>().hasLazyResolverStub(GV, TM)) { 1460 HiOpFlags |= PPCII::MO_NLP_FLAG; 1461 LoOpFlags |= PPCII::MO_NLP_FLAG; 1462 1463 if (GV->hasHiddenVisibility()) { 1464 HiOpFlags |= PPCII::MO_NLP_HIDDEN_FLAG; 1465 LoOpFlags |= PPCII::MO_NLP_HIDDEN_FLAG; 1466 } 1467 } 1468 1469 return isPIC; 1470 } 1471 1472 static SDValue LowerLabelRef(SDValue HiPart, SDValue LoPart, bool isPIC, 1473 SelectionDAG &DAG) { 1474 EVT PtrVT = HiPart.getValueType(); 1475 SDValue Zero = DAG.getConstant(0, PtrVT); 1476 SDLoc DL(HiPart); 1477 1478 SDValue Hi = DAG.getNode(PPCISD::Hi, DL, PtrVT, HiPart, Zero); 1479 SDValue Lo = DAG.getNode(PPCISD::Lo, DL, PtrVT, LoPart, Zero); 1480 1481 // With PIC, the first instruction is actually "GR+hi(&G)". 1482 if (isPIC) 1483 Hi = DAG.getNode(ISD::ADD, DL, PtrVT, 1484 DAG.getNode(PPCISD::GlobalBaseReg, DL, PtrVT), Hi); 1485 1486 // Generate non-pic code that has direct accesses to the constant pool. 1487 // The address of the global is just (hi(&g)+lo(&g)). 1488 return DAG.getNode(ISD::ADD, DL, PtrVT, Hi, Lo); 1489 } 1490 1491 SDValue PPCTargetLowering::LowerConstantPool(SDValue Op, 1492 SelectionDAG &DAG) const { 1493 EVT PtrVT = Op.getValueType(); 1494 ConstantPoolSDNode *CP = cast<ConstantPoolSDNode>(Op); 1495 const Constant *C = CP->getConstVal(); 1496 1497 // 64-bit SVR4 ABI code is always position-independent. 1498 // The actual address of the GlobalValue is stored in the TOC. 1499 if (PPCSubTarget.isSVR4ABI() && PPCSubTarget.isPPC64()) { 1500 SDValue GA = DAG.getTargetConstantPool(C, PtrVT, CP->getAlignment(), 0); 1501 return DAG.getNode(PPCISD::TOC_ENTRY, SDLoc(CP), MVT::i64, GA, 1502 DAG.getRegister(PPC::X2, MVT::i64)); 1503 } 1504 1505 unsigned MOHiFlag, MOLoFlag; 1506 bool isPIC = GetLabelAccessInfo(DAG.getTarget(), MOHiFlag, MOLoFlag); 1507 SDValue CPIHi = 1508 DAG.getTargetConstantPool(C, PtrVT, CP->getAlignment(), 0, MOHiFlag); 1509 SDValue CPILo = 1510 DAG.getTargetConstantPool(C, PtrVT, CP->getAlignment(), 0, MOLoFlag); 1511 return LowerLabelRef(CPIHi, CPILo, isPIC, DAG); 1512 } 1513 1514 SDValue PPCTargetLowering::LowerJumpTable(SDValue Op, SelectionDAG &DAG) const { 1515 EVT PtrVT = Op.getValueType(); 1516 JumpTableSDNode *JT = cast<JumpTableSDNode>(Op); 1517 1518 // 64-bit SVR4 ABI code is always position-independent. 1519 // The actual address of the GlobalValue is stored in the TOC. 1520 if (PPCSubTarget.isSVR4ABI() && PPCSubTarget.isPPC64()) { 1521 SDValue GA = DAG.getTargetJumpTable(JT->getIndex(), PtrVT); 1522 return DAG.getNode(PPCISD::TOC_ENTRY, SDLoc(JT), MVT::i64, GA, 1523 DAG.getRegister(PPC::X2, MVT::i64)); 1524 } 1525 1526 unsigned MOHiFlag, MOLoFlag; 1527 bool isPIC = GetLabelAccessInfo(DAG.getTarget(), MOHiFlag, MOLoFlag); 1528 SDValue JTIHi = DAG.getTargetJumpTable(JT->getIndex(), PtrVT, MOHiFlag); 1529 SDValue JTILo = DAG.getTargetJumpTable(JT->getIndex(), PtrVT, MOLoFlag); 1530 return LowerLabelRef(JTIHi, JTILo, isPIC, DAG); 1531 } 1532 1533 SDValue PPCTargetLowering::LowerBlockAddress(SDValue Op, 1534 SelectionDAG &DAG) const { 1535 EVT PtrVT = Op.getValueType(); 1536 1537 const BlockAddress *BA = cast<BlockAddressSDNode>(Op)->getBlockAddress(); 1538 1539 unsigned MOHiFlag, MOLoFlag; 1540 bool isPIC = GetLabelAccessInfo(DAG.getTarget(), MOHiFlag, MOLoFlag); 1541 SDValue TgtBAHi = DAG.getTargetBlockAddress(BA, PtrVT, 0, MOHiFlag); 1542 SDValue TgtBALo = DAG.getTargetBlockAddress(BA, PtrVT, 0, MOLoFlag); 1543 return LowerLabelRef(TgtBAHi, TgtBALo, isPIC, DAG); 1544 } 1545 1546 SDValue PPCTargetLowering::LowerGlobalTLSAddress(SDValue Op, 1547 SelectionDAG &DAG) const { 1548 1549 // FIXME: TLS addresses currently use medium model code sequences, 1550 // which is the most useful form. Eventually support for small and 1551 // large models could be added if users need it, at the cost of 1552 // additional complexity. 1553 GlobalAddressSDNode *GA = cast<GlobalAddressSDNode>(Op); 1554 SDLoc dl(GA); 1555 const GlobalValue *GV = GA->getGlobal(); 1556 EVT PtrVT = getPointerTy(); 1557 bool is64bit = PPCSubTarget.isPPC64(); 1558 1559 TLSModel::Model Model = getTargetMachine().getTLSModel(GV); 1560 1561 if (Model == TLSModel::LocalExec) { 1562 SDValue TGAHi = DAG.getTargetGlobalAddress(GV, dl, PtrVT, 0, 1563 PPCII::MO_TPREL_HA); 1564 SDValue TGALo = DAG.getTargetGlobalAddress(GV, dl, PtrVT, 0, 1565 PPCII::MO_TPREL_LO); 1566 SDValue TLSReg = DAG.getRegister(is64bit ? PPC::X13 : PPC::R2, 1567 is64bit ? MVT::i64 : MVT::i32); 1568 SDValue Hi = DAG.getNode(PPCISD::Hi, dl, PtrVT, TGAHi, TLSReg); 1569 return DAG.getNode(PPCISD::Lo, dl, PtrVT, TGALo, Hi); 1570 } 1571 1572 if (Model == TLSModel::InitialExec) { 1573 SDValue TGA = DAG.getTargetGlobalAddress(GV, dl, PtrVT, 0, 0); 1574 SDValue TGATLS = DAG.getTargetGlobalAddress(GV, dl, PtrVT, 0, 1575 PPCII::MO_TLS); 1576 SDValue GOTPtr; 1577 if (is64bit) { 1578 SDValue GOTReg = DAG.getRegister(PPC::X2, MVT::i64); 1579 GOTPtr = DAG.getNode(PPCISD::ADDIS_GOT_TPREL_HA, dl, 1580 PtrVT, GOTReg, TGA); 1581 } else 1582 GOTPtr = DAG.getNode(PPCISD::PPC32_GOT, dl, PtrVT); 1583 SDValue TPOffset = DAG.getNode(PPCISD::LD_GOT_TPREL_L, dl, 1584 PtrVT, TGA, GOTPtr); 1585 return DAG.getNode(PPCISD::ADD_TLS, dl, PtrVT, TPOffset, TGATLS); 1586 } 1587 1588 if (Model == TLSModel::GeneralDynamic) { 1589 SDValue TGA = DAG.getTargetGlobalAddress(GV, dl, PtrVT, 0, 0); 1590 SDValue GOTReg = DAG.getRegister(PPC::X2, MVT::i64); 1591 SDValue GOTEntryHi = DAG.getNode(PPCISD::ADDIS_TLSGD_HA, dl, PtrVT, 1592 GOTReg, TGA); 1593 SDValue GOTEntry = DAG.getNode(PPCISD::ADDI_TLSGD_L, dl, PtrVT, 1594 GOTEntryHi, TGA); 1595 1596 // We need a chain node, and don't have one handy. The underlying 1597 // call has no side effects, so using the function entry node 1598 // suffices. 1599 SDValue Chain = DAG.getEntryNode(); 1600 Chain = DAG.getCopyToReg(Chain, dl, PPC::X3, GOTEntry); 1601 SDValue ParmReg = DAG.getRegister(PPC::X3, MVT::i64); 1602 SDValue TLSAddr = DAG.getNode(PPCISD::GET_TLS_ADDR, dl, 1603 PtrVT, ParmReg, TGA); 1604 // The return value from GET_TLS_ADDR really is in X3 already, but 1605 // some hacks are needed here to tie everything together. The extra 1606 // copies dissolve during subsequent transforms. 1607 Chain = DAG.getCopyToReg(Chain, dl, PPC::X3, TLSAddr); 1608 return DAG.getCopyFromReg(Chain, dl, PPC::X3, PtrVT); 1609 } 1610 1611 if (Model == TLSModel::LocalDynamic) { 1612 SDValue TGA = DAG.getTargetGlobalAddress(GV, dl, PtrVT, 0, 0); 1613 SDValue GOTReg = DAG.getRegister(PPC::X2, MVT::i64); 1614 SDValue GOTEntryHi = DAG.getNode(PPCISD::ADDIS_TLSLD_HA, dl, PtrVT, 1615 GOTReg, TGA); 1616 SDValue GOTEntry = DAG.getNode(PPCISD::ADDI_TLSLD_L, dl, PtrVT, 1617 GOTEntryHi, TGA); 1618 1619 // We need a chain node, and don't have one handy. The underlying 1620 // call has no side effects, so using the function entry node 1621 // suffices. 1622 SDValue Chain = DAG.getEntryNode(); 1623 Chain = DAG.getCopyToReg(Chain, dl, PPC::X3, GOTEntry); 1624 SDValue ParmReg = DAG.getRegister(PPC::X3, MVT::i64); 1625 SDValue TLSAddr = DAG.getNode(PPCISD::GET_TLSLD_ADDR, dl, 1626 PtrVT, ParmReg, TGA); 1627 // The return value from GET_TLSLD_ADDR really is in X3 already, but 1628 // some hacks are needed here to tie everything together. The extra 1629 // copies dissolve during subsequent transforms. 1630 Chain = DAG.getCopyToReg(Chain, dl, PPC::X3, TLSAddr); 1631 SDValue DtvOffsetHi = DAG.getNode(PPCISD::ADDIS_DTPREL_HA, dl, PtrVT, 1632 Chain, ParmReg, TGA); 1633 return DAG.getNode(PPCISD::ADDI_DTPREL_L, dl, PtrVT, DtvOffsetHi, TGA); 1634 } 1635 1636 llvm_unreachable("Unknown TLS model!"); 1637 } 1638 1639 SDValue PPCTargetLowering::LowerGlobalAddress(SDValue Op, 1640 SelectionDAG &DAG) const { 1641 EVT PtrVT = Op.getValueType(); 1642 GlobalAddressSDNode *GSDN = cast<GlobalAddressSDNode>(Op); 1643 SDLoc DL(GSDN); 1644 const GlobalValue *GV = GSDN->getGlobal(); 1645 1646 // 64-bit SVR4 ABI code is always position-independent. 1647 // The actual address of the GlobalValue is stored in the TOC. 1648 if (PPCSubTarget.isSVR4ABI() && PPCSubTarget.isPPC64()) { 1649 SDValue GA = DAG.getTargetGlobalAddress(GV, DL, PtrVT, GSDN->getOffset()); 1650 return DAG.getNode(PPCISD::TOC_ENTRY, DL, MVT::i64, GA, 1651 DAG.getRegister(PPC::X2, MVT::i64)); 1652 } 1653 1654 unsigned MOHiFlag, MOLoFlag; 1655 bool isPIC = GetLabelAccessInfo(DAG.getTarget(), MOHiFlag, MOLoFlag, GV); 1656 1657 SDValue GAHi = 1658 DAG.getTargetGlobalAddress(GV, DL, PtrVT, GSDN->getOffset(), MOHiFlag); 1659 SDValue GALo = 1660 DAG.getTargetGlobalAddress(GV, DL, PtrVT, GSDN->getOffset(), MOLoFlag); 1661 1662 SDValue Ptr = LowerLabelRef(GAHi, GALo, isPIC, DAG); 1663 1664 // If the global reference is actually to a non-lazy-pointer, we have to do an 1665 // extra load to get the address of the global. 1666 if (MOHiFlag & PPCII::MO_NLP_FLAG) 1667 Ptr = DAG.getLoad(PtrVT, DL, DAG.getEntryNode(), Ptr, MachinePointerInfo(), 1668 false, false, false, 0); 1669 return Ptr; 1670 } 1671 1672 SDValue PPCTargetLowering::LowerSETCC(SDValue Op, SelectionDAG &DAG) const { 1673 ISD::CondCode CC = cast<CondCodeSDNode>(Op.getOperand(2))->get(); 1674 SDLoc dl(Op); 1675 1676 if (Op.getValueType() == MVT::v2i64) { 1677 // When the operands themselves are v2i64 values, we need to do something 1678 // special because VSX has no underlying comparison operations for these. 1679 if (Op.getOperand(0).getValueType() == MVT::v2i64) { 1680 // Equality can be handled by casting to the legal type for Altivec 1681 // comparisons, everything else needs to be expanded. 1682 if (CC == ISD::SETEQ || CC == ISD::SETNE) { 1683 return DAG.getNode(ISD::BITCAST, dl, MVT::v2i64, 1684 DAG.getSetCC(dl, MVT::v4i32, 1685 DAG.getNode(ISD::BITCAST, dl, MVT::v4i32, Op.getOperand(0)), 1686 DAG.getNode(ISD::BITCAST, dl, MVT::v4i32, Op.getOperand(1)), 1687 CC)); 1688 } 1689 1690 return SDValue(); 1691 } 1692 1693 // We handle most of these in the usual way. 1694 return Op; 1695 } 1696 1697 // If we're comparing for equality to zero, expose the fact that this is 1698 // implented as a ctlz/srl pair on ppc, so that the dag combiner can 1699 // fold the new nodes. 1700 if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) { 1701 if (C->isNullValue() && CC == ISD::SETEQ) { 1702 EVT VT = Op.getOperand(0).getValueType(); 1703 SDValue Zext = Op.getOperand(0); 1704 if (VT.bitsLT(MVT::i32)) { 1705 VT = MVT::i32; 1706 Zext = DAG.getNode(ISD::ZERO_EXTEND, dl, VT, Op.getOperand(0)); 1707 } 1708 unsigned Log2b = Log2_32(VT.getSizeInBits()); 1709 SDValue Clz = DAG.getNode(ISD::CTLZ, dl, VT, Zext); 1710 SDValue Scc = DAG.getNode(ISD::SRL, dl, VT, Clz, 1711 DAG.getConstant(Log2b, MVT::i32)); 1712 return DAG.getNode(ISD::TRUNCATE, dl, MVT::i32, Scc); 1713 } 1714 // Leave comparisons against 0 and -1 alone for now, since they're usually 1715 // optimized. FIXME: revisit this when we can custom lower all setcc 1716 // optimizations. 1717 if (C->isAllOnesValue() || C->isNullValue()) 1718 return SDValue(); 1719 } 1720 1721 // If we have an integer seteq/setne, turn it into a compare against zero 1722 // by xor'ing the rhs with the lhs, which is faster than setting a 1723 // condition register, reading it back out, and masking the correct bit. The 1724 // normal approach here uses sub to do this instead of xor. Using xor exposes 1725 // the result to other bit-twiddling opportunities. 1726 EVT LHSVT = Op.getOperand(0).getValueType(); 1727 if (LHSVT.isInteger() && (CC == ISD::SETEQ || CC == ISD::SETNE)) { 1728 EVT VT = Op.getValueType(); 1729 SDValue Sub = DAG.getNode(ISD::XOR, dl, LHSVT, Op.getOperand(0), 1730 Op.getOperand(1)); 1731 return DAG.getSetCC(dl, VT, Sub, DAG.getConstant(0, LHSVT), CC); 1732 } 1733 return SDValue(); 1734 } 1735 1736 SDValue PPCTargetLowering::LowerVAARG(SDValue Op, SelectionDAG &DAG, 1737 const PPCSubtarget &Subtarget) const { 1738 SDNode *Node = Op.getNode(); 1739 EVT VT = Node->getValueType(0); 1740 EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(); 1741 SDValue InChain = Node->getOperand(0); 1742 SDValue VAListPtr = Node->getOperand(1); 1743 const Value *SV = cast<SrcValueSDNode>(Node->getOperand(2))->getValue(); 1744 SDLoc dl(Node); 1745 1746 assert(!Subtarget.isPPC64() && "LowerVAARG is PPC32 only"); 1747 1748 // gpr_index 1749 SDValue GprIndex = DAG.getExtLoad(ISD::ZEXTLOAD, dl, MVT::i32, InChain, 1750 VAListPtr, MachinePointerInfo(SV), MVT::i8, 1751 false, false, 0); 1752 InChain = GprIndex.getValue(1); 1753 1754 if (VT == MVT::i64) { 1755 // Check if GprIndex is even 1756 SDValue GprAnd = DAG.getNode(ISD::AND, dl, MVT::i32, GprIndex, 1757 DAG.getConstant(1, MVT::i32)); 1758 SDValue CC64 = DAG.getSetCC(dl, MVT::i32, GprAnd, 1759 DAG.getConstant(0, MVT::i32), ISD::SETNE); 1760 SDValue GprIndexPlusOne = DAG.getNode(ISD::ADD, dl, MVT::i32, GprIndex, 1761 DAG.getConstant(1, MVT::i32)); 1762 // Align GprIndex to be even if it isn't 1763 GprIndex = DAG.getNode(ISD::SELECT, dl, MVT::i32, CC64, GprIndexPlusOne, 1764 GprIndex); 1765 } 1766 1767 // fpr index is 1 byte after gpr 1768 SDValue FprPtr = DAG.getNode(ISD::ADD, dl, PtrVT, VAListPtr, 1769 DAG.getConstant(1, MVT::i32)); 1770 1771 // fpr 1772 SDValue FprIndex = DAG.getExtLoad(ISD::ZEXTLOAD, dl, MVT::i32, InChain, 1773 FprPtr, MachinePointerInfo(SV), MVT::i8, 1774 false, false, 0); 1775 InChain = FprIndex.getValue(1); 1776 1777 SDValue RegSaveAreaPtr = DAG.getNode(ISD::ADD, dl, PtrVT, VAListPtr, 1778 DAG.getConstant(8, MVT::i32)); 1779 1780 SDValue OverflowAreaPtr = DAG.getNode(ISD::ADD, dl, PtrVT, VAListPtr, 1781 DAG.getConstant(4, MVT::i32)); 1782 1783 // areas 1784 SDValue OverflowArea = DAG.getLoad(MVT::i32, dl, InChain, OverflowAreaPtr, 1785 MachinePointerInfo(), false, false, 1786 false, 0); 1787 InChain = OverflowArea.getValue(1); 1788 1789 SDValue RegSaveArea = DAG.getLoad(MVT::i32, dl, InChain, RegSaveAreaPtr, 1790 MachinePointerInfo(), false, false, 1791 false, 0); 1792 InChain = RegSaveArea.getValue(1); 1793 1794 // select overflow_area if index > 8 1795 SDValue CC = DAG.getSetCC(dl, MVT::i32, VT.isInteger() ? GprIndex : FprIndex, 1796 DAG.getConstant(8, MVT::i32), ISD::SETLT); 1797 1798 // adjustment constant gpr_index * 4/8 1799 SDValue RegConstant = DAG.getNode(ISD::MUL, dl, MVT::i32, 1800 VT.isInteger() ? GprIndex : FprIndex, 1801 DAG.getConstant(VT.isInteger() ? 4 : 8, 1802 MVT::i32)); 1803 1804 // OurReg = RegSaveArea + RegConstant 1805 SDValue OurReg = DAG.getNode(ISD::ADD, dl, PtrVT, RegSaveArea, 1806 RegConstant); 1807 1808 // Floating types are 32 bytes into RegSaveArea 1809 if (VT.isFloatingPoint()) 1810 OurReg = DAG.getNode(ISD::ADD, dl, PtrVT, OurReg, 1811 DAG.getConstant(32, MVT::i32)); 1812 1813 // increase {f,g}pr_index by 1 (or 2 if VT is i64) 1814 SDValue IndexPlus1 = DAG.getNode(ISD::ADD, dl, MVT::i32, 1815 VT.isInteger() ? GprIndex : FprIndex, 1816 DAG.getConstant(VT == MVT::i64 ? 2 : 1, 1817 MVT::i32)); 1818 1819 InChain = DAG.getTruncStore(InChain, dl, IndexPlus1, 1820 VT.isInteger() ? VAListPtr : FprPtr, 1821 MachinePointerInfo(SV), 1822 MVT::i8, false, false, 0); 1823 1824 // determine if we should load from reg_save_area or overflow_area 1825 SDValue Result = DAG.getNode(ISD::SELECT, dl, PtrVT, CC, OurReg, OverflowArea); 1826 1827 // increase overflow_area by 4/8 if gpr/fpr > 8 1828 SDValue OverflowAreaPlusN = DAG.getNode(ISD::ADD, dl, PtrVT, OverflowArea, 1829 DAG.getConstant(VT.isInteger() ? 4 : 8, 1830 MVT::i32)); 1831 1832 OverflowArea = DAG.getNode(ISD::SELECT, dl, MVT::i32, CC, OverflowArea, 1833 OverflowAreaPlusN); 1834 1835 InChain = DAG.getTruncStore(InChain, dl, OverflowArea, 1836 OverflowAreaPtr, 1837 MachinePointerInfo(), 1838 MVT::i32, false, false, 0); 1839 1840 return DAG.getLoad(VT, dl, InChain, Result, MachinePointerInfo(), 1841 false, false, false, 0); 1842 } 1843 1844 SDValue PPCTargetLowering::LowerVACOPY(SDValue Op, SelectionDAG &DAG, 1845 const PPCSubtarget &Subtarget) const { 1846 assert(!Subtarget.isPPC64() && "LowerVACOPY is PPC32 only"); 1847 1848 // We have to copy the entire va_list struct: 1849 // 2*sizeof(char) + 2 Byte alignment + 2*sizeof(char*) = 12 Byte 1850 return DAG.getMemcpy(Op.getOperand(0), Op, 1851 Op.getOperand(1), Op.getOperand(2), 1852 DAG.getConstant(12, MVT::i32), 8, false, true, 1853 MachinePointerInfo(), MachinePointerInfo()); 1854 } 1855 1856 SDValue PPCTargetLowering::LowerADJUST_TRAMPOLINE(SDValue Op, 1857 SelectionDAG &DAG) const { 1858 return Op.getOperand(0); 1859 } 1860 1861 SDValue PPCTargetLowering::LowerINIT_TRAMPOLINE(SDValue Op, 1862 SelectionDAG &DAG) const { 1863 SDValue Chain = Op.getOperand(0); 1864 SDValue Trmp = Op.getOperand(1); // trampoline 1865 SDValue FPtr = Op.getOperand(2); // nested function 1866 SDValue Nest = Op.getOperand(3); // 'nest' parameter value 1867 SDLoc dl(Op); 1868 1869 EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(); 1870 bool isPPC64 = (PtrVT == MVT::i64); 1871 Type *IntPtrTy = 1872 DAG.getTargetLoweringInfo().getDataLayout()->getIntPtrType( 1873 *DAG.getContext()); 1874 1875 TargetLowering::ArgListTy Args; 1876 TargetLowering::ArgListEntry Entry; 1877 1878 Entry.Ty = IntPtrTy; 1879 Entry.Node = Trmp; Args.push_back(Entry); 1880 1881 // TrampSize == (isPPC64 ? 48 : 40); 1882 Entry.Node = DAG.getConstant(isPPC64 ? 48 : 40, 1883 isPPC64 ? MVT::i64 : MVT::i32); 1884 Args.push_back(Entry); 1885 1886 Entry.Node = FPtr; Args.push_back(Entry); 1887 Entry.Node = Nest; Args.push_back(Entry); 1888 1889 // Lower to a call to __trampoline_setup(Trmp, TrampSize, FPtr, ctx_reg) 1890 TargetLowering::CallLoweringInfo CLI(DAG); 1891 CLI.setDebugLoc(dl).setChain(Chain) 1892 .setCallee(CallingConv::C, Type::getVoidTy(*DAG.getContext()), 1893 DAG.getExternalSymbol("__trampoline_setup", PtrVT), &Args, 0); 1894 1895 std::pair<SDValue, SDValue> CallResult = LowerCallTo(CLI); 1896 return CallResult.second; 1897 } 1898 1899 SDValue PPCTargetLowering::LowerVASTART(SDValue Op, SelectionDAG &DAG, 1900 const PPCSubtarget &Subtarget) const { 1901 MachineFunction &MF = DAG.getMachineFunction(); 1902 PPCFunctionInfo *FuncInfo = MF.getInfo<PPCFunctionInfo>(); 1903 1904 SDLoc dl(Op); 1905 1906 if (Subtarget.isDarwinABI() || Subtarget.isPPC64()) { 1907 // vastart just stores the address of the VarArgsFrameIndex slot into the 1908 // memory location argument. 1909 EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(); 1910 SDValue FR = DAG.getFrameIndex(FuncInfo->getVarArgsFrameIndex(), PtrVT); 1911 const Value *SV = cast<SrcValueSDNode>(Op.getOperand(2))->getValue(); 1912 return DAG.getStore(Op.getOperand(0), dl, FR, Op.getOperand(1), 1913 MachinePointerInfo(SV), 1914 false, false, 0); 1915 } 1916 1917 // For the 32-bit SVR4 ABI we follow the layout of the va_list struct. 1918 // We suppose the given va_list is already allocated. 1919 // 1920 // typedef struct { 1921 // char gpr; /* index into the array of 8 GPRs 1922 // * stored in the register save area 1923 // * gpr=0 corresponds to r3, 1924 // * gpr=1 to r4, etc. 1925 // */ 1926 // char fpr; /* index into the array of 8 FPRs 1927 // * stored in the register save area 1928 // * fpr=0 corresponds to f1, 1929 // * fpr=1 to f2, etc. 1930 // */ 1931 // char *overflow_arg_area; 1932 // /* location on stack that holds 1933 // * the next overflow argument 1934 // */ 1935 // char *reg_save_area; 1936 // /* where r3:r10 and f1:f8 (if saved) 1937 // * are stored 1938 // */ 1939 // } va_list[1]; 1940 1941 1942 SDValue ArgGPR = DAG.getConstant(FuncInfo->getVarArgsNumGPR(), MVT::i32); 1943 SDValue ArgFPR = DAG.getConstant(FuncInfo->getVarArgsNumFPR(), MVT::i32); 1944 1945 1946 EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(); 1947 1948 SDValue StackOffsetFI = DAG.getFrameIndex(FuncInfo->getVarArgsStackOffset(), 1949 PtrVT); 1950 SDValue FR = DAG.getFrameIndex(FuncInfo->getVarArgsFrameIndex(), 1951 PtrVT); 1952 1953 uint64_t FrameOffset = PtrVT.getSizeInBits()/8; 1954 SDValue ConstFrameOffset = DAG.getConstant(FrameOffset, PtrVT); 1955 1956 uint64_t StackOffset = PtrVT.getSizeInBits()/8 - 1; 1957 SDValue ConstStackOffset = DAG.getConstant(StackOffset, PtrVT); 1958 1959 uint64_t FPROffset = 1; 1960 SDValue ConstFPROffset = DAG.getConstant(FPROffset, PtrVT); 1961 1962 const Value *SV = cast<SrcValueSDNode>(Op.getOperand(2))->getValue(); 1963 1964 // Store first byte : number of int regs 1965 SDValue firstStore = DAG.getTruncStore(Op.getOperand(0), dl, ArgGPR, 1966 Op.getOperand(1), 1967 MachinePointerInfo(SV), 1968 MVT::i8, false, false, 0); 1969 uint64_t nextOffset = FPROffset; 1970 SDValue nextPtr = DAG.getNode(ISD::ADD, dl, PtrVT, Op.getOperand(1), 1971 ConstFPROffset); 1972 1973 // Store second byte : number of float regs 1974 SDValue secondStore = 1975 DAG.getTruncStore(firstStore, dl, ArgFPR, nextPtr, 1976 MachinePointerInfo(SV, nextOffset), MVT::i8, 1977 false, false, 0); 1978 nextOffset += StackOffset; 1979 nextPtr = DAG.getNode(ISD::ADD, dl, PtrVT, nextPtr, ConstStackOffset); 1980 1981 // Store second word : arguments given on stack 1982 SDValue thirdStore = 1983 DAG.getStore(secondStore, dl, StackOffsetFI, nextPtr, 1984 MachinePointerInfo(SV, nextOffset), 1985 false, false, 0); 1986 nextOffset += FrameOffset; 1987 nextPtr = DAG.getNode(ISD::ADD, dl, PtrVT, nextPtr, ConstFrameOffset); 1988 1989 // Store third word : arguments given in registers 1990 return DAG.getStore(thirdStore, dl, FR, nextPtr, 1991 MachinePointerInfo(SV, nextOffset), 1992 false, false, 0); 1993 1994 } 1995 1996 #include "PPCGenCallingConv.inc" 1997 1998 // Function whose sole purpose is to kill compiler warnings 1999 // stemming from unused functions included from PPCGenCallingConv.inc. 2000 CCAssignFn *PPCTargetLowering::useFastISelCCs(unsigned Flag) const { 2001 return Flag ? CC_PPC64_ELF_FIS : RetCC_PPC64_ELF_FIS; 2002 } 2003 2004 bool llvm::CC_PPC32_SVR4_Custom_Dummy(unsigned &ValNo, MVT &ValVT, MVT &LocVT, 2005 CCValAssign::LocInfo &LocInfo, 2006 ISD::ArgFlagsTy &ArgFlags, 2007 CCState &State) { 2008 return true; 2009 } 2010 2011 bool llvm::CC_PPC32_SVR4_Custom_AlignArgRegs(unsigned &ValNo, MVT &ValVT, 2012 MVT &LocVT, 2013 CCValAssign::LocInfo &LocInfo, 2014 ISD::ArgFlagsTy &ArgFlags, 2015 CCState &State) { 2016 static const MCPhysReg ArgRegs[] = { 2017 PPC::R3, PPC::R4, PPC::R5, PPC::R6, 2018 PPC::R7, PPC::R8, PPC::R9, PPC::R10, 2019 }; 2020 const unsigned NumArgRegs = array_lengthof(ArgRegs); 2021 2022 unsigned RegNum = State.getFirstUnallocated(ArgRegs, NumArgRegs); 2023 2024 // Skip one register if the first unallocated register has an even register 2025 // number and there are still argument registers available which have not been 2026 // allocated yet. RegNum is actually an index into ArgRegs, which means we 2027 // need to skip a register if RegNum is odd. 2028 if (RegNum != NumArgRegs && RegNum % 2 == 1) { 2029 State.AllocateReg(ArgRegs[RegNum]); 2030 } 2031 2032 // Always return false here, as this function only makes sure that the first 2033 // unallocated register has an odd register number and does not actually 2034 // allocate a register for the current argument. 2035 return false; 2036 } 2037 2038 bool llvm::CC_PPC32_SVR4_Custom_AlignFPArgRegs(unsigned &ValNo, MVT &ValVT, 2039 MVT &LocVT, 2040 CCValAssign::LocInfo &LocInfo, 2041 ISD::ArgFlagsTy &ArgFlags, 2042 CCState &State) { 2043 static const MCPhysReg ArgRegs[] = { 2044 PPC::F1, PPC::F2, PPC::F3, PPC::F4, PPC::F5, PPC::F6, PPC::F7, 2045 PPC::F8 2046 }; 2047 2048 const unsigned NumArgRegs = array_lengthof(ArgRegs); 2049 2050 unsigned RegNum = State.getFirstUnallocated(ArgRegs, NumArgRegs); 2051 2052 // If there is only one Floating-point register left we need to put both f64 2053 // values of a split ppc_fp128 value on the stack. 2054 if (RegNum != NumArgRegs && ArgRegs[RegNum] == PPC::F8) { 2055 State.AllocateReg(ArgRegs[RegNum]); 2056 } 2057 2058 // Always return false here, as this function only makes sure that the two f64 2059 // values a ppc_fp128 value is split into are both passed in registers or both 2060 // passed on the stack and does not actually allocate a register for the 2061 // current argument. 2062 return false; 2063 } 2064 2065 /// GetFPR - Get the set of FP registers that should be allocated for arguments, 2066 /// on Darwin. 2067 static const MCPhysReg *GetFPR() { 2068 static const MCPhysReg FPR[] = { 2069 PPC::F1, PPC::F2, PPC::F3, PPC::F4, PPC::F5, PPC::F6, PPC::F7, 2070 PPC::F8, PPC::F9, PPC::F10, PPC::F11, PPC::F12, PPC::F13 2071 }; 2072 2073 return FPR; 2074 } 2075 2076 /// CalculateStackSlotSize - Calculates the size reserved for this argument on 2077 /// the stack. 2078 static unsigned CalculateStackSlotSize(EVT ArgVT, ISD::ArgFlagsTy Flags, 2079 unsigned PtrByteSize) { 2080 unsigned ArgSize = ArgVT.getStoreSize(); 2081 if (Flags.isByVal()) 2082 ArgSize = Flags.getByValSize(); 2083 ArgSize = ((ArgSize + PtrByteSize - 1)/PtrByteSize) * PtrByteSize; 2084 2085 return ArgSize; 2086 } 2087 2088 SDValue 2089 PPCTargetLowering::LowerFormalArguments(SDValue Chain, 2090 CallingConv::ID CallConv, bool isVarArg, 2091 const SmallVectorImpl<ISD::InputArg> 2092 &Ins, 2093 SDLoc dl, SelectionDAG &DAG, 2094 SmallVectorImpl<SDValue> &InVals) 2095 const { 2096 if (PPCSubTarget.isSVR4ABI()) { 2097 if (PPCSubTarget.isPPC64()) 2098 return LowerFormalArguments_64SVR4(Chain, CallConv, isVarArg, Ins, 2099 dl, DAG, InVals); 2100 else 2101 return LowerFormalArguments_32SVR4(Chain, CallConv, isVarArg, Ins, 2102 dl, DAG, InVals); 2103 } else { 2104 return LowerFormalArguments_Darwin(Chain, CallConv, isVarArg, Ins, 2105 dl, DAG, InVals); 2106 } 2107 } 2108 2109 SDValue 2110 PPCTargetLowering::LowerFormalArguments_32SVR4( 2111 SDValue Chain, 2112 CallingConv::ID CallConv, bool isVarArg, 2113 const SmallVectorImpl<ISD::InputArg> 2114 &Ins, 2115 SDLoc dl, SelectionDAG &DAG, 2116 SmallVectorImpl<SDValue> &InVals) const { 2117 2118 // 32-bit SVR4 ABI Stack Frame Layout: 2119 // +-----------------------------------+ 2120 // +--> | Back chain | 2121 // | +-----------------------------------+ 2122 // | | Floating-point register save area | 2123 // | +-----------------------------------+ 2124 // | | General register save area | 2125 // | +-----------------------------------+ 2126 // | | CR save word | 2127 // | +-----------------------------------+ 2128 // | | VRSAVE save word | 2129 // | +-----------------------------------+ 2130 // | | Alignment padding | 2131 // | +-----------------------------------+ 2132 // | | Vector register save area | 2133 // | +-----------------------------------+ 2134 // | | Local variable space | 2135 // | +-----------------------------------+ 2136 // | | Parameter list area | 2137 // | +-----------------------------------+ 2138 // | | LR save word | 2139 // | +-----------------------------------+ 2140 // SP--> +--- | Back chain | 2141 // +-----------------------------------+ 2142 // 2143 // Specifications: 2144 // System V Application Binary Interface PowerPC Processor Supplement 2145 // AltiVec Technology Programming Interface Manual 2146 2147 MachineFunction &MF = DAG.getMachineFunction(); 2148 MachineFrameInfo *MFI = MF.getFrameInfo(); 2149 PPCFunctionInfo *FuncInfo = MF.getInfo<PPCFunctionInfo>(); 2150 2151 EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(); 2152 // Potential tail calls could cause overwriting of argument stack slots. 2153 bool isImmutable = !(getTargetMachine().Options.GuaranteedTailCallOpt && 2154 (CallConv == CallingConv::Fast)); 2155 unsigned PtrByteSize = 4; 2156 2157 // Assign locations to all of the incoming arguments. 2158 SmallVector<CCValAssign, 16> ArgLocs; 2159 CCState CCInfo(CallConv, isVarArg, DAG.getMachineFunction(), 2160 getTargetMachine(), ArgLocs, *DAG.getContext()); 2161 2162 // Reserve space for the linkage area on the stack. 2163 CCInfo.AllocateStack(PPCFrameLowering::getLinkageSize(false, false), PtrByteSize); 2164 2165 CCInfo.AnalyzeFormalArguments(Ins, CC_PPC32_SVR4); 2166 2167 for (unsigned i = 0, e = ArgLocs.size(); i != e; ++i) { 2168 CCValAssign &VA = ArgLocs[i]; 2169 2170 // Arguments stored in registers. 2171 if (VA.isRegLoc()) { 2172 const TargetRegisterClass *RC; 2173 EVT ValVT = VA.getValVT(); 2174 2175 switch (ValVT.getSimpleVT().SimpleTy) { 2176 default: 2177 llvm_unreachable("ValVT not supported by formal arguments Lowering"); 2178 case MVT::i1: 2179 case MVT::i32: 2180 RC = &PPC::GPRCRegClass; 2181 break; 2182 case MVT::f32: 2183 RC = &PPC::F4RCRegClass; 2184 break; 2185 case MVT::f64: 2186 if (PPCSubTarget.hasVSX()) 2187 RC = &PPC::VSFRCRegClass; 2188 else 2189 RC = &PPC::F8RCRegClass; 2190 break; 2191 case MVT::v16i8: 2192 case MVT::v8i16: 2193 case MVT::v4i32: 2194 case MVT::v4f32: 2195 RC = &PPC::VRRCRegClass; 2196 break; 2197 case MVT::v2f64: 2198 case MVT::v2i64: 2199 RC = &PPC::VSHRCRegClass; 2200 break; 2201 } 2202 2203 // Transform the arguments stored in physical registers into virtual ones. 2204 unsigned Reg = MF.addLiveIn(VA.getLocReg(), RC); 2205 SDValue ArgValue = DAG.getCopyFromReg(Chain, dl, Reg, 2206 ValVT == MVT::i1 ? MVT::i32 : ValVT); 2207 2208 if (ValVT == MVT::i1) 2209 ArgValue = DAG.getNode(ISD::TRUNCATE, dl, MVT::i1, ArgValue); 2210 2211 InVals.push_back(ArgValue); 2212 } else { 2213 // Argument stored in memory. 2214 assert(VA.isMemLoc()); 2215 2216 unsigned ArgSize = VA.getLocVT().getStoreSize(); 2217 int FI = MFI->CreateFixedObject(ArgSize, VA.getLocMemOffset(), 2218 isImmutable); 2219 2220 // Create load nodes to retrieve arguments from the stack. 2221 SDValue FIN = DAG.getFrameIndex(FI, PtrVT); 2222 InVals.push_back(DAG.getLoad(VA.getValVT(), dl, Chain, FIN, 2223 MachinePointerInfo(), 2224 false, false, false, 0)); 2225 } 2226 } 2227 2228 // Assign locations to all of the incoming aggregate by value arguments. 2229 // Aggregates passed by value are stored in the local variable space of the 2230 // caller's stack frame, right above the parameter list area. 2231 SmallVector<CCValAssign, 16> ByValArgLocs; 2232 CCState CCByValInfo(CallConv, isVarArg, DAG.getMachineFunction(), 2233 getTargetMachine(), ByValArgLocs, *DAG.getContext()); 2234 2235 // Reserve stack space for the allocations in CCInfo. 2236 CCByValInfo.AllocateStack(CCInfo.getNextStackOffset(), PtrByteSize); 2237 2238 CCByValInfo.AnalyzeFormalArguments(Ins, CC_PPC32_SVR4_ByVal); 2239 2240 // Area that is at least reserved in the caller of this function. 2241 unsigned MinReservedArea = CCByValInfo.getNextStackOffset(); 2242 2243 // Set the size that is at least reserved in caller of this function. Tail 2244 // call optimized function's reserved stack space needs to be aligned so that 2245 // taking the difference between two stack areas will result in an aligned 2246 // stack. 2247 PPCFunctionInfo *FI = MF.getInfo<PPCFunctionInfo>(); 2248 2249 MinReservedArea = 2250 std::max(MinReservedArea, 2251 PPCFrameLowering::getMinCallFrameSize(false, false)); 2252 2253 unsigned TargetAlign = DAG.getMachineFunction().getTarget().getFrameLowering()-> 2254 getStackAlignment(); 2255 unsigned AlignMask = TargetAlign-1; 2256 MinReservedArea = (MinReservedArea + AlignMask) & ~AlignMask; 2257 2258 FI->setMinReservedArea(MinReservedArea); 2259 2260 SmallVector<SDValue, 8> MemOps; 2261 2262 // If the function takes variable number of arguments, make a frame index for 2263 // the start of the first vararg value... for expansion of llvm.va_start. 2264 if (isVarArg) { 2265 static const MCPhysReg GPArgRegs[] = { 2266 PPC::R3, PPC::R4, PPC::R5, PPC::R6, 2267 PPC::R7, PPC::R8, PPC::R9, PPC::R10, 2268 }; 2269 const unsigned NumGPArgRegs = array_lengthof(GPArgRegs); 2270 2271 static const MCPhysReg FPArgRegs[] = { 2272 PPC::F1, PPC::F2, PPC::F3, PPC::F4, PPC::F5, PPC::F6, PPC::F7, 2273 PPC::F8 2274 }; 2275 const unsigned NumFPArgRegs = array_lengthof(FPArgRegs); 2276 2277 FuncInfo->setVarArgsNumGPR(CCInfo.getFirstUnallocated(GPArgRegs, 2278 NumGPArgRegs)); 2279 FuncInfo->setVarArgsNumFPR(CCInfo.getFirstUnallocated(FPArgRegs, 2280 NumFPArgRegs)); 2281 2282 // Make room for NumGPArgRegs and NumFPArgRegs. 2283 int Depth = NumGPArgRegs * PtrVT.getSizeInBits()/8 + 2284 NumFPArgRegs * EVT(MVT::f64).getSizeInBits()/8; 2285 2286 FuncInfo->setVarArgsStackOffset( 2287 MFI->CreateFixedObject(PtrVT.getSizeInBits()/8, 2288 CCInfo.getNextStackOffset(), true)); 2289 2290 FuncInfo->setVarArgsFrameIndex(MFI->CreateStackObject(Depth, 8, false)); 2291 SDValue FIN = DAG.getFrameIndex(FuncInfo->getVarArgsFrameIndex(), PtrVT); 2292 2293 // The fixed integer arguments of a variadic function are stored to the 2294 // VarArgsFrameIndex on the stack so that they may be loaded by deferencing 2295 // the result of va_next. 2296 for (unsigned GPRIndex = 0; GPRIndex != NumGPArgRegs; ++GPRIndex) { 2297 // Get an existing live-in vreg, or add a new one. 2298 unsigned VReg = MF.getRegInfo().getLiveInVirtReg(GPArgRegs[GPRIndex]); 2299 if (!VReg) 2300 VReg = MF.addLiveIn(GPArgRegs[GPRIndex], &PPC::GPRCRegClass); 2301 2302 SDValue Val = DAG.getCopyFromReg(Chain, dl, VReg, PtrVT); 2303 SDValue Store = DAG.getStore(Val.getValue(1), dl, Val, FIN, 2304 MachinePointerInfo(), false, false, 0); 2305 MemOps.push_back(Store); 2306 // Increment the address by four for the next argument to store 2307 SDValue PtrOff = DAG.getConstant(PtrVT.getSizeInBits()/8, PtrVT); 2308 FIN = DAG.getNode(ISD::ADD, dl, PtrOff.getValueType(), FIN, PtrOff); 2309 } 2310 2311 // FIXME 32-bit SVR4: We only need to save FP argument registers if CR bit 6 2312 // is set. 2313 // The double arguments are stored to the VarArgsFrameIndex 2314 // on the stack. 2315 for (unsigned FPRIndex = 0; FPRIndex != NumFPArgRegs; ++FPRIndex) { 2316 // Get an existing live-in vreg, or add a new one. 2317 unsigned VReg = MF.getRegInfo().getLiveInVirtReg(FPArgRegs[FPRIndex]); 2318 if (!VReg) 2319 VReg = MF.addLiveIn(FPArgRegs[FPRIndex], &PPC::F8RCRegClass); 2320 2321 SDValue Val = DAG.getCopyFromReg(Chain, dl, VReg, MVT::f64); 2322 SDValue Store = DAG.getStore(Val.getValue(1), dl, Val, FIN, 2323 MachinePointerInfo(), false, false, 0); 2324 MemOps.push_back(Store); 2325 // Increment the address by eight for the next argument to store 2326 SDValue PtrOff = DAG.getConstant(EVT(MVT::f64).getSizeInBits()/8, 2327 PtrVT); 2328 FIN = DAG.getNode(ISD::ADD, dl, PtrOff.getValueType(), FIN, PtrOff); 2329 } 2330 } 2331 2332 if (!MemOps.empty()) 2333 Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, MemOps); 2334 2335 return Chain; 2336 } 2337 2338 // PPC64 passes i8, i16, and i32 values in i64 registers. Promote 2339 // value to MVT::i64 and then truncate to the correct register size. 2340 SDValue 2341 PPCTargetLowering::extendArgForPPC64(ISD::ArgFlagsTy Flags, EVT ObjectVT, 2342 SelectionDAG &DAG, SDValue ArgVal, 2343 SDLoc dl) const { 2344 if (Flags.isSExt()) 2345 ArgVal = DAG.getNode(ISD::AssertSext, dl, MVT::i64, ArgVal, 2346 DAG.getValueType(ObjectVT)); 2347 else if (Flags.isZExt()) 2348 ArgVal = DAG.getNode(ISD::AssertZext, dl, MVT::i64, ArgVal, 2349 DAG.getValueType(ObjectVT)); 2350 2351 return DAG.getNode(ISD::TRUNCATE, dl, ObjectVT, ArgVal); 2352 } 2353 2354 // Set the size that is at least reserved in caller of this function. Tail 2355 // call optimized functions' reserved stack space needs to be aligned so that 2356 // taking the difference between two stack areas will result in an aligned 2357 // stack. 2358 void 2359 PPCTargetLowering::setMinReservedArea(MachineFunction &MF, SelectionDAG &DAG, 2360 unsigned nAltivecParamsAtEnd, 2361 unsigned MinReservedArea, 2362 bool isPPC64) const { 2363 PPCFunctionInfo *FI = MF.getInfo<PPCFunctionInfo>(); 2364 // Add the Altivec parameters at the end, if needed. 2365 if (nAltivecParamsAtEnd) { 2366 MinReservedArea = ((MinReservedArea+15)/16)*16; 2367 MinReservedArea += 16*nAltivecParamsAtEnd; 2368 } 2369 MinReservedArea = 2370 std::max(MinReservedArea, 2371 PPCFrameLowering::getMinCallFrameSize(isPPC64, true)); 2372 unsigned TargetAlign 2373 = DAG.getMachineFunction().getTarget().getFrameLowering()-> 2374 getStackAlignment(); 2375 unsigned AlignMask = TargetAlign-1; 2376 MinReservedArea = (MinReservedArea + AlignMask) & ~AlignMask; 2377 FI->setMinReservedArea(MinReservedArea); 2378 } 2379 2380 SDValue 2381 PPCTargetLowering::LowerFormalArguments_64SVR4( 2382 SDValue Chain, 2383 CallingConv::ID CallConv, bool isVarArg, 2384 const SmallVectorImpl<ISD::InputArg> 2385 &Ins, 2386 SDLoc dl, SelectionDAG &DAG, 2387 SmallVectorImpl<SDValue> &InVals) const { 2388 // TODO: add description of PPC stack frame format, or at least some docs. 2389 // 2390 MachineFunction &MF = DAG.getMachineFunction(); 2391 MachineFrameInfo *MFI = MF.getFrameInfo(); 2392 PPCFunctionInfo *FuncInfo = MF.getInfo<PPCFunctionInfo>(); 2393 2394 EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(); 2395 // Potential tail calls could cause overwriting of argument stack slots. 2396 bool isImmutable = !(getTargetMachine().Options.GuaranteedTailCallOpt && 2397 (CallConv == CallingConv::Fast)); 2398 unsigned PtrByteSize = 8; 2399 2400 unsigned ArgOffset = PPCFrameLowering::getLinkageSize(true, true); 2401 // Area that is at least reserved in caller of this function. 2402 unsigned MinReservedArea = ArgOffset; 2403 2404 static const MCPhysReg GPR[] = { 2405 PPC::X3, PPC::X4, PPC::X5, PPC::X6, 2406 PPC::X7, PPC::X8, PPC::X9, PPC::X10, 2407 }; 2408 2409 static const MCPhysReg *FPR = GetFPR(); 2410 2411 static const MCPhysReg VR[] = { 2412 PPC::V2, PPC::V3, PPC::V4, PPC::V5, PPC::V6, PPC::V7, PPC::V8, 2413 PPC::V9, PPC::V10, PPC::V11, PPC::V12, PPC::V13 2414 }; 2415 static const MCPhysReg VSRH[] = { 2416 PPC::VSH2, PPC::VSH3, PPC::VSH4, PPC::VSH5, PPC::VSH6, PPC::VSH7, PPC::VSH8, 2417 PPC::VSH9, PPC::VSH10, PPC::VSH11, PPC::VSH12, PPC::VSH13 2418 }; 2419 2420 const unsigned Num_GPR_Regs = array_lengthof(GPR); 2421 const unsigned Num_FPR_Regs = 13; 2422 const unsigned Num_VR_Regs = array_lengthof(VR); 2423 2424 unsigned GPR_idx = 0, FPR_idx = 0, VR_idx = 0; 2425 2426 // Add DAG nodes to load the arguments or copy them out of registers. On 2427 // entry to a function on PPC, the arguments start after the linkage area, 2428 // although the first ones are often in registers. 2429 2430 SmallVector<SDValue, 8> MemOps; 2431 unsigned nAltivecParamsAtEnd = 0; 2432 Function::const_arg_iterator FuncArg = MF.getFunction()->arg_begin(); 2433 unsigned CurArgIdx = 0; 2434 for (unsigned ArgNo = 0, e = Ins.size(); ArgNo != e; ++ArgNo) { 2435 SDValue ArgVal; 2436 bool needsLoad = false; 2437 EVT ObjectVT = Ins[ArgNo].VT; 2438 unsigned ObjSize = ObjectVT.getStoreSize(); 2439 unsigned ArgSize = ObjSize; 2440 ISD::ArgFlagsTy Flags = Ins[ArgNo].Flags; 2441 std::advance(FuncArg, Ins[ArgNo].OrigArgIndex - CurArgIdx); 2442 CurArgIdx = Ins[ArgNo].OrigArgIndex; 2443 2444 unsigned CurArgOffset = ArgOffset; 2445 2446 // Varargs or 64 bit Altivec parameters are padded to a 16 byte boundary. 2447 if (ObjectVT==MVT::v4f32 || ObjectVT==MVT::v4i32 || 2448 ObjectVT==MVT::v8i16 || ObjectVT==MVT::v16i8 || 2449 ObjectVT==MVT::v2f64 || ObjectVT==MVT::v2i64) { 2450 if (isVarArg) { 2451 MinReservedArea = ((MinReservedArea+15)/16)*16; 2452 MinReservedArea += CalculateStackSlotSize(ObjectVT, 2453 Flags, 2454 PtrByteSize); 2455 } else 2456 nAltivecParamsAtEnd++; 2457 } else 2458 // Calculate min reserved area. 2459 MinReservedArea += CalculateStackSlotSize(Ins[ArgNo].VT, 2460 Flags, 2461 PtrByteSize); 2462 2463 // FIXME the codegen can be much improved in some cases. 2464 // We do not have to keep everything in memory. 2465 if (Flags.isByVal()) { 2466 // ObjSize is the true size, ArgSize rounded up to multiple of registers. 2467 ObjSize = Flags.getByValSize(); 2468 ArgSize = ((ObjSize + PtrByteSize - 1)/PtrByteSize) * PtrByteSize; 2469 // Empty aggregate parameters do not take up registers. Examples: 2470 // struct { } a; 2471 // union { } b; 2472 // int c[0]; 2473 // etc. However, we have to provide a place-holder in InVals, so 2474 // pretend we have an 8-byte item at the current address for that 2475 // purpose. 2476 if (!ObjSize) { 2477 int FI = MFI->CreateFixedObject(PtrByteSize, ArgOffset, true); 2478 SDValue FIN = DAG.getFrameIndex(FI, PtrVT); 2479 InVals.push_back(FIN); 2480 continue; 2481 } 2482 2483 unsigned BVAlign = Flags.getByValAlign(); 2484 if (BVAlign > 8) { 2485 ArgOffset = ((ArgOffset+BVAlign-1)/BVAlign)*BVAlign; 2486 CurArgOffset = ArgOffset; 2487 } 2488 2489 // All aggregates smaller than 8 bytes must be passed right-justified. 2490 if (ObjSize < PtrByteSize) 2491 CurArgOffset = CurArgOffset + (PtrByteSize - ObjSize); 2492 // The value of the object is its address. 2493 int FI = MFI->CreateFixedObject(ObjSize, CurArgOffset, true); 2494 SDValue FIN = DAG.getFrameIndex(FI, PtrVT); 2495 InVals.push_back(FIN); 2496 2497 if (ObjSize < 8) { 2498 if (GPR_idx != Num_GPR_Regs) { 2499 unsigned VReg = MF.addLiveIn(GPR[GPR_idx], &PPC::G8RCRegClass); 2500 SDValue Val = DAG.getCopyFromReg(Chain, dl, VReg, PtrVT); 2501 SDValue Store; 2502 2503 if (ObjSize==1 || ObjSize==2 || ObjSize==4) { 2504 EVT ObjType = (ObjSize == 1 ? MVT::i8 : 2505 (ObjSize == 2 ? MVT::i16 : MVT::i32)); 2506 Store = DAG.getTruncStore(Val.getValue(1), dl, Val, FIN, 2507 MachinePointerInfo(FuncArg), 2508 ObjType, false, false, 0); 2509 } else { 2510 // For sizes that don't fit a truncating store (3, 5, 6, 7), 2511 // store the whole register as-is to the parameter save area 2512 // slot. The address of the parameter was already calculated 2513 // above (InVals.push_back(FIN)) to be the right-justified 2514 // offset within the slot. For this store, we need a new 2515 // frame index that points at the beginning of the slot. 2516 int FI = MFI->CreateFixedObject(PtrByteSize, ArgOffset, true); 2517 SDValue FIN = DAG.getFrameIndex(FI, PtrVT); 2518 Store = DAG.getStore(Val.getValue(1), dl, Val, FIN, 2519 MachinePointerInfo(FuncArg), 2520 false, false, 0); 2521 } 2522 2523 MemOps.push_back(Store); 2524 ++GPR_idx; 2525 } 2526 // Whether we copied from a register or not, advance the offset 2527 // into the parameter save area by a full doubleword. 2528 ArgOffset += PtrByteSize; 2529 continue; 2530 } 2531 2532 for (unsigned j = 0; j < ArgSize; j += PtrByteSize) { 2533 // Store whatever pieces of the object are in registers 2534 // to memory. ArgOffset will be the address of the beginning 2535 // of the object. 2536 if (GPR_idx != Num_GPR_Regs) { 2537 unsigned VReg; 2538 VReg = MF.addLiveIn(GPR[GPR_idx], &PPC::G8RCRegClass); 2539 int FI = MFI->CreateFixedObject(PtrByteSize, ArgOffset, true); 2540 SDValue FIN = DAG.getFrameIndex(FI, PtrVT); 2541 SDValue Val = DAG.getCopyFromReg(Chain, dl, VReg, PtrVT); 2542 SDValue Store = DAG.getStore(Val.getValue(1), dl, Val, FIN, 2543 MachinePointerInfo(FuncArg, j), 2544 false, false, 0); 2545 MemOps.push_back(Store); 2546 ++GPR_idx; 2547 ArgOffset += PtrByteSize; 2548 } else { 2549 ArgOffset += ArgSize - j; 2550 break; 2551 } 2552 } 2553 continue; 2554 } 2555 2556 switch (ObjectVT.getSimpleVT().SimpleTy) { 2557 default: llvm_unreachable("Unhandled argument type!"); 2558 case MVT::i1: 2559 case MVT::i32: 2560 case MVT::i64: 2561 if (GPR_idx != Num_GPR_Regs) { 2562 unsigned VReg = MF.addLiveIn(GPR[GPR_idx], &PPC::G8RCRegClass); 2563 ArgVal = DAG.getCopyFromReg(Chain, dl, VReg, MVT::i64); 2564 2565 if (ObjectVT == MVT::i32 || ObjectVT == MVT::i1) 2566 // PPC64 passes i8, i16, and i32 values in i64 registers. Promote 2567 // value to MVT::i64 and then truncate to the correct register size. 2568 ArgVal = extendArgForPPC64(Flags, ObjectVT, DAG, ArgVal, dl); 2569 2570 ++GPR_idx; 2571 } else { 2572 needsLoad = true; 2573 ArgSize = PtrByteSize; 2574 } 2575 ArgOffset += 8; 2576 break; 2577 2578 case MVT::f32: 2579 case MVT::f64: 2580 // Every 8 bytes of argument space consumes one of the GPRs available for 2581 // argument passing. 2582 if (GPR_idx != Num_GPR_Regs) { 2583 ++GPR_idx; 2584 } 2585 if (FPR_idx != Num_FPR_Regs) { 2586 unsigned VReg; 2587 2588 if (ObjectVT == MVT::f32) 2589 VReg = MF.addLiveIn(FPR[FPR_idx], &PPC::F4RCRegClass); 2590 else 2591 VReg = MF.addLiveIn(FPR[FPR_idx], PPCSubTarget.hasVSX() ? 2592 &PPC::VSFRCRegClass : 2593 &PPC::F8RCRegClass); 2594 2595 ArgVal = DAG.getCopyFromReg(Chain, dl, VReg, ObjectVT); 2596 ++FPR_idx; 2597 } else { 2598 needsLoad = true; 2599 ArgSize = PtrByteSize; 2600 } 2601 2602 ArgOffset += 8; 2603 break; 2604 case MVT::v4f32: 2605 case MVT::v4i32: 2606 case MVT::v8i16: 2607 case MVT::v16i8: 2608 case MVT::v2f64: 2609 case MVT::v2i64: 2610 // Note that vector arguments in registers don't reserve stack space, 2611 // except in varargs functions. 2612 if (VR_idx != Num_VR_Regs) { 2613 unsigned VReg = (ObjectVT == MVT::v2f64 || ObjectVT == MVT::v2i64) ? 2614 MF.addLiveIn(VSRH[VR_idx], &PPC::VSHRCRegClass) : 2615 MF.addLiveIn(VR[VR_idx], &PPC::VRRCRegClass); 2616 ArgVal = DAG.getCopyFromReg(Chain, dl, VReg, ObjectVT); 2617 if (isVarArg) { 2618 while ((ArgOffset % 16) != 0) { 2619 ArgOffset += PtrByteSize; 2620 if (GPR_idx != Num_GPR_Regs) 2621 GPR_idx++; 2622 } 2623 ArgOffset += 16; 2624 GPR_idx = std::min(GPR_idx+4, Num_GPR_Regs); // FIXME correct for ppc64? 2625 } 2626 ++VR_idx; 2627 } else { 2628 // Vectors are aligned. 2629 ArgOffset = ((ArgOffset+15)/16)*16; 2630 CurArgOffset = ArgOffset; 2631 ArgOffset += 16; 2632 needsLoad = true; 2633 } 2634 break; 2635 } 2636 2637 // We need to load the argument to a virtual register if we determined 2638 // above that we ran out of physical registers of the appropriate type. 2639 if (needsLoad) { 2640 int FI = MFI->CreateFixedObject(ObjSize, 2641 CurArgOffset + (ArgSize - ObjSize), 2642 isImmutable); 2643 SDValue FIN = DAG.getFrameIndex(FI, PtrVT); 2644 ArgVal = DAG.getLoad(ObjectVT, dl, Chain, FIN, MachinePointerInfo(), 2645 false, false, false, 0); 2646 } 2647 2648 InVals.push_back(ArgVal); 2649 } 2650 2651 // Set the size that is at least reserved in caller of this function. Tail 2652 // call optimized functions' reserved stack space needs to be aligned so that 2653 // taking the difference between two stack areas will result in an aligned 2654 // stack. 2655 setMinReservedArea(MF, DAG, nAltivecParamsAtEnd, MinReservedArea, true); 2656 2657 // If the function takes variable number of arguments, make a frame index for 2658 // the start of the first vararg value... for expansion of llvm.va_start. 2659 if (isVarArg) { 2660 int Depth = ArgOffset; 2661 2662 FuncInfo->setVarArgsFrameIndex( 2663 MFI->CreateFixedObject(PtrByteSize, Depth, true)); 2664 SDValue FIN = DAG.getFrameIndex(FuncInfo->getVarArgsFrameIndex(), PtrVT); 2665 2666 // If this function is vararg, store any remaining integer argument regs 2667 // to their spots on the stack so that they may be loaded by deferencing the 2668 // result of va_next. 2669 for (; GPR_idx != Num_GPR_Regs; ++GPR_idx) { 2670 unsigned VReg = MF.addLiveIn(GPR[GPR_idx], &PPC::G8RCRegClass); 2671 SDValue Val = DAG.getCopyFromReg(Chain, dl, VReg, PtrVT); 2672 SDValue Store = DAG.getStore(Val.getValue(1), dl, Val, FIN, 2673 MachinePointerInfo(), false, false, 0); 2674 MemOps.push_back(Store); 2675 // Increment the address by four for the next argument to store 2676 SDValue PtrOff = DAG.getConstant(PtrByteSize, PtrVT); 2677 FIN = DAG.getNode(ISD::ADD, dl, PtrOff.getValueType(), FIN, PtrOff); 2678 } 2679 } 2680 2681 if (!MemOps.empty()) 2682 Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, MemOps); 2683 2684 return Chain; 2685 } 2686 2687 SDValue 2688 PPCTargetLowering::LowerFormalArguments_Darwin( 2689 SDValue Chain, 2690 CallingConv::ID CallConv, bool isVarArg, 2691 const SmallVectorImpl<ISD::InputArg> 2692 &Ins, 2693 SDLoc dl, SelectionDAG &DAG, 2694 SmallVectorImpl<SDValue> &InVals) const { 2695 // TODO: add description of PPC stack frame format, or at least some docs. 2696 // 2697 MachineFunction &MF = DAG.getMachineFunction(); 2698 MachineFrameInfo *MFI = MF.getFrameInfo(); 2699 PPCFunctionInfo *FuncInfo = MF.getInfo<PPCFunctionInfo>(); 2700 2701 EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(); 2702 bool isPPC64 = PtrVT == MVT::i64; 2703 // Potential tail calls could cause overwriting of argument stack slots. 2704 bool isImmutable = !(getTargetMachine().Options.GuaranteedTailCallOpt && 2705 (CallConv == CallingConv::Fast)); 2706 unsigned PtrByteSize = isPPC64 ? 8 : 4; 2707 2708 unsigned ArgOffset = PPCFrameLowering::getLinkageSize(isPPC64, true); 2709 // Area that is at least reserved in caller of this function. 2710 unsigned MinReservedArea = ArgOffset; 2711 2712 static const MCPhysReg GPR_32[] = { // 32-bit registers. 2713 PPC::R3, PPC::R4, PPC::R5, PPC::R6, 2714 PPC::R7, PPC::R8, PPC::R9, PPC::R10, 2715 }; 2716 static const MCPhysReg GPR_64[] = { // 64-bit registers. 2717 PPC::X3, PPC::X4, PPC::X5, PPC::X6, 2718 PPC::X7, PPC::X8, PPC::X9, PPC::X10, 2719 }; 2720 2721 static const MCPhysReg *FPR = GetFPR(); 2722 2723 static const MCPhysReg VR[] = { 2724 PPC::V2, PPC::V3, PPC::V4, PPC::V5, PPC::V6, PPC::V7, PPC::V8, 2725 PPC::V9, PPC::V10, PPC::V11, PPC::V12, PPC::V13 2726 }; 2727 2728 const unsigned Num_GPR_Regs = array_lengthof(GPR_32); 2729 const unsigned Num_FPR_Regs = 13; 2730 const unsigned Num_VR_Regs = array_lengthof( VR); 2731 2732 unsigned GPR_idx = 0, FPR_idx = 0, VR_idx = 0; 2733 2734 const MCPhysReg *GPR = isPPC64 ? GPR_64 : GPR_32; 2735 2736 // In 32-bit non-varargs functions, the stack space for vectors is after the 2737 // stack space for non-vectors. We do not use this space unless we have 2738 // too many vectors to fit in registers, something that only occurs in 2739 // constructed examples:), but we have to walk the arglist to figure 2740 // that out...for the pathological case, compute VecArgOffset as the 2741 // start of the vector parameter area. Computing VecArgOffset is the 2742 // entire point of the following loop. 2743 unsigned VecArgOffset = ArgOffset; 2744 if (!isVarArg && !isPPC64) { 2745 for (unsigned ArgNo = 0, e = Ins.size(); ArgNo != e; 2746 ++ArgNo) { 2747 EVT ObjectVT = Ins[ArgNo].VT; 2748 ISD::ArgFlagsTy Flags = Ins[ArgNo].Flags; 2749 2750 if (Flags.isByVal()) { 2751 // ObjSize is the true size, ArgSize rounded up to multiple of regs. 2752 unsigned ObjSize = Flags.getByValSize(); 2753 unsigned ArgSize = 2754 ((ObjSize + PtrByteSize - 1)/PtrByteSize) * PtrByteSize; 2755 VecArgOffset += ArgSize; 2756 continue; 2757 } 2758 2759 switch(ObjectVT.getSimpleVT().SimpleTy) { 2760 default: llvm_unreachable("Unhandled argument type!"); 2761 case MVT::i1: 2762 case MVT::i32: 2763 case MVT::f32: 2764 VecArgOffset += 4; 2765 break; 2766 case MVT::i64: // PPC64 2767 case MVT::f64: 2768 // FIXME: We are guaranteed to be !isPPC64 at this point. 2769 // Does MVT::i64 apply? 2770 VecArgOffset += 8; 2771 break; 2772 case MVT::v4f32: 2773 case MVT::v4i32: 2774 case MVT::v8i16: 2775 case MVT::v16i8: 2776 // Nothing to do, we're only looking at Nonvector args here. 2777 break; 2778 } 2779 } 2780 } 2781 // We've found where the vector parameter area in memory is. Skip the 2782 // first 12 parameters; these don't use that memory. 2783 VecArgOffset = ((VecArgOffset+15)/16)*16; 2784 VecArgOffset += 12*16; 2785 2786 // Add DAG nodes to load the arguments or copy them out of registers. On 2787 // entry to a function on PPC, the arguments start after the linkage area, 2788 // although the first ones are often in registers. 2789 2790 SmallVector<SDValue, 8> MemOps; 2791 unsigned nAltivecParamsAtEnd = 0; 2792 Function::const_arg_iterator FuncArg = MF.getFunction()->arg_begin(); 2793 unsigned CurArgIdx = 0; 2794 for (unsigned ArgNo = 0, e = Ins.size(); ArgNo != e; ++ArgNo) { 2795 SDValue ArgVal; 2796 bool needsLoad = false; 2797 EVT ObjectVT = Ins[ArgNo].VT; 2798 unsigned ObjSize = ObjectVT.getSizeInBits()/8; 2799 unsigned ArgSize = ObjSize; 2800 ISD::ArgFlagsTy Flags = Ins[ArgNo].Flags; 2801 std::advance(FuncArg, Ins[ArgNo].OrigArgIndex - CurArgIdx); 2802 CurArgIdx = Ins[ArgNo].OrigArgIndex; 2803 2804 unsigned CurArgOffset = ArgOffset; 2805 2806 // Varargs or 64 bit Altivec parameters are padded to a 16 byte boundary. 2807 if (ObjectVT==MVT::v4f32 || ObjectVT==MVT::v4i32 || 2808 ObjectVT==MVT::v8i16 || ObjectVT==MVT::v16i8) { 2809 if (isVarArg || isPPC64) { 2810 MinReservedArea = ((MinReservedArea+15)/16)*16; 2811 MinReservedArea += CalculateStackSlotSize(ObjectVT, 2812 Flags, 2813 PtrByteSize); 2814 } else nAltivecParamsAtEnd++; 2815 } else 2816 // Calculate min reserved area. 2817 MinReservedArea += CalculateStackSlotSize(Ins[ArgNo].VT, 2818 Flags, 2819 PtrByteSize); 2820 2821 // FIXME the codegen can be much improved in some cases. 2822 // We do not have to keep everything in memory. 2823 if (Flags.isByVal()) { 2824 // ObjSize is the true size, ArgSize rounded up to multiple of registers. 2825 ObjSize = Flags.getByValSize(); 2826 ArgSize = ((ObjSize + PtrByteSize - 1)/PtrByteSize) * PtrByteSize; 2827 // Objects of size 1 and 2 are right justified, everything else is 2828 // left justified. This means the memory address is adjusted forwards. 2829 if (ObjSize==1 || ObjSize==2) { 2830 CurArgOffset = CurArgOffset + (4 - ObjSize); 2831 } 2832 // The value of the object is its address. 2833 int FI = MFI->CreateFixedObject(ObjSize, CurArgOffset, true); 2834 SDValue FIN = DAG.getFrameIndex(FI, PtrVT); 2835 InVals.push_back(FIN); 2836 if (ObjSize==1 || ObjSize==2) { 2837 if (GPR_idx != Num_GPR_Regs) { 2838 unsigned VReg; 2839 if (isPPC64) 2840 VReg = MF.addLiveIn(GPR[GPR_idx], &PPC::G8RCRegClass); 2841 else 2842 VReg = MF.addLiveIn(GPR[GPR_idx], &PPC::GPRCRegClass); 2843 SDValue Val = DAG.getCopyFromReg(Chain, dl, VReg, PtrVT); 2844 EVT ObjType = ObjSize == 1 ? MVT::i8 : MVT::i16; 2845 SDValue Store = DAG.getTruncStore(Val.getValue(1), dl, Val, FIN, 2846 MachinePointerInfo(FuncArg), 2847 ObjType, false, false, 0); 2848 MemOps.push_back(Store); 2849 ++GPR_idx; 2850 } 2851 2852 ArgOffset += PtrByteSize; 2853 2854 continue; 2855 } 2856 for (unsigned j = 0; j < ArgSize; j += PtrByteSize) { 2857 // Store whatever pieces of the object are in registers 2858 // to memory. ArgOffset will be the address of the beginning 2859 // of the object. 2860 if (GPR_idx != Num_GPR_Regs) { 2861 unsigned VReg; 2862 if (isPPC64) 2863 VReg = MF.addLiveIn(GPR[GPR_idx], &PPC::G8RCRegClass); 2864 else 2865 VReg = MF.addLiveIn(GPR[GPR_idx], &PPC::GPRCRegClass); 2866 int FI = MFI->CreateFixedObject(PtrByteSize, ArgOffset, true); 2867 SDValue FIN = DAG.getFrameIndex(FI, PtrVT); 2868 SDValue Val = DAG.getCopyFromReg(Chain, dl, VReg, PtrVT); 2869 SDValue Store = DAG.getStore(Val.getValue(1), dl, Val, FIN, 2870 MachinePointerInfo(FuncArg, j), 2871 false, false, 0); 2872 MemOps.push_back(Store); 2873 ++GPR_idx; 2874 ArgOffset += PtrByteSize; 2875 } else { 2876 ArgOffset += ArgSize - (ArgOffset-CurArgOffset); 2877 break; 2878 } 2879 } 2880 continue; 2881 } 2882 2883 switch (ObjectVT.getSimpleVT().SimpleTy) { 2884 default: llvm_unreachable("Unhandled argument type!"); 2885 case MVT::i1: 2886 case MVT::i32: 2887 if (!isPPC64) { 2888 if (GPR_idx != Num_GPR_Regs) { 2889 unsigned VReg = MF.addLiveIn(GPR[GPR_idx], &PPC::GPRCRegClass); 2890 ArgVal = DAG.getCopyFromReg(Chain, dl, VReg, MVT::i32); 2891 2892 if (ObjectVT == MVT::i1) 2893 ArgVal = DAG.getNode(ISD::TRUNCATE, dl, MVT::i1, ArgVal); 2894 2895 ++GPR_idx; 2896 } else { 2897 needsLoad = true; 2898 ArgSize = PtrByteSize; 2899 } 2900 // All int arguments reserve stack space in the Darwin ABI. 2901 ArgOffset += PtrByteSize; 2902 break; 2903 } 2904 // FALLTHROUGH 2905 case MVT::i64: // PPC64 2906 if (GPR_idx != Num_GPR_Regs) { 2907 unsigned VReg = MF.addLiveIn(GPR[GPR_idx], &PPC::G8RCRegClass); 2908 ArgVal = DAG.getCopyFromReg(Chain, dl, VReg, MVT::i64); 2909 2910 if (ObjectVT == MVT::i32 || ObjectVT == MVT::i1) 2911 // PPC64 passes i8, i16, and i32 values in i64 registers. Promote 2912 // value to MVT::i64 and then truncate to the correct register size. 2913 ArgVal = extendArgForPPC64(Flags, ObjectVT, DAG, ArgVal, dl); 2914 2915 ++GPR_idx; 2916 } else { 2917 needsLoad = true; 2918 ArgSize = PtrByteSize; 2919 } 2920 // All int arguments reserve stack space in the Darwin ABI. 2921 ArgOffset += 8; 2922 break; 2923 2924 case MVT::f32: 2925 case MVT::f64: 2926 // Every 4 bytes of argument space consumes one of the GPRs available for 2927 // argument passing. 2928 if (GPR_idx != Num_GPR_Regs) { 2929 ++GPR_idx; 2930 if (ObjSize == 8 && GPR_idx != Num_GPR_Regs && !isPPC64) 2931 ++GPR_idx; 2932 } 2933 if (FPR_idx != Num_FPR_Regs) { 2934 unsigned VReg; 2935 2936 if (ObjectVT == MVT::f32) 2937 VReg = MF.addLiveIn(FPR[FPR_idx], &PPC::F4RCRegClass); 2938 else 2939 VReg = MF.addLiveIn(FPR[FPR_idx], &PPC::F8RCRegClass); 2940 2941 ArgVal = DAG.getCopyFromReg(Chain, dl, VReg, ObjectVT); 2942 ++FPR_idx; 2943 } else { 2944 needsLoad = true; 2945 } 2946 2947 // All FP arguments reserve stack space in the Darwin ABI. 2948 ArgOffset += isPPC64 ? 8 : ObjSize; 2949 break; 2950 case MVT::v4f32: 2951 case MVT::v4i32: 2952 case MVT::v8i16: 2953 case MVT::v16i8: 2954 // Note that vector arguments in registers don't reserve stack space, 2955 // except in varargs functions. 2956 if (VR_idx != Num_VR_Regs) { 2957 unsigned VReg = MF.addLiveIn(VR[VR_idx], &PPC::VRRCRegClass); 2958 ArgVal = DAG.getCopyFromReg(Chain, dl, VReg, ObjectVT); 2959 if (isVarArg) { 2960 while ((ArgOffset % 16) != 0) { 2961 ArgOffset += PtrByteSize; 2962 if (GPR_idx != Num_GPR_Regs) 2963 GPR_idx++; 2964 } 2965 ArgOffset += 16; 2966 GPR_idx = std::min(GPR_idx+4, Num_GPR_Regs); // FIXME correct for ppc64? 2967 } 2968 ++VR_idx; 2969 } else { 2970 if (!isVarArg && !isPPC64) { 2971 // Vectors go after all the nonvectors. 2972 CurArgOffset = VecArgOffset; 2973 VecArgOffset += 16; 2974 } else { 2975 // Vectors are aligned. 2976 ArgOffset = ((ArgOffset+15)/16)*16; 2977 CurArgOffset = ArgOffset; 2978 ArgOffset += 16; 2979 } 2980 needsLoad = true; 2981 } 2982 break; 2983 } 2984 2985 // We need to load the argument to a virtual register if we determined above 2986 // that we ran out of physical registers of the appropriate type. 2987 if (needsLoad) { 2988 int FI = MFI->CreateFixedObject(ObjSize, 2989 CurArgOffset + (ArgSize - ObjSize), 2990 isImmutable); 2991 SDValue FIN = DAG.getFrameIndex(FI, PtrVT); 2992 ArgVal = DAG.getLoad(ObjectVT, dl, Chain, FIN, MachinePointerInfo(), 2993 false, false, false, 0); 2994 } 2995 2996 InVals.push_back(ArgVal); 2997 } 2998 2999 // Set the size that is at least reserved in caller of this function. Tail 3000 // call optimized functions' reserved stack space needs to be aligned so that 3001 // taking the difference between two stack areas will result in an aligned 3002 // stack. 3003 setMinReservedArea(MF, DAG, nAltivecParamsAtEnd, MinReservedArea, isPPC64); 3004 3005 // If the function takes variable number of arguments, make a frame index for 3006 // the start of the first vararg value... for expansion of llvm.va_start. 3007 if (isVarArg) { 3008 int Depth = ArgOffset; 3009 3010 FuncInfo->setVarArgsFrameIndex( 3011 MFI->CreateFixedObject(PtrVT.getSizeInBits()/8, 3012 Depth, true)); 3013 SDValue FIN = DAG.getFrameIndex(FuncInfo->getVarArgsFrameIndex(), PtrVT); 3014 3015 // If this function is vararg, store any remaining integer argument regs 3016 // to their spots on the stack so that they may be loaded by deferencing the 3017 // result of va_next. 3018 for (; GPR_idx != Num_GPR_Regs; ++GPR_idx) { 3019 unsigned VReg; 3020 3021 if (isPPC64) 3022 VReg = MF.addLiveIn(GPR[GPR_idx], &PPC::G8RCRegClass); 3023 else 3024 VReg = MF.addLiveIn(GPR[GPR_idx], &PPC::GPRCRegClass); 3025 3026 SDValue Val = DAG.getCopyFromReg(Chain, dl, VReg, PtrVT); 3027 SDValue Store = DAG.getStore(Val.getValue(1), dl, Val, FIN, 3028 MachinePointerInfo(), false, false, 0); 3029 MemOps.push_back(Store); 3030 // Increment the address by four for the next argument to store 3031 SDValue PtrOff = DAG.getConstant(PtrVT.getSizeInBits()/8, PtrVT); 3032 FIN = DAG.getNode(ISD::ADD, dl, PtrOff.getValueType(), FIN, PtrOff); 3033 } 3034 } 3035 3036 if (!MemOps.empty()) 3037 Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, MemOps); 3038 3039 return Chain; 3040 } 3041 3042 /// CalculateParameterAndLinkageAreaSize - Get the size of the parameter plus 3043 /// linkage area for the Darwin ABI, or the 64-bit SVR4 ABI. 3044 static unsigned 3045 CalculateParameterAndLinkageAreaSize(SelectionDAG &DAG, 3046 bool isPPC64, 3047 bool isVarArg, 3048 unsigned CC, 3049 const SmallVectorImpl<ISD::OutputArg> 3050 &Outs, 3051 const SmallVectorImpl<SDValue> &OutVals, 3052 unsigned &nAltivecParamsAtEnd) { 3053 // Count how many bytes are to be pushed on the stack, including the linkage 3054 // area, and parameter passing area. We start with 24/48 bytes, which is 3055 // prereserved space for [SP][CR][LR][3 x unused]. 3056 unsigned NumBytes = PPCFrameLowering::getLinkageSize(isPPC64, true); 3057 unsigned NumOps = Outs.size(); 3058 unsigned PtrByteSize = isPPC64 ? 8 : 4; 3059 3060 // Add up all the space actually used. 3061 // In 32-bit non-varargs calls, Altivec parameters all go at the end; usually 3062 // they all go in registers, but we must reserve stack space for them for 3063 // possible use by the caller. In varargs or 64-bit calls, parameters are 3064 // assigned stack space in order, with padding so Altivec parameters are 3065 // 16-byte aligned. 3066 nAltivecParamsAtEnd = 0; 3067 for (unsigned i = 0; i != NumOps; ++i) { 3068 ISD::ArgFlagsTy Flags = Outs[i].Flags; 3069 EVT ArgVT = Outs[i].VT; 3070 // Varargs Altivec parameters are padded to a 16 byte boundary. 3071 if (ArgVT==MVT::v4f32 || ArgVT==MVT::v4i32 || 3072 ArgVT==MVT::v8i16 || ArgVT==MVT::v16i8 || 3073 ArgVT==MVT::v2f64 || ArgVT==MVT::v2i64) { 3074 if (!isVarArg && !isPPC64) { 3075 // Non-varargs Altivec parameters go after all the non-Altivec 3076 // parameters; handle those later so we know how much padding we need. 3077 nAltivecParamsAtEnd++; 3078 continue; 3079 } 3080 // Varargs and 64-bit Altivec parameters are padded to 16 byte boundary. 3081 NumBytes = ((NumBytes+15)/16)*16; 3082 } 3083 NumBytes += CalculateStackSlotSize(ArgVT, Flags, PtrByteSize); 3084 } 3085 3086 // Allow for Altivec parameters at the end, if needed. 3087 if (nAltivecParamsAtEnd) { 3088 NumBytes = ((NumBytes+15)/16)*16; 3089 NumBytes += 16*nAltivecParamsAtEnd; 3090 } 3091 3092 // The prolog code of the callee may store up to 8 GPR argument registers to 3093 // the stack, allowing va_start to index over them in memory if its varargs. 3094 // Because we cannot tell if this is needed on the caller side, we have to 3095 // conservatively assume that it is needed. As such, make sure we have at 3096 // least enough stack space for the caller to store the 8 GPRs. 3097 NumBytes = std::max(NumBytes, 3098 PPCFrameLowering::getMinCallFrameSize(isPPC64, true)); 3099 3100 // Tail call needs the stack to be aligned. 3101 if (CC == CallingConv::Fast && DAG.getTarget().Options.GuaranteedTailCallOpt){ 3102 unsigned TargetAlign = DAG.getMachineFunction().getTarget(). 3103 getFrameLowering()->getStackAlignment(); 3104 unsigned AlignMask = TargetAlign-1; 3105 NumBytes = (NumBytes + AlignMask) & ~AlignMask; 3106 } 3107 3108 return NumBytes; 3109 } 3110 3111 /// CalculateTailCallSPDiff - Get the amount the stack pointer has to be 3112 /// adjusted to accommodate the arguments for the tailcall. 3113 static int CalculateTailCallSPDiff(SelectionDAG& DAG, bool isTailCall, 3114 unsigned ParamSize) { 3115 3116 if (!isTailCall) return 0; 3117 3118 PPCFunctionInfo *FI = DAG.getMachineFunction().getInfo<PPCFunctionInfo>(); 3119 unsigned CallerMinReservedArea = FI->getMinReservedArea(); 3120 int SPDiff = (int)CallerMinReservedArea - (int)ParamSize; 3121 // Remember only if the new adjustement is bigger. 3122 if (SPDiff < FI->getTailCallSPDelta()) 3123 FI->setTailCallSPDelta(SPDiff); 3124 3125 return SPDiff; 3126 } 3127 3128 /// IsEligibleForTailCallOptimization - Check whether the call is eligible 3129 /// for tail call optimization. Targets which want to do tail call 3130 /// optimization should implement this function. 3131 bool 3132 PPCTargetLowering::IsEligibleForTailCallOptimization(SDValue Callee, 3133 CallingConv::ID CalleeCC, 3134 bool isVarArg, 3135 const SmallVectorImpl<ISD::InputArg> &Ins, 3136 SelectionDAG& DAG) const { 3137 if (!getTargetMachine().Options.GuaranteedTailCallOpt) 3138 return false; 3139 3140 // Variable argument functions are not supported. 3141 if (isVarArg) 3142 return false; 3143 3144 MachineFunction &MF = DAG.getMachineFunction(); 3145 CallingConv::ID CallerCC = MF.getFunction()->getCallingConv(); 3146 if (CalleeCC == CallingConv::Fast && CallerCC == CalleeCC) { 3147 // Functions containing by val parameters are not supported. 3148 for (unsigned i = 0; i != Ins.size(); i++) { 3149 ISD::ArgFlagsTy Flags = Ins[i].Flags; 3150 if (Flags.isByVal()) return false; 3151 } 3152 3153 // Non-PIC/GOT tail calls are supported. 3154 if (getTargetMachine().getRelocationModel() != Reloc::PIC_) 3155 return true; 3156 3157 // At the moment we can only do local tail calls (in same module, hidden 3158 // or protected) if we are generating PIC. 3159 if (GlobalAddressSDNode *G = dyn_cast<GlobalAddressSDNode>(Callee)) 3160 return G->getGlobal()->hasHiddenVisibility() 3161 || G->getGlobal()->hasProtectedVisibility(); 3162 } 3163 3164 return false; 3165 } 3166 3167 /// isCallCompatibleAddress - Return the immediate to use if the specified 3168 /// 32-bit value is representable in the immediate field of a BxA instruction. 3169 static SDNode *isBLACompatibleAddress(SDValue Op, SelectionDAG &DAG) { 3170 ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op); 3171 if (!C) return nullptr; 3172 3173 int Addr = C->getZExtValue(); 3174 if ((Addr & 3) != 0 || // Low 2 bits are implicitly zero. 3175 SignExtend32<26>(Addr) != Addr) 3176 return nullptr; // Top 6 bits have to be sext of immediate. 3177 3178 return DAG.getConstant((int)C->getZExtValue() >> 2, 3179 DAG.getTargetLoweringInfo().getPointerTy()).getNode(); 3180 } 3181 3182 namespace { 3183 3184 struct TailCallArgumentInfo { 3185 SDValue Arg; 3186 SDValue FrameIdxOp; 3187 int FrameIdx; 3188 3189 TailCallArgumentInfo() : FrameIdx(0) {} 3190 }; 3191 3192 } 3193 3194 /// StoreTailCallArgumentsToStackSlot - Stores arguments to their stack slot. 3195 static void 3196 StoreTailCallArgumentsToStackSlot(SelectionDAG &DAG, 3197 SDValue Chain, 3198 const SmallVectorImpl<TailCallArgumentInfo> &TailCallArgs, 3199 SmallVectorImpl<SDValue> &MemOpChains, 3200 SDLoc dl) { 3201 for (unsigned i = 0, e = TailCallArgs.size(); i != e; ++i) { 3202 SDValue Arg = TailCallArgs[i].Arg; 3203 SDValue FIN = TailCallArgs[i].FrameIdxOp; 3204 int FI = TailCallArgs[i].FrameIdx; 3205 // Store relative to framepointer. 3206 MemOpChains.push_back(DAG.getStore(Chain, dl, Arg, FIN, 3207 MachinePointerInfo::getFixedStack(FI), 3208 false, false, 0)); 3209 } 3210 } 3211 3212 /// EmitTailCallStoreFPAndRetAddr - Move the frame pointer and return address to 3213 /// the appropriate stack slot for the tail call optimized function call. 3214 static SDValue EmitTailCallStoreFPAndRetAddr(SelectionDAG &DAG, 3215 MachineFunction &MF, 3216 SDValue Chain, 3217 SDValue OldRetAddr, 3218 SDValue OldFP, 3219 int SPDiff, 3220 bool isPPC64, 3221 bool isDarwinABI, 3222 SDLoc dl) { 3223 if (SPDiff) { 3224 // Calculate the new stack slot for the return address. 3225 int SlotSize = isPPC64 ? 8 : 4; 3226 int NewRetAddrLoc = SPDiff + PPCFrameLowering::getReturnSaveOffset(isPPC64, 3227 isDarwinABI); 3228 int NewRetAddr = MF.getFrameInfo()->CreateFixedObject(SlotSize, 3229 NewRetAddrLoc, true); 3230 EVT VT = isPPC64 ? MVT::i64 : MVT::i32; 3231 SDValue NewRetAddrFrIdx = DAG.getFrameIndex(NewRetAddr, VT); 3232 Chain = DAG.getStore(Chain, dl, OldRetAddr, NewRetAddrFrIdx, 3233 MachinePointerInfo::getFixedStack(NewRetAddr), 3234 false, false, 0); 3235 3236 // When using the 32/64-bit SVR4 ABI there is no need to move the FP stack 3237 // slot as the FP is never overwritten. 3238 if (isDarwinABI) { 3239 int NewFPLoc = 3240 SPDiff + PPCFrameLowering::getFramePointerSaveOffset(isPPC64, isDarwinABI); 3241 int NewFPIdx = MF.getFrameInfo()->CreateFixedObject(SlotSize, NewFPLoc, 3242 true); 3243 SDValue NewFramePtrIdx = DAG.getFrameIndex(NewFPIdx, VT); 3244 Chain = DAG.getStore(Chain, dl, OldFP, NewFramePtrIdx, 3245 MachinePointerInfo::getFixedStack(NewFPIdx), 3246 false, false, 0); 3247 } 3248 } 3249 return Chain; 3250 } 3251 3252 /// CalculateTailCallArgDest - Remember Argument for later processing. Calculate 3253 /// the position of the argument. 3254 static void 3255 CalculateTailCallArgDest(SelectionDAG &DAG, MachineFunction &MF, bool isPPC64, 3256 SDValue Arg, int SPDiff, unsigned ArgOffset, 3257 SmallVectorImpl<TailCallArgumentInfo>& TailCallArguments) { 3258 int Offset = ArgOffset + SPDiff; 3259 uint32_t OpSize = (Arg.getValueType().getSizeInBits()+7)/8; 3260 int FI = MF.getFrameInfo()->CreateFixedObject(OpSize, Offset, true); 3261 EVT VT = isPPC64 ? MVT::i64 : MVT::i32; 3262 SDValue FIN = DAG.getFrameIndex(FI, VT); 3263 TailCallArgumentInfo Info; 3264 Info.Arg = Arg; 3265 Info.FrameIdxOp = FIN; 3266 Info.FrameIdx = FI; 3267 TailCallArguments.push_back(Info); 3268 } 3269 3270 /// EmitTCFPAndRetAddrLoad - Emit load from frame pointer and return address 3271 /// stack slot. Returns the chain as result and the loaded frame pointers in 3272 /// LROpOut/FPOpout. Used when tail calling. 3273 SDValue PPCTargetLowering::EmitTailCallLoadFPAndRetAddr(SelectionDAG & DAG, 3274 int SPDiff, 3275 SDValue Chain, 3276 SDValue &LROpOut, 3277 SDValue &FPOpOut, 3278 bool isDarwinABI, 3279 SDLoc dl) const { 3280 if (SPDiff) { 3281 // Load the LR and FP stack slot for later adjusting. 3282 EVT VT = PPCSubTarget.isPPC64() ? MVT::i64 : MVT::i32; 3283 LROpOut = getReturnAddrFrameIndex(DAG); 3284 LROpOut = DAG.getLoad(VT, dl, Chain, LROpOut, MachinePointerInfo(), 3285 false, false, false, 0); 3286 Chain = SDValue(LROpOut.getNode(), 1); 3287 3288 // When using the 32/64-bit SVR4 ABI there is no need to load the FP stack 3289 // slot as the FP is never overwritten. 3290 if (isDarwinABI) { 3291 FPOpOut = getFramePointerFrameIndex(DAG); 3292 FPOpOut = DAG.getLoad(VT, dl, Chain, FPOpOut, MachinePointerInfo(), 3293 false, false, false, 0); 3294 Chain = SDValue(FPOpOut.getNode(), 1); 3295 } 3296 } 3297 return Chain; 3298 } 3299 3300 /// CreateCopyOfByValArgument - Make a copy of an aggregate at address specified 3301 /// by "Src" to address "Dst" of size "Size". Alignment information is 3302 /// specified by the specific parameter attribute. The copy will be passed as 3303 /// a byval function parameter. 3304 /// Sometimes what we are copying is the end of a larger object, the part that 3305 /// does not fit in registers. 3306 static SDValue 3307 CreateCopyOfByValArgument(SDValue Src, SDValue Dst, SDValue Chain, 3308 ISD::ArgFlagsTy Flags, SelectionDAG &DAG, 3309 SDLoc dl) { 3310 SDValue SizeNode = DAG.getConstant(Flags.getByValSize(), MVT::i32); 3311 return DAG.getMemcpy(Chain, dl, Dst, Src, SizeNode, Flags.getByValAlign(), 3312 false, false, MachinePointerInfo(), 3313 MachinePointerInfo()); 3314 } 3315 3316 /// LowerMemOpCallTo - Store the argument to the stack or remember it in case of 3317 /// tail calls. 3318 static void 3319 LowerMemOpCallTo(SelectionDAG &DAG, MachineFunction &MF, SDValue Chain, 3320 SDValue Arg, SDValue PtrOff, int SPDiff, 3321 unsigned ArgOffset, bool isPPC64, bool isTailCall, 3322 bool isVector, SmallVectorImpl<SDValue> &MemOpChains, 3323 SmallVectorImpl<TailCallArgumentInfo> &TailCallArguments, 3324 SDLoc dl) { 3325 EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(); 3326 if (!isTailCall) { 3327 if (isVector) { 3328 SDValue StackPtr; 3329 if (isPPC64) 3330 StackPtr = DAG.getRegister(PPC::X1, MVT::i64); 3331 else 3332 StackPtr = DAG.getRegister(PPC::R1, MVT::i32); 3333 PtrOff = DAG.getNode(ISD::ADD, dl, PtrVT, StackPtr, 3334 DAG.getConstant(ArgOffset, PtrVT)); 3335 } 3336 MemOpChains.push_back(DAG.getStore(Chain, dl, Arg, PtrOff, 3337 MachinePointerInfo(), false, false, 0)); 3338 // Calculate and remember argument location. 3339 } else CalculateTailCallArgDest(DAG, MF, isPPC64, Arg, SPDiff, ArgOffset, 3340 TailCallArguments); 3341 } 3342 3343 static 3344 void PrepareTailCall(SelectionDAG &DAG, SDValue &InFlag, SDValue &Chain, 3345 SDLoc dl, bool isPPC64, int SPDiff, unsigned NumBytes, 3346 SDValue LROp, SDValue FPOp, bool isDarwinABI, 3347 SmallVectorImpl<TailCallArgumentInfo> &TailCallArguments) { 3348 MachineFunction &MF = DAG.getMachineFunction(); 3349 3350 // Emit a sequence of copyto/copyfrom virtual registers for arguments that 3351 // might overwrite each other in case of tail call optimization. 3352 SmallVector<SDValue, 8> MemOpChains2; 3353 // Do not flag preceding copytoreg stuff together with the following stuff. 3354 InFlag = SDValue(); 3355 StoreTailCallArgumentsToStackSlot(DAG, Chain, TailCallArguments, 3356 MemOpChains2, dl); 3357 if (!MemOpChains2.empty()) 3358 Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, MemOpChains2); 3359 3360 // Store the return address to the appropriate stack slot. 3361 Chain = EmitTailCallStoreFPAndRetAddr(DAG, MF, Chain, LROp, FPOp, SPDiff, 3362 isPPC64, isDarwinABI, dl); 3363 3364 // Emit callseq_end just before tailcall node. 3365 Chain = DAG.getCALLSEQ_END(Chain, DAG.getIntPtrConstant(NumBytes, true), 3366 DAG.getIntPtrConstant(0, true), InFlag, dl); 3367 InFlag = Chain.getValue(1); 3368 } 3369 3370 static 3371 unsigned PrepareCall(SelectionDAG &DAG, SDValue &Callee, SDValue &InFlag, 3372 SDValue &Chain, SDLoc dl, int SPDiff, bool isTailCall, 3373 SmallVectorImpl<std::pair<unsigned, SDValue> > &RegsToPass, 3374 SmallVectorImpl<SDValue> &Ops, std::vector<EVT> &NodeTys, 3375 const PPCSubtarget &PPCSubTarget) { 3376 3377 bool isPPC64 = PPCSubTarget.isPPC64(); 3378 bool isSVR4ABI = PPCSubTarget.isSVR4ABI(); 3379 3380 EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(); 3381 NodeTys.push_back(MVT::Other); // Returns a chain 3382 NodeTys.push_back(MVT::Glue); // Returns a flag for retval copy to use. 3383 3384 unsigned CallOpc = PPCISD::CALL; 3385 3386 bool needIndirectCall = true; 3387 if (SDNode *Dest = isBLACompatibleAddress(Callee, DAG)) { 3388 // If this is an absolute destination address, use the munged value. 3389 Callee = SDValue(Dest, 0); 3390 needIndirectCall = false; 3391 } 3392 3393 if (GlobalAddressSDNode *G = dyn_cast<GlobalAddressSDNode>(Callee)) { 3394 // XXX Work around for http://llvm.org/bugs/show_bug.cgi?id=5201 3395 // Use indirect calls for ALL functions calls in JIT mode, since the 3396 // far-call stubs may be outside relocation limits for a BL instruction. 3397 if (!DAG.getTarget().getSubtarget<PPCSubtarget>().isJITCodeModel()) { 3398 unsigned OpFlags = 0; 3399 if (DAG.getTarget().getRelocationModel() != Reloc::Static && 3400 (PPCSubTarget.getTargetTriple().isMacOSX() && 3401 PPCSubTarget.getTargetTriple().isMacOSXVersionLT(10, 5)) && 3402 (G->getGlobal()->isDeclaration() || 3403 G->getGlobal()->isWeakForLinker())) { 3404 // PC-relative references to external symbols should go through $stub, 3405 // unless we're building with the leopard linker or later, which 3406 // automatically synthesizes these stubs. 3407 OpFlags = PPCII::MO_DARWIN_STUB; 3408 } 3409 3410 // If the callee is a GlobalAddress/ExternalSymbol node (quite common, 3411 // every direct call is) turn it into a TargetGlobalAddress / 3412 // TargetExternalSymbol node so that legalize doesn't hack it. 3413 Callee = DAG.getTargetGlobalAddress(G->getGlobal(), dl, 3414 Callee.getValueType(), 3415 0, OpFlags); 3416 needIndirectCall = false; 3417 } 3418 } 3419 3420 if (ExternalSymbolSDNode *S = dyn_cast<ExternalSymbolSDNode>(Callee)) { 3421 unsigned char OpFlags = 0; 3422 3423 if (DAG.getTarget().getRelocationModel() != Reloc::Static && 3424 (PPCSubTarget.getTargetTriple().isMacOSX() && 3425 PPCSubTarget.getTargetTriple().isMacOSXVersionLT(10, 5))) { 3426 // PC-relative references to external symbols should go through $stub, 3427 // unless we're building with the leopard linker or later, which 3428 // automatically synthesizes these stubs. 3429 OpFlags = PPCII::MO_DARWIN_STUB; 3430 } 3431 3432 Callee = DAG.getTargetExternalSymbol(S->getSymbol(), Callee.getValueType(), 3433 OpFlags); 3434 needIndirectCall = false; 3435 } 3436 3437 if (needIndirectCall) { 3438 // Otherwise, this is an indirect call. We have to use a MTCTR/BCTRL pair 3439 // to do the call, we can't use PPCISD::CALL. 3440 SDValue MTCTROps[] = {Chain, Callee, InFlag}; 3441 3442 if (isSVR4ABI && isPPC64) { 3443 // Function pointers in the 64-bit SVR4 ABI do not point to the function 3444 // entry point, but to the function descriptor (the function entry point 3445 // address is part of the function descriptor though). 3446 // The function descriptor is a three doubleword structure with the 3447 // following fields: function entry point, TOC base address and 3448 // environment pointer. 3449 // Thus for a call through a function pointer, the following actions need 3450 // to be performed: 3451 // 1. Save the TOC of the caller in the TOC save area of its stack 3452 // frame (this is done in LowerCall_Darwin() or LowerCall_64SVR4()). 3453 // 2. Load the address of the function entry point from the function 3454 // descriptor. 3455 // 3. Load the TOC of the callee from the function descriptor into r2. 3456 // 4. Load the environment pointer from the function descriptor into 3457 // r11. 3458 // 5. Branch to the function entry point address. 3459 // 6. On return of the callee, the TOC of the caller needs to be 3460 // restored (this is done in FinishCall()). 3461 // 3462 // All those operations are flagged together to ensure that no other 3463 // operations can be scheduled in between. E.g. without flagging the 3464 // operations together, a TOC access in the caller could be scheduled 3465 // between the load of the callee TOC and the branch to the callee, which 3466 // results in the TOC access going through the TOC of the callee instead 3467 // of going through the TOC of the caller, which leads to incorrect code. 3468 3469 // Load the address of the function entry point from the function 3470 // descriptor. 3471 SDVTList VTs = DAG.getVTList(MVT::i64, MVT::Other, MVT::Glue); 3472 SDValue LoadFuncPtr = DAG.getNode(PPCISD::LOAD, dl, VTs, 3473 makeArrayRef(MTCTROps, InFlag.getNode() ? 3 : 2)); 3474 Chain = LoadFuncPtr.getValue(1); 3475 InFlag = LoadFuncPtr.getValue(2); 3476 3477 // Load environment pointer into r11. 3478 // Offset of the environment pointer within the function descriptor. 3479 SDValue PtrOff = DAG.getIntPtrConstant(16); 3480 3481 SDValue AddPtr = DAG.getNode(ISD::ADD, dl, MVT::i64, Callee, PtrOff); 3482 SDValue LoadEnvPtr = DAG.getNode(PPCISD::LOAD, dl, VTs, Chain, AddPtr, 3483 InFlag); 3484 Chain = LoadEnvPtr.getValue(1); 3485 InFlag = LoadEnvPtr.getValue(2); 3486 3487 SDValue EnvVal = DAG.getCopyToReg(Chain, dl, PPC::X11, LoadEnvPtr, 3488 InFlag); 3489 Chain = EnvVal.getValue(0); 3490 InFlag = EnvVal.getValue(1); 3491 3492 // Load TOC of the callee into r2. We are using a target-specific load 3493 // with r2 hard coded, because the result of a target-independent load 3494 // would never go directly into r2, since r2 is a reserved register (which 3495 // prevents the register allocator from allocating it), resulting in an 3496 // additional register being allocated and an unnecessary move instruction 3497 // being generated. 3498 VTs = DAG.getVTList(MVT::Other, MVT::Glue); 3499 SDValue LoadTOCPtr = DAG.getNode(PPCISD::LOAD_TOC, dl, VTs, Chain, 3500 Callee, InFlag); 3501 Chain = LoadTOCPtr.getValue(0); 3502 InFlag = LoadTOCPtr.getValue(1); 3503 3504 MTCTROps[0] = Chain; 3505 MTCTROps[1] = LoadFuncPtr; 3506 MTCTROps[2] = InFlag; 3507 } 3508 3509 Chain = DAG.getNode(PPCISD::MTCTR, dl, NodeTys, 3510 makeArrayRef(MTCTROps, InFlag.getNode() ? 3 : 2)); 3511 InFlag = Chain.getValue(1); 3512 3513 NodeTys.clear(); 3514 NodeTys.push_back(MVT::Other); 3515 NodeTys.push_back(MVT::Glue); 3516 Ops.push_back(Chain); 3517 CallOpc = PPCISD::BCTRL; 3518 Callee.setNode(nullptr); 3519 // Add use of X11 (holding environment pointer) 3520 if (isSVR4ABI && isPPC64) 3521 Ops.push_back(DAG.getRegister(PPC::X11, PtrVT)); 3522 // Add CTR register as callee so a bctr can be emitted later. 3523 if (isTailCall) 3524 Ops.push_back(DAG.getRegister(isPPC64 ? PPC::CTR8 : PPC::CTR, PtrVT)); 3525 } 3526 3527 // If this is a direct call, pass the chain and the callee. 3528 if (Callee.getNode()) { 3529 Ops.push_back(Chain); 3530 Ops.push_back(Callee); 3531 } 3532 // If this is a tail call add stack pointer delta. 3533 if (isTailCall) 3534 Ops.push_back(DAG.getConstant(SPDiff, MVT::i32)); 3535 3536 // Add argument registers to the end of the list so that they are known live 3537 // into the call. 3538 for (unsigned i = 0, e = RegsToPass.size(); i != e; ++i) 3539 Ops.push_back(DAG.getRegister(RegsToPass[i].first, 3540 RegsToPass[i].second.getValueType())); 3541 3542 return CallOpc; 3543 } 3544 3545 static 3546 bool isLocalCall(const SDValue &Callee) 3547 { 3548 if (GlobalAddressSDNode *G = dyn_cast<GlobalAddressSDNode>(Callee)) 3549 return !G->getGlobal()->isDeclaration() && 3550 !G->getGlobal()->isWeakForLinker(); 3551 return false; 3552 } 3553 3554 SDValue 3555 PPCTargetLowering::LowerCallResult(SDValue Chain, SDValue InFlag, 3556 CallingConv::ID CallConv, bool isVarArg, 3557 const SmallVectorImpl<ISD::InputArg> &Ins, 3558 SDLoc dl, SelectionDAG &DAG, 3559 SmallVectorImpl<SDValue> &InVals) const { 3560 3561 SmallVector<CCValAssign, 16> RVLocs; 3562 CCState CCRetInfo(CallConv, isVarArg, DAG.getMachineFunction(), 3563 getTargetMachine(), RVLocs, *DAG.getContext()); 3564 CCRetInfo.AnalyzeCallResult(Ins, RetCC_PPC); 3565 3566 // Copy all of the result registers out of their specified physreg. 3567 for (unsigned i = 0, e = RVLocs.size(); i != e; ++i) { 3568 CCValAssign &VA = RVLocs[i]; 3569 assert(VA.isRegLoc() && "Can only return in registers!"); 3570 3571 SDValue Val = DAG.getCopyFromReg(Chain, dl, 3572 VA.getLocReg(), VA.getLocVT(), InFlag); 3573 Chain = Val.getValue(1); 3574 InFlag = Val.getValue(2); 3575 3576 switch (VA.getLocInfo()) { 3577 default: llvm_unreachable("Unknown loc info!"); 3578 case CCValAssign::Full: break; 3579 case CCValAssign::AExt: 3580 Val = DAG.getNode(ISD::TRUNCATE, dl, VA.getValVT(), Val); 3581 break; 3582 case CCValAssign::ZExt: 3583 Val = DAG.getNode(ISD::AssertZext, dl, VA.getLocVT(), Val, 3584 DAG.getValueType(VA.getValVT())); 3585 Val = DAG.getNode(ISD::TRUNCATE, dl, VA.getValVT(), Val); 3586 break; 3587 case CCValAssign::SExt: 3588 Val = DAG.getNode(ISD::AssertSext, dl, VA.getLocVT(), Val, 3589 DAG.getValueType(VA.getValVT())); 3590 Val = DAG.getNode(ISD::TRUNCATE, dl, VA.getValVT(), Val); 3591 break; 3592 } 3593 3594 InVals.push_back(Val); 3595 } 3596 3597 return Chain; 3598 } 3599 3600 SDValue 3601 PPCTargetLowering::FinishCall(CallingConv::ID CallConv, SDLoc dl, 3602 bool isTailCall, bool isVarArg, 3603 SelectionDAG &DAG, 3604 SmallVector<std::pair<unsigned, SDValue>, 8> 3605 &RegsToPass, 3606 SDValue InFlag, SDValue Chain, 3607 SDValue &Callee, 3608 int SPDiff, unsigned NumBytes, 3609 const SmallVectorImpl<ISD::InputArg> &Ins, 3610 SmallVectorImpl<SDValue> &InVals) const { 3611 std::vector<EVT> NodeTys; 3612 SmallVector<SDValue, 8> Ops; 3613 unsigned CallOpc = PrepareCall(DAG, Callee, InFlag, Chain, dl, SPDiff, 3614 isTailCall, RegsToPass, Ops, NodeTys, 3615 PPCSubTarget); 3616 3617 // Add implicit use of CR bit 6 for 32-bit SVR4 vararg calls 3618 if (isVarArg && PPCSubTarget.isSVR4ABI() && !PPCSubTarget.isPPC64()) 3619 Ops.push_back(DAG.getRegister(PPC::CR1EQ, MVT::i32)); 3620 3621 // When performing tail call optimization the callee pops its arguments off 3622 // the stack. Account for this here so these bytes can be pushed back on in 3623 // PPCFrameLowering::eliminateCallFramePseudoInstr. 3624 int BytesCalleePops = 3625 (CallConv == CallingConv::Fast && 3626 getTargetMachine().Options.GuaranteedTailCallOpt) ? NumBytes : 0; 3627 3628 // Add a register mask operand representing the call-preserved registers. 3629 const TargetRegisterInfo *TRI = getTargetMachine().getRegisterInfo(); 3630 const uint32_t *Mask = TRI->getCallPreservedMask(CallConv); 3631 assert(Mask && "Missing call preserved mask for calling convention"); 3632 Ops.push_back(DAG.getRegisterMask(Mask)); 3633 3634 if (InFlag.getNode()) 3635 Ops.push_back(InFlag); 3636 3637 // Emit tail call. 3638 if (isTailCall) { 3639 assert(((Callee.getOpcode() == ISD::Register && 3640 cast<RegisterSDNode>(Callee)->getReg() == PPC::CTR) || 3641 Callee.getOpcode() == ISD::TargetExternalSymbol || 3642 Callee.getOpcode() == ISD::TargetGlobalAddress || 3643 isa<ConstantSDNode>(Callee)) && 3644 "Expecting an global address, external symbol, absolute value or register"); 3645 3646 return DAG.getNode(PPCISD::TC_RETURN, dl, MVT::Other, Ops); 3647 } 3648 3649 // Add a NOP immediately after the branch instruction when using the 64-bit 3650 // SVR4 ABI. At link time, if caller and callee are in a different module and 3651 // thus have a different TOC, the call will be replaced with a call to a stub 3652 // function which saves the current TOC, loads the TOC of the callee and 3653 // branches to the callee. The NOP will be replaced with a load instruction 3654 // which restores the TOC of the caller from the TOC save slot of the current 3655 // stack frame. If caller and callee belong to the same module (and have the 3656 // same TOC), the NOP will remain unchanged. 3657 3658 bool needsTOCRestore = false; 3659 if (!isTailCall && PPCSubTarget.isSVR4ABI()&& PPCSubTarget.isPPC64()) { 3660 if (CallOpc == PPCISD::BCTRL) { 3661 // This is a call through a function pointer. 3662 // Restore the caller TOC from the save area into R2. 3663 // See PrepareCall() for more information about calls through function 3664 // pointers in the 64-bit SVR4 ABI. 3665 // We are using a target-specific load with r2 hard coded, because the 3666 // result of a target-independent load would never go directly into r2, 3667 // since r2 is a reserved register (which prevents the register allocator 3668 // from allocating it), resulting in an additional register being 3669 // allocated and an unnecessary move instruction being generated. 3670 needsTOCRestore = true; 3671 } else if ((CallOpc == PPCISD::CALL) && 3672 (!isLocalCall(Callee) || 3673 DAG.getTarget().getRelocationModel() == Reloc::PIC_)) { 3674 // Otherwise insert NOP for non-local calls. 3675 CallOpc = PPCISD::CALL_NOP; 3676 } 3677 } 3678 3679 Chain = DAG.getNode(CallOpc, dl, NodeTys, Ops); 3680 InFlag = Chain.getValue(1); 3681 3682 if (needsTOCRestore) { 3683 SDVTList VTs = DAG.getVTList(MVT::Other, MVT::Glue); 3684 Chain = DAG.getNode(PPCISD::TOC_RESTORE, dl, VTs, Chain, InFlag); 3685 InFlag = Chain.getValue(1); 3686 } 3687 3688 Chain = DAG.getCALLSEQ_END(Chain, DAG.getIntPtrConstant(NumBytes, true), 3689 DAG.getIntPtrConstant(BytesCalleePops, true), 3690 InFlag, dl); 3691 if (!Ins.empty()) 3692 InFlag = Chain.getValue(1); 3693 3694 return LowerCallResult(Chain, InFlag, CallConv, isVarArg, 3695 Ins, dl, DAG, InVals); 3696 } 3697 3698 SDValue 3699 PPCTargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI, 3700 SmallVectorImpl<SDValue> &InVals) const { 3701 SelectionDAG &DAG = CLI.DAG; 3702 SDLoc &dl = CLI.DL; 3703 SmallVectorImpl<ISD::OutputArg> &Outs = CLI.Outs; 3704 SmallVectorImpl<SDValue> &OutVals = CLI.OutVals; 3705 SmallVectorImpl<ISD::InputArg> &Ins = CLI.Ins; 3706 SDValue Chain = CLI.Chain; 3707 SDValue Callee = CLI.Callee; 3708 bool &isTailCall = CLI.IsTailCall; 3709 CallingConv::ID CallConv = CLI.CallConv; 3710 bool isVarArg = CLI.IsVarArg; 3711 3712 if (isTailCall) 3713 isTailCall = IsEligibleForTailCallOptimization(Callee, CallConv, isVarArg, 3714 Ins, DAG); 3715 3716 if (!isTailCall && CLI.CS && CLI.CS->isMustTailCall()) 3717 report_fatal_error("failed to perform tail call elimination on a call " 3718 "site marked musttail"); 3719 3720 if (PPCSubTarget.isSVR4ABI()) { 3721 if (PPCSubTarget.isPPC64()) 3722 return LowerCall_64SVR4(Chain, Callee, CallConv, isVarArg, 3723 isTailCall, Outs, OutVals, Ins, 3724 dl, DAG, InVals); 3725 else 3726 return LowerCall_32SVR4(Chain, Callee, CallConv, isVarArg, 3727 isTailCall, Outs, OutVals, Ins, 3728 dl, DAG, InVals); 3729 } 3730 3731 return LowerCall_Darwin(Chain, Callee, CallConv, isVarArg, 3732 isTailCall, Outs, OutVals, Ins, 3733 dl, DAG, InVals); 3734 } 3735 3736 SDValue 3737 PPCTargetLowering::LowerCall_32SVR4(SDValue Chain, SDValue Callee, 3738 CallingConv::ID CallConv, bool isVarArg, 3739 bool isTailCall, 3740 const SmallVectorImpl<ISD::OutputArg> &Outs, 3741 const SmallVectorImpl<SDValue> &OutVals, 3742 const SmallVectorImpl<ISD::InputArg> &Ins, 3743 SDLoc dl, SelectionDAG &DAG, 3744 SmallVectorImpl<SDValue> &InVals) const { 3745 // See PPCTargetLowering::LowerFormalArguments_32SVR4() for a description 3746 // of the 32-bit SVR4 ABI stack frame layout. 3747 3748 assert((CallConv == CallingConv::C || 3749 CallConv == CallingConv::Fast) && "Unknown calling convention!"); 3750 3751 unsigned PtrByteSize = 4; 3752 3753 MachineFunction &MF = DAG.getMachineFunction(); 3754 3755 // Mark this function as potentially containing a function that contains a 3756 // tail call. As a consequence the frame pointer will be used for dynamicalloc 3757 // and restoring the callers stack pointer in this functions epilog. This is 3758 // done because by tail calling the called function might overwrite the value 3759 // in this function's (MF) stack pointer stack slot 0(SP). 3760 if (getTargetMachine().Options.GuaranteedTailCallOpt && 3761 CallConv == CallingConv::Fast) 3762 MF.getInfo<PPCFunctionInfo>()->setHasFastCall(); 3763 3764 // Count how many bytes are to be pushed on the stack, including the linkage 3765 // area, parameter list area and the part of the local variable space which 3766 // contains copies of aggregates which are passed by value. 3767 3768 // Assign locations to all of the outgoing arguments. 3769 SmallVector<CCValAssign, 16> ArgLocs; 3770 CCState CCInfo(CallConv, isVarArg, DAG.getMachineFunction(), 3771 getTargetMachine(), ArgLocs, *DAG.getContext()); 3772 3773 // Reserve space for the linkage area on the stack. 3774 CCInfo.AllocateStack(PPCFrameLowering::getLinkageSize(false, false), PtrByteSize); 3775 3776 if (isVarArg) { 3777 // Handle fixed and variable vector arguments differently. 3778 // Fixed vector arguments go into registers as long as registers are 3779 // available. Variable vector arguments always go into memory. 3780 unsigned NumArgs = Outs.size(); 3781 3782 for (unsigned i = 0; i != NumArgs; ++i) { 3783 MVT ArgVT = Outs[i].VT; 3784 ISD::ArgFlagsTy ArgFlags = Outs[i].Flags; 3785 bool Result; 3786 3787 if (Outs[i].IsFixed) { 3788 Result = CC_PPC32_SVR4(i, ArgVT, ArgVT, CCValAssign::Full, ArgFlags, 3789 CCInfo); 3790 } else { 3791 Result = CC_PPC32_SVR4_VarArg(i, ArgVT, ArgVT, CCValAssign::Full, 3792 ArgFlags, CCInfo); 3793 } 3794 3795 if (Result) { 3796 #ifndef NDEBUG 3797 errs() << "Call operand #" << i << " has unhandled type " 3798 << EVT(ArgVT).getEVTString() << "\n"; 3799 #endif 3800 llvm_unreachable(nullptr); 3801 } 3802 } 3803 } else { 3804 // All arguments are treated the same. 3805 CCInfo.AnalyzeCallOperands(Outs, CC_PPC32_SVR4); 3806 } 3807 3808 // Assign locations to all of the outgoing aggregate by value arguments. 3809 SmallVector<CCValAssign, 16> ByValArgLocs; 3810 CCState CCByValInfo(CallConv, isVarArg, DAG.getMachineFunction(), 3811 getTargetMachine(), ByValArgLocs, *DAG.getContext()); 3812 3813 // Reserve stack space for the allocations in CCInfo. 3814 CCByValInfo.AllocateStack(CCInfo.getNextStackOffset(), PtrByteSize); 3815 3816 CCByValInfo.AnalyzeCallOperands(Outs, CC_PPC32_SVR4_ByVal); 3817 3818 // Size of the linkage area, parameter list area and the part of the local 3819 // space variable where copies of aggregates which are passed by value are 3820 // stored. 3821 unsigned NumBytes = CCByValInfo.getNextStackOffset(); 3822 3823 // Calculate by how many bytes the stack has to be adjusted in case of tail 3824 // call optimization. 3825 int SPDiff = CalculateTailCallSPDiff(DAG, isTailCall, NumBytes); 3826 3827 // Adjust the stack pointer for the new arguments... 3828 // These operations are automatically eliminated by the prolog/epilog pass 3829 Chain = DAG.getCALLSEQ_START(Chain, DAG.getIntPtrConstant(NumBytes, true), 3830 dl); 3831 SDValue CallSeqStart = Chain; 3832 3833 // Load the return address and frame pointer so it can be moved somewhere else 3834 // later. 3835 SDValue LROp, FPOp; 3836 Chain = EmitTailCallLoadFPAndRetAddr(DAG, SPDiff, Chain, LROp, FPOp, false, 3837 dl); 3838 3839 // Set up a copy of the stack pointer for use loading and storing any 3840 // arguments that may not fit in the registers available for argument 3841 // passing. 3842 SDValue StackPtr = DAG.getRegister(PPC::R1, MVT::i32); 3843 3844 SmallVector<std::pair<unsigned, SDValue>, 8> RegsToPass; 3845 SmallVector<TailCallArgumentInfo, 8> TailCallArguments; 3846 SmallVector<SDValue, 8> MemOpChains; 3847 3848 bool seenFloatArg = false; 3849 // Walk the register/memloc assignments, inserting copies/loads. 3850 for (unsigned i = 0, j = 0, e = ArgLocs.size(); 3851 i != e; 3852 ++i) { 3853 CCValAssign &VA = ArgLocs[i]; 3854 SDValue Arg = OutVals[i]; 3855 ISD::ArgFlagsTy Flags = Outs[i].Flags; 3856 3857 if (Flags.isByVal()) { 3858 // Argument is an aggregate which is passed by value, thus we need to 3859 // create a copy of it in the local variable space of the current stack 3860 // frame (which is the stack frame of the caller) and pass the address of 3861 // this copy to the callee. 3862 assert((j < ByValArgLocs.size()) && "Index out of bounds!"); 3863 CCValAssign &ByValVA = ByValArgLocs[j++]; 3864 assert((VA.getValNo() == ByValVA.getValNo()) && "ValNo mismatch!"); 3865 3866 // Memory reserved in the local variable space of the callers stack frame. 3867 unsigned LocMemOffset = ByValVA.getLocMemOffset(); 3868 3869 SDValue PtrOff = DAG.getIntPtrConstant(LocMemOffset); 3870 PtrOff = DAG.getNode(ISD::ADD, dl, getPointerTy(), StackPtr, PtrOff); 3871 3872 // Create a copy of the argument in the local area of the current 3873 // stack frame. 3874 SDValue MemcpyCall = 3875 CreateCopyOfByValArgument(Arg, PtrOff, 3876 CallSeqStart.getNode()->getOperand(0), 3877 Flags, DAG, dl); 3878 3879 // This must go outside the CALLSEQ_START..END. 3880 SDValue NewCallSeqStart = DAG.getCALLSEQ_START(MemcpyCall, 3881 CallSeqStart.getNode()->getOperand(1), 3882 SDLoc(MemcpyCall)); 3883 DAG.ReplaceAllUsesWith(CallSeqStart.getNode(), 3884 NewCallSeqStart.getNode()); 3885 Chain = CallSeqStart = NewCallSeqStart; 3886 3887 // Pass the address of the aggregate copy on the stack either in a 3888 // physical register or in the parameter list area of the current stack 3889 // frame to the callee. 3890 Arg = PtrOff; 3891 } 3892 3893 if (VA.isRegLoc()) { 3894 if (Arg.getValueType() == MVT::i1) 3895 Arg = DAG.getNode(ISD::ZERO_EXTEND, dl, MVT::i32, Arg); 3896 3897 seenFloatArg |= VA.getLocVT().isFloatingPoint(); 3898 // Put argument in a physical register. 3899 RegsToPass.push_back(std::make_pair(VA.getLocReg(), Arg)); 3900 } else { 3901 // Put argument in the parameter list area of the current stack frame. 3902 assert(VA.isMemLoc()); 3903 unsigned LocMemOffset = VA.getLocMemOffset(); 3904 3905 if (!isTailCall) { 3906 SDValue PtrOff = DAG.getIntPtrConstant(LocMemOffset); 3907 PtrOff = DAG.getNode(ISD::ADD, dl, getPointerTy(), StackPtr, PtrOff); 3908 3909 MemOpChains.push_back(DAG.getStore(Chain, dl, Arg, PtrOff, 3910 MachinePointerInfo(), 3911 false, false, 0)); 3912 } else { 3913 // Calculate and remember argument location. 3914 CalculateTailCallArgDest(DAG, MF, false, Arg, SPDiff, LocMemOffset, 3915 TailCallArguments); 3916 } 3917 } 3918 } 3919 3920 if (!MemOpChains.empty()) 3921 Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, MemOpChains); 3922 3923 // Build a sequence of copy-to-reg nodes chained together with token chain 3924 // and flag operands which copy the outgoing args into the appropriate regs. 3925 SDValue InFlag; 3926 for (unsigned i = 0, e = RegsToPass.size(); i != e; ++i) { 3927 Chain = DAG.getCopyToReg(Chain, dl, RegsToPass[i].first, 3928 RegsToPass[i].second, InFlag); 3929 InFlag = Chain.getValue(1); 3930 } 3931 3932 // Set CR bit 6 to true if this is a vararg call with floating args passed in 3933 // registers. 3934 if (isVarArg) { 3935 SDVTList VTs = DAG.getVTList(MVT::Other, MVT::Glue); 3936 SDValue Ops[] = { Chain, InFlag }; 3937 3938 Chain = DAG.getNode(seenFloatArg ? PPCISD::CR6SET : PPCISD::CR6UNSET, 3939 dl, VTs, makeArrayRef(Ops, InFlag.getNode() ? 2 : 1)); 3940 3941 InFlag = Chain.getValue(1); 3942 } 3943 3944 if (isTailCall) 3945 PrepareTailCall(DAG, InFlag, Chain, dl, false, SPDiff, NumBytes, LROp, FPOp, 3946 false, TailCallArguments); 3947 3948 return FinishCall(CallConv, dl, isTailCall, isVarArg, DAG, 3949 RegsToPass, InFlag, Chain, Callee, SPDiff, NumBytes, 3950 Ins, InVals); 3951 } 3952 3953 // Copy an argument into memory, being careful to do this outside the 3954 // call sequence for the call to which the argument belongs. 3955 SDValue 3956 PPCTargetLowering::createMemcpyOutsideCallSeq(SDValue Arg, SDValue PtrOff, 3957 SDValue CallSeqStart, 3958 ISD::ArgFlagsTy Flags, 3959 SelectionDAG &DAG, 3960 SDLoc dl) const { 3961 SDValue MemcpyCall = CreateCopyOfByValArgument(Arg, PtrOff, 3962 CallSeqStart.getNode()->getOperand(0), 3963 Flags, DAG, dl); 3964 // The MEMCPY must go outside the CALLSEQ_START..END. 3965 SDValue NewCallSeqStart = DAG.getCALLSEQ_START(MemcpyCall, 3966 CallSeqStart.getNode()->getOperand(1), 3967 SDLoc(MemcpyCall)); 3968 DAG.ReplaceAllUsesWith(CallSeqStart.getNode(), 3969 NewCallSeqStart.getNode()); 3970 return NewCallSeqStart; 3971 } 3972 3973 SDValue 3974 PPCTargetLowering::LowerCall_64SVR4(SDValue Chain, SDValue Callee, 3975 CallingConv::ID CallConv, bool isVarArg, 3976 bool isTailCall, 3977 const SmallVectorImpl<ISD::OutputArg> &Outs, 3978 const SmallVectorImpl<SDValue> &OutVals, 3979 const SmallVectorImpl<ISD::InputArg> &Ins, 3980 SDLoc dl, SelectionDAG &DAG, 3981 SmallVectorImpl<SDValue> &InVals) const { 3982 3983 unsigned NumOps = Outs.size(); 3984 3985 EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(); 3986 unsigned PtrByteSize = 8; 3987 3988 MachineFunction &MF = DAG.getMachineFunction(); 3989 3990 // Mark this function as potentially containing a function that contains a 3991 // tail call. As a consequence the frame pointer will be used for dynamicalloc 3992 // and restoring the callers stack pointer in this functions epilog. This is 3993 // done because by tail calling the called function might overwrite the value 3994 // in this function's (MF) stack pointer stack slot 0(SP). 3995 if (getTargetMachine().Options.GuaranteedTailCallOpt && 3996 CallConv == CallingConv::Fast) 3997 MF.getInfo<PPCFunctionInfo>()->setHasFastCall(); 3998 3999 unsigned nAltivecParamsAtEnd = 0; 4000 4001 // Count how many bytes are to be pushed on the stack, including the linkage 4002 // area, and parameter passing area. We start with at least 48 bytes, which 4003 // is reserved space for [SP][CR][LR][3 x unused]. 4004 // NOTE: For PPC64, nAltivecParamsAtEnd always remains zero as a result 4005 // of this call. 4006 unsigned NumBytes = 4007 CalculateParameterAndLinkageAreaSize(DAG, true, isVarArg, CallConv, 4008 Outs, OutVals, nAltivecParamsAtEnd); 4009 4010 // Calculate by how many bytes the stack has to be adjusted in case of tail 4011 // call optimization. 4012 int SPDiff = CalculateTailCallSPDiff(DAG, isTailCall, NumBytes); 4013 4014 // To protect arguments on the stack from being clobbered in a tail call, 4015 // force all the loads to happen before doing any other lowering. 4016 if (isTailCall) 4017 Chain = DAG.getStackArgumentTokenFactor(Chain); 4018 4019 // Adjust the stack pointer for the new arguments... 4020 // These operations are automatically eliminated by the prolog/epilog pass 4021 Chain = DAG.getCALLSEQ_START(Chain, DAG.getIntPtrConstant(NumBytes, true), 4022 dl); 4023 SDValue CallSeqStart = Chain; 4024 4025 // Load the return address and frame pointer so it can be move somewhere else 4026 // later. 4027 SDValue LROp, FPOp; 4028 Chain = EmitTailCallLoadFPAndRetAddr(DAG, SPDiff, Chain, LROp, FPOp, true, 4029 dl); 4030 4031 // Set up a copy of the stack pointer for use loading and storing any 4032 // arguments that may not fit in the registers available for argument 4033 // passing. 4034 SDValue StackPtr = DAG.getRegister(PPC::X1, MVT::i64); 4035 4036 // Figure out which arguments are going to go in registers, and which in 4037 // memory. Also, if this is a vararg function, floating point operations 4038 // must be stored to our stack, and loaded into integer regs as well, if 4039 // any integer regs are available for argument passing. 4040 unsigned ArgOffset = PPCFrameLowering::getLinkageSize(true, true); 4041 unsigned GPR_idx = 0, FPR_idx = 0, VR_idx = 0; 4042 4043 static const MCPhysReg GPR[] = { 4044 PPC::X3, PPC::X4, PPC::X5, PPC::X6, 4045 PPC::X7, PPC::X8, PPC::X9, PPC::X10, 4046 }; 4047 static const MCPhysReg *FPR = GetFPR(); 4048 4049 static const MCPhysReg VR[] = { 4050 PPC::V2, PPC::V3, PPC::V4, PPC::V5, PPC::V6, PPC::V7, PPC::V8, 4051 PPC::V9, PPC::V10, PPC::V11, PPC::V12, PPC::V13 4052 }; 4053 static const MCPhysReg VSRH[] = { 4054 PPC::VSH2, PPC::VSH3, PPC::VSH4, PPC::VSH5, PPC::VSH6, PPC::VSH7, PPC::VSH8, 4055 PPC::VSH9, PPC::VSH10, PPC::VSH11, PPC::VSH12, PPC::VSH13 4056 }; 4057 4058 const unsigned NumGPRs = array_lengthof(GPR); 4059 const unsigned NumFPRs = 13; 4060 const unsigned NumVRs = array_lengthof(VR); 4061 4062 SmallVector<std::pair<unsigned, SDValue>, 8> RegsToPass; 4063 SmallVector<TailCallArgumentInfo, 8> TailCallArguments; 4064 4065 SmallVector<SDValue, 8> MemOpChains; 4066 for (unsigned i = 0; i != NumOps; ++i) { 4067 SDValue Arg = OutVals[i]; 4068 ISD::ArgFlagsTy Flags = Outs[i].Flags; 4069 4070 // PtrOff will be used to store the current argument to the stack if a 4071 // register cannot be found for it. 4072 SDValue PtrOff; 4073 4074 PtrOff = DAG.getConstant(ArgOffset, StackPtr.getValueType()); 4075 4076 PtrOff = DAG.getNode(ISD::ADD, dl, PtrVT, StackPtr, PtrOff); 4077 4078 // Promote integers to 64-bit values. 4079 if (Arg.getValueType() == MVT::i32 || Arg.getValueType() == MVT::i1) { 4080 // FIXME: Should this use ANY_EXTEND if neither sext nor zext? 4081 unsigned ExtOp = Flags.isSExt() ? ISD::SIGN_EXTEND : ISD::ZERO_EXTEND; 4082 Arg = DAG.getNode(ExtOp, dl, MVT::i64, Arg); 4083 } 4084 4085 // FIXME memcpy is used way more than necessary. Correctness first. 4086 // Note: "by value" is code for passing a structure by value, not 4087 // basic types. 4088 if (Flags.isByVal()) { 4089 // Note: Size includes alignment padding, so 4090 // struct x { short a; char b; } 4091 // will have Size = 4. With #pragma pack(1), it will have Size = 3. 4092 // These are the proper values we need for right-justifying the 4093 // aggregate in a parameter register. 4094 unsigned Size = Flags.getByValSize(); 4095 4096 // An empty aggregate parameter takes up no storage and no 4097 // registers. 4098 if (Size == 0) 4099 continue; 4100 4101 unsigned BVAlign = Flags.getByValAlign(); 4102 if (BVAlign > 8) { 4103 if (BVAlign % PtrByteSize != 0) 4104 llvm_unreachable( 4105 "ByVal alignment is not a multiple of the pointer size"); 4106 4107 ArgOffset = ((ArgOffset+BVAlign-1)/BVAlign)*BVAlign; 4108 } 4109 4110 // All aggregates smaller than 8 bytes must be passed right-justified. 4111 if (Size==1 || Size==2 || Size==4) { 4112 EVT VT = (Size==1) ? MVT::i8 : ((Size==2) ? MVT::i16 : MVT::i32); 4113 if (GPR_idx != NumGPRs) { 4114 SDValue Load = DAG.getExtLoad(ISD::EXTLOAD, dl, PtrVT, Chain, Arg, 4115 MachinePointerInfo(), VT, 4116 false, false, 0); 4117 MemOpChains.push_back(Load.getValue(1)); 4118 RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load)); 4119 4120 ArgOffset += PtrByteSize; 4121 continue; 4122 } 4123 } 4124 4125 if (GPR_idx == NumGPRs && Size < 8) { 4126 SDValue Const = DAG.getConstant(PtrByteSize - Size, 4127 PtrOff.getValueType()); 4128 SDValue AddPtr = DAG.getNode(ISD::ADD, dl, PtrVT, PtrOff, Const); 4129 Chain = CallSeqStart = createMemcpyOutsideCallSeq(Arg, AddPtr, 4130 CallSeqStart, 4131 Flags, DAG, dl); 4132 ArgOffset += PtrByteSize; 4133 continue; 4134 } 4135 // Copy entire object into memory. There are cases where gcc-generated 4136 // code assumes it is there, even if it could be put entirely into 4137 // registers. (This is not what the doc says.) 4138 4139 // FIXME: The above statement is likely due to a misunderstanding of the 4140 // documents. All arguments must be copied into the parameter area BY 4141 // THE CALLEE in the event that the callee takes the address of any 4142 // formal argument. That has not yet been implemented. However, it is 4143 // reasonable to use the stack area as a staging area for the register 4144 // load. 4145 4146 // Skip this for small aggregates, as we will use the same slot for a 4147 // right-justified copy, below. 4148 if (Size >= 8) 4149 Chain = CallSeqStart = createMemcpyOutsideCallSeq(Arg, PtrOff, 4150 CallSeqStart, 4151 Flags, DAG, dl); 4152 4153 // When a register is available, pass a small aggregate right-justified. 4154 if (Size < 8 && GPR_idx != NumGPRs) { 4155 // The easiest way to get this right-justified in a register 4156 // is to copy the structure into the rightmost portion of a 4157 // local variable slot, then load the whole slot into the 4158 // register. 4159 // FIXME: The memcpy seems to produce pretty awful code for 4160 // small aggregates, particularly for packed ones. 4161 // FIXME: It would be preferable to use the slot in the 4162 // parameter save area instead of a new local variable. 4163 SDValue Const = DAG.getConstant(8 - Size, PtrOff.getValueType()); 4164 SDValue AddPtr = DAG.getNode(ISD::ADD, dl, PtrVT, PtrOff, Const); 4165 Chain = CallSeqStart = createMemcpyOutsideCallSeq(Arg, AddPtr, 4166 CallSeqStart, 4167 Flags, DAG, dl); 4168 4169 // Load the slot into the register. 4170 SDValue Load = DAG.getLoad(PtrVT, dl, Chain, PtrOff, 4171 MachinePointerInfo(), 4172 false, false, false, 0); 4173 MemOpChains.push_back(Load.getValue(1)); 4174 RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load)); 4175 4176 // Done with this argument. 4177 ArgOffset += PtrByteSize; 4178 continue; 4179 } 4180 4181 // For aggregates larger than PtrByteSize, copy the pieces of the 4182 // object that fit into registers from the parameter save area. 4183 for (unsigned j=0; j<Size; j+=PtrByteSize) { 4184 SDValue Const = DAG.getConstant(j, PtrOff.getValueType()); 4185 SDValue AddArg = DAG.getNode(ISD::ADD, dl, PtrVT, Arg, Const); 4186 if (GPR_idx != NumGPRs) { 4187 SDValue Load = DAG.getLoad(PtrVT, dl, Chain, AddArg, 4188 MachinePointerInfo(), 4189 false, false, false, 0); 4190 MemOpChains.push_back(Load.getValue(1)); 4191 RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load)); 4192 ArgOffset += PtrByteSize; 4193 } else { 4194 ArgOffset += ((Size - j + PtrByteSize-1)/PtrByteSize)*PtrByteSize; 4195 break; 4196 } 4197 } 4198 continue; 4199 } 4200 4201 switch (Arg.getSimpleValueType().SimpleTy) { 4202 default: llvm_unreachable("Unexpected ValueType for argument!"); 4203 case MVT::i1: 4204 case MVT::i32: 4205 case MVT::i64: 4206 if (GPR_idx != NumGPRs) { 4207 RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Arg)); 4208 } else { 4209 LowerMemOpCallTo(DAG, MF, Chain, Arg, PtrOff, SPDiff, ArgOffset, 4210 true, isTailCall, false, MemOpChains, 4211 TailCallArguments, dl); 4212 } 4213 ArgOffset += PtrByteSize; 4214 break; 4215 case MVT::f32: 4216 case MVT::f64: 4217 if (FPR_idx != NumFPRs) { 4218 RegsToPass.push_back(std::make_pair(FPR[FPR_idx++], Arg)); 4219 4220 if (isVarArg) { 4221 // A single float or an aggregate containing only a single float 4222 // must be passed right-justified in the stack doubleword, and 4223 // in the GPR, if one is available. 4224 SDValue StoreOff; 4225 if (Arg.getSimpleValueType().SimpleTy == MVT::f32) { 4226 SDValue ConstFour = DAG.getConstant(4, PtrOff.getValueType()); 4227 StoreOff = DAG.getNode(ISD::ADD, dl, PtrVT, PtrOff, ConstFour); 4228 } else 4229 StoreOff = PtrOff; 4230 4231 SDValue Store = DAG.getStore(Chain, dl, Arg, StoreOff, 4232 MachinePointerInfo(), false, false, 0); 4233 MemOpChains.push_back(Store); 4234 4235 // Float varargs are always shadowed in available integer registers 4236 if (GPR_idx != NumGPRs) { 4237 SDValue Load = DAG.getLoad(PtrVT, dl, Store, PtrOff, 4238 MachinePointerInfo(), false, false, 4239 false, 0); 4240 MemOpChains.push_back(Load.getValue(1)); 4241 RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load)); 4242 } 4243 } else if (GPR_idx != NumGPRs) 4244 // If we have any FPRs remaining, we may also have GPRs remaining. 4245 ++GPR_idx; 4246 } else { 4247 // Single-precision floating-point values are mapped to the 4248 // second (rightmost) word of the stack doubleword. 4249 if (Arg.getValueType() == MVT::f32) { 4250 SDValue ConstFour = DAG.getConstant(4, PtrOff.getValueType()); 4251 PtrOff = DAG.getNode(ISD::ADD, dl, PtrVT, PtrOff, ConstFour); 4252 } 4253 4254 LowerMemOpCallTo(DAG, MF, Chain, Arg, PtrOff, SPDiff, ArgOffset, 4255 true, isTailCall, false, MemOpChains, 4256 TailCallArguments, dl); 4257 } 4258 ArgOffset += 8; 4259 break; 4260 case MVT::v4f32: 4261 case MVT::v4i32: 4262 case MVT::v8i16: 4263 case MVT::v16i8: 4264 case MVT::v2f64: 4265 case MVT::v2i64: 4266 if (isVarArg) { 4267 // These go aligned on the stack, or in the corresponding R registers 4268 // when within range. The Darwin PPC ABI doc claims they also go in 4269 // V registers; in fact gcc does this only for arguments that are 4270 // prototyped, not for those that match the ... We do it for all 4271 // arguments, seems to work. 4272 while (ArgOffset % 16 !=0) { 4273 ArgOffset += PtrByteSize; 4274 if (GPR_idx != NumGPRs) 4275 GPR_idx++; 4276 } 4277 // We could elide this store in the case where the object fits 4278 // entirely in R registers. Maybe later. 4279 PtrOff = DAG.getNode(ISD::ADD, dl, PtrVT, StackPtr, 4280 DAG.getConstant(ArgOffset, PtrVT)); 4281 SDValue Store = DAG.getStore(Chain, dl, Arg, PtrOff, 4282 MachinePointerInfo(), false, false, 0); 4283 MemOpChains.push_back(Store); 4284 if (VR_idx != NumVRs) { 4285 SDValue Load = DAG.getLoad(MVT::v4f32, dl, Store, PtrOff, 4286 MachinePointerInfo(), 4287 false, false, false, 0); 4288 MemOpChains.push_back(Load.getValue(1)); 4289 4290 unsigned VReg = (Arg.getSimpleValueType() == MVT::v2f64 || 4291 Arg.getSimpleValueType() == MVT::v2i64) ? 4292 VSRH[VR_idx] : VR[VR_idx]; 4293 ++VR_idx; 4294 4295 RegsToPass.push_back(std::make_pair(VReg, Load)); 4296 } 4297 ArgOffset += 16; 4298 for (unsigned i=0; i<16; i+=PtrByteSize) { 4299 if (GPR_idx == NumGPRs) 4300 break; 4301 SDValue Ix = DAG.getNode(ISD::ADD, dl, PtrVT, PtrOff, 4302 DAG.getConstant(i, PtrVT)); 4303 SDValue Load = DAG.getLoad(PtrVT, dl, Store, Ix, MachinePointerInfo(), 4304 false, false, false, 0); 4305 MemOpChains.push_back(Load.getValue(1)); 4306 RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load)); 4307 } 4308 break; 4309 } 4310 4311 // Non-varargs Altivec params generally go in registers, but have 4312 // stack space allocated at the end. 4313 if (VR_idx != NumVRs) { 4314 // Doesn't have GPR space allocated. 4315 unsigned VReg = (Arg.getSimpleValueType() == MVT::v2f64 || 4316 Arg.getSimpleValueType() == MVT::v2i64) ? 4317 VSRH[VR_idx] : VR[VR_idx]; 4318 ++VR_idx; 4319 4320 RegsToPass.push_back(std::make_pair(VReg, Arg)); 4321 } else { 4322 LowerMemOpCallTo(DAG, MF, Chain, Arg, PtrOff, SPDiff, ArgOffset, 4323 true, isTailCall, true, MemOpChains, 4324 TailCallArguments, dl); 4325 ArgOffset += 16; 4326 } 4327 break; 4328 } 4329 } 4330 4331 if (!MemOpChains.empty()) 4332 Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, MemOpChains); 4333 4334 // Check if this is an indirect call (MTCTR/BCTRL). 4335 // See PrepareCall() for more information about calls through function 4336 // pointers in the 64-bit SVR4 ABI. 4337 if (!isTailCall && 4338 !dyn_cast<GlobalAddressSDNode>(Callee) && 4339 !dyn_cast<ExternalSymbolSDNode>(Callee) && 4340 !isBLACompatibleAddress(Callee, DAG)) { 4341 // Load r2 into a virtual register and store it to the TOC save area. 4342 SDValue Val = DAG.getCopyFromReg(Chain, dl, PPC::X2, MVT::i64); 4343 // TOC save area offset. 4344 SDValue PtrOff = DAG.getIntPtrConstant(40); 4345 SDValue AddPtr = DAG.getNode(ISD::ADD, dl, PtrVT, StackPtr, PtrOff); 4346 Chain = DAG.getStore(Val.getValue(1), dl, Val, AddPtr, MachinePointerInfo(), 4347 false, false, 0); 4348 // R12 must contain the address of an indirect callee. This does not 4349 // mean the MTCTR instruction must use R12; it's easier to model this 4350 // as an extra parameter, so do that. 4351 RegsToPass.push_back(std::make_pair((unsigned)PPC::X12, Callee)); 4352 } 4353 4354 // Build a sequence of copy-to-reg nodes chained together with token chain 4355 // and flag operands which copy the outgoing args into the appropriate regs. 4356 SDValue InFlag; 4357 for (unsigned i = 0, e = RegsToPass.size(); i != e; ++i) { 4358 Chain = DAG.getCopyToReg(Chain, dl, RegsToPass[i].first, 4359 RegsToPass[i].second, InFlag); 4360 InFlag = Chain.getValue(1); 4361 } 4362 4363 if (isTailCall) 4364 PrepareTailCall(DAG, InFlag, Chain, dl, true, SPDiff, NumBytes, LROp, 4365 FPOp, true, TailCallArguments); 4366 4367 return FinishCall(CallConv, dl, isTailCall, isVarArg, DAG, 4368 RegsToPass, InFlag, Chain, Callee, SPDiff, NumBytes, 4369 Ins, InVals); 4370 } 4371 4372 SDValue 4373 PPCTargetLowering::LowerCall_Darwin(SDValue Chain, SDValue Callee, 4374 CallingConv::ID CallConv, bool isVarArg, 4375 bool isTailCall, 4376 const SmallVectorImpl<ISD::OutputArg> &Outs, 4377 const SmallVectorImpl<SDValue> &OutVals, 4378 const SmallVectorImpl<ISD::InputArg> &Ins, 4379 SDLoc dl, SelectionDAG &DAG, 4380 SmallVectorImpl<SDValue> &InVals) const { 4381 4382 unsigned NumOps = Outs.size(); 4383 4384 EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(); 4385 bool isPPC64 = PtrVT == MVT::i64; 4386 unsigned PtrByteSize = isPPC64 ? 8 : 4; 4387 4388 MachineFunction &MF = DAG.getMachineFunction(); 4389 4390 // Mark this function as potentially containing a function that contains a 4391 // tail call. As a consequence the frame pointer will be used for dynamicalloc 4392 // and restoring the callers stack pointer in this functions epilog. This is 4393 // done because by tail calling the called function might overwrite the value 4394 // in this function's (MF) stack pointer stack slot 0(SP). 4395 if (getTargetMachine().Options.GuaranteedTailCallOpt && 4396 CallConv == CallingConv::Fast) 4397 MF.getInfo<PPCFunctionInfo>()->setHasFastCall(); 4398 4399 unsigned nAltivecParamsAtEnd = 0; 4400 4401 // Count how many bytes are to be pushed on the stack, including the linkage 4402 // area, and parameter passing area. We start with 24/48 bytes, which is 4403 // prereserved space for [SP][CR][LR][3 x unused]. 4404 unsigned NumBytes = 4405 CalculateParameterAndLinkageAreaSize(DAG, isPPC64, isVarArg, CallConv, 4406 Outs, OutVals, 4407 nAltivecParamsAtEnd); 4408 4409 // Calculate by how many bytes the stack has to be adjusted in case of tail 4410 // call optimization. 4411 int SPDiff = CalculateTailCallSPDiff(DAG, isTailCall, NumBytes); 4412 4413 // To protect arguments on the stack from being clobbered in a tail call, 4414 // force all the loads to happen before doing any other lowering. 4415 if (isTailCall) 4416 Chain = DAG.getStackArgumentTokenFactor(Chain); 4417 4418 // Adjust the stack pointer for the new arguments... 4419 // These operations are automatically eliminated by the prolog/epilog pass 4420 Chain = DAG.getCALLSEQ_START(Chain, DAG.getIntPtrConstant(NumBytes, true), 4421 dl); 4422 SDValue CallSeqStart = Chain; 4423 4424 // Load the return address and frame pointer so it can be move somewhere else 4425 // later. 4426 SDValue LROp, FPOp; 4427 Chain = EmitTailCallLoadFPAndRetAddr(DAG, SPDiff, Chain, LROp, FPOp, true, 4428 dl); 4429 4430 // Set up a copy of the stack pointer for use loading and storing any 4431 // arguments that may not fit in the registers available for argument 4432 // passing. 4433 SDValue StackPtr; 4434 if (isPPC64) 4435 StackPtr = DAG.getRegister(PPC::X1, MVT::i64); 4436 else 4437 StackPtr = DAG.getRegister(PPC::R1, MVT::i32); 4438 4439 // Figure out which arguments are going to go in registers, and which in 4440 // memory. Also, if this is a vararg function, floating point operations 4441 // must be stored to our stack, and loaded into integer regs as well, if 4442 // any integer regs are available for argument passing. 4443 unsigned ArgOffset = PPCFrameLowering::getLinkageSize(isPPC64, true); 4444 unsigned GPR_idx = 0, FPR_idx = 0, VR_idx = 0; 4445 4446 static const MCPhysReg GPR_32[] = { // 32-bit registers. 4447 PPC::R3, PPC::R4, PPC::R5, PPC::R6, 4448 PPC::R7, PPC::R8, PPC::R9, PPC::R10, 4449 }; 4450 static const MCPhysReg GPR_64[] = { // 64-bit registers. 4451 PPC::X3, PPC::X4, PPC::X5, PPC::X6, 4452 PPC::X7, PPC::X8, PPC::X9, PPC::X10, 4453 }; 4454 static const MCPhysReg *FPR = GetFPR(); 4455 4456 static const MCPhysReg VR[] = { 4457 PPC::V2, PPC::V3, PPC::V4, PPC::V5, PPC::V6, PPC::V7, PPC::V8, 4458 PPC::V9, PPC::V10, PPC::V11, PPC::V12, PPC::V13 4459 }; 4460 const unsigned NumGPRs = array_lengthof(GPR_32); 4461 const unsigned NumFPRs = 13; 4462 const unsigned NumVRs = array_lengthof(VR); 4463 4464 const MCPhysReg *GPR = isPPC64 ? GPR_64 : GPR_32; 4465 4466 SmallVector<std::pair<unsigned, SDValue>, 8> RegsToPass; 4467 SmallVector<TailCallArgumentInfo, 8> TailCallArguments; 4468 4469 SmallVector<SDValue, 8> MemOpChains; 4470 for (unsigned i = 0; i != NumOps; ++i) { 4471 SDValue Arg = OutVals[i]; 4472 ISD::ArgFlagsTy Flags = Outs[i].Flags; 4473 4474 // PtrOff will be used to store the current argument to the stack if a 4475 // register cannot be found for it. 4476 SDValue PtrOff; 4477 4478 PtrOff = DAG.getConstant(ArgOffset, StackPtr.getValueType()); 4479 4480 PtrOff = DAG.getNode(ISD::ADD, dl, PtrVT, StackPtr, PtrOff); 4481 4482 // On PPC64, promote integers to 64-bit values. 4483 if (isPPC64 && Arg.getValueType() == MVT::i32) { 4484 // FIXME: Should this use ANY_EXTEND if neither sext nor zext? 4485 unsigned ExtOp = Flags.isSExt() ? ISD::SIGN_EXTEND : ISD::ZERO_EXTEND; 4486 Arg = DAG.getNode(ExtOp, dl, MVT::i64, Arg); 4487 } 4488 4489 // FIXME memcpy is used way more than necessary. Correctness first. 4490 // Note: "by value" is code for passing a structure by value, not 4491 // basic types. 4492 if (Flags.isByVal()) { 4493 unsigned Size = Flags.getByValSize(); 4494 // Very small objects are passed right-justified. Everything else is 4495 // passed left-justified. 4496 if (Size==1 || Size==2) { 4497 EVT VT = (Size==1) ? MVT::i8 : MVT::i16; 4498 if (GPR_idx != NumGPRs) { 4499 SDValue Load = DAG.getExtLoad(ISD::EXTLOAD, dl, PtrVT, Chain, Arg, 4500 MachinePointerInfo(), VT, 4501 false, false, 0); 4502 MemOpChains.push_back(Load.getValue(1)); 4503 RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load)); 4504 4505 ArgOffset += PtrByteSize; 4506 } else { 4507 SDValue Const = DAG.getConstant(PtrByteSize - Size, 4508 PtrOff.getValueType()); 4509 SDValue AddPtr = DAG.getNode(ISD::ADD, dl, PtrVT, PtrOff, Const); 4510 Chain = CallSeqStart = createMemcpyOutsideCallSeq(Arg, AddPtr, 4511 CallSeqStart, 4512 Flags, DAG, dl); 4513 ArgOffset += PtrByteSize; 4514 } 4515 continue; 4516 } 4517 // Copy entire object into memory. There are cases where gcc-generated 4518 // code assumes it is there, even if it could be put entirely into 4519 // registers. (This is not what the doc says.) 4520 Chain = CallSeqStart = createMemcpyOutsideCallSeq(Arg, PtrOff, 4521 CallSeqStart, 4522 Flags, DAG, dl); 4523 4524 // For small aggregates (Darwin only) and aggregates >= PtrByteSize, 4525 // copy the pieces of the object that fit into registers from the 4526 // parameter save area. 4527 for (unsigned j=0; j<Size; j+=PtrByteSize) { 4528 SDValue Const = DAG.getConstant(j, PtrOff.getValueType()); 4529 SDValue AddArg = DAG.getNode(ISD::ADD, dl, PtrVT, Arg, Const); 4530 if (GPR_idx != NumGPRs) { 4531 SDValue Load = DAG.getLoad(PtrVT, dl, Chain, AddArg, 4532 MachinePointerInfo(), 4533 false, false, false, 0); 4534 MemOpChains.push_back(Load.getValue(1)); 4535 RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load)); 4536 ArgOffset += PtrByteSize; 4537 } else { 4538 ArgOffset += ((Size - j + PtrByteSize-1)/PtrByteSize)*PtrByteSize; 4539 break; 4540 } 4541 } 4542 continue; 4543 } 4544 4545 switch (Arg.getSimpleValueType().SimpleTy) { 4546 default: llvm_unreachable("Unexpected ValueType for argument!"); 4547 case MVT::i1: 4548 case MVT::i32: 4549 case MVT::i64: 4550 if (GPR_idx != NumGPRs) { 4551 if (Arg.getValueType() == MVT::i1) 4552 Arg = DAG.getNode(ISD::ZERO_EXTEND, dl, PtrVT, Arg); 4553 4554 RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Arg)); 4555 } else { 4556 LowerMemOpCallTo(DAG, MF, Chain, Arg, PtrOff, SPDiff, ArgOffset, 4557 isPPC64, isTailCall, false, MemOpChains, 4558 TailCallArguments, dl); 4559 } 4560 ArgOffset += PtrByteSize; 4561 break; 4562 case MVT::f32: 4563 case MVT::f64: 4564 if (FPR_idx != NumFPRs) { 4565 RegsToPass.push_back(std::make_pair(FPR[FPR_idx++], Arg)); 4566 4567 if (isVarArg) { 4568 SDValue Store = DAG.getStore(Chain, dl, Arg, PtrOff, 4569 MachinePointerInfo(), false, false, 0); 4570 MemOpChains.push_back(Store); 4571 4572 // Float varargs are always shadowed in available integer registers 4573 if (GPR_idx != NumGPRs) { 4574 SDValue Load = DAG.getLoad(PtrVT, dl, Store, PtrOff, 4575 MachinePointerInfo(), false, false, 4576 false, 0); 4577 MemOpChains.push_back(Load.getValue(1)); 4578 RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load)); 4579 } 4580 if (GPR_idx != NumGPRs && Arg.getValueType() == MVT::f64 && !isPPC64){ 4581 SDValue ConstFour = DAG.getConstant(4, PtrOff.getValueType()); 4582 PtrOff = DAG.getNode(ISD::ADD, dl, PtrVT, PtrOff, ConstFour); 4583 SDValue Load = DAG.getLoad(PtrVT, dl, Store, PtrOff, 4584 MachinePointerInfo(), 4585 false, false, false, 0); 4586 MemOpChains.push_back(Load.getValue(1)); 4587 RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load)); 4588 } 4589 } else { 4590 // If we have any FPRs remaining, we may also have GPRs remaining. 4591 // Args passed in FPRs consume either 1 (f32) or 2 (f64) available 4592 // GPRs. 4593 if (GPR_idx != NumGPRs) 4594 ++GPR_idx; 4595 if (GPR_idx != NumGPRs && Arg.getValueType() == MVT::f64 && 4596 !isPPC64) // PPC64 has 64-bit GPR's obviously :) 4597 ++GPR_idx; 4598 } 4599 } else 4600 LowerMemOpCallTo(DAG, MF, Chain, Arg, PtrOff, SPDiff, ArgOffset, 4601 isPPC64, isTailCall, false, MemOpChains, 4602 TailCallArguments, dl); 4603 if (isPPC64) 4604 ArgOffset += 8; 4605 else 4606 ArgOffset += Arg.getValueType() == MVT::f32 ? 4 : 8; 4607 break; 4608 case MVT::v4f32: 4609 case MVT::v4i32: 4610 case MVT::v8i16: 4611 case MVT::v16i8: 4612 if (isVarArg) { 4613 // These go aligned on the stack, or in the corresponding R registers 4614 // when within range. The Darwin PPC ABI doc claims they also go in 4615 // V registers; in fact gcc does this only for arguments that are 4616 // prototyped, not for those that match the ... We do it for all 4617 // arguments, seems to work. 4618 while (ArgOffset % 16 !=0) { 4619 ArgOffset += PtrByteSize; 4620 if (GPR_idx != NumGPRs) 4621 GPR_idx++; 4622 } 4623 // We could elide this store in the case where the object fits 4624 // entirely in R registers. Maybe later. 4625 PtrOff = DAG.getNode(ISD::ADD, dl, PtrVT, StackPtr, 4626 DAG.getConstant(ArgOffset, PtrVT)); 4627 SDValue Store = DAG.getStore(Chain, dl, Arg, PtrOff, 4628 MachinePointerInfo(), false, false, 0); 4629 MemOpChains.push_back(Store); 4630 if (VR_idx != NumVRs) { 4631 SDValue Load = DAG.getLoad(MVT::v4f32, dl, Store, PtrOff, 4632 MachinePointerInfo(), 4633 false, false, false, 0); 4634 MemOpChains.push_back(Load.getValue(1)); 4635 RegsToPass.push_back(std::make_pair(VR[VR_idx++], Load)); 4636 } 4637 ArgOffset += 16; 4638 for (unsigned i=0; i<16; i+=PtrByteSize) { 4639 if (GPR_idx == NumGPRs) 4640 break; 4641 SDValue Ix = DAG.getNode(ISD::ADD, dl, PtrVT, PtrOff, 4642 DAG.getConstant(i, PtrVT)); 4643 SDValue Load = DAG.getLoad(PtrVT, dl, Store, Ix, MachinePointerInfo(), 4644 false, false, false, 0); 4645 MemOpChains.push_back(Load.getValue(1)); 4646 RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load)); 4647 } 4648 break; 4649 } 4650 4651 // Non-varargs Altivec params generally go in registers, but have 4652 // stack space allocated at the end. 4653 if (VR_idx != NumVRs) { 4654 // Doesn't have GPR space allocated. 4655 RegsToPass.push_back(std::make_pair(VR[VR_idx++], Arg)); 4656 } else if (nAltivecParamsAtEnd==0) { 4657 // We are emitting Altivec params in order. 4658 LowerMemOpCallTo(DAG, MF, Chain, Arg, PtrOff, SPDiff, ArgOffset, 4659 isPPC64, isTailCall, true, MemOpChains, 4660 TailCallArguments, dl); 4661 ArgOffset += 16; 4662 } 4663 break; 4664 } 4665 } 4666 // If all Altivec parameters fit in registers, as they usually do, 4667 // they get stack space following the non-Altivec parameters. We 4668 // don't track this here because nobody below needs it. 4669 // If there are more Altivec parameters than fit in registers emit 4670 // the stores here. 4671 if (!isVarArg && nAltivecParamsAtEnd > NumVRs) { 4672 unsigned j = 0; 4673 // Offset is aligned; skip 1st 12 params which go in V registers. 4674 ArgOffset = ((ArgOffset+15)/16)*16; 4675 ArgOffset += 12*16; 4676 for (unsigned i = 0; i != NumOps; ++i) { 4677 SDValue Arg = OutVals[i]; 4678 EVT ArgType = Outs[i].VT; 4679 if (ArgType==MVT::v4f32 || ArgType==MVT::v4i32 || 4680 ArgType==MVT::v8i16 || ArgType==MVT::v16i8) { 4681 if (++j > NumVRs) { 4682 SDValue PtrOff; 4683 // We are emitting Altivec params in order. 4684 LowerMemOpCallTo(DAG, MF, Chain, Arg, PtrOff, SPDiff, ArgOffset, 4685 isPPC64, isTailCall, true, MemOpChains, 4686 TailCallArguments, dl); 4687 ArgOffset += 16; 4688 } 4689 } 4690 } 4691 } 4692 4693 if (!MemOpChains.empty()) 4694 Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, MemOpChains); 4695 4696 // On Darwin, R12 must contain the address of an indirect callee. This does 4697 // not mean the MTCTR instruction must use R12; it's easier to model this as 4698 // an extra parameter, so do that. 4699 if (!isTailCall && 4700 !dyn_cast<GlobalAddressSDNode>(Callee) && 4701 !dyn_cast<ExternalSymbolSDNode>(Callee) && 4702 !isBLACompatibleAddress(Callee, DAG)) 4703 RegsToPass.push_back(std::make_pair((unsigned)(isPPC64 ? PPC::X12 : 4704 PPC::R12), Callee)); 4705 4706 // Build a sequence of copy-to-reg nodes chained together with token chain 4707 // and flag operands which copy the outgoing args into the appropriate regs. 4708 SDValue InFlag; 4709 for (unsigned i = 0, e = RegsToPass.size(); i != e; ++i) { 4710 Chain = DAG.getCopyToReg(Chain, dl, RegsToPass[i].first, 4711 RegsToPass[i].second, InFlag); 4712 InFlag = Chain.getValue(1); 4713 } 4714 4715 if (isTailCall) 4716 PrepareTailCall(DAG, InFlag, Chain, dl, isPPC64, SPDiff, NumBytes, LROp, 4717 FPOp, true, TailCallArguments); 4718 4719 return FinishCall(CallConv, dl, isTailCall, isVarArg, DAG, 4720 RegsToPass, InFlag, Chain, Callee, SPDiff, NumBytes, 4721 Ins, InVals); 4722 } 4723 4724 bool 4725 PPCTargetLowering::CanLowerReturn(CallingConv::ID CallConv, 4726 MachineFunction &MF, bool isVarArg, 4727 const SmallVectorImpl<ISD::OutputArg> &Outs, 4728 LLVMContext &Context) const { 4729 SmallVector<CCValAssign, 16> RVLocs; 4730 CCState CCInfo(CallConv, isVarArg, MF, getTargetMachine(), 4731 RVLocs, Context); 4732 return CCInfo.CheckReturn(Outs, RetCC_PPC); 4733 } 4734 4735 SDValue 4736 PPCTargetLowering::LowerReturn(SDValue Chain, 4737 CallingConv::ID CallConv, bool isVarArg, 4738 const SmallVectorImpl<ISD::OutputArg> &Outs, 4739 const SmallVectorImpl<SDValue> &OutVals, 4740 SDLoc dl, SelectionDAG &DAG) const { 4741 4742 SmallVector<CCValAssign, 16> RVLocs; 4743 CCState CCInfo(CallConv, isVarArg, DAG.getMachineFunction(), 4744 getTargetMachine(), RVLocs, *DAG.getContext()); 4745 CCInfo.AnalyzeReturn(Outs, RetCC_PPC); 4746 4747 SDValue Flag; 4748 SmallVector<SDValue, 4> RetOps(1, Chain); 4749 4750 // Copy the result values into the output registers. 4751 for (unsigned i = 0; i != RVLocs.size(); ++i) { 4752 CCValAssign &VA = RVLocs[i]; 4753 assert(VA.isRegLoc() && "Can only return in registers!"); 4754 4755 SDValue Arg = OutVals[i]; 4756 4757 switch (VA.getLocInfo()) { 4758 default: llvm_unreachable("Unknown loc info!"); 4759 case CCValAssign::Full: break; 4760 case CCValAssign::AExt: 4761 Arg = DAG.getNode(ISD::ANY_EXTEND, dl, VA.getLocVT(), Arg); 4762 break; 4763 case CCValAssign::ZExt: 4764 Arg = DAG.getNode(ISD::ZERO_EXTEND, dl, VA.getLocVT(), Arg); 4765 break; 4766 case CCValAssign::SExt: 4767 Arg = DAG.getNode(ISD::SIGN_EXTEND, dl, VA.getLocVT(), Arg); 4768 break; 4769 } 4770 4771 Chain = DAG.getCopyToReg(Chain, dl, VA.getLocReg(), Arg, Flag); 4772 Flag = Chain.getValue(1); 4773 RetOps.push_back(DAG.getRegister(VA.getLocReg(), VA.getLocVT())); 4774 } 4775 4776 RetOps[0] = Chain; // Update chain. 4777 4778 // Add the flag if we have it. 4779 if (Flag.getNode()) 4780 RetOps.push_back(Flag); 4781 4782 return DAG.getNode(PPCISD::RET_FLAG, dl, MVT::Other, RetOps); 4783 } 4784 4785 SDValue PPCTargetLowering::LowerSTACKRESTORE(SDValue Op, SelectionDAG &DAG, 4786 const PPCSubtarget &Subtarget) const { 4787 // When we pop the dynamic allocation we need to restore the SP link. 4788 SDLoc dl(Op); 4789 4790 // Get the corect type for pointers. 4791 EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(); 4792 4793 // Construct the stack pointer operand. 4794 bool isPPC64 = Subtarget.isPPC64(); 4795 unsigned SP = isPPC64 ? PPC::X1 : PPC::R1; 4796 SDValue StackPtr = DAG.getRegister(SP, PtrVT); 4797 4798 // Get the operands for the STACKRESTORE. 4799 SDValue Chain = Op.getOperand(0); 4800 SDValue SaveSP = Op.getOperand(1); 4801 4802 // Load the old link SP. 4803 SDValue LoadLinkSP = DAG.getLoad(PtrVT, dl, Chain, StackPtr, 4804 MachinePointerInfo(), 4805 false, false, false, 0); 4806 4807 // Restore the stack pointer. 4808 Chain = DAG.getCopyToReg(LoadLinkSP.getValue(1), dl, SP, SaveSP); 4809 4810 // Store the old link SP. 4811 return DAG.getStore(Chain, dl, LoadLinkSP, StackPtr, MachinePointerInfo(), 4812 false, false, 0); 4813 } 4814 4815 4816 4817 SDValue 4818 PPCTargetLowering::getReturnAddrFrameIndex(SelectionDAG & DAG) const { 4819 MachineFunction &MF = DAG.getMachineFunction(); 4820 bool isPPC64 = PPCSubTarget.isPPC64(); 4821 bool isDarwinABI = PPCSubTarget.isDarwinABI(); 4822 EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(); 4823 4824 // Get current frame pointer save index. The users of this index will be 4825 // primarily DYNALLOC instructions. 4826 PPCFunctionInfo *FI = MF.getInfo<PPCFunctionInfo>(); 4827 int RASI = FI->getReturnAddrSaveIndex(); 4828 4829 // If the frame pointer save index hasn't been defined yet. 4830 if (!RASI) { 4831 // Find out what the fix offset of the frame pointer save area. 4832 int LROffset = PPCFrameLowering::getReturnSaveOffset(isPPC64, isDarwinABI); 4833 // Allocate the frame index for frame pointer save area. 4834 RASI = MF.getFrameInfo()->CreateFixedObject(isPPC64? 8 : 4, LROffset, true); 4835 // Save the result. 4836 FI->setReturnAddrSaveIndex(RASI); 4837 } 4838 return DAG.getFrameIndex(RASI, PtrVT); 4839 } 4840 4841 SDValue 4842 PPCTargetLowering::getFramePointerFrameIndex(SelectionDAG & DAG) const { 4843 MachineFunction &MF = DAG.getMachineFunction(); 4844 bool isPPC64 = PPCSubTarget.isPPC64(); 4845 bool isDarwinABI = PPCSubTarget.isDarwinABI(); 4846 EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(); 4847 4848 // Get current frame pointer save index. The users of this index will be 4849 // primarily DYNALLOC instructions. 4850 PPCFunctionInfo *FI = MF.getInfo<PPCFunctionInfo>(); 4851 int FPSI = FI->getFramePointerSaveIndex(); 4852 4853 // If the frame pointer save index hasn't been defined yet. 4854 if (!FPSI) { 4855 // Find out what the fix offset of the frame pointer save area. 4856 int FPOffset = PPCFrameLowering::getFramePointerSaveOffset(isPPC64, 4857 isDarwinABI); 4858 4859 // Allocate the frame index for frame pointer save area. 4860 FPSI = MF.getFrameInfo()->CreateFixedObject(isPPC64? 8 : 4, FPOffset, true); 4861 // Save the result. 4862 FI->setFramePointerSaveIndex(FPSI); 4863 } 4864 return DAG.getFrameIndex(FPSI, PtrVT); 4865 } 4866 4867 SDValue PPCTargetLowering::LowerDYNAMIC_STACKALLOC(SDValue Op, 4868 SelectionDAG &DAG, 4869 const PPCSubtarget &Subtarget) const { 4870 // Get the inputs. 4871 SDValue Chain = Op.getOperand(0); 4872 SDValue Size = Op.getOperand(1); 4873 SDLoc dl(Op); 4874 4875 // Get the corect type for pointers. 4876 EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(); 4877 // Negate the size. 4878 SDValue NegSize = DAG.getNode(ISD::SUB, dl, PtrVT, 4879 DAG.getConstant(0, PtrVT), Size); 4880 // Construct a node for the frame pointer save index. 4881 SDValue FPSIdx = getFramePointerFrameIndex(DAG); 4882 // Build a DYNALLOC node. 4883 SDValue Ops[3] = { Chain, NegSize, FPSIdx }; 4884 SDVTList VTs = DAG.getVTList(PtrVT, MVT::Other); 4885 return DAG.getNode(PPCISD::DYNALLOC, dl, VTs, Ops); 4886 } 4887 4888 SDValue PPCTargetLowering::lowerEH_SJLJ_SETJMP(SDValue Op, 4889 SelectionDAG &DAG) const { 4890 SDLoc DL(Op); 4891 return DAG.getNode(PPCISD::EH_SJLJ_SETJMP, DL, 4892 DAG.getVTList(MVT::i32, MVT::Other), 4893 Op.getOperand(0), Op.getOperand(1)); 4894 } 4895 4896 SDValue PPCTargetLowering::lowerEH_SJLJ_LONGJMP(SDValue Op, 4897 SelectionDAG &DAG) const { 4898 SDLoc DL(Op); 4899 return DAG.getNode(PPCISD::EH_SJLJ_LONGJMP, DL, MVT::Other, 4900 Op.getOperand(0), Op.getOperand(1)); 4901 } 4902 4903 SDValue PPCTargetLowering::LowerLOAD(SDValue Op, SelectionDAG &DAG) const { 4904 assert(Op.getValueType() == MVT::i1 && 4905 "Custom lowering only for i1 loads"); 4906 4907 // First, load 8 bits into 32 bits, then truncate to 1 bit. 4908 4909 SDLoc dl(Op); 4910 LoadSDNode *LD = cast<LoadSDNode>(Op); 4911 4912 SDValue Chain = LD->getChain(); 4913 SDValue BasePtr = LD->getBasePtr(); 4914 MachineMemOperand *MMO = LD->getMemOperand(); 4915 4916 SDValue NewLD = DAG.getExtLoad(ISD::EXTLOAD, dl, getPointerTy(), Chain, 4917 BasePtr, MVT::i8, MMO); 4918 SDValue Result = DAG.getNode(ISD::TRUNCATE, dl, MVT::i1, NewLD); 4919 4920 SDValue Ops[] = { Result, SDValue(NewLD.getNode(), 1) }; 4921 return DAG.getMergeValues(Ops, dl); 4922 } 4923 4924 SDValue PPCTargetLowering::LowerSTORE(SDValue Op, SelectionDAG &DAG) const { 4925 assert(Op.getOperand(1).getValueType() == MVT::i1 && 4926 "Custom lowering only for i1 stores"); 4927 4928 // First, zero extend to 32 bits, then use a truncating store to 8 bits. 4929 4930 SDLoc dl(Op); 4931 StoreSDNode *ST = cast<StoreSDNode>(Op); 4932 4933 SDValue Chain = ST->getChain(); 4934 SDValue BasePtr = ST->getBasePtr(); 4935 SDValue Value = ST->getValue(); 4936 MachineMemOperand *MMO = ST->getMemOperand(); 4937 4938 Value = DAG.getNode(ISD::ZERO_EXTEND, dl, getPointerTy(), Value); 4939 return DAG.getTruncStore(Chain, dl, Value, BasePtr, MVT::i8, MMO); 4940 } 4941 4942 // FIXME: Remove this once the ANDI glue bug is fixed: 4943 SDValue PPCTargetLowering::LowerTRUNCATE(SDValue Op, SelectionDAG &DAG) const { 4944 assert(Op.getValueType() == MVT::i1 && 4945 "Custom lowering only for i1 results"); 4946 4947 SDLoc DL(Op); 4948 return DAG.getNode(PPCISD::ANDIo_1_GT_BIT, DL, MVT::i1, 4949 Op.getOperand(0)); 4950 } 4951 4952 /// LowerSELECT_CC - Lower floating point select_cc's into fsel instruction when 4953 /// possible. 4954 SDValue PPCTargetLowering::LowerSELECT_CC(SDValue Op, SelectionDAG &DAG) const { 4955 // Not FP? Not a fsel. 4956 if (!Op.getOperand(0).getValueType().isFloatingPoint() || 4957 !Op.getOperand(2).getValueType().isFloatingPoint()) 4958 return Op; 4959 4960 // We might be able to do better than this under some circumstances, but in 4961 // general, fsel-based lowering of select is a finite-math-only optimization. 4962 // For more information, see section F.3 of the 2.06 ISA specification. 4963 if (!DAG.getTarget().Options.NoInfsFPMath || 4964 !DAG.getTarget().Options.NoNaNsFPMath) 4965 return Op; 4966 4967 ISD::CondCode CC = cast<CondCodeSDNode>(Op.getOperand(4))->get(); 4968 4969 EVT ResVT = Op.getValueType(); 4970 EVT CmpVT = Op.getOperand(0).getValueType(); 4971 SDValue LHS = Op.getOperand(0), RHS = Op.getOperand(1); 4972 SDValue TV = Op.getOperand(2), FV = Op.getOperand(3); 4973 SDLoc dl(Op); 4974 4975 // If the RHS of the comparison is a 0.0, we don't need to do the 4976 // subtraction at all. 4977 SDValue Sel1; 4978 if (isFloatingPointZero(RHS)) 4979 switch (CC) { 4980 default: break; // SETUO etc aren't handled by fsel. 4981 case ISD::SETNE: 4982 std::swap(TV, FV); 4983 case ISD::SETEQ: 4984 if (LHS.getValueType() == MVT::f32) // Comparison is always 64-bits 4985 LHS = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, LHS); 4986 Sel1 = DAG.getNode(PPCISD::FSEL, dl, ResVT, LHS, TV, FV); 4987 if (Sel1.getValueType() == MVT::f32) // Comparison is always 64-bits 4988 Sel1 = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, Sel1); 4989 return DAG.getNode(PPCISD::FSEL, dl, ResVT, 4990 DAG.getNode(ISD::FNEG, dl, MVT::f64, LHS), Sel1, FV); 4991 case ISD::SETULT: 4992 case ISD::SETLT: 4993 std::swap(TV, FV); // fsel is natively setge, swap operands for setlt 4994 case ISD::SETOGE: 4995 case ISD::SETGE: 4996 if (LHS.getValueType() == MVT::f32) // Comparison is always 64-bits 4997 LHS = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, LHS); 4998 return DAG.getNode(PPCISD::FSEL, dl, ResVT, LHS, TV, FV); 4999 case ISD::SETUGT: 5000 case ISD::SETGT: 5001 std::swap(TV, FV); // fsel is natively setge, swap operands for setlt 5002 case ISD::SETOLE: 5003 case ISD::SETLE: 5004 if (LHS.getValueType() == MVT::f32) // Comparison is always 64-bits 5005 LHS = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, LHS); 5006 return DAG.getNode(PPCISD::FSEL, dl, ResVT, 5007 DAG.getNode(ISD::FNEG, dl, MVT::f64, LHS), TV, FV); 5008 } 5009 5010 SDValue Cmp; 5011 switch (CC) { 5012 default: break; // SETUO etc aren't handled by fsel. 5013 case ISD::SETNE: 5014 std::swap(TV, FV); 5015 case ISD::SETEQ: 5016 Cmp = DAG.getNode(ISD::FSUB, dl, CmpVT, LHS, RHS); 5017 if (Cmp.getValueType() == MVT::f32) // Comparison is always 64-bits 5018 Cmp = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, Cmp); 5019 Sel1 = DAG.getNode(PPCISD::FSEL, dl, ResVT, Cmp, TV, FV); 5020 if (Sel1.getValueType() == MVT::f32) // Comparison is always 64-bits 5021 Sel1 = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, Sel1); 5022 return DAG.getNode(PPCISD::FSEL, dl, ResVT, 5023 DAG.getNode(ISD::FNEG, dl, MVT::f64, Cmp), Sel1, FV); 5024 case ISD::SETULT: 5025 case ISD::SETLT: 5026 Cmp = DAG.getNode(ISD::FSUB, dl, CmpVT, LHS, RHS); 5027 if (Cmp.getValueType() == MVT::f32) // Comparison is always 64-bits 5028 Cmp = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, Cmp); 5029 return DAG.getNode(PPCISD::FSEL, dl, ResVT, Cmp, FV, TV); 5030 case ISD::SETOGE: 5031 case ISD::SETGE: 5032 Cmp = DAG.getNode(ISD::FSUB, dl, CmpVT, LHS, RHS); 5033 if (Cmp.getValueType() == MVT::f32) // Comparison is always 64-bits 5034 Cmp = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, Cmp); 5035 return DAG.getNode(PPCISD::FSEL, dl, ResVT, Cmp, TV, FV); 5036 case ISD::SETUGT: 5037 case ISD::SETGT: 5038 Cmp = DAG.getNode(ISD::FSUB, dl, CmpVT, RHS, LHS); 5039 if (Cmp.getValueType() == MVT::f32) // Comparison is always 64-bits 5040 Cmp = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, Cmp); 5041 return DAG.getNode(PPCISD::FSEL, dl, ResVT, Cmp, FV, TV); 5042 case ISD::SETOLE: 5043 case ISD::SETLE: 5044 Cmp = DAG.getNode(ISD::FSUB, dl, CmpVT, RHS, LHS); 5045 if (Cmp.getValueType() == MVT::f32) // Comparison is always 64-bits 5046 Cmp = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, Cmp); 5047 return DAG.getNode(PPCISD::FSEL, dl, ResVT, Cmp, TV, FV); 5048 } 5049 return Op; 5050 } 5051 5052 // FIXME: Split this code up when LegalizeDAGTypes lands. 5053 SDValue PPCTargetLowering::LowerFP_TO_INT(SDValue Op, SelectionDAG &DAG, 5054 SDLoc dl) const { 5055 assert(Op.getOperand(0).getValueType().isFloatingPoint()); 5056 SDValue Src = Op.getOperand(0); 5057 if (Src.getValueType() == MVT::f32) 5058 Src = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, Src); 5059 5060 SDValue Tmp; 5061 switch (Op.getSimpleValueType().SimpleTy) { 5062 default: llvm_unreachable("Unhandled FP_TO_INT type in custom expander!"); 5063 case MVT::i32: 5064 Tmp = DAG.getNode(Op.getOpcode()==ISD::FP_TO_SINT ? PPCISD::FCTIWZ : 5065 (PPCSubTarget.hasFPCVT() ? PPCISD::FCTIWUZ : 5066 PPCISD::FCTIDZ), 5067 dl, MVT::f64, Src); 5068 break; 5069 case MVT::i64: 5070 assert((Op.getOpcode() == ISD::FP_TO_SINT || PPCSubTarget.hasFPCVT()) && 5071 "i64 FP_TO_UINT is supported only with FPCVT"); 5072 Tmp = DAG.getNode(Op.getOpcode()==ISD::FP_TO_SINT ? PPCISD::FCTIDZ : 5073 PPCISD::FCTIDUZ, 5074 dl, MVT::f64, Src); 5075 break; 5076 } 5077 5078 // Convert the FP value to an int value through memory. 5079 bool i32Stack = Op.getValueType() == MVT::i32 && PPCSubTarget.hasSTFIWX() && 5080 (Op.getOpcode() == ISD::FP_TO_SINT || PPCSubTarget.hasFPCVT()); 5081 SDValue FIPtr = DAG.CreateStackTemporary(i32Stack ? MVT::i32 : MVT::f64); 5082 int FI = cast<FrameIndexSDNode>(FIPtr)->getIndex(); 5083 MachinePointerInfo MPI = MachinePointerInfo::getFixedStack(FI); 5084 5085 // Emit a store to the stack slot. 5086 SDValue Chain; 5087 if (i32Stack) { 5088 MachineFunction &MF = DAG.getMachineFunction(); 5089 MachineMemOperand *MMO = 5090 MF.getMachineMemOperand(MPI, MachineMemOperand::MOStore, 4, 4); 5091 SDValue Ops[] = { DAG.getEntryNode(), Tmp, FIPtr }; 5092 Chain = DAG.getMemIntrinsicNode(PPCISD::STFIWX, dl, 5093 DAG.getVTList(MVT::Other), Ops, MVT::i32, MMO); 5094 } else 5095 Chain = DAG.getStore(DAG.getEntryNode(), dl, Tmp, FIPtr, 5096 MPI, false, false, 0); 5097 5098 // Result is a load from the stack slot. If loading 4 bytes, make sure to 5099 // add in a bias. 5100 if (Op.getValueType() == MVT::i32 && !i32Stack) { 5101 FIPtr = DAG.getNode(ISD::ADD, dl, FIPtr.getValueType(), FIPtr, 5102 DAG.getConstant(4, FIPtr.getValueType())); 5103 MPI = MachinePointerInfo(); 5104 } 5105 5106 return DAG.getLoad(Op.getValueType(), dl, Chain, FIPtr, MPI, 5107 false, false, false, 0); 5108 } 5109 5110 SDValue PPCTargetLowering::LowerINT_TO_FP(SDValue Op, 5111 SelectionDAG &DAG) const { 5112 SDLoc dl(Op); 5113 // Don't handle ppc_fp128 here; let it be lowered to a libcall. 5114 if (Op.getValueType() != MVT::f32 && Op.getValueType() != MVT::f64) 5115 return SDValue(); 5116 5117 if (Op.getOperand(0).getValueType() == MVT::i1) 5118 return DAG.getNode(ISD::SELECT, dl, Op.getValueType(), Op.getOperand(0), 5119 DAG.getConstantFP(1.0, Op.getValueType()), 5120 DAG.getConstantFP(0.0, Op.getValueType())); 5121 5122 assert((Op.getOpcode() == ISD::SINT_TO_FP || PPCSubTarget.hasFPCVT()) && 5123 "UINT_TO_FP is supported only with FPCVT"); 5124 5125 // If we have FCFIDS, then use it when converting to single-precision. 5126 // Otherwise, convert to double-precision and then round. 5127 unsigned FCFOp = (PPCSubTarget.hasFPCVT() && Op.getValueType() == MVT::f32) ? 5128 (Op.getOpcode() == ISD::UINT_TO_FP ? 5129 PPCISD::FCFIDUS : PPCISD::FCFIDS) : 5130 (Op.getOpcode() == ISD::UINT_TO_FP ? 5131 PPCISD::FCFIDU : PPCISD::FCFID); 5132 MVT FCFTy = (PPCSubTarget.hasFPCVT() && Op.getValueType() == MVT::f32) ? 5133 MVT::f32 : MVT::f64; 5134 5135 if (Op.getOperand(0).getValueType() == MVT::i64) { 5136 SDValue SINT = Op.getOperand(0); 5137 // When converting to single-precision, we actually need to convert 5138 // to double-precision first and then round to single-precision. 5139 // To avoid double-rounding effects during that operation, we have 5140 // to prepare the input operand. Bits that might be truncated when 5141 // converting to double-precision are replaced by a bit that won't 5142 // be lost at this stage, but is below the single-precision rounding 5143 // position. 5144 // 5145 // However, if -enable-unsafe-fp-math is in effect, accept double 5146 // rounding to avoid the extra overhead. 5147 if (Op.getValueType() == MVT::f32 && 5148 !PPCSubTarget.hasFPCVT() && 5149 !DAG.getTarget().Options.UnsafeFPMath) { 5150 5151 // Twiddle input to make sure the low 11 bits are zero. (If this 5152 // is the case, we are guaranteed the value will fit into the 53 bit 5153 // mantissa of an IEEE double-precision value without rounding.) 5154 // If any of those low 11 bits were not zero originally, make sure 5155 // bit 12 (value 2048) is set instead, so that the final rounding 5156 // to single-precision gets the correct result. 5157 SDValue Round = DAG.getNode(ISD::AND, dl, MVT::i64, 5158 SINT, DAG.getConstant(2047, MVT::i64)); 5159 Round = DAG.getNode(ISD::ADD, dl, MVT::i64, 5160 Round, DAG.getConstant(2047, MVT::i64)); 5161 Round = DAG.getNode(ISD::OR, dl, MVT::i64, Round, SINT); 5162 Round = DAG.getNode(ISD::AND, dl, MVT::i64, 5163 Round, DAG.getConstant(-2048, MVT::i64)); 5164 5165 // However, we cannot use that value unconditionally: if the magnitude 5166 // of the input value is small, the bit-twiddling we did above might 5167 // end up visibly changing the output. Fortunately, in that case, we 5168 // don't need to twiddle bits since the original input will convert 5169 // exactly to double-precision floating-point already. Therefore, 5170 // construct a conditional to use the original value if the top 11 5171 // bits are all sign-bit copies, and use the rounded value computed 5172 // above otherwise. 5173 SDValue Cond = DAG.getNode(ISD::SRA, dl, MVT::i64, 5174 SINT, DAG.getConstant(53, MVT::i32)); 5175 Cond = DAG.getNode(ISD::ADD, dl, MVT::i64, 5176 Cond, DAG.getConstant(1, MVT::i64)); 5177 Cond = DAG.getSetCC(dl, MVT::i32, 5178 Cond, DAG.getConstant(1, MVT::i64), ISD::SETUGT); 5179 5180 SINT = DAG.getNode(ISD::SELECT, dl, MVT::i64, Cond, Round, SINT); 5181 } 5182 5183 SDValue Bits = DAG.getNode(ISD::BITCAST, dl, MVT::f64, SINT); 5184 SDValue FP = DAG.getNode(FCFOp, dl, FCFTy, Bits); 5185 5186 if (Op.getValueType() == MVT::f32 && !PPCSubTarget.hasFPCVT()) 5187 FP = DAG.getNode(ISD::FP_ROUND, dl, 5188 MVT::f32, FP, DAG.getIntPtrConstant(0)); 5189 return FP; 5190 } 5191 5192 assert(Op.getOperand(0).getValueType() == MVT::i32 && 5193 "Unhandled INT_TO_FP type in custom expander!"); 5194 // Since we only generate this in 64-bit mode, we can take advantage of 5195 // 64-bit registers. In particular, sign extend the input value into the 5196 // 64-bit register with extsw, store the WHOLE 64-bit value into the stack 5197 // then lfd it and fcfid it. 5198 MachineFunction &MF = DAG.getMachineFunction(); 5199 MachineFrameInfo *FrameInfo = MF.getFrameInfo(); 5200 EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(); 5201 5202 SDValue Ld; 5203 if (PPCSubTarget.hasLFIWAX() || PPCSubTarget.hasFPCVT()) { 5204 int FrameIdx = FrameInfo->CreateStackObject(4, 4, false); 5205 SDValue FIdx = DAG.getFrameIndex(FrameIdx, PtrVT); 5206 5207 SDValue Store = DAG.getStore(DAG.getEntryNode(), dl, Op.getOperand(0), FIdx, 5208 MachinePointerInfo::getFixedStack(FrameIdx), 5209 false, false, 0); 5210 5211 assert(cast<StoreSDNode>(Store)->getMemoryVT() == MVT::i32 && 5212 "Expected an i32 store"); 5213 MachineMemOperand *MMO = 5214 MF.getMachineMemOperand(MachinePointerInfo::getFixedStack(FrameIdx), 5215 MachineMemOperand::MOLoad, 4, 4); 5216 SDValue Ops[] = { Store, FIdx }; 5217 Ld = DAG.getMemIntrinsicNode(Op.getOpcode() == ISD::UINT_TO_FP ? 5218 PPCISD::LFIWZX : PPCISD::LFIWAX, 5219 dl, DAG.getVTList(MVT::f64, MVT::Other), 5220 Ops, MVT::i32, MMO); 5221 } else { 5222 assert(PPCSubTarget.isPPC64() && 5223 "i32->FP without LFIWAX supported only on PPC64"); 5224 5225 int FrameIdx = FrameInfo->CreateStackObject(8, 8, false); 5226 SDValue FIdx = DAG.getFrameIndex(FrameIdx, PtrVT); 5227 5228 SDValue Ext64 = DAG.getNode(ISD::SIGN_EXTEND, dl, MVT::i64, 5229 Op.getOperand(0)); 5230 5231 // STD the extended value into the stack slot. 5232 SDValue Store = DAG.getStore(DAG.getEntryNode(), dl, Ext64, FIdx, 5233 MachinePointerInfo::getFixedStack(FrameIdx), 5234 false, false, 0); 5235 5236 // Load the value as a double. 5237 Ld = DAG.getLoad(MVT::f64, dl, Store, FIdx, 5238 MachinePointerInfo::getFixedStack(FrameIdx), 5239 false, false, false, 0); 5240 } 5241 5242 // FCFID it and return it. 5243 SDValue FP = DAG.getNode(FCFOp, dl, FCFTy, Ld); 5244 if (Op.getValueType() == MVT::f32 && !PPCSubTarget.hasFPCVT()) 5245 FP = DAG.getNode(ISD::FP_ROUND, dl, MVT::f32, FP, DAG.getIntPtrConstant(0)); 5246 return FP; 5247 } 5248 5249 SDValue PPCTargetLowering::LowerFLT_ROUNDS_(SDValue Op, 5250 SelectionDAG &DAG) const { 5251 SDLoc dl(Op); 5252 /* 5253 The rounding mode is in bits 30:31 of FPSR, and has the following 5254 settings: 5255 00 Round to nearest 5256 01 Round to 0 5257 10 Round to +inf 5258 11 Round to -inf 5259 5260 FLT_ROUNDS, on the other hand, expects the following: 5261 -1 Undefined 5262 0 Round to 0 5263 1 Round to nearest 5264 2 Round to +inf 5265 3 Round to -inf 5266 5267 To perform the conversion, we do: 5268 ((FPSCR & 0x3) ^ ((~FPSCR & 0x3) >> 1)) 5269 */ 5270 5271 MachineFunction &MF = DAG.getMachineFunction(); 5272 EVT VT = Op.getValueType(); 5273 EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(); 5274 5275 // Save FP Control Word to register 5276 EVT NodeTys[] = { 5277 MVT::f64, // return register 5278 MVT::Glue // unused in this context 5279 }; 5280 SDValue Chain = DAG.getNode(PPCISD::MFFS, dl, NodeTys, None); 5281 5282 // Save FP register to stack slot 5283 int SSFI = MF.getFrameInfo()->CreateStackObject(8, 8, false); 5284 SDValue StackSlot = DAG.getFrameIndex(SSFI, PtrVT); 5285 SDValue Store = DAG.getStore(DAG.getEntryNode(), dl, Chain, 5286 StackSlot, MachinePointerInfo(), false, false,0); 5287 5288 // Load FP Control Word from low 32 bits of stack slot. 5289 SDValue Four = DAG.getConstant(4, PtrVT); 5290 SDValue Addr = DAG.getNode(ISD::ADD, dl, PtrVT, StackSlot, Four); 5291 SDValue CWD = DAG.getLoad(MVT::i32, dl, Store, Addr, MachinePointerInfo(), 5292 false, false, false, 0); 5293 5294 // Transform as necessary 5295 SDValue CWD1 = 5296 DAG.getNode(ISD::AND, dl, MVT::i32, 5297 CWD, DAG.getConstant(3, MVT::i32)); 5298 SDValue CWD2 = 5299 DAG.getNode(ISD::SRL, dl, MVT::i32, 5300 DAG.getNode(ISD::AND, dl, MVT::i32, 5301 DAG.getNode(ISD::XOR, dl, MVT::i32, 5302 CWD, DAG.getConstant(3, MVT::i32)), 5303 DAG.getConstant(3, MVT::i32)), 5304 DAG.getConstant(1, MVT::i32)); 5305 5306 SDValue RetVal = 5307 DAG.getNode(ISD::XOR, dl, MVT::i32, CWD1, CWD2); 5308 5309 return DAG.getNode((VT.getSizeInBits() < 16 ? 5310 ISD::TRUNCATE : ISD::ZERO_EXTEND), dl, VT, RetVal); 5311 } 5312 5313 SDValue PPCTargetLowering::LowerSHL_PARTS(SDValue Op, SelectionDAG &DAG) const { 5314 EVT VT = Op.getValueType(); 5315 unsigned BitWidth = VT.getSizeInBits(); 5316 SDLoc dl(Op); 5317 assert(Op.getNumOperands() == 3 && 5318 VT == Op.getOperand(1).getValueType() && 5319 "Unexpected SHL!"); 5320 5321 // Expand into a bunch of logical ops. Note that these ops 5322 // depend on the PPC behavior for oversized shift amounts. 5323 SDValue Lo = Op.getOperand(0); 5324 SDValue Hi = Op.getOperand(1); 5325 SDValue Amt = Op.getOperand(2); 5326 EVT AmtVT = Amt.getValueType(); 5327 5328 SDValue Tmp1 = DAG.getNode(ISD::SUB, dl, AmtVT, 5329 DAG.getConstant(BitWidth, AmtVT), Amt); 5330 SDValue Tmp2 = DAG.getNode(PPCISD::SHL, dl, VT, Hi, Amt); 5331 SDValue Tmp3 = DAG.getNode(PPCISD::SRL, dl, VT, Lo, Tmp1); 5332 SDValue Tmp4 = DAG.getNode(ISD::OR , dl, VT, Tmp2, Tmp3); 5333 SDValue Tmp5 = DAG.getNode(ISD::ADD, dl, AmtVT, Amt, 5334 DAG.getConstant(-BitWidth, AmtVT)); 5335 SDValue Tmp6 = DAG.getNode(PPCISD::SHL, dl, VT, Lo, Tmp5); 5336 SDValue OutHi = DAG.getNode(ISD::OR, dl, VT, Tmp4, Tmp6); 5337 SDValue OutLo = DAG.getNode(PPCISD::SHL, dl, VT, Lo, Amt); 5338 SDValue OutOps[] = { OutLo, OutHi }; 5339 return DAG.getMergeValues(OutOps, dl); 5340 } 5341 5342 SDValue PPCTargetLowering::LowerSRL_PARTS(SDValue Op, SelectionDAG &DAG) const { 5343 EVT VT = Op.getValueType(); 5344 SDLoc dl(Op); 5345 unsigned BitWidth = VT.getSizeInBits(); 5346 assert(Op.getNumOperands() == 3 && 5347 VT == Op.getOperand(1).getValueType() && 5348 "Unexpected SRL!"); 5349 5350 // Expand into a bunch of logical ops. Note that these ops 5351 // depend on the PPC behavior for oversized shift amounts. 5352 SDValue Lo = Op.getOperand(0); 5353 SDValue Hi = Op.getOperand(1); 5354 SDValue Amt = Op.getOperand(2); 5355 EVT AmtVT = Amt.getValueType(); 5356 5357 SDValue Tmp1 = DAG.getNode(ISD::SUB, dl, AmtVT, 5358 DAG.getConstant(BitWidth, AmtVT), Amt); 5359 SDValue Tmp2 = DAG.getNode(PPCISD::SRL, dl, VT, Lo, Amt); 5360 SDValue Tmp3 = DAG.getNode(PPCISD::SHL, dl, VT, Hi, Tmp1); 5361 SDValue Tmp4 = DAG.getNode(ISD::OR, dl, VT, Tmp2, Tmp3); 5362 SDValue Tmp5 = DAG.getNode(ISD::ADD, dl, AmtVT, Amt, 5363 DAG.getConstant(-BitWidth, AmtVT)); 5364 SDValue Tmp6 = DAG.getNode(PPCISD::SRL, dl, VT, Hi, Tmp5); 5365 SDValue OutLo = DAG.getNode(ISD::OR, dl, VT, Tmp4, Tmp6); 5366 SDValue OutHi = DAG.getNode(PPCISD::SRL, dl, VT, Hi, Amt); 5367 SDValue OutOps[] = { OutLo, OutHi }; 5368 return DAG.getMergeValues(OutOps, dl); 5369 } 5370 5371 SDValue PPCTargetLowering::LowerSRA_PARTS(SDValue Op, SelectionDAG &DAG) const { 5372 SDLoc dl(Op); 5373 EVT VT = Op.getValueType(); 5374 unsigned BitWidth = VT.getSizeInBits(); 5375 assert(Op.getNumOperands() == 3 && 5376 VT == Op.getOperand(1).getValueType() && 5377 "Unexpected SRA!"); 5378 5379 // Expand into a bunch of logical ops, followed by a select_cc. 5380 SDValue Lo = Op.getOperand(0); 5381 SDValue Hi = Op.getOperand(1); 5382 SDValue Amt = Op.getOperand(2); 5383 EVT AmtVT = Amt.getValueType(); 5384 5385 SDValue Tmp1 = DAG.getNode(ISD::SUB, dl, AmtVT, 5386 DAG.getConstant(BitWidth, AmtVT), Amt); 5387 SDValue Tmp2 = DAG.getNode(PPCISD::SRL, dl, VT, Lo, Amt); 5388 SDValue Tmp3 = DAG.getNode(PPCISD::SHL, dl, VT, Hi, Tmp1); 5389 SDValue Tmp4 = DAG.getNode(ISD::OR, dl, VT, Tmp2, Tmp3); 5390 SDValue Tmp5 = DAG.getNode(ISD::ADD, dl, AmtVT, Amt, 5391 DAG.getConstant(-BitWidth, AmtVT)); 5392 SDValue Tmp6 = DAG.getNode(PPCISD::SRA, dl, VT, Hi, Tmp5); 5393 SDValue OutHi = DAG.getNode(PPCISD::SRA, dl, VT, Hi, Amt); 5394 SDValue OutLo = DAG.getSelectCC(dl, Tmp5, DAG.getConstant(0, AmtVT), 5395 Tmp4, Tmp6, ISD::SETLE); 5396 SDValue OutOps[] = { OutLo, OutHi }; 5397 return DAG.getMergeValues(OutOps, dl); 5398 } 5399 5400 //===----------------------------------------------------------------------===// 5401 // Vector related lowering. 5402 // 5403 5404 /// BuildSplatI - Build a canonical splati of Val with an element size of 5405 /// SplatSize. Cast the result to VT. 5406 static SDValue BuildSplatI(int Val, unsigned SplatSize, EVT VT, 5407 SelectionDAG &DAG, SDLoc dl) { 5408 assert(Val >= -16 && Val <= 15 && "vsplti is out of range!"); 5409 5410 static const EVT VTys[] = { // canonical VT to use for each size. 5411 MVT::v16i8, MVT::v8i16, MVT::Other, MVT::v4i32 5412 }; 5413 5414 EVT ReqVT = VT != MVT::Other ? VT : VTys[SplatSize-1]; 5415 5416 // Force vspltis[hw] -1 to vspltisb -1 to canonicalize. 5417 if (Val == -1) 5418 SplatSize = 1; 5419 5420 EVT CanonicalVT = VTys[SplatSize-1]; 5421 5422 // Build a canonical splat for this value. 5423 SDValue Elt = DAG.getConstant(Val, MVT::i32); 5424 SmallVector<SDValue, 8> Ops; 5425 Ops.assign(CanonicalVT.getVectorNumElements(), Elt); 5426 SDValue Res = DAG.getNode(ISD::BUILD_VECTOR, dl, CanonicalVT, Ops); 5427 return DAG.getNode(ISD::BITCAST, dl, ReqVT, Res); 5428 } 5429 5430 /// BuildIntrinsicOp - Return a unary operator intrinsic node with the 5431 /// specified intrinsic ID. 5432 static SDValue BuildIntrinsicOp(unsigned IID, SDValue Op, 5433 SelectionDAG &DAG, SDLoc dl, 5434 EVT DestVT = MVT::Other) { 5435 if (DestVT == MVT::Other) DestVT = Op.getValueType(); 5436 return DAG.getNode(ISD::INTRINSIC_WO_CHAIN, dl, DestVT, 5437 DAG.getConstant(IID, MVT::i32), Op); 5438 } 5439 5440 /// BuildIntrinsicOp - Return a binary operator intrinsic node with the 5441 /// specified intrinsic ID. 5442 static SDValue BuildIntrinsicOp(unsigned IID, SDValue LHS, SDValue RHS, 5443 SelectionDAG &DAG, SDLoc dl, 5444 EVT DestVT = MVT::Other) { 5445 if (DestVT == MVT::Other) DestVT = LHS.getValueType(); 5446 return DAG.getNode(ISD::INTRINSIC_WO_CHAIN, dl, DestVT, 5447 DAG.getConstant(IID, MVT::i32), LHS, RHS); 5448 } 5449 5450 /// BuildIntrinsicOp - Return a ternary operator intrinsic node with the 5451 /// specified intrinsic ID. 5452 static SDValue BuildIntrinsicOp(unsigned IID, SDValue Op0, SDValue Op1, 5453 SDValue Op2, SelectionDAG &DAG, 5454 SDLoc dl, EVT DestVT = MVT::Other) { 5455 if (DestVT == MVT::Other) DestVT = Op0.getValueType(); 5456 return DAG.getNode(ISD::INTRINSIC_WO_CHAIN, dl, DestVT, 5457 DAG.getConstant(IID, MVT::i32), Op0, Op1, Op2); 5458 } 5459 5460 5461 /// BuildVSLDOI - Return a VECTOR_SHUFFLE that is a vsldoi of the specified 5462 /// amount. The result has the specified value type. 5463 static SDValue BuildVSLDOI(SDValue LHS, SDValue RHS, unsigned Amt, 5464 EVT VT, SelectionDAG &DAG, SDLoc dl) { 5465 // Force LHS/RHS to be the right type. 5466 LHS = DAG.getNode(ISD::BITCAST, dl, MVT::v16i8, LHS); 5467 RHS = DAG.getNode(ISD::BITCAST, dl, MVT::v16i8, RHS); 5468 5469 int Ops[16]; 5470 for (unsigned i = 0; i != 16; ++i) 5471 Ops[i] = i + Amt; 5472 SDValue T = DAG.getVectorShuffle(MVT::v16i8, dl, LHS, RHS, Ops); 5473 return DAG.getNode(ISD::BITCAST, dl, VT, T); 5474 } 5475 5476 // If this is a case we can't handle, return null and let the default 5477 // expansion code take care of it. If we CAN select this case, and if it 5478 // selects to a single instruction, return Op. Otherwise, if we can codegen 5479 // this case more efficiently than a constant pool load, lower it to the 5480 // sequence of ops that should be used. 5481 SDValue PPCTargetLowering::LowerBUILD_VECTOR(SDValue Op, 5482 SelectionDAG &DAG) const { 5483 SDLoc dl(Op); 5484 BuildVectorSDNode *BVN = dyn_cast<BuildVectorSDNode>(Op.getNode()); 5485 assert(BVN && "Expected a BuildVectorSDNode in LowerBUILD_VECTOR"); 5486 5487 // Check if this is a splat of a constant value. 5488 APInt APSplatBits, APSplatUndef; 5489 unsigned SplatBitSize; 5490 bool HasAnyUndefs; 5491 if (! BVN->isConstantSplat(APSplatBits, APSplatUndef, SplatBitSize, 5492 HasAnyUndefs, 0, true) || SplatBitSize > 32) 5493 return SDValue(); 5494 5495 unsigned SplatBits = APSplatBits.getZExtValue(); 5496 unsigned SplatUndef = APSplatUndef.getZExtValue(); 5497 unsigned SplatSize = SplatBitSize / 8; 5498 5499 // First, handle single instruction cases. 5500 5501 // All zeros? 5502 if (SplatBits == 0) { 5503 // Canonicalize all zero vectors to be v4i32. 5504 if (Op.getValueType() != MVT::v4i32 || HasAnyUndefs) { 5505 SDValue Z = DAG.getConstant(0, MVT::i32); 5506 Z = DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v4i32, Z, Z, Z, Z); 5507 Op = DAG.getNode(ISD::BITCAST, dl, Op.getValueType(), Z); 5508 } 5509 return Op; 5510 } 5511 5512 // If the sign extended value is in the range [-16,15], use VSPLTI[bhw]. 5513 int32_t SextVal= (int32_t(SplatBits << (32-SplatBitSize)) >> 5514 (32-SplatBitSize)); 5515 if (SextVal >= -16 && SextVal <= 15) 5516 return BuildSplatI(SextVal, SplatSize, Op.getValueType(), DAG, dl); 5517 5518 5519 // Two instruction sequences. 5520 5521 // If this value is in the range [-32,30] and is even, use: 5522 // VSPLTI[bhw](val/2) + VSPLTI[bhw](val/2) 5523 // If this value is in the range [17,31] and is odd, use: 5524 // VSPLTI[bhw](val-16) - VSPLTI[bhw](-16) 5525 // If this value is in the range [-31,-17] and is odd, use: 5526 // VSPLTI[bhw](val+16) + VSPLTI[bhw](-16) 5527 // Note the last two are three-instruction sequences. 5528 if (SextVal >= -32 && SextVal <= 31) { 5529 // To avoid having these optimizations undone by constant folding, 5530 // we convert to a pseudo that will be expanded later into one of 5531 // the above forms. 5532 SDValue Elt = DAG.getConstant(SextVal, MVT::i32); 5533 EVT VT = Op.getValueType(); 5534 int Size = VT == MVT::v16i8 ? 1 : (VT == MVT::v8i16 ? 2 : 4); 5535 SDValue EltSize = DAG.getConstant(Size, MVT::i32); 5536 return DAG.getNode(PPCISD::VADD_SPLAT, dl, VT, Elt, EltSize); 5537 } 5538 5539 // If this is 0x8000_0000 x 4, turn into vspltisw + vslw. If it is 5540 // 0x7FFF_FFFF x 4, turn it into not(0x8000_0000). This is important 5541 // for fneg/fabs. 5542 if (SplatSize == 4 && SplatBits == (0x7FFFFFFF&~SplatUndef)) { 5543 // Make -1 and vspltisw -1: 5544 SDValue OnesV = BuildSplatI(-1, 4, MVT::v4i32, DAG, dl); 5545 5546 // Make the VSLW intrinsic, computing 0x8000_0000. 5547 SDValue Res = BuildIntrinsicOp(Intrinsic::ppc_altivec_vslw, OnesV, 5548 OnesV, DAG, dl); 5549 5550 // xor by OnesV to invert it. 5551 Res = DAG.getNode(ISD::XOR, dl, MVT::v4i32, Res, OnesV); 5552 return DAG.getNode(ISD::BITCAST, dl, Op.getValueType(), Res); 5553 } 5554 5555 // Check to see if this is a wide variety of vsplti*, binop self cases. 5556 static const signed char SplatCsts[] = { 5557 -1, 1, -2, 2, -3, 3, -4, 4, -5, 5, -6, 6, -7, 7, 5558 -8, 8, -9, 9, -10, 10, -11, 11, -12, 12, -13, 13, 14, -14, 15, -15, -16 5559 }; 5560 5561 for (unsigned idx = 0; idx < array_lengthof(SplatCsts); ++idx) { 5562 // Indirect through the SplatCsts array so that we favor 'vsplti -1' for 5563 // cases which are ambiguous (e.g. formation of 0x8000_0000). 'vsplti -1' 5564 int i = SplatCsts[idx]; 5565 5566 // Figure out what shift amount will be used by altivec if shifted by i in 5567 // this splat size. 5568 unsigned TypeShiftAmt = i & (SplatBitSize-1); 5569 5570 // vsplti + shl self. 5571 if (SextVal == (int)((unsigned)i << TypeShiftAmt)) { 5572 SDValue Res = BuildSplatI(i, SplatSize, MVT::Other, DAG, dl); 5573 static const unsigned IIDs[] = { // Intrinsic to use for each size. 5574 Intrinsic::ppc_altivec_vslb, Intrinsic::ppc_altivec_vslh, 0, 5575 Intrinsic::ppc_altivec_vslw 5576 }; 5577 Res = BuildIntrinsicOp(IIDs[SplatSize-1], Res, Res, DAG, dl); 5578 return DAG.getNode(ISD::BITCAST, dl, Op.getValueType(), Res); 5579 } 5580 5581 // vsplti + srl self. 5582 if (SextVal == (int)((unsigned)i >> TypeShiftAmt)) { 5583 SDValue Res = BuildSplatI(i, SplatSize, MVT::Other, DAG, dl); 5584 static const unsigned IIDs[] = { // Intrinsic to use for each size. 5585 Intrinsic::ppc_altivec_vsrb, Intrinsic::ppc_altivec_vsrh, 0, 5586 Intrinsic::ppc_altivec_vsrw 5587 }; 5588 Res = BuildIntrinsicOp(IIDs[SplatSize-1], Res, Res, DAG, dl); 5589 return DAG.getNode(ISD::BITCAST, dl, Op.getValueType(), Res); 5590 } 5591 5592 // vsplti + sra self. 5593 if (SextVal == (int)((unsigned)i >> TypeShiftAmt)) { 5594 SDValue Res = BuildSplatI(i, SplatSize, MVT::Other, DAG, dl); 5595 static const unsigned IIDs[] = { // Intrinsic to use for each size. 5596 Intrinsic::ppc_altivec_vsrab, Intrinsic::ppc_altivec_vsrah, 0, 5597 Intrinsic::ppc_altivec_vsraw 5598 }; 5599 Res = BuildIntrinsicOp(IIDs[SplatSize-1], Res, Res, DAG, dl); 5600 return DAG.getNode(ISD::BITCAST, dl, Op.getValueType(), Res); 5601 } 5602 5603 // vsplti + rol self. 5604 if (SextVal == (int)(((unsigned)i << TypeShiftAmt) | 5605 ((unsigned)i >> (SplatBitSize-TypeShiftAmt)))) { 5606 SDValue Res = BuildSplatI(i, SplatSize, MVT::Other, DAG, dl); 5607 static const unsigned IIDs[] = { // Intrinsic to use for each size. 5608 Intrinsic::ppc_altivec_vrlb, Intrinsic::ppc_altivec_vrlh, 0, 5609 Intrinsic::ppc_altivec_vrlw 5610 }; 5611 Res = BuildIntrinsicOp(IIDs[SplatSize-1], Res, Res, DAG, dl); 5612 return DAG.getNode(ISD::BITCAST, dl, Op.getValueType(), Res); 5613 } 5614 5615 // t = vsplti c, result = vsldoi t, t, 1 5616 if (SextVal == (int)(((unsigned)i << 8) | (i < 0 ? 0xFF : 0))) { 5617 SDValue T = BuildSplatI(i, SplatSize, MVT::v16i8, DAG, dl); 5618 return BuildVSLDOI(T, T, 1, Op.getValueType(), DAG, dl); 5619 } 5620 // t = vsplti c, result = vsldoi t, t, 2 5621 if (SextVal == (int)(((unsigned)i << 16) | (i < 0 ? 0xFFFF : 0))) { 5622 SDValue T = BuildSplatI(i, SplatSize, MVT::v16i8, DAG, dl); 5623 return BuildVSLDOI(T, T, 2, Op.getValueType(), DAG, dl); 5624 } 5625 // t = vsplti c, result = vsldoi t, t, 3 5626 if (SextVal == (int)(((unsigned)i << 24) | (i < 0 ? 0xFFFFFF : 0))) { 5627 SDValue T = BuildSplatI(i, SplatSize, MVT::v16i8, DAG, dl); 5628 return BuildVSLDOI(T, T, 3, Op.getValueType(), DAG, dl); 5629 } 5630 } 5631 5632 return SDValue(); 5633 } 5634 5635 /// GeneratePerfectShuffle - Given an entry in the perfect-shuffle table, emit 5636 /// the specified operations to build the shuffle. 5637 static SDValue GeneratePerfectShuffle(unsigned PFEntry, SDValue LHS, 5638 SDValue RHS, SelectionDAG &DAG, 5639 SDLoc dl) { 5640 unsigned OpNum = (PFEntry >> 26) & 0x0F; 5641 unsigned LHSID = (PFEntry >> 13) & ((1 << 13)-1); 5642 unsigned RHSID = (PFEntry >> 0) & ((1 << 13)-1); 5643 5644 enum { 5645 OP_COPY = 0, // Copy, used for things like <u,u,u,3> to say it is <0,1,2,3> 5646 OP_VMRGHW, 5647 OP_VMRGLW, 5648 OP_VSPLTISW0, 5649 OP_VSPLTISW1, 5650 OP_VSPLTISW2, 5651 OP_VSPLTISW3, 5652 OP_VSLDOI4, 5653 OP_VSLDOI8, 5654 OP_VSLDOI12 5655 }; 5656 5657 if (OpNum == OP_COPY) { 5658 if (LHSID == (1*9+2)*9+3) return LHS; 5659 assert(LHSID == ((4*9+5)*9+6)*9+7 && "Illegal OP_COPY!"); 5660 return RHS; 5661 } 5662 5663 SDValue OpLHS, OpRHS; 5664 OpLHS = GeneratePerfectShuffle(PerfectShuffleTable[LHSID], LHS, RHS, DAG, dl); 5665 OpRHS = GeneratePerfectShuffle(PerfectShuffleTable[RHSID], LHS, RHS, DAG, dl); 5666 5667 int ShufIdxs[16]; 5668 switch (OpNum) { 5669 default: llvm_unreachable("Unknown i32 permute!"); 5670 case OP_VMRGHW: 5671 ShufIdxs[ 0] = 0; ShufIdxs[ 1] = 1; ShufIdxs[ 2] = 2; ShufIdxs[ 3] = 3; 5672 ShufIdxs[ 4] = 16; ShufIdxs[ 5] = 17; ShufIdxs[ 6] = 18; ShufIdxs[ 7] = 19; 5673 ShufIdxs[ 8] = 4; ShufIdxs[ 9] = 5; ShufIdxs[10] = 6; ShufIdxs[11] = 7; 5674 ShufIdxs[12] = 20; ShufIdxs[13] = 21; ShufIdxs[14] = 22; ShufIdxs[15] = 23; 5675 break; 5676 case OP_VMRGLW: 5677 ShufIdxs[ 0] = 8; ShufIdxs[ 1] = 9; ShufIdxs[ 2] = 10; ShufIdxs[ 3] = 11; 5678 ShufIdxs[ 4] = 24; ShufIdxs[ 5] = 25; ShufIdxs[ 6] = 26; ShufIdxs[ 7] = 27; 5679 ShufIdxs[ 8] = 12; ShufIdxs[ 9] = 13; ShufIdxs[10] = 14; ShufIdxs[11] = 15; 5680 ShufIdxs[12] = 28; ShufIdxs[13] = 29; ShufIdxs[14] = 30; ShufIdxs[15] = 31; 5681 break; 5682 case OP_VSPLTISW0: 5683 for (unsigned i = 0; i != 16; ++i) 5684 ShufIdxs[i] = (i&3)+0; 5685 break; 5686 case OP_VSPLTISW1: 5687 for (unsigned i = 0; i != 16; ++i) 5688 ShufIdxs[i] = (i&3)+4; 5689 break; 5690 case OP_VSPLTISW2: 5691 for (unsigned i = 0; i != 16; ++i) 5692 ShufIdxs[i] = (i&3)+8; 5693 break; 5694 case OP_VSPLTISW3: 5695 for (unsigned i = 0; i != 16; ++i) 5696 ShufIdxs[i] = (i&3)+12; 5697 break; 5698 case OP_VSLDOI4: 5699 return BuildVSLDOI(OpLHS, OpRHS, 4, OpLHS.getValueType(), DAG, dl); 5700 case OP_VSLDOI8: 5701 return BuildVSLDOI(OpLHS, OpRHS, 8, OpLHS.getValueType(), DAG, dl); 5702 case OP_VSLDOI12: 5703 return BuildVSLDOI(OpLHS, OpRHS, 12, OpLHS.getValueType(), DAG, dl); 5704 } 5705 EVT VT = OpLHS.getValueType(); 5706 OpLHS = DAG.getNode(ISD::BITCAST, dl, MVT::v16i8, OpLHS); 5707 OpRHS = DAG.getNode(ISD::BITCAST, dl, MVT::v16i8, OpRHS); 5708 SDValue T = DAG.getVectorShuffle(MVT::v16i8, dl, OpLHS, OpRHS, ShufIdxs); 5709 return DAG.getNode(ISD::BITCAST, dl, VT, T); 5710 } 5711 5712 /// LowerVECTOR_SHUFFLE - Return the code we lower for VECTOR_SHUFFLE. If this 5713 /// is a shuffle we can handle in a single instruction, return it. Otherwise, 5714 /// return the code it can be lowered into. Worst case, it can always be 5715 /// lowered into a vperm. 5716 SDValue PPCTargetLowering::LowerVECTOR_SHUFFLE(SDValue Op, 5717 SelectionDAG &DAG) const { 5718 SDLoc dl(Op); 5719 SDValue V1 = Op.getOperand(0); 5720 SDValue V2 = Op.getOperand(1); 5721 ShuffleVectorSDNode *SVOp = cast<ShuffleVectorSDNode>(Op); 5722 EVT VT = Op.getValueType(); 5723 5724 // Cases that are handled by instructions that take permute immediates 5725 // (such as vsplt*) should be left as VECTOR_SHUFFLE nodes so they can be 5726 // selected by the instruction selector. 5727 if (V2.getOpcode() == ISD::UNDEF) { 5728 if (PPC::isSplatShuffleMask(SVOp, 1) || 5729 PPC::isSplatShuffleMask(SVOp, 2) || 5730 PPC::isSplatShuffleMask(SVOp, 4) || 5731 PPC::isVPKUWUMShuffleMask(SVOp, true) || 5732 PPC::isVPKUHUMShuffleMask(SVOp, true) || 5733 PPC::isVSLDOIShuffleMask(SVOp, true) != -1 || 5734 PPC::isVMRGLShuffleMask(SVOp, 1, true) || 5735 PPC::isVMRGLShuffleMask(SVOp, 2, true) || 5736 PPC::isVMRGLShuffleMask(SVOp, 4, true) || 5737 PPC::isVMRGHShuffleMask(SVOp, 1, true) || 5738 PPC::isVMRGHShuffleMask(SVOp, 2, true) || 5739 PPC::isVMRGHShuffleMask(SVOp, 4, true)) { 5740 return Op; 5741 } 5742 } 5743 5744 // Altivec has a variety of "shuffle immediates" that take two vector inputs 5745 // and produce a fixed permutation. If any of these match, do not lower to 5746 // VPERM. 5747 if (PPC::isVPKUWUMShuffleMask(SVOp, false) || 5748 PPC::isVPKUHUMShuffleMask(SVOp, false) || 5749 PPC::isVSLDOIShuffleMask(SVOp, false) != -1 || 5750 PPC::isVMRGLShuffleMask(SVOp, 1, false) || 5751 PPC::isVMRGLShuffleMask(SVOp, 2, false) || 5752 PPC::isVMRGLShuffleMask(SVOp, 4, false) || 5753 PPC::isVMRGHShuffleMask(SVOp, 1, false) || 5754 PPC::isVMRGHShuffleMask(SVOp, 2, false) || 5755 PPC::isVMRGHShuffleMask(SVOp, 4, false)) 5756 return Op; 5757 5758 // Check to see if this is a shuffle of 4-byte values. If so, we can use our 5759 // perfect shuffle table to emit an optimal matching sequence. 5760 ArrayRef<int> PermMask = SVOp->getMask(); 5761 5762 unsigned PFIndexes[4]; 5763 bool isFourElementShuffle = true; 5764 for (unsigned i = 0; i != 4 && isFourElementShuffle; ++i) { // Element number 5765 unsigned EltNo = 8; // Start out undef. 5766 for (unsigned j = 0; j != 4; ++j) { // Intra-element byte. 5767 if (PermMask[i*4+j] < 0) 5768 continue; // Undef, ignore it. 5769 5770 unsigned ByteSource = PermMask[i*4+j]; 5771 if ((ByteSource & 3) != j) { 5772 isFourElementShuffle = false; 5773 break; 5774 } 5775 5776 if (EltNo == 8) { 5777 EltNo = ByteSource/4; 5778 } else if (EltNo != ByteSource/4) { 5779 isFourElementShuffle = false; 5780 break; 5781 } 5782 } 5783 PFIndexes[i] = EltNo; 5784 } 5785 5786 // If this shuffle can be expressed as a shuffle of 4-byte elements, use the 5787 // perfect shuffle vector to determine if it is cost effective to do this as 5788 // discrete instructions, or whether we should use a vperm. 5789 if (isFourElementShuffle) { 5790 // Compute the index in the perfect shuffle table. 5791 unsigned PFTableIndex = 5792 PFIndexes[0]*9*9*9+PFIndexes[1]*9*9+PFIndexes[2]*9+PFIndexes[3]; 5793 5794 unsigned PFEntry = PerfectShuffleTable[PFTableIndex]; 5795 unsigned Cost = (PFEntry >> 30); 5796 5797 // Determining when to avoid vperm is tricky. Many things affect the cost 5798 // of vperm, particularly how many times the perm mask needs to be computed. 5799 // For example, if the perm mask can be hoisted out of a loop or is already 5800 // used (perhaps because there are multiple permutes with the same shuffle 5801 // mask?) the vperm has a cost of 1. OTOH, hoisting the permute mask out of 5802 // the loop requires an extra register. 5803 // 5804 // As a compromise, we only emit discrete instructions if the shuffle can be 5805 // generated in 3 or fewer operations. When we have loop information 5806 // available, if this block is within a loop, we should avoid using vperm 5807 // for 3-operation perms and use a constant pool load instead. 5808 if (Cost < 3) 5809 return GeneratePerfectShuffle(PFEntry, V1, V2, DAG, dl); 5810 } 5811 5812 // Lower this to a VPERM(V1, V2, V3) expression, where V3 is a constant 5813 // vector that will get spilled to the constant pool. 5814 if (V2.getOpcode() == ISD::UNDEF) V2 = V1; 5815 5816 // The SHUFFLE_VECTOR mask is almost exactly what we want for vperm, except 5817 // that it is in input element units, not in bytes. Convert now. 5818 EVT EltVT = V1.getValueType().getVectorElementType(); 5819 unsigned BytesPerElement = EltVT.getSizeInBits()/8; 5820 5821 SmallVector<SDValue, 16> ResultMask; 5822 for (unsigned i = 0, e = VT.getVectorNumElements(); i != e; ++i) { 5823 unsigned SrcElt = PermMask[i] < 0 ? 0 : PermMask[i]; 5824 5825 for (unsigned j = 0; j != BytesPerElement; ++j) 5826 ResultMask.push_back(DAG.getConstant(SrcElt*BytesPerElement+j, 5827 MVT::i32)); 5828 } 5829 5830 SDValue VPermMask = DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v16i8, 5831 ResultMask); 5832 return DAG.getNode(PPCISD::VPERM, dl, V1.getValueType(), V1, V2, VPermMask); 5833 } 5834 5835 /// getAltivecCompareInfo - Given an intrinsic, return false if it is not an 5836 /// altivec comparison. If it is, return true and fill in Opc/isDot with 5837 /// information about the intrinsic. 5838 static bool getAltivecCompareInfo(SDValue Intrin, int &CompareOpc, 5839 bool &isDot) { 5840 unsigned IntrinsicID = 5841 cast<ConstantSDNode>(Intrin.getOperand(0))->getZExtValue(); 5842 CompareOpc = -1; 5843 isDot = false; 5844 switch (IntrinsicID) { 5845 default: return false; 5846 // Comparison predicates. 5847 case Intrinsic::ppc_altivec_vcmpbfp_p: CompareOpc = 966; isDot = 1; break; 5848 case Intrinsic::ppc_altivec_vcmpeqfp_p: CompareOpc = 198; isDot = 1; break; 5849 case Intrinsic::ppc_altivec_vcmpequb_p: CompareOpc = 6; isDot = 1; break; 5850 case Intrinsic::ppc_altivec_vcmpequh_p: CompareOpc = 70; isDot = 1; break; 5851 case Intrinsic::ppc_altivec_vcmpequw_p: CompareOpc = 134; isDot = 1; break; 5852 case Intrinsic::ppc_altivec_vcmpgefp_p: CompareOpc = 454; isDot = 1; break; 5853 case Intrinsic::ppc_altivec_vcmpgtfp_p: CompareOpc = 710; isDot = 1; break; 5854 case Intrinsic::ppc_altivec_vcmpgtsb_p: CompareOpc = 774; isDot = 1; break; 5855 case Intrinsic::ppc_altivec_vcmpgtsh_p: CompareOpc = 838; isDot = 1; break; 5856 case Intrinsic::ppc_altivec_vcmpgtsw_p: CompareOpc = 902; isDot = 1; break; 5857 case Intrinsic::ppc_altivec_vcmpgtub_p: CompareOpc = 518; isDot = 1; break; 5858 case Intrinsic::ppc_altivec_vcmpgtuh_p: CompareOpc = 582; isDot = 1; break; 5859 case Intrinsic::ppc_altivec_vcmpgtuw_p: CompareOpc = 646; isDot = 1; break; 5860 5861 // Normal Comparisons. 5862 case Intrinsic::ppc_altivec_vcmpbfp: CompareOpc = 966; isDot = 0; break; 5863 case Intrinsic::ppc_altivec_vcmpeqfp: CompareOpc = 198; isDot = 0; break; 5864 case Intrinsic::ppc_altivec_vcmpequb: CompareOpc = 6; isDot = 0; break; 5865 case Intrinsic::ppc_altivec_vcmpequh: CompareOpc = 70; isDot = 0; break; 5866 case Intrinsic::ppc_altivec_vcmpequw: CompareOpc = 134; isDot = 0; break; 5867 case Intrinsic::ppc_altivec_vcmpgefp: CompareOpc = 454; isDot = 0; break; 5868 case Intrinsic::ppc_altivec_vcmpgtfp: CompareOpc = 710; isDot = 0; break; 5869 case Intrinsic::ppc_altivec_vcmpgtsb: CompareOpc = 774; isDot = 0; break; 5870 case Intrinsic::ppc_altivec_vcmpgtsh: CompareOpc = 838; isDot = 0; break; 5871 case Intrinsic::ppc_altivec_vcmpgtsw: CompareOpc = 902; isDot = 0; break; 5872 case Intrinsic::ppc_altivec_vcmpgtub: CompareOpc = 518; isDot = 0; break; 5873 case Intrinsic::ppc_altivec_vcmpgtuh: CompareOpc = 582; isDot = 0; break; 5874 case Intrinsic::ppc_altivec_vcmpgtuw: CompareOpc = 646; isDot = 0; break; 5875 } 5876 return true; 5877 } 5878 5879 /// LowerINTRINSIC_WO_CHAIN - If this is an intrinsic that we want to custom 5880 /// lower, do it, otherwise return null. 5881 SDValue PPCTargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op, 5882 SelectionDAG &DAG) const { 5883 // If this is a lowered altivec predicate compare, CompareOpc is set to the 5884 // opcode number of the comparison. 5885 SDLoc dl(Op); 5886 int CompareOpc; 5887 bool isDot; 5888 if (!getAltivecCompareInfo(Op, CompareOpc, isDot)) 5889 return SDValue(); // Don't custom lower most intrinsics. 5890 5891 // If this is a non-dot comparison, make the VCMP node and we are done. 5892 if (!isDot) { 5893 SDValue Tmp = DAG.getNode(PPCISD::VCMP, dl, Op.getOperand(2).getValueType(), 5894 Op.getOperand(1), Op.getOperand(2), 5895 DAG.getConstant(CompareOpc, MVT::i32)); 5896 return DAG.getNode(ISD::BITCAST, dl, Op.getValueType(), Tmp); 5897 } 5898 5899 // Create the PPCISD altivec 'dot' comparison node. 5900 SDValue Ops[] = { 5901 Op.getOperand(2), // LHS 5902 Op.getOperand(3), // RHS 5903 DAG.getConstant(CompareOpc, MVT::i32) 5904 }; 5905 EVT VTs[] = { Op.getOperand(2).getValueType(), MVT::Glue }; 5906 SDValue CompNode = DAG.getNode(PPCISD::VCMPo, dl, VTs, Ops); 5907 5908 // Now that we have the comparison, emit a copy from the CR to a GPR. 5909 // This is flagged to the above dot comparison. 5910 SDValue Flags = DAG.getNode(PPCISD::MFOCRF, dl, MVT::i32, 5911 DAG.getRegister(PPC::CR6, MVT::i32), 5912 CompNode.getValue(1)); 5913 5914 // Unpack the result based on how the target uses it. 5915 unsigned BitNo; // Bit # of CR6. 5916 bool InvertBit; // Invert result? 5917 switch (cast<ConstantSDNode>(Op.getOperand(1))->getZExtValue()) { 5918 default: // Can't happen, don't crash on invalid number though. 5919 case 0: // Return the value of the EQ bit of CR6. 5920 BitNo = 0; InvertBit = false; 5921 break; 5922 case 1: // Return the inverted value of the EQ bit of CR6. 5923 BitNo = 0; InvertBit = true; 5924 break; 5925 case 2: // Return the value of the LT bit of CR6. 5926 BitNo = 2; InvertBit = false; 5927 break; 5928 case 3: // Return the inverted value of the LT bit of CR6. 5929 BitNo = 2; InvertBit = true; 5930 break; 5931 } 5932 5933 // Shift the bit into the low position. 5934 Flags = DAG.getNode(ISD::SRL, dl, MVT::i32, Flags, 5935 DAG.getConstant(8-(3-BitNo), MVT::i32)); 5936 // Isolate the bit. 5937 Flags = DAG.getNode(ISD::AND, dl, MVT::i32, Flags, 5938 DAG.getConstant(1, MVT::i32)); 5939 5940 // If we are supposed to, toggle the bit. 5941 if (InvertBit) 5942 Flags = DAG.getNode(ISD::XOR, dl, MVT::i32, Flags, 5943 DAG.getConstant(1, MVT::i32)); 5944 return Flags; 5945 } 5946 5947 SDValue PPCTargetLowering::LowerSIGN_EXTEND_INREG(SDValue Op, 5948 SelectionDAG &DAG) const { 5949 SDLoc dl(Op); 5950 // For v2i64 (VSX), we can pattern patch the v2i32 case (using fp <-> int 5951 // instructions), but for smaller types, we need to first extend up to v2i32 5952 // before doing going farther. 5953 if (Op.getValueType() == MVT::v2i64) { 5954 EVT ExtVT = cast<VTSDNode>(Op.getOperand(1))->getVT(); 5955 if (ExtVT != MVT::v2i32) { 5956 Op = DAG.getNode(ISD::BITCAST, dl, MVT::v4i32, Op.getOperand(0)); 5957 Op = DAG.getNode(ISD::SIGN_EXTEND_INREG, dl, MVT::v4i32, Op, 5958 DAG.getValueType(EVT::getVectorVT(*DAG.getContext(), 5959 ExtVT.getVectorElementType(), 4))); 5960 Op = DAG.getNode(ISD::BITCAST, dl, MVT::v2i64, Op); 5961 Op = DAG.getNode(ISD::SIGN_EXTEND_INREG, dl, MVT::v2i64, Op, 5962 DAG.getValueType(MVT::v2i32)); 5963 } 5964 5965 return Op; 5966 } 5967 5968 return SDValue(); 5969 } 5970 5971 SDValue PPCTargetLowering::LowerSCALAR_TO_VECTOR(SDValue Op, 5972 SelectionDAG &DAG) const { 5973 SDLoc dl(Op); 5974 // Create a stack slot that is 16-byte aligned. 5975 MachineFrameInfo *FrameInfo = DAG.getMachineFunction().getFrameInfo(); 5976 int FrameIdx = FrameInfo->CreateStackObject(16, 16, false); 5977 EVT PtrVT = getPointerTy(); 5978 SDValue FIdx = DAG.getFrameIndex(FrameIdx, PtrVT); 5979 5980 // Store the input value into Value#0 of the stack slot. 5981 SDValue Store = DAG.getStore(DAG.getEntryNode(), dl, 5982 Op.getOperand(0), FIdx, MachinePointerInfo(), 5983 false, false, 0); 5984 // Load it out. 5985 return DAG.getLoad(Op.getValueType(), dl, Store, FIdx, MachinePointerInfo(), 5986 false, false, false, 0); 5987 } 5988 5989 SDValue PPCTargetLowering::LowerMUL(SDValue Op, SelectionDAG &DAG) const { 5990 SDLoc dl(Op); 5991 if (Op.getValueType() == MVT::v4i32) { 5992 SDValue LHS = Op.getOperand(0), RHS = Op.getOperand(1); 5993 5994 SDValue Zero = BuildSplatI( 0, 1, MVT::v4i32, DAG, dl); 5995 SDValue Neg16 = BuildSplatI(-16, 4, MVT::v4i32, DAG, dl);//+16 as shift amt. 5996 5997 SDValue RHSSwap = // = vrlw RHS, 16 5998 BuildIntrinsicOp(Intrinsic::ppc_altivec_vrlw, RHS, Neg16, DAG, dl); 5999 6000 // Shrinkify inputs to v8i16. 6001 LHS = DAG.getNode(ISD::BITCAST, dl, MVT::v8i16, LHS); 6002 RHS = DAG.getNode(ISD::BITCAST, dl, MVT::v8i16, RHS); 6003 RHSSwap = DAG.getNode(ISD::BITCAST, dl, MVT::v8i16, RHSSwap); 6004 6005 // Low parts multiplied together, generating 32-bit results (we ignore the 6006 // top parts). 6007 SDValue LoProd = BuildIntrinsicOp(Intrinsic::ppc_altivec_vmulouh, 6008 LHS, RHS, DAG, dl, MVT::v4i32); 6009 6010 SDValue HiProd = BuildIntrinsicOp(Intrinsic::ppc_altivec_vmsumuhm, 6011 LHS, RHSSwap, Zero, DAG, dl, MVT::v4i32); 6012 // Shift the high parts up 16 bits. 6013 HiProd = BuildIntrinsicOp(Intrinsic::ppc_altivec_vslw, HiProd, 6014 Neg16, DAG, dl); 6015 return DAG.getNode(ISD::ADD, dl, MVT::v4i32, LoProd, HiProd); 6016 } else if (Op.getValueType() == MVT::v8i16) { 6017 SDValue LHS = Op.getOperand(0), RHS = Op.getOperand(1); 6018 6019 SDValue Zero = BuildSplatI(0, 1, MVT::v8i16, DAG, dl); 6020 6021 return BuildIntrinsicOp(Intrinsic::ppc_altivec_vmladduhm, 6022 LHS, RHS, Zero, DAG, dl); 6023 } else if (Op.getValueType() == MVT::v16i8) { 6024 SDValue LHS = Op.getOperand(0), RHS = Op.getOperand(1); 6025 6026 // Multiply the even 8-bit parts, producing 16-bit sums. 6027 SDValue EvenParts = BuildIntrinsicOp(Intrinsic::ppc_altivec_vmuleub, 6028 LHS, RHS, DAG, dl, MVT::v8i16); 6029 EvenParts = DAG.getNode(ISD::BITCAST, dl, MVT::v16i8, EvenParts); 6030 6031 // Multiply the odd 8-bit parts, producing 16-bit sums. 6032 SDValue OddParts = BuildIntrinsicOp(Intrinsic::ppc_altivec_vmuloub, 6033 LHS, RHS, DAG, dl, MVT::v8i16); 6034 OddParts = DAG.getNode(ISD::BITCAST, dl, MVT::v16i8, OddParts); 6035 6036 // Merge the results together. 6037 int Ops[16]; 6038 for (unsigned i = 0; i != 8; ++i) { 6039 Ops[i*2 ] = 2*i+1; 6040 Ops[i*2+1] = 2*i+1+16; 6041 } 6042 return DAG.getVectorShuffle(MVT::v16i8, dl, EvenParts, OddParts, Ops); 6043 } else { 6044 llvm_unreachable("Unknown mul to lower!"); 6045 } 6046 } 6047 6048 /// LowerOperation - Provide custom lowering hooks for some operations. 6049 /// 6050 SDValue PPCTargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) const { 6051 switch (Op.getOpcode()) { 6052 default: llvm_unreachable("Wasn't expecting to be able to lower this!"); 6053 case ISD::ConstantPool: return LowerConstantPool(Op, DAG); 6054 case ISD::BlockAddress: return LowerBlockAddress(Op, DAG); 6055 case ISD::GlobalAddress: return LowerGlobalAddress(Op, DAG); 6056 case ISD::GlobalTLSAddress: return LowerGlobalTLSAddress(Op, DAG); 6057 case ISD::JumpTable: return LowerJumpTable(Op, DAG); 6058 case ISD::SETCC: return LowerSETCC(Op, DAG); 6059 case ISD::INIT_TRAMPOLINE: return LowerINIT_TRAMPOLINE(Op, DAG); 6060 case ISD::ADJUST_TRAMPOLINE: return LowerADJUST_TRAMPOLINE(Op, DAG); 6061 case ISD::VASTART: 6062 return LowerVASTART(Op, DAG, PPCSubTarget); 6063 6064 case ISD::VAARG: 6065 return LowerVAARG(Op, DAG, PPCSubTarget); 6066 6067 case ISD::VACOPY: 6068 return LowerVACOPY(Op, DAG, PPCSubTarget); 6069 6070 case ISD::STACKRESTORE: return LowerSTACKRESTORE(Op, DAG, PPCSubTarget); 6071 case ISD::DYNAMIC_STACKALLOC: 6072 return LowerDYNAMIC_STACKALLOC(Op, DAG, PPCSubTarget); 6073 6074 case ISD::EH_SJLJ_SETJMP: return lowerEH_SJLJ_SETJMP(Op, DAG); 6075 case ISD::EH_SJLJ_LONGJMP: return lowerEH_SJLJ_LONGJMP(Op, DAG); 6076 6077 case ISD::LOAD: return LowerLOAD(Op, DAG); 6078 case ISD::STORE: return LowerSTORE(Op, DAG); 6079 case ISD::TRUNCATE: return LowerTRUNCATE(Op, DAG); 6080 case ISD::SELECT_CC: return LowerSELECT_CC(Op, DAG); 6081 case ISD::FP_TO_UINT: 6082 case ISD::FP_TO_SINT: return LowerFP_TO_INT(Op, DAG, 6083 SDLoc(Op)); 6084 case ISD::UINT_TO_FP: 6085 case ISD::SINT_TO_FP: return LowerINT_TO_FP(Op, DAG); 6086 case ISD::FLT_ROUNDS_: return LowerFLT_ROUNDS_(Op, DAG); 6087 6088 // Lower 64-bit shifts. 6089 case ISD::SHL_PARTS: return LowerSHL_PARTS(Op, DAG); 6090 case ISD::SRL_PARTS: return LowerSRL_PARTS(Op, DAG); 6091 case ISD::SRA_PARTS: return LowerSRA_PARTS(Op, DAG); 6092 6093 // Vector-related lowering. 6094 case ISD::BUILD_VECTOR: return LowerBUILD_VECTOR(Op, DAG); 6095 case ISD::VECTOR_SHUFFLE: return LowerVECTOR_SHUFFLE(Op, DAG); 6096 case ISD::INTRINSIC_WO_CHAIN: return LowerINTRINSIC_WO_CHAIN(Op, DAG); 6097 case ISD::SCALAR_TO_VECTOR: return LowerSCALAR_TO_VECTOR(Op, DAG); 6098 case ISD::SIGN_EXTEND_INREG: return LowerSIGN_EXTEND_INREG(Op, DAG); 6099 case ISD::MUL: return LowerMUL(Op, DAG); 6100 6101 // For counter-based loop handling. 6102 case ISD::INTRINSIC_W_CHAIN: return SDValue(); 6103 6104 // Frame & Return address. 6105 case ISD::RETURNADDR: return LowerRETURNADDR(Op, DAG); 6106 case ISD::FRAMEADDR: return LowerFRAMEADDR(Op, DAG); 6107 } 6108 } 6109 6110 void PPCTargetLowering::ReplaceNodeResults(SDNode *N, 6111 SmallVectorImpl<SDValue>&Results, 6112 SelectionDAG &DAG) const { 6113 const TargetMachine &TM = getTargetMachine(); 6114 SDLoc dl(N); 6115 switch (N->getOpcode()) { 6116 default: 6117 llvm_unreachable("Do not know how to custom type legalize this operation!"); 6118 case ISD::INTRINSIC_W_CHAIN: { 6119 if (cast<ConstantSDNode>(N->getOperand(1))->getZExtValue() != 6120 Intrinsic::ppc_is_decremented_ctr_nonzero) 6121 break; 6122 6123 assert(N->getValueType(0) == MVT::i1 && 6124 "Unexpected result type for CTR decrement intrinsic"); 6125 EVT SVT = getSetCCResultType(*DAG.getContext(), N->getValueType(0)); 6126 SDVTList VTs = DAG.getVTList(SVT, MVT::Other); 6127 SDValue NewInt = DAG.getNode(N->getOpcode(), dl, VTs, N->getOperand(0), 6128 N->getOperand(1)); 6129 6130 Results.push_back(NewInt); 6131 Results.push_back(NewInt.getValue(1)); 6132 break; 6133 } 6134 case ISD::VAARG: { 6135 if (!TM.getSubtarget<PPCSubtarget>().isSVR4ABI() 6136 || TM.getSubtarget<PPCSubtarget>().isPPC64()) 6137 return; 6138 6139 EVT VT = N->getValueType(0); 6140 6141 if (VT == MVT::i64) { 6142 SDValue NewNode = LowerVAARG(SDValue(N, 1), DAG, PPCSubTarget); 6143 6144 Results.push_back(NewNode); 6145 Results.push_back(NewNode.getValue(1)); 6146 } 6147 return; 6148 } 6149 case ISD::FP_ROUND_INREG: { 6150 assert(N->getValueType(0) == MVT::ppcf128); 6151 assert(N->getOperand(0).getValueType() == MVT::ppcf128); 6152 SDValue Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, 6153 MVT::f64, N->getOperand(0), 6154 DAG.getIntPtrConstant(0)); 6155 SDValue Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, 6156 MVT::f64, N->getOperand(0), 6157 DAG.getIntPtrConstant(1)); 6158 6159 // Add the two halves of the long double in round-to-zero mode. 6160 SDValue FPreg = DAG.getNode(PPCISD::FADDRTZ, dl, MVT::f64, Lo, Hi); 6161 6162 // We know the low half is about to be thrown away, so just use something 6163 // convenient. 6164 Results.push_back(DAG.getNode(ISD::BUILD_PAIR, dl, MVT::ppcf128, 6165 FPreg, FPreg)); 6166 return; 6167 } 6168 case ISD::FP_TO_SINT: 6169 // LowerFP_TO_INT() can only handle f32 and f64. 6170 if (N->getOperand(0).getValueType() == MVT::ppcf128) 6171 return; 6172 Results.push_back(LowerFP_TO_INT(SDValue(N, 0), DAG, dl)); 6173 return; 6174 } 6175 } 6176 6177 6178 //===----------------------------------------------------------------------===// 6179 // Other Lowering Code 6180 //===----------------------------------------------------------------------===// 6181 6182 MachineBasicBlock * 6183 PPCTargetLowering::EmitAtomicBinary(MachineInstr *MI, MachineBasicBlock *BB, 6184 bool is64bit, unsigned BinOpcode) const { 6185 // This also handles ATOMIC_SWAP, indicated by BinOpcode==0. 6186 const TargetInstrInfo *TII = getTargetMachine().getInstrInfo(); 6187 6188 const BasicBlock *LLVM_BB = BB->getBasicBlock(); 6189 MachineFunction *F = BB->getParent(); 6190 MachineFunction::iterator It = BB; 6191 ++It; 6192 6193 unsigned dest = MI->getOperand(0).getReg(); 6194 unsigned ptrA = MI->getOperand(1).getReg(); 6195 unsigned ptrB = MI->getOperand(2).getReg(); 6196 unsigned incr = MI->getOperand(3).getReg(); 6197 DebugLoc dl = MI->getDebugLoc(); 6198 6199 MachineBasicBlock *loopMBB = F->CreateMachineBasicBlock(LLVM_BB); 6200 MachineBasicBlock *exitMBB = F->CreateMachineBasicBlock(LLVM_BB); 6201 F->insert(It, loopMBB); 6202 F->insert(It, exitMBB); 6203 exitMBB->splice(exitMBB->begin(), BB, 6204 std::next(MachineBasicBlock::iterator(MI)), BB->end()); 6205 exitMBB->transferSuccessorsAndUpdatePHIs(BB); 6206 6207 MachineRegisterInfo &RegInfo = F->getRegInfo(); 6208 unsigned TmpReg = (!BinOpcode) ? incr : 6209 RegInfo.createVirtualRegister( 6210 is64bit ? (const TargetRegisterClass *) &PPC::G8RCRegClass : 6211 (const TargetRegisterClass *) &PPC::GPRCRegClass); 6212 6213 // thisMBB: 6214 // ... 6215 // fallthrough --> loopMBB 6216 BB->addSuccessor(loopMBB); 6217 6218 // loopMBB: 6219 // l[wd]arx dest, ptr 6220 // add r0, dest, incr 6221 // st[wd]cx. r0, ptr 6222 // bne- loopMBB 6223 // fallthrough --> exitMBB 6224 BB = loopMBB; 6225 BuildMI(BB, dl, TII->get(is64bit ? PPC::LDARX : PPC::LWARX), dest) 6226 .addReg(ptrA).addReg(ptrB); 6227 if (BinOpcode) 6228 BuildMI(BB, dl, TII->get(BinOpcode), TmpReg).addReg(incr).addReg(dest); 6229 BuildMI(BB, dl, TII->get(is64bit ? PPC::STDCX : PPC::STWCX)) 6230 .addReg(TmpReg).addReg(ptrA).addReg(ptrB); 6231 BuildMI(BB, dl, TII->get(PPC::BCC)) 6232 .addImm(PPC::PRED_NE).addReg(PPC::CR0).addMBB(loopMBB); 6233 BB->addSuccessor(loopMBB); 6234 BB->addSuccessor(exitMBB); 6235 6236 // exitMBB: 6237 // ... 6238 BB = exitMBB; 6239 return BB; 6240 } 6241 6242 MachineBasicBlock * 6243 PPCTargetLowering::EmitPartwordAtomicBinary(MachineInstr *MI, 6244 MachineBasicBlock *BB, 6245 bool is8bit, // operation 6246 unsigned BinOpcode) const { 6247 // This also handles ATOMIC_SWAP, indicated by BinOpcode==0. 6248 const TargetInstrInfo *TII = getTargetMachine().getInstrInfo(); 6249 // In 64 bit mode we have to use 64 bits for addresses, even though the 6250 // lwarx/stwcx are 32 bits. With the 32-bit atomics we can use address 6251 // registers without caring whether they're 32 or 64, but here we're 6252 // doing actual arithmetic on the addresses. 6253 bool is64bit = PPCSubTarget.isPPC64(); 6254 unsigned ZeroReg = is64bit ? PPC::ZERO8 : PPC::ZERO; 6255 6256 const BasicBlock *LLVM_BB = BB->getBasicBlock(); 6257 MachineFunction *F = BB->getParent(); 6258 MachineFunction::iterator It = BB; 6259 ++It; 6260 6261 unsigned dest = MI->getOperand(0).getReg(); 6262 unsigned ptrA = MI->getOperand(1).getReg(); 6263 unsigned ptrB = MI->getOperand(2).getReg(); 6264 unsigned incr = MI->getOperand(3).getReg(); 6265 DebugLoc dl = MI->getDebugLoc(); 6266 6267 MachineBasicBlock *loopMBB = F->CreateMachineBasicBlock(LLVM_BB); 6268 MachineBasicBlock *exitMBB = F->CreateMachineBasicBlock(LLVM_BB); 6269 F->insert(It, loopMBB); 6270 F->insert(It, exitMBB); 6271 exitMBB->splice(exitMBB->begin(), BB, 6272 std::next(MachineBasicBlock::iterator(MI)), BB->end()); 6273 exitMBB->transferSuccessorsAndUpdatePHIs(BB); 6274 6275 MachineRegisterInfo &RegInfo = F->getRegInfo(); 6276 const TargetRegisterClass *RC = 6277 is64bit ? (const TargetRegisterClass *) &PPC::G8RCRegClass : 6278 (const TargetRegisterClass *) &PPC::GPRCRegClass; 6279 unsigned PtrReg = RegInfo.createVirtualRegister(RC); 6280 unsigned Shift1Reg = RegInfo.createVirtualRegister(RC); 6281 unsigned ShiftReg = RegInfo.createVirtualRegister(RC); 6282 unsigned Incr2Reg = RegInfo.createVirtualRegister(RC); 6283 unsigned MaskReg = RegInfo.createVirtualRegister(RC); 6284 unsigned Mask2Reg = RegInfo.createVirtualRegister(RC); 6285 unsigned Mask3Reg = RegInfo.createVirtualRegister(RC); 6286 unsigned Tmp2Reg = RegInfo.createVirtualRegister(RC); 6287 unsigned Tmp3Reg = RegInfo.createVirtualRegister(RC); 6288 unsigned Tmp4Reg = RegInfo.createVirtualRegister(RC); 6289 unsigned TmpDestReg = RegInfo.createVirtualRegister(RC); 6290 unsigned Ptr1Reg; 6291 unsigned TmpReg = (!BinOpcode) ? Incr2Reg : RegInfo.createVirtualRegister(RC); 6292 6293 // thisMBB: 6294 // ... 6295 // fallthrough --> loopMBB 6296 BB->addSuccessor(loopMBB); 6297 6298 // The 4-byte load must be aligned, while a char or short may be 6299 // anywhere in the word. Hence all this nasty bookkeeping code. 6300 // add ptr1, ptrA, ptrB [copy if ptrA==0] 6301 // rlwinm shift1, ptr1, 3, 27, 28 [3, 27, 27] 6302 // xori shift, shift1, 24 [16] 6303 // rlwinm ptr, ptr1, 0, 0, 29 6304 // slw incr2, incr, shift 6305 // li mask2, 255 [li mask3, 0; ori mask2, mask3, 65535] 6306 // slw mask, mask2, shift 6307 // loopMBB: 6308 // lwarx tmpDest, ptr 6309 // add tmp, tmpDest, incr2 6310 // andc tmp2, tmpDest, mask 6311 // and tmp3, tmp, mask 6312 // or tmp4, tmp3, tmp2 6313 // stwcx. tmp4, ptr 6314 // bne- loopMBB 6315 // fallthrough --> exitMBB 6316 // srw dest, tmpDest, shift 6317 if (ptrA != ZeroReg) { 6318 Ptr1Reg = RegInfo.createVirtualRegister(RC); 6319 BuildMI(BB, dl, TII->get(is64bit ? PPC::ADD8 : PPC::ADD4), Ptr1Reg) 6320 .addReg(ptrA).addReg(ptrB); 6321 } else { 6322 Ptr1Reg = ptrB; 6323 } 6324 BuildMI(BB, dl, TII->get(PPC::RLWINM), Shift1Reg).addReg(Ptr1Reg) 6325 .addImm(3).addImm(27).addImm(is8bit ? 28 : 27); 6326 BuildMI(BB, dl, TII->get(is64bit ? PPC::XORI8 : PPC::XORI), ShiftReg) 6327 .addReg(Shift1Reg).addImm(is8bit ? 24 : 16); 6328 if (is64bit) 6329 BuildMI(BB, dl, TII->get(PPC::RLDICR), PtrReg) 6330 .addReg(Ptr1Reg).addImm(0).addImm(61); 6331 else 6332 BuildMI(BB, dl, TII->get(PPC::RLWINM), PtrReg) 6333 .addReg(Ptr1Reg).addImm(0).addImm(0).addImm(29); 6334 BuildMI(BB, dl, TII->get(PPC::SLW), Incr2Reg) 6335 .addReg(incr).addReg(ShiftReg); 6336 if (is8bit) 6337 BuildMI(BB, dl, TII->get(PPC::LI), Mask2Reg).addImm(255); 6338 else { 6339 BuildMI(BB, dl, TII->get(PPC::LI), Mask3Reg).addImm(0); 6340 BuildMI(BB, dl, TII->get(PPC::ORI),Mask2Reg).addReg(Mask3Reg).addImm(65535); 6341 } 6342 BuildMI(BB, dl, TII->get(PPC::SLW), MaskReg) 6343 .addReg(Mask2Reg).addReg(ShiftReg); 6344 6345 BB = loopMBB; 6346 BuildMI(BB, dl, TII->get(PPC::LWARX), TmpDestReg) 6347 .addReg(ZeroReg).addReg(PtrReg); 6348 if (BinOpcode) 6349 BuildMI(BB, dl, TII->get(BinOpcode), TmpReg) 6350 .addReg(Incr2Reg).addReg(TmpDestReg); 6351 BuildMI(BB, dl, TII->get(is64bit ? PPC::ANDC8 : PPC::ANDC), Tmp2Reg) 6352 .addReg(TmpDestReg).addReg(MaskReg); 6353 BuildMI(BB, dl, TII->get(is64bit ? PPC::AND8 : PPC::AND), Tmp3Reg) 6354 .addReg(TmpReg).addReg(MaskReg); 6355 BuildMI(BB, dl, TII->get(is64bit ? PPC::OR8 : PPC::OR), Tmp4Reg) 6356 .addReg(Tmp3Reg).addReg(Tmp2Reg); 6357 BuildMI(BB, dl, TII->get(PPC::STWCX)) 6358 .addReg(Tmp4Reg).addReg(ZeroReg).addReg(PtrReg); 6359 BuildMI(BB, dl, TII->get(PPC::BCC)) 6360 .addImm(PPC::PRED_NE).addReg(PPC::CR0).addMBB(loopMBB); 6361 BB->addSuccessor(loopMBB); 6362 BB->addSuccessor(exitMBB); 6363 6364 // exitMBB: 6365 // ... 6366 BB = exitMBB; 6367 BuildMI(*BB, BB->begin(), dl, TII->get(PPC::SRW), dest).addReg(TmpDestReg) 6368 .addReg(ShiftReg); 6369 return BB; 6370 } 6371 6372 llvm::MachineBasicBlock* 6373 PPCTargetLowering::emitEHSjLjSetJmp(MachineInstr *MI, 6374 MachineBasicBlock *MBB) const { 6375 DebugLoc DL = MI->getDebugLoc(); 6376 const TargetInstrInfo *TII = getTargetMachine().getInstrInfo(); 6377 6378 MachineFunction *MF = MBB->getParent(); 6379 MachineRegisterInfo &MRI = MF->getRegInfo(); 6380 6381 const BasicBlock *BB = MBB->getBasicBlock(); 6382 MachineFunction::iterator I = MBB; 6383 ++I; 6384 6385 // Memory Reference 6386 MachineInstr::mmo_iterator MMOBegin = MI->memoperands_begin(); 6387 MachineInstr::mmo_iterator MMOEnd = MI->memoperands_end(); 6388 6389 unsigned DstReg = MI->getOperand(0).getReg(); 6390 const TargetRegisterClass *RC = MRI.getRegClass(DstReg); 6391 assert(RC->hasType(MVT::i32) && "Invalid destination!"); 6392 unsigned mainDstReg = MRI.createVirtualRegister(RC); 6393 unsigned restoreDstReg = MRI.createVirtualRegister(RC); 6394 6395 MVT PVT = getPointerTy(); 6396 assert((PVT == MVT::i64 || PVT == MVT::i32) && 6397 "Invalid Pointer Size!"); 6398 // For v = setjmp(buf), we generate 6399 // 6400 // thisMBB: 6401 // SjLjSetup mainMBB 6402 // bl mainMBB 6403 // v_restore = 1 6404 // b sinkMBB 6405 // 6406 // mainMBB: 6407 // buf[LabelOffset] = LR 6408 // v_main = 0 6409 // 6410 // sinkMBB: 6411 // v = phi(main, restore) 6412 // 6413 6414 MachineBasicBlock *thisMBB = MBB; 6415 MachineBasicBlock *mainMBB = MF->CreateMachineBasicBlock(BB); 6416 MachineBasicBlock *sinkMBB = MF->CreateMachineBasicBlock(BB); 6417 MF->insert(I, mainMBB); 6418 MF->insert(I, sinkMBB); 6419 6420 MachineInstrBuilder MIB; 6421 6422 // Transfer the remainder of BB and its successor edges to sinkMBB. 6423 sinkMBB->splice(sinkMBB->begin(), MBB, 6424 std::next(MachineBasicBlock::iterator(MI)), MBB->end()); 6425 sinkMBB->transferSuccessorsAndUpdatePHIs(MBB); 6426 6427 // Note that the structure of the jmp_buf used here is not compatible 6428 // with that used by libc, and is not designed to be. Specifically, it 6429 // stores only those 'reserved' registers that LLVM does not otherwise 6430 // understand how to spill. Also, by convention, by the time this 6431 // intrinsic is called, Clang has already stored the frame address in the 6432 // first slot of the buffer and stack address in the third. Following the 6433 // X86 target code, we'll store the jump address in the second slot. We also 6434 // need to save the TOC pointer (R2) to handle jumps between shared 6435 // libraries, and that will be stored in the fourth slot. The thread 6436 // identifier (R13) is not affected. 6437 6438 // thisMBB: 6439 const int64_t LabelOffset = 1 * PVT.getStoreSize(); 6440 const int64_t TOCOffset = 3 * PVT.getStoreSize(); 6441 const int64_t BPOffset = 4 * PVT.getStoreSize(); 6442 6443 // Prepare IP either in reg. 6444 const TargetRegisterClass *PtrRC = getRegClassFor(PVT); 6445 unsigned LabelReg = MRI.createVirtualRegister(PtrRC); 6446 unsigned BufReg = MI->getOperand(1).getReg(); 6447 6448 if (PPCSubTarget.isPPC64() && PPCSubTarget.isSVR4ABI()) { 6449 MIB = BuildMI(*thisMBB, MI, DL, TII->get(PPC::STD)) 6450 .addReg(PPC::X2) 6451 .addImm(TOCOffset) 6452 .addReg(BufReg); 6453 MIB.setMemRefs(MMOBegin, MMOEnd); 6454 } 6455 6456 // Naked functions never have a base pointer, and so we use r1. For all 6457 // other functions, this decision must be delayed until during PEI. 6458 unsigned BaseReg; 6459 if (MF->getFunction()->getAttributes().hasAttribute( 6460 AttributeSet::FunctionIndex, Attribute::Naked)) 6461 BaseReg = PPCSubTarget.isPPC64() ? PPC::X1 : PPC::R1; 6462 else 6463 BaseReg = PPCSubTarget.isPPC64() ? PPC::BP8 : PPC::BP; 6464 6465 MIB = BuildMI(*thisMBB, MI, DL, 6466 TII->get(PPCSubTarget.isPPC64() ? PPC::STD : PPC::STW)) 6467 .addReg(BaseReg) 6468 .addImm(BPOffset) 6469 .addReg(BufReg); 6470 MIB.setMemRefs(MMOBegin, MMOEnd); 6471 6472 // Setup 6473 MIB = BuildMI(*thisMBB, MI, DL, TII->get(PPC::BCLalways)).addMBB(mainMBB); 6474 const PPCRegisterInfo *TRI = 6475 static_cast<const PPCRegisterInfo*>(getTargetMachine().getRegisterInfo()); 6476 MIB.addRegMask(TRI->getNoPreservedMask()); 6477 6478 BuildMI(*thisMBB, MI, DL, TII->get(PPC::LI), restoreDstReg).addImm(1); 6479 6480 MIB = BuildMI(*thisMBB, MI, DL, TII->get(PPC::EH_SjLj_Setup)) 6481 .addMBB(mainMBB); 6482 MIB = BuildMI(*thisMBB, MI, DL, TII->get(PPC::B)).addMBB(sinkMBB); 6483 6484 thisMBB->addSuccessor(mainMBB, /* weight */ 0); 6485 thisMBB->addSuccessor(sinkMBB, /* weight */ 1); 6486 6487 // mainMBB: 6488 // mainDstReg = 0 6489 MIB = BuildMI(mainMBB, DL, 6490 TII->get(PPCSubTarget.isPPC64() ? PPC::MFLR8 : PPC::MFLR), LabelReg); 6491 6492 // Store IP 6493 if (PPCSubTarget.isPPC64()) { 6494 MIB = BuildMI(mainMBB, DL, TII->get(PPC::STD)) 6495 .addReg(LabelReg) 6496 .addImm(LabelOffset) 6497 .addReg(BufReg); 6498 } else { 6499 MIB = BuildMI(mainMBB, DL, TII->get(PPC::STW)) 6500 .addReg(LabelReg) 6501 .addImm(LabelOffset) 6502 .addReg(BufReg); 6503 } 6504 6505 MIB.setMemRefs(MMOBegin, MMOEnd); 6506 6507 BuildMI(mainMBB, DL, TII->get(PPC::LI), mainDstReg).addImm(0); 6508 mainMBB->addSuccessor(sinkMBB); 6509 6510 // sinkMBB: 6511 BuildMI(*sinkMBB, sinkMBB->begin(), DL, 6512 TII->get(PPC::PHI), DstReg) 6513 .addReg(mainDstReg).addMBB(mainMBB) 6514 .addReg(restoreDstReg).addMBB(thisMBB); 6515 6516 MI->eraseFromParent(); 6517 return sinkMBB; 6518 } 6519 6520 MachineBasicBlock * 6521 PPCTargetLowering::emitEHSjLjLongJmp(MachineInstr *MI, 6522 MachineBasicBlock *MBB) const { 6523 DebugLoc DL = MI->getDebugLoc(); 6524 const TargetInstrInfo *TII = getTargetMachine().getInstrInfo(); 6525 6526 MachineFunction *MF = MBB->getParent(); 6527 MachineRegisterInfo &MRI = MF->getRegInfo(); 6528 6529 // Memory Reference 6530 MachineInstr::mmo_iterator MMOBegin = MI->memoperands_begin(); 6531 MachineInstr::mmo_iterator MMOEnd = MI->memoperands_end(); 6532 6533 MVT PVT = getPointerTy(); 6534 assert((PVT == MVT::i64 || PVT == MVT::i32) && 6535 "Invalid Pointer Size!"); 6536 6537 const TargetRegisterClass *RC = 6538 (PVT == MVT::i64) ? &PPC::G8RCRegClass : &PPC::GPRCRegClass; 6539 unsigned Tmp = MRI.createVirtualRegister(RC); 6540 // Since FP is only updated here but NOT referenced, it's treated as GPR. 6541 unsigned FP = (PVT == MVT::i64) ? PPC::X31 : PPC::R31; 6542 unsigned SP = (PVT == MVT::i64) ? PPC::X1 : PPC::R1; 6543 unsigned BP = (PVT == MVT::i64) ? PPC::X30 : PPC::R30; 6544 6545 MachineInstrBuilder MIB; 6546 6547 const int64_t LabelOffset = 1 * PVT.getStoreSize(); 6548 const int64_t SPOffset = 2 * PVT.getStoreSize(); 6549 const int64_t TOCOffset = 3 * PVT.getStoreSize(); 6550 const int64_t BPOffset = 4 * PVT.getStoreSize(); 6551 6552 unsigned BufReg = MI->getOperand(0).getReg(); 6553 6554 // Reload FP (the jumped-to function may not have had a 6555 // frame pointer, and if so, then its r31 will be restored 6556 // as necessary). 6557 if (PVT == MVT::i64) { 6558 MIB = BuildMI(*MBB, MI, DL, TII->get(PPC::LD), FP) 6559 .addImm(0) 6560 .addReg(BufReg); 6561 } else { 6562 MIB = BuildMI(*MBB, MI, DL, TII->get(PPC::LWZ), FP) 6563 .addImm(0) 6564 .addReg(BufReg); 6565 } 6566 MIB.setMemRefs(MMOBegin, MMOEnd); 6567 6568 // Reload IP 6569 if (PVT == MVT::i64) { 6570 MIB = BuildMI(*MBB, MI, DL, TII->get(PPC::LD), Tmp) 6571 .addImm(LabelOffset) 6572 .addReg(BufReg); 6573 } else { 6574 MIB = BuildMI(*MBB, MI, DL, TII->get(PPC::LWZ), Tmp) 6575 .addImm(LabelOffset) 6576 .addReg(BufReg); 6577 } 6578 MIB.setMemRefs(MMOBegin, MMOEnd); 6579 6580 // Reload SP 6581 if (PVT == MVT::i64) { 6582 MIB = BuildMI(*MBB, MI, DL, TII->get(PPC::LD), SP) 6583 .addImm(SPOffset) 6584 .addReg(BufReg); 6585 } else { 6586 MIB = BuildMI(*MBB, MI, DL, TII->get(PPC::LWZ), SP) 6587 .addImm(SPOffset) 6588 .addReg(BufReg); 6589 } 6590 MIB.setMemRefs(MMOBegin, MMOEnd); 6591 6592 // Reload BP 6593 if (PVT == MVT::i64) { 6594 MIB = BuildMI(*MBB, MI, DL, TII->get(PPC::LD), BP) 6595 .addImm(BPOffset) 6596 .addReg(BufReg); 6597 } else { 6598 MIB = BuildMI(*MBB, MI, DL, TII->get(PPC::LWZ), BP) 6599 .addImm(BPOffset) 6600 .addReg(BufReg); 6601 } 6602 MIB.setMemRefs(MMOBegin, MMOEnd); 6603 6604 // Reload TOC 6605 if (PVT == MVT::i64 && PPCSubTarget.isSVR4ABI()) { 6606 MIB = BuildMI(*MBB, MI, DL, TII->get(PPC::LD), PPC::X2) 6607 .addImm(TOCOffset) 6608 .addReg(BufReg); 6609 6610 MIB.setMemRefs(MMOBegin, MMOEnd); 6611 } 6612 6613 // Jump 6614 BuildMI(*MBB, MI, DL, 6615 TII->get(PVT == MVT::i64 ? PPC::MTCTR8 : PPC::MTCTR)).addReg(Tmp); 6616 BuildMI(*MBB, MI, DL, TII->get(PVT == MVT::i64 ? PPC::BCTR8 : PPC::BCTR)); 6617 6618 MI->eraseFromParent(); 6619 return MBB; 6620 } 6621 6622 MachineBasicBlock * 6623 PPCTargetLowering::EmitInstrWithCustomInserter(MachineInstr *MI, 6624 MachineBasicBlock *BB) const { 6625 if (MI->getOpcode() == PPC::EH_SjLj_SetJmp32 || 6626 MI->getOpcode() == PPC::EH_SjLj_SetJmp64) { 6627 return emitEHSjLjSetJmp(MI, BB); 6628 } else if (MI->getOpcode() == PPC::EH_SjLj_LongJmp32 || 6629 MI->getOpcode() == PPC::EH_SjLj_LongJmp64) { 6630 return emitEHSjLjLongJmp(MI, BB); 6631 } 6632 6633 const TargetInstrInfo *TII = getTargetMachine().getInstrInfo(); 6634 6635 // To "insert" these instructions we actually have to insert their 6636 // control-flow patterns. 6637 const BasicBlock *LLVM_BB = BB->getBasicBlock(); 6638 MachineFunction::iterator It = BB; 6639 ++It; 6640 6641 MachineFunction *F = BB->getParent(); 6642 6643 if (PPCSubTarget.hasISEL() && (MI->getOpcode() == PPC::SELECT_CC_I4 || 6644 MI->getOpcode() == PPC::SELECT_CC_I8 || 6645 MI->getOpcode() == PPC::SELECT_I4 || 6646 MI->getOpcode() == PPC::SELECT_I8)) { 6647 SmallVector<MachineOperand, 2> Cond; 6648 if (MI->getOpcode() == PPC::SELECT_CC_I4 || 6649 MI->getOpcode() == PPC::SELECT_CC_I8) 6650 Cond.push_back(MI->getOperand(4)); 6651 else 6652 Cond.push_back(MachineOperand::CreateImm(PPC::PRED_BIT_SET)); 6653 Cond.push_back(MI->getOperand(1)); 6654 6655 DebugLoc dl = MI->getDebugLoc(); 6656 const TargetInstrInfo *TII = getTargetMachine().getInstrInfo(); 6657 TII->insertSelect(*BB, MI, dl, MI->getOperand(0).getReg(), 6658 Cond, MI->getOperand(2).getReg(), 6659 MI->getOperand(3).getReg()); 6660 } else if (MI->getOpcode() == PPC::SELECT_CC_I4 || 6661 MI->getOpcode() == PPC::SELECT_CC_I8 || 6662 MI->getOpcode() == PPC::SELECT_CC_F4 || 6663 MI->getOpcode() == PPC::SELECT_CC_F8 || 6664 MI->getOpcode() == PPC::SELECT_CC_VRRC || 6665 MI->getOpcode() == PPC::SELECT_I4 || 6666 MI->getOpcode() == PPC::SELECT_I8 || 6667 MI->getOpcode() == PPC::SELECT_F4 || 6668 MI->getOpcode() == PPC::SELECT_F8 || 6669 MI->getOpcode() == PPC::SELECT_VRRC) { 6670 // The incoming instruction knows the destination vreg to set, the 6671 // condition code register to branch on, the true/false values to 6672 // select between, and a branch opcode to use. 6673 6674 // thisMBB: 6675 // ... 6676 // TrueVal = ... 6677 // cmpTY ccX, r1, r2 6678 // bCC copy1MBB 6679 // fallthrough --> copy0MBB 6680 MachineBasicBlock *thisMBB = BB; 6681 MachineBasicBlock *copy0MBB = F->CreateMachineBasicBlock(LLVM_BB); 6682 MachineBasicBlock *sinkMBB = F->CreateMachineBasicBlock(LLVM_BB); 6683 DebugLoc dl = MI->getDebugLoc(); 6684 F->insert(It, copy0MBB); 6685 F->insert(It, sinkMBB); 6686 6687 // Transfer the remainder of BB and its successor edges to sinkMBB. 6688 sinkMBB->splice(sinkMBB->begin(), BB, 6689 std::next(MachineBasicBlock::iterator(MI)), BB->end()); 6690 sinkMBB->transferSuccessorsAndUpdatePHIs(BB); 6691 6692 // Next, add the true and fallthrough blocks as its successors. 6693 BB->addSuccessor(copy0MBB); 6694 BB->addSuccessor(sinkMBB); 6695 6696 if (MI->getOpcode() == PPC::SELECT_I4 || 6697 MI->getOpcode() == PPC::SELECT_I8 || 6698 MI->getOpcode() == PPC::SELECT_F4 || 6699 MI->getOpcode() == PPC::SELECT_F8 || 6700 MI->getOpcode() == PPC::SELECT_VRRC) { 6701 BuildMI(BB, dl, TII->get(PPC::BC)) 6702 .addReg(MI->getOperand(1).getReg()).addMBB(sinkMBB); 6703 } else { 6704 unsigned SelectPred = MI->getOperand(4).getImm(); 6705 BuildMI(BB, dl, TII->get(PPC::BCC)) 6706 .addImm(SelectPred).addReg(MI->getOperand(1).getReg()).addMBB(sinkMBB); 6707 } 6708 6709 // copy0MBB: 6710 // %FalseValue = ... 6711 // # fallthrough to sinkMBB 6712 BB = copy0MBB; 6713 6714 // Update machine-CFG edges 6715 BB->addSuccessor(sinkMBB); 6716 6717 // sinkMBB: 6718 // %Result = phi [ %FalseValue, copy0MBB ], [ %TrueValue, thisMBB ] 6719 // ... 6720 BB = sinkMBB; 6721 BuildMI(*BB, BB->begin(), dl, 6722 TII->get(PPC::PHI), MI->getOperand(0).getReg()) 6723 .addReg(MI->getOperand(3).getReg()).addMBB(copy0MBB) 6724 .addReg(MI->getOperand(2).getReg()).addMBB(thisMBB); 6725 } 6726 else if (MI->getOpcode() == PPC::ATOMIC_LOAD_ADD_I8) 6727 BB = EmitPartwordAtomicBinary(MI, BB, true, PPC::ADD4); 6728 else if (MI->getOpcode() == PPC::ATOMIC_LOAD_ADD_I16) 6729 BB = EmitPartwordAtomicBinary(MI, BB, false, PPC::ADD4); 6730 else if (MI->getOpcode() == PPC::ATOMIC_LOAD_ADD_I32) 6731 BB = EmitAtomicBinary(MI, BB, false, PPC::ADD4); 6732 else if (MI->getOpcode() == PPC::ATOMIC_LOAD_ADD_I64) 6733 BB = EmitAtomicBinary(MI, BB, true, PPC::ADD8); 6734 6735 else if (MI->getOpcode() == PPC::ATOMIC_LOAD_AND_I8) 6736 BB = EmitPartwordAtomicBinary(MI, BB, true, PPC::AND); 6737 else if (MI->getOpcode() == PPC::ATOMIC_LOAD_AND_I16) 6738 BB = EmitPartwordAtomicBinary(MI, BB, false, PPC::AND); 6739 else if (MI->getOpcode() == PPC::ATOMIC_LOAD_AND_I32) 6740 BB = EmitAtomicBinary(MI, BB, false, PPC::AND); 6741 else if (MI->getOpcode() == PPC::ATOMIC_LOAD_AND_I64) 6742 BB = EmitAtomicBinary(MI, BB, true, PPC::AND8); 6743 6744 else if (MI->getOpcode() == PPC::ATOMIC_LOAD_OR_I8) 6745 BB = EmitPartwordAtomicBinary(MI, BB, true, PPC::OR); 6746 else if (MI->getOpcode() == PPC::ATOMIC_LOAD_OR_I16) 6747 BB = EmitPartwordAtomicBinary(MI, BB, false, PPC::OR); 6748 else if (MI->getOpcode() == PPC::ATOMIC_LOAD_OR_I32) 6749 BB = EmitAtomicBinary(MI, BB, false, PPC::OR); 6750 else if (MI->getOpcode() == PPC::ATOMIC_LOAD_OR_I64) 6751 BB = EmitAtomicBinary(MI, BB, true, PPC::OR8); 6752 6753 else if (MI->getOpcode() == PPC::ATOMIC_LOAD_XOR_I8) 6754 BB = EmitPartwordAtomicBinary(MI, BB, true, PPC::XOR); 6755 else if (MI->getOpcode() == PPC::ATOMIC_LOAD_XOR_I16) 6756 BB = EmitPartwordAtomicBinary(MI, BB, false, PPC::XOR); 6757 else if (MI->getOpcode() == PPC::ATOMIC_LOAD_XOR_I32) 6758 BB = EmitAtomicBinary(MI, BB, false, PPC::XOR); 6759 else if (MI->getOpcode() == PPC::ATOMIC_LOAD_XOR_I64) 6760 BB = EmitAtomicBinary(MI, BB, true, PPC::XOR8); 6761 6762 else if (MI->getOpcode() == PPC::ATOMIC_LOAD_NAND_I8) 6763 BB = EmitPartwordAtomicBinary(MI, BB, true, PPC::ANDC); 6764 else if (MI->getOpcode() == PPC::ATOMIC_LOAD_NAND_I16) 6765 BB = EmitPartwordAtomicBinary(MI, BB, false, PPC::ANDC); 6766 else if (MI->getOpcode() == PPC::ATOMIC_LOAD_NAND_I32) 6767 BB = EmitAtomicBinary(MI, BB, false, PPC::ANDC); 6768 else if (MI->getOpcode() == PPC::ATOMIC_LOAD_NAND_I64) 6769 BB = EmitAtomicBinary(MI, BB, true, PPC::ANDC8); 6770 6771 else if (MI->getOpcode() == PPC::ATOMIC_LOAD_SUB_I8) 6772 BB = EmitPartwordAtomicBinary(MI, BB, true, PPC::SUBF); 6773 else if (MI->getOpcode() == PPC::ATOMIC_LOAD_SUB_I16) 6774 BB = EmitPartwordAtomicBinary(MI, BB, false, PPC::SUBF); 6775 else if (MI->getOpcode() == PPC::ATOMIC_LOAD_SUB_I32) 6776 BB = EmitAtomicBinary(MI, BB, false, PPC::SUBF); 6777 else if (MI->getOpcode() == PPC::ATOMIC_LOAD_SUB_I64) 6778 BB = EmitAtomicBinary(MI, BB, true, PPC::SUBF8); 6779 6780 else if (MI->getOpcode() == PPC::ATOMIC_SWAP_I8) 6781 BB = EmitPartwordAtomicBinary(MI, BB, true, 0); 6782 else if (MI->getOpcode() == PPC::ATOMIC_SWAP_I16) 6783 BB = EmitPartwordAtomicBinary(MI, BB, false, 0); 6784 else if (MI->getOpcode() == PPC::ATOMIC_SWAP_I32) 6785 BB = EmitAtomicBinary(MI, BB, false, 0); 6786 else if (MI->getOpcode() == PPC::ATOMIC_SWAP_I64) 6787 BB = EmitAtomicBinary(MI, BB, true, 0); 6788 6789 else if (MI->getOpcode() == PPC::ATOMIC_CMP_SWAP_I32 || 6790 MI->getOpcode() == PPC::ATOMIC_CMP_SWAP_I64) { 6791 bool is64bit = MI->getOpcode() == PPC::ATOMIC_CMP_SWAP_I64; 6792 6793 unsigned dest = MI->getOperand(0).getReg(); 6794 unsigned ptrA = MI->getOperand(1).getReg(); 6795 unsigned ptrB = MI->getOperand(2).getReg(); 6796 unsigned oldval = MI->getOperand(3).getReg(); 6797 unsigned newval = MI->getOperand(4).getReg(); 6798 DebugLoc dl = MI->getDebugLoc(); 6799 6800 MachineBasicBlock *loop1MBB = F->CreateMachineBasicBlock(LLVM_BB); 6801 MachineBasicBlock *loop2MBB = F->CreateMachineBasicBlock(LLVM_BB); 6802 MachineBasicBlock *midMBB = F->CreateMachineBasicBlock(LLVM_BB); 6803 MachineBasicBlock *exitMBB = F->CreateMachineBasicBlock(LLVM_BB); 6804 F->insert(It, loop1MBB); 6805 F->insert(It, loop2MBB); 6806 F->insert(It, midMBB); 6807 F->insert(It, exitMBB); 6808 exitMBB->splice(exitMBB->begin(), BB, 6809 std::next(MachineBasicBlock::iterator(MI)), BB->end()); 6810 exitMBB->transferSuccessorsAndUpdatePHIs(BB); 6811 6812 // thisMBB: 6813 // ... 6814 // fallthrough --> loopMBB 6815 BB->addSuccessor(loop1MBB); 6816 6817 // loop1MBB: 6818 // l[wd]arx dest, ptr 6819 // cmp[wd] dest, oldval 6820 // bne- midMBB 6821 // loop2MBB: 6822 // st[wd]cx. newval, ptr 6823 // bne- loopMBB 6824 // b exitBB 6825 // midMBB: 6826 // st[wd]cx. dest, ptr 6827 // exitBB: 6828 BB = loop1MBB; 6829 BuildMI(BB, dl, TII->get(is64bit ? PPC::LDARX : PPC::LWARX), dest) 6830 .addReg(ptrA).addReg(ptrB); 6831 BuildMI(BB, dl, TII->get(is64bit ? PPC::CMPD : PPC::CMPW), PPC::CR0) 6832 .addReg(oldval).addReg(dest); 6833 BuildMI(BB, dl, TII->get(PPC::BCC)) 6834 .addImm(PPC::PRED_NE).addReg(PPC::CR0).addMBB(midMBB); 6835 BB->addSuccessor(loop2MBB); 6836 BB->addSuccessor(midMBB); 6837 6838 BB = loop2MBB; 6839 BuildMI(BB, dl, TII->get(is64bit ? PPC::STDCX : PPC::STWCX)) 6840 .addReg(newval).addReg(ptrA).addReg(ptrB); 6841 BuildMI(BB, dl, TII->get(PPC::BCC)) 6842 .addImm(PPC::PRED_NE).addReg(PPC::CR0).addMBB(loop1MBB); 6843 BuildMI(BB, dl, TII->get(PPC::B)).addMBB(exitMBB); 6844 BB->addSuccessor(loop1MBB); 6845 BB->addSuccessor(exitMBB); 6846 6847 BB = midMBB; 6848 BuildMI(BB, dl, TII->get(is64bit ? PPC::STDCX : PPC::STWCX)) 6849 .addReg(dest).addReg(ptrA).addReg(ptrB); 6850 BB->addSuccessor(exitMBB); 6851 6852 // exitMBB: 6853 // ... 6854 BB = exitMBB; 6855 } else if (MI->getOpcode() == PPC::ATOMIC_CMP_SWAP_I8 || 6856 MI->getOpcode() == PPC::ATOMIC_CMP_SWAP_I16) { 6857 // We must use 64-bit registers for addresses when targeting 64-bit, 6858 // since we're actually doing arithmetic on them. Other registers 6859 // can be 32-bit. 6860 bool is64bit = PPCSubTarget.isPPC64(); 6861 bool is8bit = MI->getOpcode() == PPC::ATOMIC_CMP_SWAP_I8; 6862 6863 unsigned dest = MI->getOperand(0).getReg(); 6864 unsigned ptrA = MI->getOperand(1).getReg(); 6865 unsigned ptrB = MI->getOperand(2).getReg(); 6866 unsigned oldval = MI->getOperand(3).getReg(); 6867 unsigned newval = MI->getOperand(4).getReg(); 6868 DebugLoc dl = MI->getDebugLoc(); 6869 6870 MachineBasicBlock *loop1MBB = F->CreateMachineBasicBlock(LLVM_BB); 6871 MachineBasicBlock *loop2MBB = F->CreateMachineBasicBlock(LLVM_BB); 6872 MachineBasicBlock *midMBB = F->CreateMachineBasicBlock(LLVM_BB); 6873 MachineBasicBlock *exitMBB = F->CreateMachineBasicBlock(LLVM_BB); 6874 F->insert(It, loop1MBB); 6875 F->insert(It, loop2MBB); 6876 F->insert(It, midMBB); 6877 F->insert(It, exitMBB); 6878 exitMBB->splice(exitMBB->begin(), BB, 6879 std::next(MachineBasicBlock::iterator(MI)), BB->end()); 6880 exitMBB->transferSuccessorsAndUpdatePHIs(BB); 6881 6882 MachineRegisterInfo &RegInfo = F->getRegInfo(); 6883 const TargetRegisterClass *RC = 6884 is64bit ? (const TargetRegisterClass *) &PPC::G8RCRegClass : 6885 (const TargetRegisterClass *) &PPC::GPRCRegClass; 6886 unsigned PtrReg = RegInfo.createVirtualRegister(RC); 6887 unsigned Shift1Reg = RegInfo.createVirtualRegister(RC); 6888 unsigned ShiftReg = RegInfo.createVirtualRegister(RC); 6889 unsigned NewVal2Reg = RegInfo.createVirtualRegister(RC); 6890 unsigned NewVal3Reg = RegInfo.createVirtualRegister(RC); 6891 unsigned OldVal2Reg = RegInfo.createVirtualRegister(RC); 6892 unsigned OldVal3Reg = RegInfo.createVirtualRegister(RC); 6893 unsigned MaskReg = RegInfo.createVirtualRegister(RC); 6894 unsigned Mask2Reg = RegInfo.createVirtualRegister(RC); 6895 unsigned Mask3Reg = RegInfo.createVirtualRegister(RC); 6896 unsigned Tmp2Reg = RegInfo.createVirtualRegister(RC); 6897 unsigned Tmp4Reg = RegInfo.createVirtualRegister(RC); 6898 unsigned TmpDestReg = RegInfo.createVirtualRegister(RC); 6899 unsigned Ptr1Reg; 6900 unsigned TmpReg = RegInfo.createVirtualRegister(RC); 6901 unsigned ZeroReg = is64bit ? PPC::ZERO8 : PPC::ZERO; 6902 // thisMBB: 6903 // ... 6904 // fallthrough --> loopMBB 6905 BB->addSuccessor(loop1MBB); 6906 6907 // The 4-byte load must be aligned, while a char or short may be 6908 // anywhere in the word. Hence all this nasty bookkeeping code. 6909 // add ptr1, ptrA, ptrB [copy if ptrA==0] 6910 // rlwinm shift1, ptr1, 3, 27, 28 [3, 27, 27] 6911 // xori shift, shift1, 24 [16] 6912 // rlwinm ptr, ptr1, 0, 0, 29 6913 // slw newval2, newval, shift 6914 // slw oldval2, oldval,shift 6915 // li mask2, 255 [li mask3, 0; ori mask2, mask3, 65535] 6916 // slw mask, mask2, shift 6917 // and newval3, newval2, mask 6918 // and oldval3, oldval2, mask 6919 // loop1MBB: 6920 // lwarx tmpDest, ptr 6921 // and tmp, tmpDest, mask 6922 // cmpw tmp, oldval3 6923 // bne- midMBB 6924 // loop2MBB: 6925 // andc tmp2, tmpDest, mask 6926 // or tmp4, tmp2, newval3 6927 // stwcx. tmp4, ptr 6928 // bne- loop1MBB 6929 // b exitBB 6930 // midMBB: 6931 // stwcx. tmpDest, ptr 6932 // exitBB: 6933 // srw dest, tmpDest, shift 6934 if (ptrA != ZeroReg) { 6935 Ptr1Reg = RegInfo.createVirtualRegister(RC); 6936 BuildMI(BB, dl, TII->get(is64bit ? PPC::ADD8 : PPC::ADD4), Ptr1Reg) 6937 .addReg(ptrA).addReg(ptrB); 6938 } else { 6939 Ptr1Reg = ptrB; 6940 } 6941 BuildMI(BB, dl, TII->get(PPC::RLWINM), Shift1Reg).addReg(Ptr1Reg) 6942 .addImm(3).addImm(27).addImm(is8bit ? 28 : 27); 6943 BuildMI(BB, dl, TII->get(is64bit ? PPC::XORI8 : PPC::XORI), ShiftReg) 6944 .addReg(Shift1Reg).addImm(is8bit ? 24 : 16); 6945 if (is64bit) 6946 BuildMI(BB, dl, TII->get(PPC::RLDICR), PtrReg) 6947 .addReg(Ptr1Reg).addImm(0).addImm(61); 6948 else 6949 BuildMI(BB, dl, TII->get(PPC::RLWINM), PtrReg) 6950 .addReg(Ptr1Reg).addImm(0).addImm(0).addImm(29); 6951 BuildMI(BB, dl, TII->get(PPC::SLW), NewVal2Reg) 6952 .addReg(newval).addReg(ShiftReg); 6953 BuildMI(BB, dl, TII->get(PPC::SLW), OldVal2Reg) 6954 .addReg(oldval).addReg(ShiftReg); 6955 if (is8bit) 6956 BuildMI(BB, dl, TII->get(PPC::LI), Mask2Reg).addImm(255); 6957 else { 6958 BuildMI(BB, dl, TII->get(PPC::LI), Mask3Reg).addImm(0); 6959 BuildMI(BB, dl, TII->get(PPC::ORI), Mask2Reg) 6960 .addReg(Mask3Reg).addImm(65535); 6961 } 6962 BuildMI(BB, dl, TII->get(PPC::SLW), MaskReg) 6963 .addReg(Mask2Reg).addReg(ShiftReg); 6964 BuildMI(BB, dl, TII->get(PPC::AND), NewVal3Reg) 6965 .addReg(NewVal2Reg).addReg(MaskReg); 6966 BuildMI(BB, dl, TII->get(PPC::AND), OldVal3Reg) 6967 .addReg(OldVal2Reg).addReg(MaskReg); 6968 6969 BB = loop1MBB; 6970 BuildMI(BB, dl, TII->get(PPC::LWARX), TmpDestReg) 6971 .addReg(ZeroReg).addReg(PtrReg); 6972 BuildMI(BB, dl, TII->get(PPC::AND),TmpReg) 6973 .addReg(TmpDestReg).addReg(MaskReg); 6974 BuildMI(BB, dl, TII->get(PPC::CMPW), PPC::CR0) 6975 .addReg(TmpReg).addReg(OldVal3Reg); 6976 BuildMI(BB, dl, TII->get(PPC::BCC)) 6977 .addImm(PPC::PRED_NE).addReg(PPC::CR0).addMBB(midMBB); 6978 BB->addSuccessor(loop2MBB); 6979 BB->addSuccessor(midMBB); 6980 6981 BB = loop2MBB; 6982 BuildMI(BB, dl, TII->get(PPC::ANDC),Tmp2Reg) 6983 .addReg(TmpDestReg).addReg(MaskReg); 6984 BuildMI(BB, dl, TII->get(PPC::OR),Tmp4Reg) 6985 .addReg(Tmp2Reg).addReg(NewVal3Reg); 6986 BuildMI(BB, dl, TII->get(PPC::STWCX)).addReg(Tmp4Reg) 6987 .addReg(ZeroReg).addReg(PtrReg); 6988 BuildMI(BB, dl, TII->get(PPC::BCC)) 6989 .addImm(PPC::PRED_NE).addReg(PPC::CR0).addMBB(loop1MBB); 6990 BuildMI(BB, dl, TII->get(PPC::B)).addMBB(exitMBB); 6991 BB->addSuccessor(loop1MBB); 6992 BB->addSuccessor(exitMBB); 6993 6994 BB = midMBB; 6995 BuildMI(BB, dl, TII->get(PPC::STWCX)).addReg(TmpDestReg) 6996 .addReg(ZeroReg).addReg(PtrReg); 6997 BB->addSuccessor(exitMBB); 6998 6999 // exitMBB: 7000 // ... 7001 BB = exitMBB; 7002 BuildMI(*BB, BB->begin(), dl, TII->get(PPC::SRW),dest).addReg(TmpReg) 7003 .addReg(ShiftReg); 7004 } else if (MI->getOpcode() == PPC::FADDrtz) { 7005 // This pseudo performs an FADD with rounding mode temporarily forced 7006 // to round-to-zero. We emit this via custom inserter since the FPSCR 7007 // is not modeled at the SelectionDAG level. 7008 unsigned Dest = MI->getOperand(0).getReg(); 7009 unsigned Src1 = MI->getOperand(1).getReg(); 7010 unsigned Src2 = MI->getOperand(2).getReg(); 7011 DebugLoc dl = MI->getDebugLoc(); 7012 7013 MachineRegisterInfo &RegInfo = F->getRegInfo(); 7014 unsigned MFFSReg = RegInfo.createVirtualRegister(&PPC::F8RCRegClass); 7015 7016 // Save FPSCR value. 7017 BuildMI(*BB, MI, dl, TII->get(PPC::MFFS), MFFSReg); 7018 7019 // Set rounding mode to round-to-zero. 7020 BuildMI(*BB, MI, dl, TII->get(PPC::MTFSB1)).addImm(31); 7021 BuildMI(*BB, MI, dl, TII->get(PPC::MTFSB0)).addImm(30); 7022 7023 // Perform addition. 7024 BuildMI(*BB, MI, dl, TII->get(PPC::FADD), Dest).addReg(Src1).addReg(Src2); 7025 7026 // Restore FPSCR value. 7027 BuildMI(*BB, MI, dl, TII->get(PPC::MTFSF)).addImm(1).addReg(MFFSReg); 7028 } else if (MI->getOpcode() == PPC::ANDIo_1_EQ_BIT || 7029 MI->getOpcode() == PPC::ANDIo_1_GT_BIT || 7030 MI->getOpcode() == PPC::ANDIo_1_EQ_BIT8 || 7031 MI->getOpcode() == PPC::ANDIo_1_GT_BIT8) { 7032 unsigned Opcode = (MI->getOpcode() == PPC::ANDIo_1_EQ_BIT8 || 7033 MI->getOpcode() == PPC::ANDIo_1_GT_BIT8) ? 7034 PPC::ANDIo8 : PPC::ANDIo; 7035 bool isEQ = (MI->getOpcode() == PPC::ANDIo_1_EQ_BIT || 7036 MI->getOpcode() == PPC::ANDIo_1_EQ_BIT8); 7037 7038 MachineRegisterInfo &RegInfo = F->getRegInfo(); 7039 unsigned Dest = RegInfo.createVirtualRegister(Opcode == PPC::ANDIo ? 7040 &PPC::GPRCRegClass : 7041 &PPC::G8RCRegClass); 7042 7043 DebugLoc dl = MI->getDebugLoc(); 7044 BuildMI(*BB, MI, dl, TII->get(Opcode), Dest) 7045 .addReg(MI->getOperand(1).getReg()).addImm(1); 7046 BuildMI(*BB, MI, dl, TII->get(TargetOpcode::COPY), 7047 MI->getOperand(0).getReg()) 7048 .addReg(isEQ ? PPC::CR0EQ : PPC::CR0GT); 7049 } else { 7050 llvm_unreachable("Unexpected instr type to insert"); 7051 } 7052 7053 MI->eraseFromParent(); // The pseudo instruction is gone now. 7054 return BB; 7055 } 7056 7057 //===----------------------------------------------------------------------===// 7058 // Target Optimization Hooks 7059 //===----------------------------------------------------------------------===// 7060 7061 SDValue PPCTargetLowering::DAGCombineFastRecip(SDValue Op, 7062 DAGCombinerInfo &DCI) const { 7063 if (DCI.isAfterLegalizeVectorOps()) 7064 return SDValue(); 7065 7066 EVT VT = Op.getValueType(); 7067 7068 if ((VT == MVT::f32 && PPCSubTarget.hasFRES()) || 7069 (VT == MVT::f64 && PPCSubTarget.hasFRE()) || 7070 (VT == MVT::v4f32 && PPCSubTarget.hasAltivec()) || 7071 (VT == MVT::v2f64 && PPCSubTarget.hasVSX())) { 7072 7073 // Newton iteration for a function: F(X) is X_{i+1} = X_i - F(X_i)/F'(X_i) 7074 // For the reciprocal, we need to find the zero of the function: 7075 // F(X) = A X - 1 [which has a zero at X = 1/A] 7076 // => 7077 // X_{i+1} = X_i (2 - A X_i) = X_i + X_i (1 - A X_i) [this second form 7078 // does not require additional intermediate precision] 7079 7080 // Convergence is quadratic, so we essentially double the number of digits 7081 // correct after every iteration. The minimum architected relative 7082 // accuracy is 2^-5. When hasRecipPrec(), this is 2^-14. IEEE float has 7083 // 23 digits and double has 52 digits. 7084 int Iterations = PPCSubTarget.hasRecipPrec() ? 1 : 3; 7085 if (VT.getScalarType() == MVT::f64) 7086 ++Iterations; 7087 7088 SelectionDAG &DAG = DCI.DAG; 7089 SDLoc dl(Op); 7090 7091 SDValue FPOne = 7092 DAG.getConstantFP(1.0, VT.getScalarType()); 7093 if (VT.isVector()) { 7094 assert(VT.getVectorNumElements() == 4 && 7095 "Unknown vector type"); 7096 FPOne = DAG.getNode(ISD::BUILD_VECTOR, dl, VT, 7097 FPOne, FPOne, FPOne, FPOne); 7098 } 7099 7100 SDValue Est = DAG.getNode(PPCISD::FRE, dl, VT, Op); 7101 DCI.AddToWorklist(Est.getNode()); 7102 7103 // Newton iterations: Est = Est + Est (1 - Arg * Est) 7104 for (int i = 0; i < Iterations; ++i) { 7105 SDValue NewEst = DAG.getNode(ISD::FMUL, dl, VT, Op, Est); 7106 DCI.AddToWorklist(NewEst.getNode()); 7107 7108 NewEst = DAG.getNode(ISD::FSUB, dl, VT, FPOne, NewEst); 7109 DCI.AddToWorklist(NewEst.getNode()); 7110 7111 NewEst = DAG.getNode(ISD::FMUL, dl, VT, Est, NewEst); 7112 DCI.AddToWorklist(NewEst.getNode()); 7113 7114 Est = DAG.getNode(ISD::FADD, dl, VT, Est, NewEst); 7115 DCI.AddToWorklist(Est.getNode()); 7116 } 7117 7118 return Est; 7119 } 7120 7121 return SDValue(); 7122 } 7123 7124 SDValue PPCTargetLowering::DAGCombineFastRecipFSQRT(SDValue Op, 7125 DAGCombinerInfo &DCI) const { 7126 if (DCI.isAfterLegalizeVectorOps()) 7127 return SDValue(); 7128 7129 EVT VT = Op.getValueType(); 7130 7131 if ((VT == MVT::f32 && PPCSubTarget.hasFRSQRTES()) || 7132 (VT == MVT::f64 && PPCSubTarget.hasFRSQRTE()) || 7133 (VT == MVT::v4f32 && PPCSubTarget.hasAltivec()) || 7134 (VT == MVT::v2f64 && PPCSubTarget.hasVSX())) { 7135 7136 // Newton iteration for a function: F(X) is X_{i+1} = X_i - F(X_i)/F'(X_i) 7137 // For the reciprocal sqrt, we need to find the zero of the function: 7138 // F(X) = 1/X^2 - A [which has a zero at X = 1/sqrt(A)] 7139 // => 7140 // X_{i+1} = X_i (1.5 - A X_i^2 / 2) 7141 // As a result, we precompute A/2 prior to the iteration loop. 7142 7143 // Convergence is quadratic, so we essentially double the number of digits 7144 // correct after every iteration. The minimum architected relative 7145 // accuracy is 2^-5. When hasRecipPrec(), this is 2^-14. IEEE float has 7146 // 23 digits and double has 52 digits. 7147 int Iterations = PPCSubTarget.hasRecipPrec() ? 1 : 3; 7148 if (VT.getScalarType() == MVT::f64) 7149 ++Iterations; 7150 7151 SelectionDAG &DAG = DCI.DAG; 7152 SDLoc dl(Op); 7153 7154 SDValue FPThreeHalves = 7155 DAG.getConstantFP(1.5, VT.getScalarType()); 7156 if (VT.isVector()) { 7157 assert(VT.getVectorNumElements() == 4 && 7158 "Unknown vector type"); 7159 FPThreeHalves = DAG.getNode(ISD::BUILD_VECTOR, dl, VT, 7160 FPThreeHalves, FPThreeHalves, 7161 FPThreeHalves, FPThreeHalves); 7162 } 7163 7164 SDValue Est = DAG.getNode(PPCISD::FRSQRTE, dl, VT, Op); 7165 DCI.AddToWorklist(Est.getNode()); 7166 7167 // We now need 0.5*Arg which we can write as (1.5*Arg - Arg) so that 7168 // this entire sequence requires only one FP constant. 7169 SDValue HalfArg = DAG.getNode(ISD::FMUL, dl, VT, FPThreeHalves, Op); 7170 DCI.AddToWorklist(HalfArg.getNode()); 7171 7172 HalfArg = DAG.getNode(ISD::FSUB, dl, VT, HalfArg, Op); 7173 DCI.AddToWorklist(HalfArg.getNode()); 7174 7175 // Newton iterations: Est = Est * (1.5 - HalfArg * Est * Est) 7176 for (int i = 0; i < Iterations; ++i) { 7177 SDValue NewEst = DAG.getNode(ISD::FMUL, dl, VT, Est, Est); 7178 DCI.AddToWorklist(NewEst.getNode()); 7179 7180 NewEst = DAG.getNode(ISD::FMUL, dl, VT, HalfArg, NewEst); 7181 DCI.AddToWorklist(NewEst.getNode()); 7182 7183 NewEst = DAG.getNode(ISD::FSUB, dl, VT, FPThreeHalves, NewEst); 7184 DCI.AddToWorklist(NewEst.getNode()); 7185 7186 Est = DAG.getNode(ISD::FMUL, dl, VT, Est, NewEst); 7187 DCI.AddToWorklist(Est.getNode()); 7188 } 7189 7190 return Est; 7191 } 7192 7193 return SDValue(); 7194 } 7195 7196 // Like SelectionDAG::isConsecutiveLoad, but also works for stores, and does 7197 // not enforce equality of the chain operands. 7198 static bool isConsecutiveLS(LSBaseSDNode *LS, LSBaseSDNode *Base, 7199 unsigned Bytes, int Dist, 7200 SelectionDAG &DAG) { 7201 EVT VT = LS->getMemoryVT(); 7202 if (VT.getSizeInBits() / 8 != Bytes) 7203 return false; 7204 7205 SDValue Loc = LS->getBasePtr(); 7206 SDValue BaseLoc = Base->getBasePtr(); 7207 if (Loc.getOpcode() == ISD::FrameIndex) { 7208 if (BaseLoc.getOpcode() != ISD::FrameIndex) 7209 return false; 7210 const MachineFrameInfo *MFI = DAG.getMachineFunction().getFrameInfo(); 7211 int FI = cast<FrameIndexSDNode>(Loc)->getIndex(); 7212 int BFI = cast<FrameIndexSDNode>(BaseLoc)->getIndex(); 7213 int FS = MFI->getObjectSize(FI); 7214 int BFS = MFI->getObjectSize(BFI); 7215 if (FS != BFS || FS != (int)Bytes) return false; 7216 return MFI->getObjectOffset(FI) == (MFI->getObjectOffset(BFI) + Dist*Bytes); 7217 } 7218 7219 // Handle X+C 7220 if (DAG.isBaseWithConstantOffset(Loc) && Loc.getOperand(0) == BaseLoc && 7221 cast<ConstantSDNode>(Loc.getOperand(1))->getSExtValue() == Dist*Bytes) 7222 return true; 7223 7224 const TargetLowering &TLI = DAG.getTargetLoweringInfo(); 7225 const GlobalValue *GV1 = nullptr; 7226 const GlobalValue *GV2 = nullptr; 7227 int64_t Offset1 = 0; 7228 int64_t Offset2 = 0; 7229 bool isGA1 = TLI.isGAPlusOffset(Loc.getNode(), GV1, Offset1); 7230 bool isGA2 = TLI.isGAPlusOffset(BaseLoc.getNode(), GV2, Offset2); 7231 if (isGA1 && isGA2 && GV1 == GV2) 7232 return Offset1 == (Offset2 + Dist*Bytes); 7233 return false; 7234 } 7235 7236 // Return true is there is a nearyby consecutive load to the one provided 7237 // (regardless of alignment). We search up and down the chain, looking though 7238 // token factors and other loads (but nothing else). As a result, a true 7239 // results indicates that it is safe to create a new consecutive load adjacent 7240 // to the load provided. 7241 static bool findConsecutiveLoad(LoadSDNode *LD, SelectionDAG &DAG) { 7242 SDValue Chain = LD->getChain(); 7243 EVT VT = LD->getMemoryVT(); 7244 7245 SmallSet<SDNode *, 16> LoadRoots; 7246 SmallVector<SDNode *, 8> Queue(1, Chain.getNode()); 7247 SmallSet<SDNode *, 16> Visited; 7248 7249 // First, search up the chain, branching to follow all token-factor operands. 7250 // If we find a consecutive load, then we're done, otherwise, record all 7251 // nodes just above the top-level loads and token factors. 7252 while (!Queue.empty()) { 7253 SDNode *ChainNext = Queue.pop_back_val(); 7254 if (!Visited.insert(ChainNext)) 7255 continue; 7256 7257 if (LoadSDNode *ChainLD = dyn_cast<LoadSDNode>(ChainNext)) { 7258 if (isConsecutiveLS(ChainLD, LD, VT.getStoreSize(), 1, DAG)) 7259 return true; 7260 7261 if (!Visited.count(ChainLD->getChain().getNode())) 7262 Queue.push_back(ChainLD->getChain().getNode()); 7263 } else if (ChainNext->getOpcode() == ISD::TokenFactor) { 7264 for (SDNode::op_iterator O = ChainNext->op_begin(), 7265 OE = ChainNext->op_end(); O != OE; ++O) 7266 if (!Visited.count(O->getNode())) 7267 Queue.push_back(O->getNode()); 7268 } else 7269 LoadRoots.insert(ChainNext); 7270 } 7271 7272 // Second, search down the chain, starting from the top-level nodes recorded 7273 // in the first phase. These top-level nodes are the nodes just above all 7274 // loads and token factors. Starting with their uses, recursively look though 7275 // all loads (just the chain uses) and token factors to find a consecutive 7276 // load. 7277 Visited.clear(); 7278 Queue.clear(); 7279 7280 for (SmallSet<SDNode *, 16>::iterator I = LoadRoots.begin(), 7281 IE = LoadRoots.end(); I != IE; ++I) { 7282 Queue.push_back(*I); 7283 7284 while (!Queue.empty()) { 7285 SDNode *LoadRoot = Queue.pop_back_val(); 7286 if (!Visited.insert(LoadRoot)) 7287 continue; 7288 7289 if (LoadSDNode *ChainLD = dyn_cast<LoadSDNode>(LoadRoot)) 7290 if (isConsecutiveLS(ChainLD, LD, VT.getStoreSize(), 1, DAG)) 7291 return true; 7292 7293 for (SDNode::use_iterator UI = LoadRoot->use_begin(), 7294 UE = LoadRoot->use_end(); UI != UE; ++UI) 7295 if (((isa<LoadSDNode>(*UI) && 7296 cast<LoadSDNode>(*UI)->getChain().getNode() == LoadRoot) || 7297 UI->getOpcode() == ISD::TokenFactor) && !Visited.count(*UI)) 7298 Queue.push_back(*UI); 7299 } 7300 } 7301 7302 return false; 7303 } 7304 7305 SDValue PPCTargetLowering::DAGCombineTruncBoolExt(SDNode *N, 7306 DAGCombinerInfo &DCI) const { 7307 SelectionDAG &DAG = DCI.DAG; 7308 SDLoc dl(N); 7309 7310 assert(PPCSubTarget.useCRBits() && 7311 "Expecting to be tracking CR bits"); 7312 // If we're tracking CR bits, we need to be careful that we don't have: 7313 // trunc(binary-ops(zext(x), zext(y))) 7314 // or 7315 // trunc(binary-ops(binary-ops(zext(x), zext(y)), ...) 7316 // such that we're unnecessarily moving things into GPRs when it would be 7317 // better to keep them in CR bits. 7318 7319 // Note that trunc here can be an actual i1 trunc, or can be the effective 7320 // truncation that comes from a setcc or select_cc. 7321 if (N->getOpcode() == ISD::TRUNCATE && 7322 N->getValueType(0) != MVT::i1) 7323 return SDValue(); 7324 7325 if (N->getOperand(0).getValueType() != MVT::i32 && 7326 N->getOperand(0).getValueType() != MVT::i64) 7327 return SDValue(); 7328 7329 if (N->getOpcode() == ISD::SETCC || 7330 N->getOpcode() == ISD::SELECT_CC) { 7331 // If we're looking at a comparison, then we need to make sure that the 7332 // high bits (all except for the first) don't matter the result. 7333 ISD::CondCode CC = 7334 cast<CondCodeSDNode>(N->getOperand( 7335 N->getOpcode() == ISD::SETCC ? 2 : 4))->get(); 7336 unsigned OpBits = N->getOperand(0).getValueSizeInBits(); 7337 7338 if (ISD::isSignedIntSetCC(CC)) { 7339 if (DAG.ComputeNumSignBits(N->getOperand(0)) != OpBits || 7340 DAG.ComputeNumSignBits(N->getOperand(1)) != OpBits) 7341 return SDValue(); 7342 } else if (ISD::isUnsignedIntSetCC(CC)) { 7343 if (!DAG.MaskedValueIsZero(N->getOperand(0), 7344 APInt::getHighBitsSet(OpBits, OpBits-1)) || 7345 !DAG.MaskedValueIsZero(N->getOperand(1), 7346 APInt::getHighBitsSet(OpBits, OpBits-1))) 7347 return SDValue(); 7348 } else { 7349 // This is neither a signed nor an unsigned comparison, just make sure 7350 // that the high bits are equal. 7351 APInt Op1Zero, Op1One; 7352 APInt Op2Zero, Op2One; 7353 DAG.computeKnownBits(N->getOperand(0), Op1Zero, Op1One); 7354 DAG.computeKnownBits(N->getOperand(1), Op2Zero, Op2One); 7355 7356 // We don't really care about what is known about the first bit (if 7357 // anything), so clear it in all masks prior to comparing them. 7358 Op1Zero.clearBit(0); Op1One.clearBit(0); 7359 Op2Zero.clearBit(0); Op2One.clearBit(0); 7360 7361 if (Op1Zero != Op2Zero || Op1One != Op2One) 7362 return SDValue(); 7363 } 7364 } 7365 7366 // We now know that the higher-order bits are irrelevant, we just need to 7367 // make sure that all of the intermediate operations are bit operations, and 7368 // all inputs are extensions. 7369 if (N->getOperand(0).getOpcode() != ISD::AND && 7370 N->getOperand(0).getOpcode() != ISD::OR && 7371 N->getOperand(0).getOpcode() != ISD::XOR && 7372 N->getOperand(0).getOpcode() != ISD::SELECT && 7373 N->getOperand(0).getOpcode() != ISD::SELECT_CC && 7374 N->getOperand(0).getOpcode() != ISD::TRUNCATE && 7375 N->getOperand(0).getOpcode() != ISD::SIGN_EXTEND && 7376 N->getOperand(0).getOpcode() != ISD::ZERO_EXTEND && 7377 N->getOperand(0).getOpcode() != ISD::ANY_EXTEND) 7378 return SDValue(); 7379 7380 if ((N->getOpcode() == ISD::SETCC || N->getOpcode() == ISD::SELECT_CC) && 7381 N->getOperand(1).getOpcode() != ISD::AND && 7382 N->getOperand(1).getOpcode() != ISD::OR && 7383 N->getOperand(1).getOpcode() != ISD::XOR && 7384 N->getOperand(1).getOpcode() != ISD::SELECT && 7385 N->getOperand(1).getOpcode() != ISD::SELECT_CC && 7386 N->getOperand(1).getOpcode() != ISD::TRUNCATE && 7387 N->getOperand(1).getOpcode() != ISD::SIGN_EXTEND && 7388 N->getOperand(1).getOpcode() != ISD::ZERO_EXTEND && 7389 N->getOperand(1).getOpcode() != ISD::ANY_EXTEND) 7390 return SDValue(); 7391 7392 SmallVector<SDValue, 4> Inputs; 7393 SmallVector<SDValue, 8> BinOps, PromOps; 7394 SmallPtrSet<SDNode *, 16> Visited; 7395 7396 for (unsigned i = 0; i < 2; ++i) { 7397 if (((N->getOperand(i).getOpcode() == ISD::SIGN_EXTEND || 7398 N->getOperand(i).getOpcode() == ISD::ZERO_EXTEND || 7399 N->getOperand(i).getOpcode() == ISD::ANY_EXTEND) && 7400 N->getOperand(i).getOperand(0).getValueType() == MVT::i1) || 7401 isa<ConstantSDNode>(N->getOperand(i))) 7402 Inputs.push_back(N->getOperand(i)); 7403 else 7404 BinOps.push_back(N->getOperand(i)); 7405 7406 if (N->getOpcode() == ISD::TRUNCATE) 7407 break; 7408 } 7409 7410 // Visit all inputs, collect all binary operations (and, or, xor and 7411 // select) that are all fed by extensions. 7412 while (!BinOps.empty()) { 7413 SDValue BinOp = BinOps.back(); 7414 BinOps.pop_back(); 7415 7416 if (!Visited.insert(BinOp.getNode())) 7417 continue; 7418 7419 PromOps.push_back(BinOp); 7420 7421 for (unsigned i = 0, ie = BinOp.getNumOperands(); i != ie; ++i) { 7422 // The condition of the select is not promoted. 7423 if (BinOp.getOpcode() == ISD::SELECT && i == 0) 7424 continue; 7425 if (BinOp.getOpcode() == ISD::SELECT_CC && i != 2 && i != 3) 7426 continue; 7427 7428 if (((BinOp.getOperand(i).getOpcode() == ISD::SIGN_EXTEND || 7429 BinOp.getOperand(i).getOpcode() == ISD::ZERO_EXTEND || 7430 BinOp.getOperand(i).getOpcode() == ISD::ANY_EXTEND) && 7431 BinOp.getOperand(i).getOperand(0).getValueType() == MVT::i1) || 7432 isa<ConstantSDNode>(BinOp.getOperand(i))) { 7433 Inputs.push_back(BinOp.getOperand(i)); 7434 } else if (BinOp.getOperand(i).getOpcode() == ISD::AND || 7435 BinOp.getOperand(i).getOpcode() == ISD::OR || 7436 BinOp.getOperand(i).getOpcode() == ISD::XOR || 7437 BinOp.getOperand(i).getOpcode() == ISD::SELECT || 7438 BinOp.getOperand(i).getOpcode() == ISD::SELECT_CC || 7439 BinOp.getOperand(i).getOpcode() == ISD::TRUNCATE || 7440 BinOp.getOperand(i).getOpcode() == ISD::SIGN_EXTEND || 7441 BinOp.getOperand(i).getOpcode() == ISD::ZERO_EXTEND || 7442 BinOp.getOperand(i).getOpcode() == ISD::ANY_EXTEND) { 7443 BinOps.push_back(BinOp.getOperand(i)); 7444 } else { 7445 // We have an input that is not an extension or another binary 7446 // operation; we'll abort this transformation. 7447 return SDValue(); 7448 } 7449 } 7450 } 7451 7452 // Make sure that this is a self-contained cluster of operations (which 7453 // is not quite the same thing as saying that everything has only one 7454 // use). 7455 for (unsigned i = 0, ie = Inputs.size(); i != ie; ++i) { 7456 if (isa<ConstantSDNode>(Inputs[i])) 7457 continue; 7458 7459 for (SDNode::use_iterator UI = Inputs[i].getNode()->use_begin(), 7460 UE = Inputs[i].getNode()->use_end(); 7461 UI != UE; ++UI) { 7462 SDNode *User = *UI; 7463 if (User != N && !Visited.count(User)) 7464 return SDValue(); 7465 7466 // Make sure that we're not going to promote the non-output-value 7467 // operand(s) or SELECT or SELECT_CC. 7468 // FIXME: Although we could sometimes handle this, and it does occur in 7469 // practice that one of the condition inputs to the select is also one of 7470 // the outputs, we currently can't deal with this. 7471 if (User->getOpcode() == ISD::SELECT) { 7472 if (User->getOperand(0) == Inputs[i]) 7473 return SDValue(); 7474 } else if (User->getOpcode() == ISD::SELECT_CC) { 7475 if (User->getOperand(0) == Inputs[i] || 7476 User->getOperand(1) == Inputs[i]) 7477 return SDValue(); 7478 } 7479 } 7480 } 7481 7482 for (unsigned i = 0, ie = PromOps.size(); i != ie; ++i) { 7483 for (SDNode::use_iterator UI = PromOps[i].getNode()->use_begin(), 7484 UE = PromOps[i].getNode()->use_end(); 7485 UI != UE; ++UI) { 7486 SDNode *User = *UI; 7487 if (User != N && !Visited.count(User)) 7488 return SDValue(); 7489 7490 // Make sure that we're not going to promote the non-output-value 7491 // operand(s) or SELECT or SELECT_CC. 7492 // FIXME: Although we could sometimes handle this, and it does occur in 7493 // practice that one of the condition inputs to the select is also one of 7494 // the outputs, we currently can't deal with this. 7495 if (User->getOpcode() == ISD::SELECT) { 7496 if (User->getOperand(0) == PromOps[i]) 7497 return SDValue(); 7498 } else if (User->getOpcode() == ISD::SELECT_CC) { 7499 if (User->getOperand(0) == PromOps[i] || 7500 User->getOperand(1) == PromOps[i]) 7501 return SDValue(); 7502 } 7503 } 7504 } 7505 7506 // Replace all inputs with the extension operand. 7507 for (unsigned i = 0, ie = Inputs.size(); i != ie; ++i) { 7508 // Constants may have users outside the cluster of to-be-promoted nodes, 7509 // and so we need to replace those as we do the promotions. 7510 if (isa<ConstantSDNode>(Inputs[i])) 7511 continue; 7512 else 7513 DAG.ReplaceAllUsesOfValueWith(Inputs[i], Inputs[i].getOperand(0)); 7514 } 7515 7516 // Replace all operations (these are all the same, but have a different 7517 // (i1) return type). DAG.getNode will validate that the types of 7518 // a binary operator match, so go through the list in reverse so that 7519 // we've likely promoted both operands first. Any intermediate truncations or 7520 // extensions disappear. 7521 while (!PromOps.empty()) { 7522 SDValue PromOp = PromOps.back(); 7523 PromOps.pop_back(); 7524 7525 if (PromOp.getOpcode() == ISD::TRUNCATE || 7526 PromOp.getOpcode() == ISD::SIGN_EXTEND || 7527 PromOp.getOpcode() == ISD::ZERO_EXTEND || 7528 PromOp.getOpcode() == ISD::ANY_EXTEND) { 7529 if (!isa<ConstantSDNode>(PromOp.getOperand(0)) && 7530 PromOp.getOperand(0).getValueType() != MVT::i1) { 7531 // The operand is not yet ready (see comment below). 7532 PromOps.insert(PromOps.begin(), PromOp); 7533 continue; 7534 } 7535 7536 SDValue RepValue = PromOp.getOperand(0); 7537 if (isa<ConstantSDNode>(RepValue)) 7538 RepValue = DAG.getNode(ISD::TRUNCATE, dl, MVT::i1, RepValue); 7539 7540 DAG.ReplaceAllUsesOfValueWith(PromOp, RepValue); 7541 continue; 7542 } 7543 7544 unsigned C; 7545 switch (PromOp.getOpcode()) { 7546 default: C = 0; break; 7547 case ISD::SELECT: C = 1; break; 7548 case ISD::SELECT_CC: C = 2; break; 7549 } 7550 7551 if ((!isa<ConstantSDNode>(PromOp.getOperand(C)) && 7552 PromOp.getOperand(C).getValueType() != MVT::i1) || 7553 (!isa<ConstantSDNode>(PromOp.getOperand(C+1)) && 7554 PromOp.getOperand(C+1).getValueType() != MVT::i1)) { 7555 // The to-be-promoted operands of this node have not yet been 7556 // promoted (this should be rare because we're going through the 7557 // list backward, but if one of the operands has several users in 7558 // this cluster of to-be-promoted nodes, it is possible). 7559 PromOps.insert(PromOps.begin(), PromOp); 7560 continue; 7561 } 7562 7563 SmallVector<SDValue, 3> Ops(PromOp.getNode()->op_begin(), 7564 PromOp.getNode()->op_end()); 7565 7566 // If there are any constant inputs, make sure they're replaced now. 7567 for (unsigned i = 0; i < 2; ++i) 7568 if (isa<ConstantSDNode>(Ops[C+i])) 7569 Ops[C+i] = DAG.getNode(ISD::TRUNCATE, dl, MVT::i1, Ops[C+i]); 7570 7571 DAG.ReplaceAllUsesOfValueWith(PromOp, 7572 DAG.getNode(PromOp.getOpcode(), dl, MVT::i1, Ops)); 7573 } 7574 7575 // Now we're left with the initial truncation itself. 7576 if (N->getOpcode() == ISD::TRUNCATE) 7577 return N->getOperand(0); 7578 7579 // Otherwise, this is a comparison. The operands to be compared have just 7580 // changed type (to i1), but everything else is the same. 7581 return SDValue(N, 0); 7582 } 7583 7584 SDValue PPCTargetLowering::DAGCombineExtBoolTrunc(SDNode *N, 7585 DAGCombinerInfo &DCI) const { 7586 SelectionDAG &DAG = DCI.DAG; 7587 SDLoc dl(N); 7588 7589 // If we're tracking CR bits, we need to be careful that we don't have: 7590 // zext(binary-ops(trunc(x), trunc(y))) 7591 // or 7592 // zext(binary-ops(binary-ops(trunc(x), trunc(y)), ...) 7593 // such that we're unnecessarily moving things into CR bits that can more 7594 // efficiently stay in GPRs. Note that if we're not certain that the high 7595 // bits are set as required by the final extension, we still may need to do 7596 // some masking to get the proper behavior. 7597 7598 // This same functionality is important on PPC64 when dealing with 7599 // 32-to-64-bit extensions; these occur often when 32-bit values are used as 7600 // the return values of functions. Because it is so similar, it is handled 7601 // here as well. 7602 7603 if (N->getValueType(0) != MVT::i32 && 7604 N->getValueType(0) != MVT::i64) 7605 return SDValue(); 7606 7607 if (!((N->getOperand(0).getValueType() == MVT::i1 && 7608 PPCSubTarget.useCRBits()) || 7609 (N->getOperand(0).getValueType() == MVT::i32 && 7610 PPCSubTarget.isPPC64()))) 7611 return SDValue(); 7612 7613 if (N->getOperand(0).getOpcode() != ISD::AND && 7614 N->getOperand(0).getOpcode() != ISD::OR && 7615 N->getOperand(0).getOpcode() != ISD::XOR && 7616 N->getOperand(0).getOpcode() != ISD::SELECT && 7617 N->getOperand(0).getOpcode() != ISD::SELECT_CC) 7618 return SDValue(); 7619 7620 SmallVector<SDValue, 4> Inputs; 7621 SmallVector<SDValue, 8> BinOps(1, N->getOperand(0)), PromOps; 7622 SmallPtrSet<SDNode *, 16> Visited; 7623 7624 // Visit all inputs, collect all binary operations (and, or, xor and 7625 // select) that are all fed by truncations. 7626 while (!BinOps.empty()) { 7627 SDValue BinOp = BinOps.back(); 7628 BinOps.pop_back(); 7629 7630 if (!Visited.insert(BinOp.getNode())) 7631 continue; 7632 7633 PromOps.push_back(BinOp); 7634 7635 for (unsigned i = 0, ie = BinOp.getNumOperands(); i != ie; ++i) { 7636 // The condition of the select is not promoted. 7637 if (BinOp.getOpcode() == ISD::SELECT && i == 0) 7638 continue; 7639 if (BinOp.getOpcode() == ISD::SELECT_CC && i != 2 && i != 3) 7640 continue; 7641 7642 if (BinOp.getOperand(i).getOpcode() == ISD::TRUNCATE || 7643 isa<ConstantSDNode>(BinOp.getOperand(i))) { 7644 Inputs.push_back(BinOp.getOperand(i)); 7645 } else if (BinOp.getOperand(i).getOpcode() == ISD::AND || 7646 BinOp.getOperand(i).getOpcode() == ISD::OR || 7647 BinOp.getOperand(i).getOpcode() == ISD::XOR || 7648 BinOp.getOperand(i).getOpcode() == ISD::SELECT || 7649 BinOp.getOperand(i).getOpcode() == ISD::SELECT_CC) { 7650 BinOps.push_back(BinOp.getOperand(i)); 7651 } else { 7652 // We have an input that is not a truncation or another binary 7653 // operation; we'll abort this transformation. 7654 return SDValue(); 7655 } 7656 } 7657 } 7658 7659 // Make sure that this is a self-contained cluster of operations (which 7660 // is not quite the same thing as saying that everything has only one 7661 // use). 7662 for (unsigned i = 0, ie = Inputs.size(); i != ie; ++i) { 7663 if (isa<ConstantSDNode>(Inputs[i])) 7664 continue; 7665 7666 for (SDNode::use_iterator UI = Inputs[i].getNode()->use_begin(), 7667 UE = Inputs[i].getNode()->use_end(); 7668 UI != UE; ++UI) { 7669 SDNode *User = *UI; 7670 if (User != N && !Visited.count(User)) 7671 return SDValue(); 7672 7673 // Make sure that we're not going to promote the non-output-value 7674 // operand(s) or SELECT or SELECT_CC. 7675 // FIXME: Although we could sometimes handle this, and it does occur in 7676 // practice that one of the condition inputs to the select is also one of 7677 // the outputs, we currently can't deal with this. 7678 if (User->getOpcode() == ISD::SELECT) { 7679 if (User->getOperand(0) == Inputs[i]) 7680 return SDValue(); 7681 } else if (User->getOpcode() == ISD::SELECT_CC) { 7682 if (User->getOperand(0) == Inputs[i] || 7683 User->getOperand(1) == Inputs[i]) 7684 return SDValue(); 7685 } 7686 } 7687 } 7688 7689 for (unsigned i = 0, ie = PromOps.size(); i != ie; ++i) { 7690 for (SDNode::use_iterator UI = PromOps[i].getNode()->use_begin(), 7691 UE = PromOps[i].getNode()->use_end(); 7692 UI != UE; ++UI) { 7693 SDNode *User = *UI; 7694 if (User != N && !Visited.count(User)) 7695 return SDValue(); 7696 7697 // Make sure that we're not going to promote the non-output-value 7698 // operand(s) or SELECT or SELECT_CC. 7699 // FIXME: Although we could sometimes handle this, and it does occur in 7700 // practice that one of the condition inputs to the select is also one of 7701 // the outputs, we currently can't deal with this. 7702 if (User->getOpcode() == ISD::SELECT) { 7703 if (User->getOperand(0) == PromOps[i]) 7704 return SDValue(); 7705 } else if (User->getOpcode() == ISD::SELECT_CC) { 7706 if (User->getOperand(0) == PromOps[i] || 7707 User->getOperand(1) == PromOps[i]) 7708 return SDValue(); 7709 } 7710 } 7711 } 7712 7713 unsigned PromBits = N->getOperand(0).getValueSizeInBits(); 7714 bool ReallyNeedsExt = false; 7715 if (N->getOpcode() != ISD::ANY_EXTEND) { 7716 // If all of the inputs are not already sign/zero extended, then 7717 // we'll still need to do that at the end. 7718 for (unsigned i = 0, ie = Inputs.size(); i != ie; ++i) { 7719 if (isa<ConstantSDNode>(Inputs[i])) 7720 continue; 7721 7722 unsigned OpBits = 7723 Inputs[i].getOperand(0).getValueSizeInBits(); 7724 assert(PromBits < OpBits && "Truncation not to a smaller bit count?"); 7725 7726 if ((N->getOpcode() == ISD::ZERO_EXTEND && 7727 !DAG.MaskedValueIsZero(Inputs[i].getOperand(0), 7728 APInt::getHighBitsSet(OpBits, 7729 OpBits-PromBits))) || 7730 (N->getOpcode() == ISD::SIGN_EXTEND && 7731 DAG.ComputeNumSignBits(Inputs[i].getOperand(0)) < 7732 (OpBits-(PromBits-1)))) { 7733 ReallyNeedsExt = true; 7734 break; 7735 } 7736 } 7737 } 7738 7739 // Replace all inputs, either with the truncation operand, or a 7740 // truncation or extension to the final output type. 7741 for (unsigned i = 0, ie = Inputs.size(); i != ie; ++i) { 7742 // Constant inputs need to be replaced with the to-be-promoted nodes that 7743 // use them because they might have users outside of the cluster of 7744 // promoted nodes. 7745 if (isa<ConstantSDNode>(Inputs[i])) 7746 continue; 7747 7748 SDValue InSrc = Inputs[i].getOperand(0); 7749 if (Inputs[i].getValueType() == N->getValueType(0)) 7750 DAG.ReplaceAllUsesOfValueWith(Inputs[i], InSrc); 7751 else if (N->getOpcode() == ISD::SIGN_EXTEND) 7752 DAG.ReplaceAllUsesOfValueWith(Inputs[i], 7753 DAG.getSExtOrTrunc(InSrc, dl, N->getValueType(0))); 7754 else if (N->getOpcode() == ISD::ZERO_EXTEND) 7755 DAG.ReplaceAllUsesOfValueWith(Inputs[i], 7756 DAG.getZExtOrTrunc(InSrc, dl, N->getValueType(0))); 7757 else 7758 DAG.ReplaceAllUsesOfValueWith(Inputs[i], 7759 DAG.getAnyExtOrTrunc(InSrc, dl, N->getValueType(0))); 7760 } 7761 7762 // Replace all operations (these are all the same, but have a different 7763 // (promoted) return type). DAG.getNode will validate that the types of 7764 // a binary operator match, so go through the list in reverse so that 7765 // we've likely promoted both operands first. 7766 while (!PromOps.empty()) { 7767 SDValue PromOp = PromOps.back(); 7768 PromOps.pop_back(); 7769 7770 unsigned C; 7771 switch (PromOp.getOpcode()) { 7772 default: C = 0; break; 7773 case ISD::SELECT: C = 1; break; 7774 case ISD::SELECT_CC: C = 2; break; 7775 } 7776 7777 if ((!isa<ConstantSDNode>(PromOp.getOperand(C)) && 7778 PromOp.getOperand(C).getValueType() != N->getValueType(0)) || 7779 (!isa<ConstantSDNode>(PromOp.getOperand(C+1)) && 7780 PromOp.getOperand(C+1).getValueType() != N->getValueType(0))) { 7781 // The to-be-promoted operands of this node have not yet been 7782 // promoted (this should be rare because we're going through the 7783 // list backward, but if one of the operands has several users in 7784 // this cluster of to-be-promoted nodes, it is possible). 7785 PromOps.insert(PromOps.begin(), PromOp); 7786 continue; 7787 } 7788 7789 SmallVector<SDValue, 3> Ops(PromOp.getNode()->op_begin(), 7790 PromOp.getNode()->op_end()); 7791 7792 // If this node has constant inputs, then they'll need to be promoted here. 7793 for (unsigned i = 0; i < 2; ++i) { 7794 if (!isa<ConstantSDNode>(Ops[C+i])) 7795 continue; 7796 if (Ops[C+i].getValueType() == N->getValueType(0)) 7797 continue; 7798 7799 if (N->getOpcode() == ISD::SIGN_EXTEND) 7800 Ops[C+i] = DAG.getSExtOrTrunc(Ops[C+i], dl, N->getValueType(0)); 7801 else if (N->getOpcode() == ISD::ZERO_EXTEND) 7802 Ops[C+i] = DAG.getZExtOrTrunc(Ops[C+i], dl, N->getValueType(0)); 7803 else 7804 Ops[C+i] = DAG.getAnyExtOrTrunc(Ops[C+i], dl, N->getValueType(0)); 7805 } 7806 7807 DAG.ReplaceAllUsesOfValueWith(PromOp, 7808 DAG.getNode(PromOp.getOpcode(), dl, N->getValueType(0), Ops)); 7809 } 7810 7811 // Now we're left with the initial extension itself. 7812 if (!ReallyNeedsExt) 7813 return N->getOperand(0); 7814 7815 // To zero extend, just mask off everything except for the first bit (in the 7816 // i1 case). 7817 if (N->getOpcode() == ISD::ZERO_EXTEND) 7818 return DAG.getNode(ISD::AND, dl, N->getValueType(0), N->getOperand(0), 7819 DAG.getConstant(APInt::getLowBitsSet( 7820 N->getValueSizeInBits(0), PromBits), 7821 N->getValueType(0))); 7822 7823 assert(N->getOpcode() == ISD::SIGN_EXTEND && 7824 "Invalid extension type"); 7825 EVT ShiftAmountTy = getShiftAmountTy(N->getValueType(0)); 7826 SDValue ShiftCst = 7827 DAG.getConstant(N->getValueSizeInBits(0)-PromBits, ShiftAmountTy); 7828 return DAG.getNode(ISD::SRA, dl, N->getValueType(0), 7829 DAG.getNode(ISD::SHL, dl, N->getValueType(0), 7830 N->getOperand(0), ShiftCst), ShiftCst); 7831 } 7832 7833 SDValue PPCTargetLowering::PerformDAGCombine(SDNode *N, 7834 DAGCombinerInfo &DCI) const { 7835 const TargetMachine &TM = getTargetMachine(); 7836 SelectionDAG &DAG = DCI.DAG; 7837 SDLoc dl(N); 7838 switch (N->getOpcode()) { 7839 default: break; 7840 case PPCISD::SHL: 7841 if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(N->getOperand(0))) { 7842 if (C->isNullValue()) // 0 << V -> 0. 7843 return N->getOperand(0); 7844 } 7845 break; 7846 case PPCISD::SRL: 7847 if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(N->getOperand(0))) { 7848 if (C->isNullValue()) // 0 >>u V -> 0. 7849 return N->getOperand(0); 7850 } 7851 break; 7852 case PPCISD::SRA: 7853 if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(N->getOperand(0))) { 7854 if (C->isNullValue() || // 0 >>s V -> 0. 7855 C->isAllOnesValue()) // -1 >>s V -> -1. 7856 return N->getOperand(0); 7857 } 7858 break; 7859 case ISD::SIGN_EXTEND: 7860 case ISD::ZERO_EXTEND: 7861 case ISD::ANY_EXTEND: 7862 return DAGCombineExtBoolTrunc(N, DCI); 7863 case ISD::TRUNCATE: 7864 case ISD::SETCC: 7865 case ISD::SELECT_CC: 7866 return DAGCombineTruncBoolExt(N, DCI); 7867 case ISD::FDIV: { 7868 assert(TM.Options.UnsafeFPMath && 7869 "Reciprocal estimates require UnsafeFPMath"); 7870 7871 if (N->getOperand(1).getOpcode() == ISD::FSQRT) { 7872 SDValue RV = 7873 DAGCombineFastRecipFSQRT(N->getOperand(1).getOperand(0), DCI); 7874 if (RV.getNode()) { 7875 DCI.AddToWorklist(RV.getNode()); 7876 return DAG.getNode(ISD::FMUL, dl, N->getValueType(0), 7877 N->getOperand(0), RV); 7878 } 7879 } else if (N->getOperand(1).getOpcode() == ISD::FP_EXTEND && 7880 N->getOperand(1).getOperand(0).getOpcode() == ISD::FSQRT) { 7881 SDValue RV = 7882 DAGCombineFastRecipFSQRT(N->getOperand(1).getOperand(0).getOperand(0), 7883 DCI); 7884 if (RV.getNode()) { 7885 DCI.AddToWorklist(RV.getNode()); 7886 RV = DAG.getNode(ISD::FP_EXTEND, SDLoc(N->getOperand(1)), 7887 N->getValueType(0), RV); 7888 DCI.AddToWorklist(RV.getNode()); 7889 return DAG.getNode(ISD::FMUL, dl, N->getValueType(0), 7890 N->getOperand(0), RV); 7891 } 7892 } else if (N->getOperand(1).getOpcode() == ISD::FP_ROUND && 7893 N->getOperand(1).getOperand(0).getOpcode() == ISD::FSQRT) { 7894 SDValue RV = 7895 DAGCombineFastRecipFSQRT(N->getOperand(1).getOperand(0).getOperand(0), 7896 DCI); 7897 if (RV.getNode()) { 7898 DCI.AddToWorklist(RV.getNode()); 7899 RV = DAG.getNode(ISD::FP_ROUND, SDLoc(N->getOperand(1)), 7900 N->getValueType(0), RV, 7901 N->getOperand(1).getOperand(1)); 7902 DCI.AddToWorklist(RV.getNode()); 7903 return DAG.getNode(ISD::FMUL, dl, N->getValueType(0), 7904 N->getOperand(0), RV); 7905 } 7906 } 7907 7908 SDValue RV = DAGCombineFastRecip(N->getOperand(1), DCI); 7909 if (RV.getNode()) { 7910 DCI.AddToWorklist(RV.getNode()); 7911 return DAG.getNode(ISD::FMUL, dl, N->getValueType(0), 7912 N->getOperand(0), RV); 7913 } 7914 7915 } 7916 break; 7917 case ISD::FSQRT: { 7918 assert(TM.Options.UnsafeFPMath && 7919 "Reciprocal estimates require UnsafeFPMath"); 7920 7921 // Compute this as 1/(1/sqrt(X)), which is the reciprocal of the 7922 // reciprocal sqrt. 7923 SDValue RV = DAGCombineFastRecipFSQRT(N->getOperand(0), DCI); 7924 if (RV.getNode()) { 7925 DCI.AddToWorklist(RV.getNode()); 7926 RV = DAGCombineFastRecip(RV, DCI); 7927 if (RV.getNode()) { 7928 // Unfortunately, RV is now NaN if the input was exactly 0. Select out 7929 // this case and force the answer to 0. 7930 7931 EVT VT = RV.getValueType(); 7932 7933 SDValue Zero = DAG.getConstantFP(0.0, VT.getScalarType()); 7934 if (VT.isVector()) { 7935 assert(VT.getVectorNumElements() == 4 && "Unknown vector type"); 7936 Zero = DAG.getNode(ISD::BUILD_VECTOR, dl, VT, Zero, Zero, Zero, Zero); 7937 } 7938 7939 SDValue ZeroCmp = 7940 DAG.getSetCC(dl, getSetCCResultType(*DAG.getContext(), VT), 7941 N->getOperand(0), Zero, ISD::SETEQ); 7942 DCI.AddToWorklist(ZeroCmp.getNode()); 7943 DCI.AddToWorklist(RV.getNode()); 7944 7945 RV = DAG.getNode(VT.isVector() ? ISD::VSELECT : ISD::SELECT, dl, VT, 7946 ZeroCmp, Zero, RV); 7947 return RV; 7948 } 7949 } 7950 7951 } 7952 break; 7953 case ISD::SINT_TO_FP: 7954 if (TM.getSubtarget<PPCSubtarget>().has64BitSupport()) { 7955 if (N->getOperand(0).getOpcode() == ISD::FP_TO_SINT) { 7956 // Turn (sint_to_fp (fp_to_sint X)) -> fctidz/fcfid without load/stores. 7957 // We allow the src/dst to be either f32/f64, but the intermediate 7958 // type must be i64. 7959 if (N->getOperand(0).getValueType() == MVT::i64 && 7960 N->getOperand(0).getOperand(0).getValueType() != MVT::ppcf128) { 7961 SDValue Val = N->getOperand(0).getOperand(0); 7962 if (Val.getValueType() == MVT::f32) { 7963 Val = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, Val); 7964 DCI.AddToWorklist(Val.getNode()); 7965 } 7966 7967 Val = DAG.getNode(PPCISD::FCTIDZ, dl, MVT::f64, Val); 7968 DCI.AddToWorklist(Val.getNode()); 7969 Val = DAG.getNode(PPCISD::FCFID, dl, MVT::f64, Val); 7970 DCI.AddToWorklist(Val.getNode()); 7971 if (N->getValueType(0) == MVT::f32) { 7972 Val = DAG.getNode(ISD::FP_ROUND, dl, MVT::f32, Val, 7973 DAG.getIntPtrConstant(0)); 7974 DCI.AddToWorklist(Val.getNode()); 7975 } 7976 return Val; 7977 } else if (N->getOperand(0).getValueType() == MVT::i32) { 7978 // If the intermediate type is i32, we can avoid the load/store here 7979 // too. 7980 } 7981 } 7982 } 7983 break; 7984 case ISD::STORE: 7985 // Turn STORE (FP_TO_SINT F) -> STFIWX(FCTIWZ(F)). 7986 if (TM.getSubtarget<PPCSubtarget>().hasSTFIWX() && 7987 !cast<StoreSDNode>(N)->isTruncatingStore() && 7988 N->getOperand(1).getOpcode() == ISD::FP_TO_SINT && 7989 N->getOperand(1).getValueType() == MVT::i32 && 7990 N->getOperand(1).getOperand(0).getValueType() != MVT::ppcf128) { 7991 SDValue Val = N->getOperand(1).getOperand(0); 7992 if (Val.getValueType() == MVT::f32) { 7993 Val = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, Val); 7994 DCI.AddToWorklist(Val.getNode()); 7995 } 7996 Val = DAG.getNode(PPCISD::FCTIWZ, dl, MVT::f64, Val); 7997 DCI.AddToWorklist(Val.getNode()); 7998 7999 SDValue Ops[] = { 8000 N->getOperand(0), Val, N->getOperand(2), 8001 DAG.getValueType(N->getOperand(1).getValueType()) 8002 }; 8003 8004 Val = DAG.getMemIntrinsicNode(PPCISD::STFIWX, dl, 8005 DAG.getVTList(MVT::Other), Ops, 8006 cast<StoreSDNode>(N)->getMemoryVT(), 8007 cast<StoreSDNode>(N)->getMemOperand()); 8008 DCI.AddToWorklist(Val.getNode()); 8009 return Val; 8010 } 8011 8012 // Turn STORE (BSWAP) -> sthbrx/stwbrx. 8013 if (cast<StoreSDNode>(N)->isUnindexed() && 8014 N->getOperand(1).getOpcode() == ISD::BSWAP && 8015 N->getOperand(1).getNode()->hasOneUse() && 8016 (N->getOperand(1).getValueType() == MVT::i32 || 8017 N->getOperand(1).getValueType() == MVT::i16 || 8018 (TM.getSubtarget<PPCSubtarget>().hasLDBRX() && 8019 TM.getSubtarget<PPCSubtarget>().isPPC64() && 8020 N->getOperand(1).getValueType() == MVT::i64))) { 8021 SDValue BSwapOp = N->getOperand(1).getOperand(0); 8022 // Do an any-extend to 32-bits if this is a half-word input. 8023 if (BSwapOp.getValueType() == MVT::i16) 8024 BSwapOp = DAG.getNode(ISD::ANY_EXTEND, dl, MVT::i32, BSwapOp); 8025 8026 SDValue Ops[] = { 8027 N->getOperand(0), BSwapOp, N->getOperand(2), 8028 DAG.getValueType(N->getOperand(1).getValueType()) 8029 }; 8030 return 8031 DAG.getMemIntrinsicNode(PPCISD::STBRX, dl, DAG.getVTList(MVT::Other), 8032 Ops, cast<StoreSDNode>(N)->getMemoryVT(), 8033 cast<StoreSDNode>(N)->getMemOperand()); 8034 } 8035 break; 8036 case ISD::LOAD: { 8037 LoadSDNode *LD = cast<LoadSDNode>(N); 8038 EVT VT = LD->getValueType(0); 8039 Type *Ty = LD->getMemoryVT().getTypeForEVT(*DAG.getContext()); 8040 unsigned ABIAlignment = getDataLayout()->getABITypeAlignment(Ty); 8041 if (ISD::isNON_EXTLoad(N) && VT.isVector() && 8042 TM.getSubtarget<PPCSubtarget>().hasAltivec() && 8043 (VT == MVT::v16i8 || VT == MVT::v8i16 || 8044 VT == MVT::v4i32 || VT == MVT::v4f32) && 8045 LD->getAlignment() < ABIAlignment) { 8046 // This is a type-legal unaligned Altivec load. 8047 SDValue Chain = LD->getChain(); 8048 SDValue Ptr = LD->getBasePtr(); 8049 8050 // This implements the loading of unaligned vectors as described in 8051 // the venerable Apple Velocity Engine overview. Specifically: 8052 // https://developer.apple.com/hardwaredrivers/ve/alignment.html 8053 // https://developer.apple.com/hardwaredrivers/ve/code_optimization.html 8054 // 8055 // The general idea is to expand a sequence of one or more unaligned 8056 // loads into a alignment-based permutation-control instruction (lvsl), 8057 // a series of regular vector loads (which always truncate their 8058 // input address to an aligned address), and a series of permutations. 8059 // The results of these permutations are the requested loaded values. 8060 // The trick is that the last "extra" load is not taken from the address 8061 // you might suspect (sizeof(vector) bytes after the last requested 8062 // load), but rather sizeof(vector) - 1 bytes after the last 8063 // requested vector. The point of this is to avoid a page fault if the 8064 // base address happened to be aligned. This works because if the base 8065 // address is aligned, then adding less than a full vector length will 8066 // cause the last vector in the sequence to be (re)loaded. Otherwise, 8067 // the next vector will be fetched as you might suspect was necessary. 8068 8069 // We might be able to reuse the permutation generation from 8070 // a different base address offset from this one by an aligned amount. 8071 // The INTRINSIC_WO_CHAIN DAG combine will attempt to perform this 8072 // optimization later. 8073 SDValue PermCntl = BuildIntrinsicOp(Intrinsic::ppc_altivec_lvsl, Ptr, 8074 DAG, dl, MVT::v16i8); 8075 8076 // Refine the alignment of the original load (a "new" load created here 8077 // which was identical to the first except for the alignment would be 8078 // merged with the existing node regardless). 8079 MachineFunction &MF = DAG.getMachineFunction(); 8080 MachineMemOperand *MMO = 8081 MF.getMachineMemOperand(LD->getPointerInfo(), 8082 LD->getMemOperand()->getFlags(), 8083 LD->getMemoryVT().getStoreSize(), 8084 ABIAlignment); 8085 LD->refineAlignment(MMO); 8086 SDValue BaseLoad = SDValue(LD, 0); 8087 8088 // Note that the value of IncOffset (which is provided to the next 8089 // load's pointer info offset value, and thus used to calculate the 8090 // alignment), and the value of IncValue (which is actually used to 8091 // increment the pointer value) are different! This is because we 8092 // require the next load to appear to be aligned, even though it 8093 // is actually offset from the base pointer by a lesser amount. 8094 int IncOffset = VT.getSizeInBits() / 8; 8095 int IncValue = IncOffset; 8096 8097 // Walk (both up and down) the chain looking for another load at the real 8098 // (aligned) offset (the alignment of the other load does not matter in 8099 // this case). If found, then do not use the offset reduction trick, as 8100 // that will prevent the loads from being later combined (as they would 8101 // otherwise be duplicates). 8102 if (!findConsecutiveLoad(LD, DAG)) 8103 --IncValue; 8104 8105 SDValue Increment = DAG.getConstant(IncValue, getPointerTy()); 8106 Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr, Increment); 8107 8108 SDValue ExtraLoad = 8109 DAG.getLoad(VT, dl, Chain, Ptr, 8110 LD->getPointerInfo().getWithOffset(IncOffset), 8111 LD->isVolatile(), LD->isNonTemporal(), 8112 LD->isInvariant(), ABIAlignment); 8113 8114 SDValue TF = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, 8115 BaseLoad.getValue(1), ExtraLoad.getValue(1)); 8116 8117 if (BaseLoad.getValueType() != MVT::v4i32) 8118 BaseLoad = DAG.getNode(ISD::BITCAST, dl, MVT::v4i32, BaseLoad); 8119 8120 if (ExtraLoad.getValueType() != MVT::v4i32) 8121 ExtraLoad = DAG.getNode(ISD::BITCAST, dl, MVT::v4i32, ExtraLoad); 8122 8123 SDValue Perm = BuildIntrinsicOp(Intrinsic::ppc_altivec_vperm, 8124 BaseLoad, ExtraLoad, PermCntl, DAG, dl); 8125 8126 if (VT != MVT::v4i32) 8127 Perm = DAG.getNode(ISD::BITCAST, dl, VT, Perm); 8128 8129 // Now we need to be really careful about how we update the users of the 8130 // original load. We cannot just call DCI.CombineTo (or 8131 // DAG.ReplaceAllUsesWith for that matter), because the load still has 8132 // uses created here (the permutation for example) that need to stay. 8133 SDNode::use_iterator UI = N->use_begin(), UE = N->use_end(); 8134 while (UI != UE) { 8135 SDUse &Use = UI.getUse(); 8136 SDNode *User = *UI; 8137 // Note: BaseLoad is checked here because it might not be N, but a 8138 // bitcast of N. 8139 if (User == Perm.getNode() || User == BaseLoad.getNode() || 8140 User == TF.getNode() || Use.getResNo() > 1) { 8141 ++UI; 8142 continue; 8143 } 8144 8145 SDValue To = Use.getResNo() ? TF : Perm; 8146 ++UI; 8147 8148 SmallVector<SDValue, 8> Ops; 8149 for (SDNode::op_iterator O = User->op_begin(), 8150 OE = User->op_end(); O != OE; ++O) { 8151 if (*O == Use) 8152 Ops.push_back(To); 8153 else 8154 Ops.push_back(*O); 8155 } 8156 8157 DAG.UpdateNodeOperands(User, Ops); 8158 } 8159 8160 return SDValue(N, 0); 8161 } 8162 } 8163 break; 8164 case ISD::INTRINSIC_WO_CHAIN: 8165 if (cast<ConstantSDNode>(N->getOperand(0))->getZExtValue() == 8166 Intrinsic::ppc_altivec_lvsl && 8167 N->getOperand(1)->getOpcode() == ISD::ADD) { 8168 SDValue Add = N->getOperand(1); 8169 8170 if (DAG.MaskedValueIsZero(Add->getOperand(1), 8171 APInt::getAllOnesValue(4 /* 16 byte alignment */).zext( 8172 Add.getValueType().getScalarType().getSizeInBits()))) { 8173 SDNode *BasePtr = Add->getOperand(0).getNode(); 8174 for (SDNode::use_iterator UI = BasePtr->use_begin(), 8175 UE = BasePtr->use_end(); UI != UE; ++UI) { 8176 if (UI->getOpcode() == ISD::INTRINSIC_WO_CHAIN && 8177 cast<ConstantSDNode>(UI->getOperand(0))->getZExtValue() == 8178 Intrinsic::ppc_altivec_lvsl) { 8179 // We've found another LVSL, and this address if an aligned 8180 // multiple of that one. The results will be the same, so use the 8181 // one we've just found instead. 8182 8183 return SDValue(*UI, 0); 8184 } 8185 } 8186 } 8187 } 8188 8189 break; 8190 case ISD::BSWAP: 8191 // Turn BSWAP (LOAD) -> lhbrx/lwbrx. 8192 if (ISD::isNON_EXTLoad(N->getOperand(0).getNode()) && 8193 N->getOperand(0).hasOneUse() && 8194 (N->getValueType(0) == MVT::i32 || N->getValueType(0) == MVT::i16 || 8195 (TM.getSubtarget<PPCSubtarget>().hasLDBRX() && 8196 TM.getSubtarget<PPCSubtarget>().isPPC64() && 8197 N->getValueType(0) == MVT::i64))) { 8198 SDValue Load = N->getOperand(0); 8199 LoadSDNode *LD = cast<LoadSDNode>(Load); 8200 // Create the byte-swapping load. 8201 SDValue Ops[] = { 8202 LD->getChain(), // Chain 8203 LD->getBasePtr(), // Ptr 8204 DAG.getValueType(N->getValueType(0)) // VT 8205 }; 8206 SDValue BSLoad = 8207 DAG.getMemIntrinsicNode(PPCISD::LBRX, dl, 8208 DAG.getVTList(N->getValueType(0) == MVT::i64 ? 8209 MVT::i64 : MVT::i32, MVT::Other), 8210 Ops, LD->getMemoryVT(), LD->getMemOperand()); 8211 8212 // If this is an i16 load, insert the truncate. 8213 SDValue ResVal = BSLoad; 8214 if (N->getValueType(0) == MVT::i16) 8215 ResVal = DAG.getNode(ISD::TRUNCATE, dl, MVT::i16, BSLoad); 8216 8217 // First, combine the bswap away. This makes the value produced by the 8218 // load dead. 8219 DCI.CombineTo(N, ResVal); 8220 8221 // Next, combine the load away, we give it a bogus result value but a real 8222 // chain result. The result value is dead because the bswap is dead. 8223 DCI.CombineTo(Load.getNode(), ResVal, BSLoad.getValue(1)); 8224 8225 // Return N so it doesn't get rechecked! 8226 return SDValue(N, 0); 8227 } 8228 8229 break; 8230 case PPCISD::VCMP: { 8231 // If a VCMPo node already exists with exactly the same operands as this 8232 // node, use its result instead of this node (VCMPo computes both a CR6 and 8233 // a normal output). 8234 // 8235 if (!N->getOperand(0).hasOneUse() && 8236 !N->getOperand(1).hasOneUse() && 8237 !N->getOperand(2).hasOneUse()) { 8238 8239 // Scan all of the users of the LHS, looking for VCMPo's that match. 8240 SDNode *VCMPoNode = nullptr; 8241 8242 SDNode *LHSN = N->getOperand(0).getNode(); 8243 for (SDNode::use_iterator UI = LHSN->use_begin(), E = LHSN->use_end(); 8244 UI != E; ++UI) 8245 if (UI->getOpcode() == PPCISD::VCMPo && 8246 UI->getOperand(1) == N->getOperand(1) && 8247 UI->getOperand(2) == N->getOperand(2) && 8248 UI->getOperand(0) == N->getOperand(0)) { 8249 VCMPoNode = *UI; 8250 break; 8251 } 8252 8253 // If there is no VCMPo node, or if the flag value has a single use, don't 8254 // transform this. 8255 if (!VCMPoNode || VCMPoNode->hasNUsesOfValue(0, 1)) 8256 break; 8257 8258 // Look at the (necessarily single) use of the flag value. If it has a 8259 // chain, this transformation is more complex. Note that multiple things 8260 // could use the value result, which we should ignore. 8261 SDNode *FlagUser = nullptr; 8262 for (SDNode::use_iterator UI = VCMPoNode->use_begin(); 8263 FlagUser == nullptr; ++UI) { 8264 assert(UI != VCMPoNode->use_end() && "Didn't find user!"); 8265 SDNode *User = *UI; 8266 for (unsigned i = 0, e = User->getNumOperands(); i != e; ++i) { 8267 if (User->getOperand(i) == SDValue(VCMPoNode, 1)) { 8268 FlagUser = User; 8269 break; 8270 } 8271 } 8272 } 8273 8274 // If the user is a MFOCRF instruction, we know this is safe. 8275 // Otherwise we give up for right now. 8276 if (FlagUser->getOpcode() == PPCISD::MFOCRF) 8277 return SDValue(VCMPoNode, 0); 8278 } 8279 break; 8280 } 8281 case ISD::BRCOND: { 8282 SDValue Cond = N->getOperand(1); 8283 SDValue Target = N->getOperand(2); 8284 8285 if (Cond.getOpcode() == ISD::INTRINSIC_W_CHAIN && 8286 cast<ConstantSDNode>(Cond.getOperand(1))->getZExtValue() == 8287 Intrinsic::ppc_is_decremented_ctr_nonzero) { 8288 8289 // We now need to make the intrinsic dead (it cannot be instruction 8290 // selected). 8291 DAG.ReplaceAllUsesOfValueWith(Cond.getValue(1), Cond.getOperand(0)); 8292 assert(Cond.getNode()->hasOneUse() && 8293 "Counter decrement has more than one use"); 8294 8295 return DAG.getNode(PPCISD::BDNZ, dl, MVT::Other, 8296 N->getOperand(0), Target); 8297 } 8298 } 8299 break; 8300 case ISD::BR_CC: { 8301 // If this is a branch on an altivec predicate comparison, lower this so 8302 // that we don't have to do a MFOCRF: instead, branch directly on CR6. This 8303 // lowering is done pre-legalize, because the legalizer lowers the predicate 8304 // compare down to code that is difficult to reassemble. 8305 ISD::CondCode CC = cast<CondCodeSDNode>(N->getOperand(1))->get(); 8306 SDValue LHS = N->getOperand(2), RHS = N->getOperand(3); 8307 8308 // Sometimes the promoted value of the intrinsic is ANDed by some non-zero 8309 // value. If so, pass-through the AND to get to the intrinsic. 8310 if (LHS.getOpcode() == ISD::AND && 8311 LHS.getOperand(0).getOpcode() == ISD::INTRINSIC_W_CHAIN && 8312 cast<ConstantSDNode>(LHS.getOperand(0).getOperand(1))->getZExtValue() == 8313 Intrinsic::ppc_is_decremented_ctr_nonzero && 8314 isa<ConstantSDNode>(LHS.getOperand(1)) && 8315 !cast<ConstantSDNode>(LHS.getOperand(1))->getConstantIntValue()-> 8316 isZero()) 8317 LHS = LHS.getOperand(0); 8318 8319 if (LHS.getOpcode() == ISD::INTRINSIC_W_CHAIN && 8320 cast<ConstantSDNode>(LHS.getOperand(1))->getZExtValue() == 8321 Intrinsic::ppc_is_decremented_ctr_nonzero && 8322 isa<ConstantSDNode>(RHS)) { 8323 assert((CC == ISD::SETEQ || CC == ISD::SETNE) && 8324 "Counter decrement comparison is not EQ or NE"); 8325 8326 unsigned Val = cast<ConstantSDNode>(RHS)->getZExtValue(); 8327 bool isBDNZ = (CC == ISD::SETEQ && Val) || 8328 (CC == ISD::SETNE && !Val); 8329 8330 // We now need to make the intrinsic dead (it cannot be instruction 8331 // selected). 8332 DAG.ReplaceAllUsesOfValueWith(LHS.getValue(1), LHS.getOperand(0)); 8333 assert(LHS.getNode()->hasOneUse() && 8334 "Counter decrement has more than one use"); 8335 8336 return DAG.getNode(isBDNZ ? PPCISD::BDNZ : PPCISD::BDZ, dl, MVT::Other, 8337 N->getOperand(0), N->getOperand(4)); 8338 } 8339 8340 int CompareOpc; 8341 bool isDot; 8342 8343 if (LHS.getOpcode() == ISD::INTRINSIC_WO_CHAIN && 8344 isa<ConstantSDNode>(RHS) && (CC == ISD::SETEQ || CC == ISD::SETNE) && 8345 getAltivecCompareInfo(LHS, CompareOpc, isDot)) { 8346 assert(isDot && "Can't compare against a vector result!"); 8347 8348 // If this is a comparison against something other than 0/1, then we know 8349 // that the condition is never/always true. 8350 unsigned Val = cast<ConstantSDNode>(RHS)->getZExtValue(); 8351 if (Val != 0 && Val != 1) { 8352 if (CC == ISD::SETEQ) // Cond never true, remove branch. 8353 return N->getOperand(0); 8354 // Always !=, turn it into an unconditional branch. 8355 return DAG.getNode(ISD::BR, dl, MVT::Other, 8356 N->getOperand(0), N->getOperand(4)); 8357 } 8358 8359 bool BranchOnWhenPredTrue = (CC == ISD::SETEQ) ^ (Val == 0); 8360 8361 // Create the PPCISD altivec 'dot' comparison node. 8362 SDValue Ops[] = { 8363 LHS.getOperand(2), // LHS of compare 8364 LHS.getOperand(3), // RHS of compare 8365 DAG.getConstant(CompareOpc, MVT::i32) 8366 }; 8367 EVT VTs[] = { LHS.getOperand(2).getValueType(), MVT::Glue }; 8368 SDValue CompNode = DAG.getNode(PPCISD::VCMPo, dl, VTs, Ops); 8369 8370 // Unpack the result based on how the target uses it. 8371 PPC::Predicate CompOpc; 8372 switch (cast<ConstantSDNode>(LHS.getOperand(1))->getZExtValue()) { 8373 default: // Can't happen, don't crash on invalid number though. 8374 case 0: // Branch on the value of the EQ bit of CR6. 8375 CompOpc = BranchOnWhenPredTrue ? PPC::PRED_EQ : PPC::PRED_NE; 8376 break; 8377 case 1: // Branch on the inverted value of the EQ bit of CR6. 8378 CompOpc = BranchOnWhenPredTrue ? PPC::PRED_NE : PPC::PRED_EQ; 8379 break; 8380 case 2: // Branch on the value of the LT bit of CR6. 8381 CompOpc = BranchOnWhenPredTrue ? PPC::PRED_LT : PPC::PRED_GE; 8382 break; 8383 case 3: // Branch on the inverted value of the LT bit of CR6. 8384 CompOpc = BranchOnWhenPredTrue ? PPC::PRED_GE : PPC::PRED_LT; 8385 break; 8386 } 8387 8388 return DAG.getNode(PPCISD::COND_BRANCH, dl, MVT::Other, N->getOperand(0), 8389 DAG.getConstant(CompOpc, MVT::i32), 8390 DAG.getRegister(PPC::CR6, MVT::i32), 8391 N->getOperand(4), CompNode.getValue(1)); 8392 } 8393 break; 8394 } 8395 } 8396 8397 return SDValue(); 8398 } 8399 8400 //===----------------------------------------------------------------------===// 8401 // Inline Assembly Support 8402 //===----------------------------------------------------------------------===// 8403 8404 void PPCTargetLowering::computeKnownBitsForTargetNode(const SDValue Op, 8405 APInt &KnownZero, 8406 APInt &KnownOne, 8407 const SelectionDAG &DAG, 8408 unsigned Depth) const { 8409 KnownZero = KnownOne = APInt(KnownZero.getBitWidth(), 0); 8410 switch (Op.getOpcode()) { 8411 default: break; 8412 case PPCISD::LBRX: { 8413 // lhbrx is known to have the top bits cleared out. 8414 if (cast<VTSDNode>(Op.getOperand(2))->getVT() == MVT::i16) 8415 KnownZero = 0xFFFF0000; 8416 break; 8417 } 8418 case ISD::INTRINSIC_WO_CHAIN: { 8419 switch (cast<ConstantSDNode>(Op.getOperand(0))->getZExtValue()) { 8420 default: break; 8421 case Intrinsic::ppc_altivec_vcmpbfp_p: 8422 case Intrinsic::ppc_altivec_vcmpeqfp_p: 8423 case Intrinsic::ppc_altivec_vcmpequb_p: 8424 case Intrinsic::ppc_altivec_vcmpequh_p: 8425 case Intrinsic::ppc_altivec_vcmpequw_p: 8426 case Intrinsic::ppc_altivec_vcmpgefp_p: 8427 case Intrinsic::ppc_altivec_vcmpgtfp_p: 8428 case Intrinsic::ppc_altivec_vcmpgtsb_p: 8429 case Intrinsic::ppc_altivec_vcmpgtsh_p: 8430 case Intrinsic::ppc_altivec_vcmpgtsw_p: 8431 case Intrinsic::ppc_altivec_vcmpgtub_p: 8432 case Intrinsic::ppc_altivec_vcmpgtuh_p: 8433 case Intrinsic::ppc_altivec_vcmpgtuw_p: 8434 KnownZero = ~1U; // All bits but the low one are known to be zero. 8435 break; 8436 } 8437 } 8438 } 8439 } 8440 8441 8442 /// getConstraintType - Given a constraint, return the type of 8443 /// constraint it is for this target. 8444 PPCTargetLowering::ConstraintType 8445 PPCTargetLowering::getConstraintType(const std::string &Constraint) const { 8446 if (Constraint.size() == 1) { 8447 switch (Constraint[0]) { 8448 default: break; 8449 case 'b': 8450 case 'r': 8451 case 'f': 8452 case 'v': 8453 case 'y': 8454 return C_RegisterClass; 8455 case 'Z': 8456 // FIXME: While Z does indicate a memory constraint, it specifically 8457 // indicates an r+r address (used in conjunction with the 'y' modifier 8458 // in the replacement string). Currently, we're forcing the base 8459 // register to be r0 in the asm printer (which is interpreted as zero) 8460 // and forming the complete address in the second register. This is 8461 // suboptimal. 8462 return C_Memory; 8463 } 8464 } else if (Constraint == "wc") { // individual CR bits. 8465 return C_RegisterClass; 8466 } else if (Constraint == "wa" || Constraint == "wd" || 8467 Constraint == "wf" || Constraint == "ws") { 8468 return C_RegisterClass; // VSX registers. 8469 } 8470 return TargetLowering::getConstraintType(Constraint); 8471 } 8472 8473 /// Examine constraint type and operand type and determine a weight value. 8474 /// This object must already have been set up with the operand type 8475 /// and the current alternative constraint selected. 8476 TargetLowering::ConstraintWeight 8477 PPCTargetLowering::getSingleConstraintMatchWeight( 8478 AsmOperandInfo &info, const char *constraint) const { 8479 ConstraintWeight weight = CW_Invalid; 8480 Value *CallOperandVal = info.CallOperandVal; 8481 // If we don't have a value, we can't do a match, 8482 // but allow it at the lowest weight. 8483 if (!CallOperandVal) 8484 return CW_Default; 8485 Type *type = CallOperandVal->getType(); 8486 8487 // Look at the constraint type. 8488 if (StringRef(constraint) == "wc" && type->isIntegerTy(1)) 8489 return CW_Register; // an individual CR bit. 8490 else if ((StringRef(constraint) == "wa" || 8491 StringRef(constraint) == "wd" || 8492 StringRef(constraint) == "wf") && 8493 type->isVectorTy()) 8494 return CW_Register; 8495 else if (StringRef(constraint) == "ws" && type->isDoubleTy()) 8496 return CW_Register; 8497 8498 switch (*constraint) { 8499 default: 8500 weight = TargetLowering::getSingleConstraintMatchWeight(info, constraint); 8501 break; 8502 case 'b': 8503 if (type->isIntegerTy()) 8504 weight = CW_Register; 8505 break; 8506 case 'f': 8507 if (type->isFloatTy()) 8508 weight = CW_Register; 8509 break; 8510 case 'd': 8511 if (type->isDoubleTy()) 8512 weight = CW_Register; 8513 break; 8514 case 'v': 8515 if (type->isVectorTy()) 8516 weight = CW_Register; 8517 break; 8518 case 'y': 8519 weight = CW_Register; 8520 break; 8521 case 'Z': 8522 weight = CW_Memory; 8523 break; 8524 } 8525 return weight; 8526 } 8527 8528 std::pair<unsigned, const TargetRegisterClass*> 8529 PPCTargetLowering::getRegForInlineAsmConstraint(const std::string &Constraint, 8530 MVT VT) const { 8531 if (Constraint.size() == 1) { 8532 // GCC RS6000 Constraint Letters 8533 switch (Constraint[0]) { 8534 case 'b': // R1-R31 8535 if (VT == MVT::i64 && PPCSubTarget.isPPC64()) 8536 return std::make_pair(0U, &PPC::G8RC_NOX0RegClass); 8537 return std::make_pair(0U, &PPC::GPRC_NOR0RegClass); 8538 case 'r': // R0-R31 8539 if (VT == MVT::i64 && PPCSubTarget.isPPC64()) 8540 return std::make_pair(0U, &PPC::G8RCRegClass); 8541 return std::make_pair(0U, &PPC::GPRCRegClass); 8542 case 'f': 8543 if (VT == MVT::f32 || VT == MVT::i32) 8544 return std::make_pair(0U, &PPC::F4RCRegClass); 8545 if (VT == MVT::f64 || VT == MVT::i64) 8546 return std::make_pair(0U, &PPC::F8RCRegClass); 8547 break; 8548 case 'v': 8549 return std::make_pair(0U, &PPC::VRRCRegClass); 8550 case 'y': // crrc 8551 return std::make_pair(0U, &PPC::CRRCRegClass); 8552 } 8553 } else if (Constraint == "wc") { // an individual CR bit. 8554 return std::make_pair(0U, &PPC::CRBITRCRegClass); 8555 } else if (Constraint == "wa" || Constraint == "wd" || 8556 Constraint == "wf") { 8557 return std::make_pair(0U, &PPC::VSRCRegClass); 8558 } else if (Constraint == "ws") { 8559 return std::make_pair(0U, &PPC::VSFRCRegClass); 8560 } 8561 8562 std::pair<unsigned, const TargetRegisterClass*> R = 8563 TargetLowering::getRegForInlineAsmConstraint(Constraint, VT); 8564 8565 // r[0-9]+ are used, on PPC64, to refer to the corresponding 64-bit registers 8566 // (which we call X[0-9]+). If a 64-bit value has been requested, and a 8567 // 32-bit GPR has been selected, then 'upgrade' it to the 64-bit parent 8568 // register. 8569 // FIXME: If TargetLowering::getRegForInlineAsmConstraint could somehow use 8570 // the AsmName field from *RegisterInfo.td, then this would not be necessary. 8571 if (R.first && VT == MVT::i64 && PPCSubTarget.isPPC64() && 8572 PPC::GPRCRegClass.contains(R.first)) { 8573 const TargetRegisterInfo *TRI = getTargetMachine().getRegisterInfo(); 8574 return std::make_pair(TRI->getMatchingSuperReg(R.first, 8575 PPC::sub_32, &PPC::G8RCRegClass), 8576 &PPC::G8RCRegClass); 8577 } 8578 8579 return R; 8580 } 8581 8582 8583 /// LowerAsmOperandForConstraint - Lower the specified operand into the Ops 8584 /// vector. If it is invalid, don't add anything to Ops. 8585 void PPCTargetLowering::LowerAsmOperandForConstraint(SDValue Op, 8586 std::string &Constraint, 8587 std::vector<SDValue>&Ops, 8588 SelectionDAG &DAG) const { 8589 SDValue Result; 8590 8591 // Only support length 1 constraints. 8592 if (Constraint.length() > 1) return; 8593 8594 char Letter = Constraint[0]; 8595 switch (Letter) { 8596 default: break; 8597 case 'I': 8598 case 'J': 8599 case 'K': 8600 case 'L': 8601 case 'M': 8602 case 'N': 8603 case 'O': 8604 case 'P': { 8605 ConstantSDNode *CST = dyn_cast<ConstantSDNode>(Op); 8606 if (!CST) return; // Must be an immediate to match. 8607 unsigned Value = CST->getZExtValue(); 8608 switch (Letter) { 8609 default: llvm_unreachable("Unknown constraint letter!"); 8610 case 'I': // "I" is a signed 16-bit constant. 8611 if ((short)Value == (int)Value) 8612 Result = DAG.getTargetConstant(Value, Op.getValueType()); 8613 break; 8614 case 'J': // "J" is a constant with only the high-order 16 bits nonzero. 8615 case 'L': // "L" is a signed 16-bit constant shifted left 16 bits. 8616 if ((short)Value == 0) 8617 Result = DAG.getTargetConstant(Value, Op.getValueType()); 8618 break; 8619 case 'K': // "K" is a constant with only the low-order 16 bits nonzero. 8620 if ((Value >> 16) == 0) 8621 Result = DAG.getTargetConstant(Value, Op.getValueType()); 8622 break; 8623 case 'M': // "M" is a constant that is greater than 31. 8624 if (Value > 31) 8625 Result = DAG.getTargetConstant(Value, Op.getValueType()); 8626 break; 8627 case 'N': // "N" is a positive constant that is an exact power of two. 8628 if ((int)Value > 0 && isPowerOf2_32(Value)) 8629 Result = DAG.getTargetConstant(Value, Op.getValueType()); 8630 break; 8631 case 'O': // "O" is the constant zero. 8632 if (Value == 0) 8633 Result = DAG.getTargetConstant(Value, Op.getValueType()); 8634 break; 8635 case 'P': // "P" is a constant whose negation is a signed 16-bit constant. 8636 if ((short)-Value == (int)-Value) 8637 Result = DAG.getTargetConstant(Value, Op.getValueType()); 8638 break; 8639 } 8640 break; 8641 } 8642 } 8643 8644 if (Result.getNode()) { 8645 Ops.push_back(Result); 8646 return; 8647 } 8648 8649 // Handle standard constraint letters. 8650 TargetLowering::LowerAsmOperandForConstraint(Op, Constraint, Ops, DAG); 8651 } 8652 8653 // isLegalAddressingMode - Return true if the addressing mode represented 8654 // by AM is legal for this target, for a load/store of the specified type. 8655 bool PPCTargetLowering::isLegalAddressingMode(const AddrMode &AM, 8656 Type *Ty) const { 8657 // FIXME: PPC does not allow r+i addressing modes for vectors! 8658 8659 // PPC allows a sign-extended 16-bit immediate field. 8660 if (AM.BaseOffs <= -(1LL << 16) || AM.BaseOffs >= (1LL << 16)-1) 8661 return false; 8662 8663 // No global is ever allowed as a base. 8664 if (AM.BaseGV) 8665 return false; 8666 8667 // PPC only support r+r, 8668 switch (AM.Scale) { 8669 case 0: // "r+i" or just "i", depending on HasBaseReg. 8670 break; 8671 case 1: 8672 if (AM.HasBaseReg && AM.BaseOffs) // "r+r+i" is not allowed. 8673 return false; 8674 // Otherwise we have r+r or r+i. 8675 break; 8676 case 2: 8677 if (AM.HasBaseReg || AM.BaseOffs) // 2*r+r or 2*r+i is not allowed. 8678 return false; 8679 // Allow 2*r as r+r. 8680 break; 8681 default: 8682 // No other scales are supported. 8683 return false; 8684 } 8685 8686 return true; 8687 } 8688 8689 SDValue PPCTargetLowering::LowerRETURNADDR(SDValue Op, 8690 SelectionDAG &DAG) const { 8691 MachineFunction &MF = DAG.getMachineFunction(); 8692 MachineFrameInfo *MFI = MF.getFrameInfo(); 8693 MFI->setReturnAddressIsTaken(true); 8694 8695 if (verifyReturnAddressArgumentIsConstant(Op, DAG)) 8696 return SDValue(); 8697 8698 SDLoc dl(Op); 8699 unsigned Depth = cast<ConstantSDNode>(Op.getOperand(0))->getZExtValue(); 8700 8701 // Make sure the function does not optimize away the store of the RA to 8702 // the stack. 8703 PPCFunctionInfo *FuncInfo = MF.getInfo<PPCFunctionInfo>(); 8704 FuncInfo->setLRStoreRequired(); 8705 bool isPPC64 = PPCSubTarget.isPPC64(); 8706 bool isDarwinABI = PPCSubTarget.isDarwinABI(); 8707 8708 if (Depth > 0) { 8709 SDValue FrameAddr = LowerFRAMEADDR(Op, DAG); 8710 SDValue Offset = 8711 8712 DAG.getConstant(PPCFrameLowering::getReturnSaveOffset(isPPC64, isDarwinABI), 8713 isPPC64? MVT::i64 : MVT::i32); 8714 return DAG.getLoad(getPointerTy(), dl, DAG.getEntryNode(), 8715 DAG.getNode(ISD::ADD, dl, getPointerTy(), 8716 FrameAddr, Offset), 8717 MachinePointerInfo(), false, false, false, 0); 8718 } 8719 8720 // Just load the return address off the stack. 8721 SDValue RetAddrFI = getReturnAddrFrameIndex(DAG); 8722 return DAG.getLoad(getPointerTy(), dl, DAG.getEntryNode(), 8723 RetAddrFI, MachinePointerInfo(), false, false, false, 0); 8724 } 8725 8726 SDValue PPCTargetLowering::LowerFRAMEADDR(SDValue Op, 8727 SelectionDAG &DAG) const { 8728 SDLoc dl(Op); 8729 unsigned Depth = cast<ConstantSDNode>(Op.getOperand(0))->getZExtValue(); 8730 8731 EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(); 8732 bool isPPC64 = PtrVT == MVT::i64; 8733 8734 MachineFunction &MF = DAG.getMachineFunction(); 8735 MachineFrameInfo *MFI = MF.getFrameInfo(); 8736 MFI->setFrameAddressIsTaken(true); 8737 8738 // Naked functions never have a frame pointer, and so we use r1. For all 8739 // other functions, this decision must be delayed until during PEI. 8740 unsigned FrameReg; 8741 if (MF.getFunction()->getAttributes().hasAttribute( 8742 AttributeSet::FunctionIndex, Attribute::Naked)) 8743 FrameReg = isPPC64 ? PPC::X1 : PPC::R1; 8744 else 8745 FrameReg = isPPC64 ? PPC::FP8 : PPC::FP; 8746 8747 SDValue FrameAddr = DAG.getCopyFromReg(DAG.getEntryNode(), dl, FrameReg, 8748 PtrVT); 8749 while (Depth--) 8750 FrameAddr = DAG.getLoad(Op.getValueType(), dl, DAG.getEntryNode(), 8751 FrameAddr, MachinePointerInfo(), false, false, 8752 false, 0); 8753 return FrameAddr; 8754 } 8755 8756 // FIXME? Maybe this could be a TableGen attribute on some registers and 8757 // this table could be generated automatically from RegInfo. 8758 unsigned PPCTargetLowering::getRegisterByName(const char* RegName, 8759 EVT VT) const { 8760 bool isPPC64 = PPCSubTarget.isPPC64(); 8761 bool isDarwinABI = PPCSubTarget.isDarwinABI(); 8762 8763 if ((isPPC64 && VT != MVT::i64 && VT != MVT::i32) || 8764 (!isPPC64 && VT != MVT::i32)) 8765 report_fatal_error("Invalid register global variable type"); 8766 8767 bool is64Bit = isPPC64 && VT == MVT::i64; 8768 unsigned Reg = StringSwitch<unsigned>(RegName) 8769 .Case("r1", is64Bit ? PPC::X1 : PPC::R1) 8770 .Case("r2", isDarwinABI ? 0 : (is64Bit ? PPC::X2 : PPC::R2)) 8771 .Case("r13", (!isPPC64 && isDarwinABI) ? 0 : 8772 (is64Bit ? PPC::X13 : PPC::R13)) 8773 .Default(0); 8774 8775 if (Reg) 8776 return Reg; 8777 report_fatal_error("Invalid register name global variable"); 8778 } 8779 8780 bool 8781 PPCTargetLowering::isOffsetFoldingLegal(const GlobalAddressSDNode *GA) const { 8782 // The PowerPC target isn't yet aware of offsets. 8783 return false; 8784 } 8785 8786 /// getOptimalMemOpType - Returns the target specific optimal type for load 8787 /// and store operations as a result of memset, memcpy, and memmove 8788 /// lowering. If DstAlign is zero that means it's safe to destination 8789 /// alignment can satisfy any constraint. Similarly if SrcAlign is zero it 8790 /// means there isn't a need to check it against alignment requirement, 8791 /// probably because the source does not need to be loaded. If 'IsMemset' is 8792 /// true, that means it's expanding a memset. If 'ZeroMemset' is true, that 8793 /// means it's a memset of zero. 'MemcpyStrSrc' indicates whether the memcpy 8794 /// source is constant so it does not need to be loaded. 8795 /// It returns EVT::Other if the type should be determined using generic 8796 /// target-independent logic. 8797 EVT PPCTargetLowering::getOptimalMemOpType(uint64_t Size, 8798 unsigned DstAlign, unsigned SrcAlign, 8799 bool IsMemset, bool ZeroMemset, 8800 bool MemcpyStrSrc, 8801 MachineFunction &MF) const { 8802 if (this->PPCSubTarget.isPPC64()) { 8803 return MVT::i64; 8804 } else { 8805 return MVT::i32; 8806 } 8807 } 8808 8809 /// \brief Returns true if it is beneficial to convert a load of a constant 8810 /// to just the constant itself. 8811 bool PPCTargetLowering::shouldConvertConstantLoadToIntImm(const APInt &Imm, 8812 Type *Ty) const { 8813 assert(Ty->isIntegerTy()); 8814 8815 unsigned BitSize = Ty->getPrimitiveSizeInBits(); 8816 if (BitSize == 0 || BitSize > 64) 8817 return false; 8818 return true; 8819 } 8820 8821 bool PPCTargetLowering::isTruncateFree(Type *Ty1, Type *Ty2) const { 8822 if (!Ty1->isIntegerTy() || !Ty2->isIntegerTy()) 8823 return false; 8824 unsigned NumBits1 = Ty1->getPrimitiveSizeInBits(); 8825 unsigned NumBits2 = Ty2->getPrimitiveSizeInBits(); 8826 return NumBits1 == 64 && NumBits2 == 32; 8827 } 8828 8829 bool PPCTargetLowering::isTruncateFree(EVT VT1, EVT VT2) const { 8830 if (!VT1.isInteger() || !VT2.isInteger()) 8831 return false; 8832 unsigned NumBits1 = VT1.getSizeInBits(); 8833 unsigned NumBits2 = VT2.getSizeInBits(); 8834 return NumBits1 == 64 && NumBits2 == 32; 8835 } 8836 8837 bool PPCTargetLowering::isLegalICmpImmediate(int64_t Imm) const { 8838 return isInt<16>(Imm) || isUInt<16>(Imm); 8839 } 8840 8841 bool PPCTargetLowering::isLegalAddImmediate(int64_t Imm) const { 8842 return isInt<16>(Imm) || isUInt<16>(Imm); 8843 } 8844 8845 bool PPCTargetLowering::allowsUnalignedMemoryAccesses(EVT VT, 8846 unsigned, 8847 bool *Fast) const { 8848 if (DisablePPCUnaligned) 8849 return false; 8850 8851 // PowerPC supports unaligned memory access for simple non-vector types. 8852 // Although accessing unaligned addresses is not as efficient as accessing 8853 // aligned addresses, it is generally more efficient than manual expansion, 8854 // and generally only traps for software emulation when crossing page 8855 // boundaries. 8856 8857 if (!VT.isSimple()) 8858 return false; 8859 8860 if (VT.getSimpleVT().isVector()) { 8861 if (PPCSubTarget.hasVSX()) { 8862 if (VT != MVT::v2f64 && VT != MVT::v2i64) 8863 return false; 8864 } else { 8865 return false; 8866 } 8867 } 8868 8869 if (VT == MVT::ppcf128) 8870 return false; 8871 8872 if (Fast) 8873 *Fast = true; 8874 8875 return true; 8876 } 8877 8878 bool PPCTargetLowering::isFMAFasterThanFMulAndFAdd(EVT VT) const { 8879 VT = VT.getScalarType(); 8880 8881 if (!VT.isSimple()) 8882 return false; 8883 8884 switch (VT.getSimpleVT().SimpleTy) { 8885 case MVT::f32: 8886 case MVT::f64: 8887 return true; 8888 default: 8889 break; 8890 } 8891 8892 return false; 8893 } 8894 8895 bool 8896 PPCTargetLowering::shouldExpandBuildVectorWithShuffles( 8897 EVT VT , unsigned DefinedValues) const { 8898 if (VT == MVT::v2i64) 8899 return false; 8900 8901 return TargetLowering::shouldExpandBuildVectorWithShuffles(VT, DefinedValues); 8902 } 8903 8904 Sched::Preference PPCTargetLowering::getSchedulingPreference(SDNode *N) const { 8905 if (DisableILPPref || PPCSubTarget.enableMachineScheduler()) 8906 return TargetLowering::getSchedulingPreference(N); 8907 8908 return Sched::ILP; 8909 } 8910 8911 // Create a fast isel object. 8912 FastISel * 8913 PPCTargetLowering::createFastISel(FunctionLoweringInfo &FuncInfo, 8914 const TargetLibraryInfo *LibInfo) const { 8915 return PPC::createFastISel(FuncInfo, LibInfo); 8916 } 8917