Let SelectionDAG start to use probability-based interface to add successors.
[oota-llvm.git] / lib / Target / PowerPC / PPCISelLowering.cpp
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 "PPCCallingConv.h"
17 #include "PPCMachineFunctionInfo.h"
18 #include "PPCPerfectShuffle.h"
19 #include "PPCTargetMachine.h"
20 #include "PPCTargetObjectFile.h"
21 #include "llvm/ADT/STLExtras.h"
22 #include "llvm/ADT/StringSwitch.h"
23 #include "llvm/ADT/Triple.h"
24 #include "llvm/CodeGen/CallingConvLower.h"
25 #include "llvm/CodeGen/MachineFrameInfo.h"
26 #include "llvm/CodeGen/MachineFunction.h"
27 #include "llvm/CodeGen/MachineInstrBuilder.h"
28 #include "llvm/CodeGen/MachineLoopInfo.h"
29 #include "llvm/CodeGen/MachineRegisterInfo.h"
30 #include "llvm/CodeGen/SelectionDAG.h"
31 #include "llvm/CodeGen/TargetLoweringObjectFileImpl.h"
32 #include "llvm/IR/CallingConv.h"
33 #include "llvm/IR/Constants.h"
34 #include "llvm/IR/DerivedTypes.h"
35 #include "llvm/IR/Function.h"
36 #include "llvm/IR/Intrinsics.h"
37 #include "llvm/Support/CommandLine.h"
38 #include "llvm/Support/ErrorHandling.h"
39 #include "llvm/Support/MathExtras.h"
40 #include "llvm/Support/raw_ostream.h"
41 #include "llvm/Target/TargetOptions.h"
42
43 using namespace llvm;
44
45 // FIXME: Remove this once soft-float is supported.
46 static cl::opt<bool> DisablePPCFloatInVariadic("disable-ppc-float-in-variadic",
47 cl::desc("disable saving float registers for va_start on PPC"), cl::Hidden);
48
49 static cl::opt<bool> DisablePPCPreinc("disable-ppc-preinc",
50 cl::desc("disable preincrement load/store generation on PPC"), cl::Hidden);
51
52 static cl::opt<bool> DisableILPPref("disable-ppc-ilp-pref",
53 cl::desc("disable setting the node scheduling preference to ILP on PPC"), cl::Hidden);
54
55 static cl::opt<bool> DisablePPCUnaligned("disable-ppc-unaligned",
56 cl::desc("disable unaligned load/store generation on PPC"), cl::Hidden);
57
58 // FIXME: Remove this once the bug has been fixed!
59 extern cl::opt<bool> ANDIGlueBug;
60
61 PPCTargetLowering::PPCTargetLowering(const PPCTargetMachine &TM,
62                                      const PPCSubtarget &STI)
63     : TargetLowering(TM), Subtarget(STI) {
64   // Use _setjmp/_longjmp instead of setjmp/longjmp.
65   setUseUnderscoreSetJmp(true);
66   setUseUnderscoreLongJmp(true);
67
68   // On PPC32/64, arguments smaller than 4/8 bytes are extended, so all
69   // arguments are at least 4/8 bytes aligned.
70   bool isPPC64 = Subtarget.isPPC64();
71   setMinStackArgumentAlignment(isPPC64 ? 8:4);
72
73   // Set up the register classes.
74   addRegisterClass(MVT::i32, &PPC::GPRCRegClass);
75   addRegisterClass(MVT::f32, &PPC::F4RCRegClass);
76   addRegisterClass(MVT::f64, &PPC::F8RCRegClass);
77
78   // PowerPC has an i16 but no i8 (or i1) SEXTLOAD
79   for (MVT VT : MVT::integer_valuetypes()) {
80     setLoadExtAction(ISD::SEXTLOAD, VT, MVT::i1, Promote);
81     setLoadExtAction(ISD::SEXTLOAD, VT, MVT::i8, Expand);
82   }
83
84   setTruncStoreAction(MVT::f64, MVT::f32, Expand);
85
86   // PowerPC has pre-inc load and store's.
87   setIndexedLoadAction(ISD::PRE_INC, MVT::i1, Legal);
88   setIndexedLoadAction(ISD::PRE_INC, MVT::i8, Legal);
89   setIndexedLoadAction(ISD::PRE_INC, MVT::i16, Legal);
90   setIndexedLoadAction(ISD::PRE_INC, MVT::i32, Legal);
91   setIndexedLoadAction(ISD::PRE_INC, MVT::i64, Legal);
92   setIndexedLoadAction(ISD::PRE_INC, MVT::f32, Legal);
93   setIndexedLoadAction(ISD::PRE_INC, MVT::f64, Legal);
94   setIndexedStoreAction(ISD::PRE_INC, MVT::i1, Legal);
95   setIndexedStoreAction(ISD::PRE_INC, MVT::i8, Legal);
96   setIndexedStoreAction(ISD::PRE_INC, MVT::i16, Legal);
97   setIndexedStoreAction(ISD::PRE_INC, MVT::i32, Legal);
98   setIndexedStoreAction(ISD::PRE_INC, MVT::i64, Legal);
99   setIndexedStoreAction(ISD::PRE_INC, MVT::f32, Legal);
100   setIndexedStoreAction(ISD::PRE_INC, MVT::f64, Legal);
101
102   if (Subtarget.useCRBits()) {
103     setOperationAction(ISD::SIGN_EXTEND_INREG, MVT::i1, Expand);
104
105     if (isPPC64 || Subtarget.hasFPCVT()) {
106       setOperationAction(ISD::SINT_TO_FP, MVT::i1, Promote);
107       AddPromotedToType (ISD::SINT_TO_FP, MVT::i1,
108                          isPPC64 ? MVT::i64 : MVT::i32);
109       setOperationAction(ISD::UINT_TO_FP, MVT::i1, Promote);
110       AddPromotedToType(ISD::UINT_TO_FP, MVT::i1,
111                         isPPC64 ? MVT::i64 : MVT::i32);
112     } else {
113       setOperationAction(ISD::SINT_TO_FP, MVT::i1, Custom);
114       setOperationAction(ISD::UINT_TO_FP, MVT::i1, Custom);
115     }
116
117     // PowerPC does not support direct load / store of condition registers
118     setOperationAction(ISD::LOAD, MVT::i1, Custom);
119     setOperationAction(ISD::STORE, MVT::i1, Custom);
120
121     // FIXME: Remove this once the ANDI glue bug is fixed:
122     if (ANDIGlueBug)
123       setOperationAction(ISD::TRUNCATE, MVT::i1, Custom);
124
125     for (MVT VT : MVT::integer_valuetypes()) {
126       setLoadExtAction(ISD::SEXTLOAD, VT, MVT::i1, Promote);
127       setLoadExtAction(ISD::ZEXTLOAD, VT, MVT::i1, Promote);
128       setTruncStoreAction(VT, MVT::i1, Expand);
129     }
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 && Subtarget.hasFRSQRTE() &&
181         Subtarget.hasFRE()))
182     setOperationAction(ISD::FSQRT, MVT::f64, Expand);
183
184   if (!Subtarget.hasFSQRT() &&
185       !(TM.Options.UnsafeFPMath && Subtarget.hasFRSQRTES() &&
186         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 (Subtarget.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 (Subtarget.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 (MVT VT : MVT::vector_valuetypes()) {
405       // add/sub are legal for all supported vector VT's.
406       setOperationAction(ISD::ADD, VT, Legal);
407       setOperationAction(ISD::SUB, VT, Legal);
408
409       // Vector instructions introduced in P8
410       if (Subtarget.hasP8Altivec() && (VT.SimpleTy != MVT::v1i128)) {
411         setOperationAction(ISD::CTPOP, VT, Legal);
412         setOperationAction(ISD::CTLZ, VT, Legal);
413       }
414       else {
415         setOperationAction(ISD::CTPOP, VT, Expand);
416         setOperationAction(ISD::CTLZ, VT, Expand);
417       }
418
419       // We promote all shuffles to v16i8.
420       setOperationAction(ISD::VECTOR_SHUFFLE, VT, Promote);
421       AddPromotedToType (ISD::VECTOR_SHUFFLE, VT, MVT::v16i8);
422
423       // We promote all non-typed operations to v4i32.
424       setOperationAction(ISD::AND   , VT, Promote);
425       AddPromotedToType (ISD::AND   , VT, MVT::v4i32);
426       setOperationAction(ISD::OR    , VT, Promote);
427       AddPromotedToType (ISD::OR    , VT, MVT::v4i32);
428       setOperationAction(ISD::XOR   , VT, Promote);
429       AddPromotedToType (ISD::XOR   , VT, MVT::v4i32);
430       setOperationAction(ISD::LOAD  , VT, Promote);
431       AddPromotedToType (ISD::LOAD  , VT, MVT::v4i32);
432       setOperationAction(ISD::SELECT, VT, Promote);
433       AddPromotedToType (ISD::SELECT, VT, MVT::v4i32);
434       setOperationAction(ISD::SELECT_CC, VT, Promote);
435       AddPromotedToType (ISD::SELECT_CC, VT, MVT::v4i32);
436       setOperationAction(ISD::STORE, VT, Promote);
437       AddPromotedToType (ISD::STORE, VT, MVT::v4i32);
438
439       // No other operations are legal.
440       setOperationAction(ISD::MUL , VT, Expand);
441       setOperationAction(ISD::SDIV, VT, Expand);
442       setOperationAction(ISD::SREM, VT, Expand);
443       setOperationAction(ISD::UDIV, VT, Expand);
444       setOperationAction(ISD::UREM, VT, Expand);
445       setOperationAction(ISD::FDIV, VT, Expand);
446       setOperationAction(ISD::FREM, VT, Expand);
447       setOperationAction(ISD::FNEG, VT, Expand);
448       setOperationAction(ISD::FSQRT, VT, Expand);
449       setOperationAction(ISD::FLOG, VT, Expand);
450       setOperationAction(ISD::FLOG10, VT, Expand);
451       setOperationAction(ISD::FLOG2, VT, Expand);
452       setOperationAction(ISD::FEXP, VT, Expand);
453       setOperationAction(ISD::FEXP2, VT, Expand);
454       setOperationAction(ISD::FSIN, VT, Expand);
455       setOperationAction(ISD::FCOS, VT, Expand);
456       setOperationAction(ISD::FABS, VT, Expand);
457       setOperationAction(ISD::FPOWI, VT, Expand);
458       setOperationAction(ISD::FFLOOR, VT, Expand);
459       setOperationAction(ISD::FCEIL,  VT, Expand);
460       setOperationAction(ISD::FTRUNC, VT, Expand);
461       setOperationAction(ISD::FRINT,  VT, Expand);
462       setOperationAction(ISD::FNEARBYINT, VT, Expand);
463       setOperationAction(ISD::EXTRACT_VECTOR_ELT, VT, Expand);
464       setOperationAction(ISD::INSERT_VECTOR_ELT, VT, Expand);
465       setOperationAction(ISD::BUILD_VECTOR, VT, Expand);
466       setOperationAction(ISD::MULHU, VT, Expand);
467       setOperationAction(ISD::MULHS, VT, Expand);
468       setOperationAction(ISD::UMUL_LOHI, VT, Expand);
469       setOperationAction(ISD::SMUL_LOHI, VT, Expand);
470       setOperationAction(ISD::UDIVREM, VT, Expand);
471       setOperationAction(ISD::SDIVREM, VT, Expand);
472       setOperationAction(ISD::SCALAR_TO_VECTOR, VT, Expand);
473       setOperationAction(ISD::FPOW, VT, Expand);
474       setOperationAction(ISD::BSWAP, VT, Expand);
475       setOperationAction(ISD::CTLZ_ZERO_UNDEF, VT, Expand);
476       setOperationAction(ISD::CTTZ, VT, Expand);
477       setOperationAction(ISD::CTTZ_ZERO_UNDEF, VT, Expand);
478       setOperationAction(ISD::VSELECT, VT, Expand);
479       setOperationAction(ISD::SIGN_EXTEND_INREG, VT, Expand);
480
481       for (MVT InnerVT : MVT::vector_valuetypes()) {
482         setTruncStoreAction(VT, InnerVT, Expand);
483         setLoadExtAction(ISD::SEXTLOAD, VT, InnerVT, Expand);
484         setLoadExtAction(ISD::ZEXTLOAD, VT, InnerVT, Expand);
485         setLoadExtAction(ISD::EXTLOAD, VT, InnerVT, Expand);
486       }
487     }
488
489     // We can custom expand all VECTOR_SHUFFLEs to VPERM, others we can handle
490     // with merges, splats, etc.
491     setOperationAction(ISD::VECTOR_SHUFFLE, MVT::v16i8, Custom);
492
493     setOperationAction(ISD::AND   , MVT::v4i32, Legal);
494     setOperationAction(ISD::OR    , MVT::v4i32, Legal);
495     setOperationAction(ISD::XOR   , MVT::v4i32, Legal);
496     setOperationAction(ISD::LOAD  , MVT::v4i32, Legal);
497     setOperationAction(ISD::SELECT, MVT::v4i32,
498                        Subtarget.useCRBits() ? Legal : Expand);
499     setOperationAction(ISD::STORE , MVT::v4i32, Legal);
500     setOperationAction(ISD::FP_TO_SINT, MVT::v4i32, Legal);
501     setOperationAction(ISD::FP_TO_UINT, MVT::v4i32, Legal);
502     setOperationAction(ISD::SINT_TO_FP, MVT::v4i32, Legal);
503     setOperationAction(ISD::UINT_TO_FP, MVT::v4i32, Legal);
504     setOperationAction(ISD::FFLOOR, MVT::v4f32, Legal);
505     setOperationAction(ISD::FCEIL, MVT::v4f32, Legal);
506     setOperationAction(ISD::FTRUNC, MVT::v4f32, Legal);
507     setOperationAction(ISD::FNEARBYINT, MVT::v4f32, Legal);
508
509     addRegisterClass(MVT::v4f32, &PPC::VRRCRegClass);
510     addRegisterClass(MVT::v4i32, &PPC::VRRCRegClass);
511     addRegisterClass(MVT::v8i16, &PPC::VRRCRegClass);
512     addRegisterClass(MVT::v16i8, &PPC::VRRCRegClass);
513
514     setOperationAction(ISD::MUL, MVT::v4f32, Legal);
515     setOperationAction(ISD::FMA, MVT::v4f32, Legal);
516
517     if (TM.Options.UnsafeFPMath || Subtarget.hasVSX()) {
518       setOperationAction(ISD::FDIV, MVT::v4f32, Legal);
519       setOperationAction(ISD::FSQRT, MVT::v4f32, Legal);
520     }
521
522     if (Subtarget.hasP8Altivec())
523       setOperationAction(ISD::MUL, MVT::v4i32, Legal);
524     else
525       setOperationAction(ISD::MUL, MVT::v4i32, Custom);
526
527     setOperationAction(ISD::MUL, MVT::v8i16, Custom);
528     setOperationAction(ISD::MUL, MVT::v16i8, Custom);
529
530     setOperationAction(ISD::SCALAR_TO_VECTOR, MVT::v4f32, Custom);
531     setOperationAction(ISD::SCALAR_TO_VECTOR, MVT::v4i32, Custom);
532
533     setOperationAction(ISD::BUILD_VECTOR, MVT::v16i8, Custom);
534     setOperationAction(ISD::BUILD_VECTOR, MVT::v8i16, Custom);
535     setOperationAction(ISD::BUILD_VECTOR, MVT::v4i32, Custom);
536     setOperationAction(ISD::BUILD_VECTOR, MVT::v4f32, Custom);
537
538     // Altivec does not contain unordered floating-point compare instructions
539     setCondCodeAction(ISD::SETUO, MVT::v4f32, Expand);
540     setCondCodeAction(ISD::SETUEQ, MVT::v4f32, Expand);
541     setCondCodeAction(ISD::SETO,   MVT::v4f32, Expand);
542     setCondCodeAction(ISD::SETONE, MVT::v4f32, Expand);
543
544     if (Subtarget.hasVSX()) {
545       setOperationAction(ISD::SCALAR_TO_VECTOR, MVT::v2f64, Legal);
546       setOperationAction(ISD::EXTRACT_VECTOR_ELT, MVT::v2f64, Legal);
547       if (Subtarget.hasP8Vector()) {
548         setOperationAction(ISD::SCALAR_TO_VECTOR, MVT::v4f32, Legal);
549         setOperationAction(ISD::EXTRACT_VECTOR_ELT, MVT::v4f32, Legal);
550       }
551       if (Subtarget.hasDirectMove()) {
552         setOperationAction(ISD::SCALAR_TO_VECTOR, MVT::v16i8, Legal);
553         setOperationAction(ISD::SCALAR_TO_VECTOR, MVT::v8i16, Legal);
554         setOperationAction(ISD::SCALAR_TO_VECTOR, MVT::v4i32, Legal);
555         setOperationAction(ISD::SCALAR_TO_VECTOR, MVT::v2i64, Legal);
556         setOperationAction(ISD::EXTRACT_VECTOR_ELT, MVT::v16i8, Legal);
557         setOperationAction(ISD::EXTRACT_VECTOR_ELT, MVT::v8i16, Legal);
558         setOperationAction(ISD::EXTRACT_VECTOR_ELT, MVT::v4i32, Legal);
559         setOperationAction(ISD::EXTRACT_VECTOR_ELT, MVT::v2i64, Legal);
560       }
561       setOperationAction(ISD::EXTRACT_VECTOR_ELT, MVT::v2f64, Legal);
562
563       setOperationAction(ISD::FFLOOR, MVT::v2f64, Legal);
564       setOperationAction(ISD::FCEIL, MVT::v2f64, Legal);
565       setOperationAction(ISD::FTRUNC, MVT::v2f64, Legal);
566       setOperationAction(ISD::FNEARBYINT, MVT::v2f64, Legal);
567       setOperationAction(ISD::FROUND, MVT::v2f64, Legal);
568
569       setOperationAction(ISD::FROUND, MVT::v4f32, Legal);
570
571       setOperationAction(ISD::MUL, MVT::v2f64, Legal);
572       setOperationAction(ISD::FMA, MVT::v2f64, Legal);
573
574       setOperationAction(ISD::FDIV, MVT::v2f64, Legal);
575       setOperationAction(ISD::FSQRT, MVT::v2f64, Legal);
576
577       setOperationAction(ISD::VSELECT, MVT::v16i8, Legal);
578       setOperationAction(ISD::VSELECT, MVT::v8i16, Legal);
579       setOperationAction(ISD::VSELECT, MVT::v4i32, Legal);
580       setOperationAction(ISD::VSELECT, MVT::v4f32, Legal);
581       setOperationAction(ISD::VSELECT, MVT::v2f64, Legal);
582
583       // Share the Altivec comparison restrictions.
584       setCondCodeAction(ISD::SETUO, MVT::v2f64, Expand);
585       setCondCodeAction(ISD::SETUEQ, MVT::v2f64, Expand);
586       setCondCodeAction(ISD::SETO,   MVT::v2f64, Expand);
587       setCondCodeAction(ISD::SETONE, MVT::v2f64, Expand);
588
589       setOperationAction(ISD::LOAD, MVT::v2f64, Legal);
590       setOperationAction(ISD::STORE, MVT::v2f64, Legal);
591
592       setOperationAction(ISD::VECTOR_SHUFFLE, MVT::v2f64, Legal);
593
594       if (Subtarget.hasP8Vector())
595         addRegisterClass(MVT::f32, &PPC::VSSRCRegClass);
596
597       addRegisterClass(MVT::f64, &PPC::VSFRCRegClass);
598
599       addRegisterClass(MVT::v4i32, &PPC::VSRCRegClass);
600       addRegisterClass(MVT::v4f32, &PPC::VSRCRegClass);
601       addRegisterClass(MVT::v2f64, &PPC::VSRCRegClass);
602
603       if (Subtarget.hasP8Altivec()) {
604         setOperationAction(ISD::SHL, MVT::v2i64, Legal);
605         setOperationAction(ISD::SRA, MVT::v2i64, Legal);
606         setOperationAction(ISD::SRL, MVT::v2i64, Legal);
607
608         setOperationAction(ISD::SETCC, MVT::v2i64, Legal);
609       }
610       else {
611         setOperationAction(ISD::SHL, MVT::v2i64, Expand);
612         setOperationAction(ISD::SRA, MVT::v2i64, Expand);
613         setOperationAction(ISD::SRL, MVT::v2i64, Expand);
614
615         setOperationAction(ISD::SETCC, MVT::v2i64, Custom);
616
617         // VSX v2i64 only supports non-arithmetic operations.
618         setOperationAction(ISD::ADD, MVT::v2i64, Expand);
619         setOperationAction(ISD::SUB, MVT::v2i64, Expand);
620       }
621
622       setOperationAction(ISD::LOAD, MVT::v2i64, Promote);
623       AddPromotedToType (ISD::LOAD, MVT::v2i64, MVT::v2f64);
624       setOperationAction(ISD::STORE, MVT::v2i64, Promote);
625       AddPromotedToType (ISD::STORE, MVT::v2i64, MVT::v2f64);
626
627       setOperationAction(ISD::VECTOR_SHUFFLE, MVT::v2i64, Legal);
628
629       setOperationAction(ISD::SINT_TO_FP, MVT::v2i64, Legal);
630       setOperationAction(ISD::UINT_TO_FP, MVT::v2i64, Legal);
631       setOperationAction(ISD::FP_TO_SINT, MVT::v2i64, Legal);
632       setOperationAction(ISD::FP_TO_UINT, MVT::v2i64, Legal);
633
634       // Vector operation legalization checks the result type of
635       // SIGN_EXTEND_INREG, overall legalization checks the inner type.
636       setOperationAction(ISD::SIGN_EXTEND_INREG, MVT::v2i64, Legal);
637       setOperationAction(ISD::SIGN_EXTEND_INREG, MVT::v2i32, Legal);
638       setOperationAction(ISD::SIGN_EXTEND_INREG, MVT::v2i16, Custom);
639       setOperationAction(ISD::SIGN_EXTEND_INREG, MVT::v2i8, Custom);
640
641       addRegisterClass(MVT::v2i64, &PPC::VSRCRegClass);
642     }
643
644     if (Subtarget.hasP8Altivec()) {
645       addRegisterClass(MVT::v2i64, &PPC::VRRCRegClass);
646       addRegisterClass(MVT::v1i128, &PPC::VRRCRegClass);
647     }
648   }
649
650   if (Subtarget.hasQPX()) {
651     setOperationAction(ISD::FADD, MVT::v4f64, Legal);
652     setOperationAction(ISD::FSUB, MVT::v4f64, Legal);
653     setOperationAction(ISD::FMUL, MVT::v4f64, Legal);
654     setOperationAction(ISD::FREM, MVT::v4f64, Expand);
655
656     setOperationAction(ISD::FCOPYSIGN, MVT::v4f64, Legal);
657     setOperationAction(ISD::FGETSIGN, MVT::v4f64, Expand);
658
659     setOperationAction(ISD::LOAD  , MVT::v4f64, Custom);
660     setOperationAction(ISD::STORE , MVT::v4f64, Custom);
661
662     setTruncStoreAction(MVT::v4f64, MVT::v4f32, Custom);
663     setLoadExtAction(ISD::EXTLOAD, MVT::v4f64, MVT::v4f32, Custom);
664
665     if (!Subtarget.useCRBits())
666       setOperationAction(ISD::SELECT, MVT::v4f64, Expand);
667     setOperationAction(ISD::VSELECT, MVT::v4f64, Legal);
668
669     setOperationAction(ISD::EXTRACT_VECTOR_ELT , MVT::v4f64, Legal);
670     setOperationAction(ISD::INSERT_VECTOR_ELT , MVT::v4f64, Expand);
671     setOperationAction(ISD::CONCAT_VECTORS , MVT::v4f64, Expand);
672     setOperationAction(ISD::EXTRACT_SUBVECTOR , MVT::v4f64, Expand);
673     setOperationAction(ISD::VECTOR_SHUFFLE , MVT::v4f64, Custom);
674     setOperationAction(ISD::SCALAR_TO_VECTOR, MVT::v4f64, Legal);
675     setOperationAction(ISD::BUILD_VECTOR, MVT::v4f64, Custom);
676
677     setOperationAction(ISD::FP_TO_SINT , MVT::v4f64, Legal);
678     setOperationAction(ISD::FP_TO_UINT , MVT::v4f64, Expand);
679
680     setOperationAction(ISD::FP_ROUND , MVT::v4f32, Legal);
681     setOperationAction(ISD::FP_ROUND_INREG , MVT::v4f32, Expand);
682     setOperationAction(ISD::FP_EXTEND, MVT::v4f64, Legal);
683
684     setOperationAction(ISD::FNEG , MVT::v4f64, Legal);
685     setOperationAction(ISD::FABS , MVT::v4f64, Legal);
686     setOperationAction(ISD::FSIN , MVT::v4f64, Expand);
687     setOperationAction(ISD::FCOS , MVT::v4f64, Expand);
688     setOperationAction(ISD::FPOWI , MVT::v4f64, Expand);
689     setOperationAction(ISD::FPOW , MVT::v4f64, Expand);
690     setOperationAction(ISD::FLOG , MVT::v4f64, Expand);
691     setOperationAction(ISD::FLOG2 , MVT::v4f64, Expand);
692     setOperationAction(ISD::FLOG10 , MVT::v4f64, Expand);
693     setOperationAction(ISD::FEXP , MVT::v4f64, Expand);
694     setOperationAction(ISD::FEXP2 , MVT::v4f64, Expand);
695
696     setOperationAction(ISD::FMINNUM, MVT::v4f64, Legal);
697     setOperationAction(ISD::FMAXNUM, MVT::v4f64, Legal);
698
699     setIndexedLoadAction(ISD::PRE_INC, MVT::v4f64, Legal);
700     setIndexedStoreAction(ISD::PRE_INC, MVT::v4f64, Legal);
701
702     addRegisterClass(MVT::v4f64, &PPC::QFRCRegClass);
703
704     setOperationAction(ISD::FADD, MVT::v4f32, Legal);
705     setOperationAction(ISD::FSUB, MVT::v4f32, Legal);
706     setOperationAction(ISD::FMUL, MVT::v4f32, Legal);
707     setOperationAction(ISD::FREM, MVT::v4f32, Expand);
708
709     setOperationAction(ISD::FCOPYSIGN, MVT::v4f32, Legal);
710     setOperationAction(ISD::FGETSIGN, MVT::v4f32, Expand);
711
712     setOperationAction(ISD::LOAD  , MVT::v4f32, Custom);
713     setOperationAction(ISD::STORE , MVT::v4f32, Custom);
714
715     if (!Subtarget.useCRBits())
716       setOperationAction(ISD::SELECT, MVT::v4f32, Expand);
717     setOperationAction(ISD::VSELECT, MVT::v4f32, Legal);
718
719     setOperationAction(ISD::EXTRACT_VECTOR_ELT , MVT::v4f32, Legal);
720     setOperationAction(ISD::INSERT_VECTOR_ELT , MVT::v4f32, Expand);
721     setOperationAction(ISD::CONCAT_VECTORS , MVT::v4f32, Expand);
722     setOperationAction(ISD::EXTRACT_SUBVECTOR , MVT::v4f32, Expand);
723     setOperationAction(ISD::VECTOR_SHUFFLE , MVT::v4f32, Custom);
724     setOperationAction(ISD::SCALAR_TO_VECTOR, MVT::v4f32, Legal);
725     setOperationAction(ISD::BUILD_VECTOR, MVT::v4f32, Custom);
726
727     setOperationAction(ISD::FP_TO_SINT , MVT::v4f32, Legal);
728     setOperationAction(ISD::FP_TO_UINT , MVT::v4f32, Expand);
729
730     setOperationAction(ISD::FNEG , MVT::v4f32, Legal);
731     setOperationAction(ISD::FABS , MVT::v4f32, Legal);
732     setOperationAction(ISD::FSIN , MVT::v4f32, Expand);
733     setOperationAction(ISD::FCOS , MVT::v4f32, Expand);
734     setOperationAction(ISD::FPOWI , MVT::v4f32, Expand);
735     setOperationAction(ISD::FPOW , MVT::v4f32, Expand);
736     setOperationAction(ISD::FLOG , MVT::v4f32, Expand);
737     setOperationAction(ISD::FLOG2 , MVT::v4f32, Expand);
738     setOperationAction(ISD::FLOG10 , MVT::v4f32, Expand);
739     setOperationAction(ISD::FEXP , MVT::v4f32, Expand);
740     setOperationAction(ISD::FEXP2 , MVT::v4f32, Expand);
741
742     setOperationAction(ISD::FMINNUM, MVT::v4f32, Legal);
743     setOperationAction(ISD::FMAXNUM, MVT::v4f32, Legal);
744
745     setIndexedLoadAction(ISD::PRE_INC, MVT::v4f32, Legal);
746     setIndexedStoreAction(ISD::PRE_INC, MVT::v4f32, Legal);
747
748     addRegisterClass(MVT::v4f32, &PPC::QSRCRegClass);
749
750     setOperationAction(ISD::AND , MVT::v4i1, Legal);
751     setOperationAction(ISD::OR , MVT::v4i1, Legal);
752     setOperationAction(ISD::XOR , MVT::v4i1, Legal);
753
754     if (!Subtarget.useCRBits())
755       setOperationAction(ISD::SELECT, MVT::v4i1, Expand);
756     setOperationAction(ISD::VSELECT, MVT::v4i1, Legal);
757
758     setOperationAction(ISD::LOAD  , MVT::v4i1, Custom);
759     setOperationAction(ISD::STORE , MVT::v4i1, Custom);
760
761     setOperationAction(ISD::EXTRACT_VECTOR_ELT , MVT::v4i1, Custom);
762     setOperationAction(ISD::INSERT_VECTOR_ELT , MVT::v4i1, Expand);
763     setOperationAction(ISD::CONCAT_VECTORS , MVT::v4i1, Expand);
764     setOperationAction(ISD::EXTRACT_SUBVECTOR , MVT::v4i1, Expand);
765     setOperationAction(ISD::VECTOR_SHUFFLE , MVT::v4i1, Custom);
766     setOperationAction(ISD::SCALAR_TO_VECTOR, MVT::v4i1, Expand);
767     setOperationAction(ISD::BUILD_VECTOR, MVT::v4i1, Custom);
768
769     setOperationAction(ISD::SINT_TO_FP, MVT::v4i1, Custom);
770     setOperationAction(ISD::UINT_TO_FP, MVT::v4i1, Custom);
771
772     addRegisterClass(MVT::v4i1, &PPC::QBRCRegClass);
773
774     setOperationAction(ISD::FFLOOR, MVT::v4f64, Legal);
775     setOperationAction(ISD::FCEIL,  MVT::v4f64, Legal);
776     setOperationAction(ISD::FTRUNC, MVT::v4f64, Legal);
777     setOperationAction(ISD::FROUND, MVT::v4f64, Legal);
778
779     setOperationAction(ISD::FFLOOR, MVT::v4f32, Legal);
780     setOperationAction(ISD::FCEIL,  MVT::v4f32, Legal);
781     setOperationAction(ISD::FTRUNC, MVT::v4f32, Legal);
782     setOperationAction(ISD::FROUND, MVT::v4f32, Legal);
783
784     setOperationAction(ISD::FNEARBYINT, MVT::v4f64, Expand);
785     setOperationAction(ISD::FNEARBYINT, MVT::v4f32, Expand);
786
787     // These need to set FE_INEXACT, and so cannot be vectorized here.
788     setOperationAction(ISD::FRINT, MVT::v4f64, Expand);
789     setOperationAction(ISD::FRINT, MVT::v4f32, Expand);
790
791     if (TM.Options.UnsafeFPMath) {
792       setOperationAction(ISD::FDIV, MVT::v4f64, Legal);
793       setOperationAction(ISD::FSQRT, MVT::v4f64, Legal);
794
795       setOperationAction(ISD::FDIV, MVT::v4f32, Legal);
796       setOperationAction(ISD::FSQRT, MVT::v4f32, Legal);
797     } else {
798       setOperationAction(ISD::FDIV, MVT::v4f64, Expand);
799       setOperationAction(ISD::FSQRT, MVT::v4f64, Expand);
800
801       setOperationAction(ISD::FDIV, MVT::v4f32, Expand);
802       setOperationAction(ISD::FSQRT, MVT::v4f32, Expand);
803     }
804   }
805
806   if (Subtarget.has64BitSupport())
807     setOperationAction(ISD::PREFETCH, MVT::Other, Legal);
808
809   setOperationAction(ISD::READCYCLECOUNTER, MVT::i64, isPPC64 ? Legal : Custom);
810
811   if (!isPPC64) {
812     setOperationAction(ISD::ATOMIC_LOAD,  MVT::i64, Expand);
813     setOperationAction(ISD::ATOMIC_STORE, MVT::i64, Expand);
814   }
815
816   setBooleanContents(ZeroOrOneBooleanContent);
817
818   if (Subtarget.hasAltivec()) {
819     // Altivec instructions set fields to all zeros or all ones.
820     setBooleanVectorContents(ZeroOrNegativeOneBooleanContent);
821   }
822
823   if (!isPPC64) {
824     // These libcalls are not available in 32-bit.
825     setLibcallName(RTLIB::SHL_I128, nullptr);
826     setLibcallName(RTLIB::SRL_I128, nullptr);
827     setLibcallName(RTLIB::SRA_I128, nullptr);
828   }
829
830   setStackPointerRegisterToSaveRestore(isPPC64 ? PPC::X1 : PPC::R1);
831
832   // We have target-specific dag combine patterns for the following nodes:
833   setTargetDAGCombine(ISD::SINT_TO_FP);
834   if (Subtarget.hasFPCVT())
835     setTargetDAGCombine(ISD::UINT_TO_FP);
836   setTargetDAGCombine(ISD::LOAD);
837   setTargetDAGCombine(ISD::STORE);
838   setTargetDAGCombine(ISD::BR_CC);
839   if (Subtarget.useCRBits())
840     setTargetDAGCombine(ISD::BRCOND);
841   setTargetDAGCombine(ISD::BSWAP);
842   setTargetDAGCombine(ISD::INTRINSIC_WO_CHAIN);
843   setTargetDAGCombine(ISD::INTRINSIC_W_CHAIN);
844   setTargetDAGCombine(ISD::INTRINSIC_VOID);
845
846   setTargetDAGCombine(ISD::SIGN_EXTEND);
847   setTargetDAGCombine(ISD::ZERO_EXTEND);
848   setTargetDAGCombine(ISD::ANY_EXTEND);
849
850   if (Subtarget.useCRBits()) {
851     setTargetDAGCombine(ISD::TRUNCATE);
852     setTargetDAGCombine(ISD::SETCC);
853     setTargetDAGCombine(ISD::SELECT_CC);
854   }
855
856   // Use reciprocal estimates.
857   if (TM.Options.UnsafeFPMath) {
858     setTargetDAGCombine(ISD::FDIV);
859     setTargetDAGCombine(ISD::FSQRT);
860   }
861
862   // Darwin long double math library functions have $LDBL128 appended.
863   if (Subtarget.isDarwin()) {
864     setLibcallName(RTLIB::COS_PPCF128, "cosl$LDBL128");
865     setLibcallName(RTLIB::POW_PPCF128, "powl$LDBL128");
866     setLibcallName(RTLIB::REM_PPCF128, "fmodl$LDBL128");
867     setLibcallName(RTLIB::SIN_PPCF128, "sinl$LDBL128");
868     setLibcallName(RTLIB::SQRT_PPCF128, "sqrtl$LDBL128");
869     setLibcallName(RTLIB::LOG_PPCF128, "logl$LDBL128");
870     setLibcallName(RTLIB::LOG2_PPCF128, "log2l$LDBL128");
871     setLibcallName(RTLIB::LOG10_PPCF128, "log10l$LDBL128");
872     setLibcallName(RTLIB::EXP_PPCF128, "expl$LDBL128");
873     setLibcallName(RTLIB::EXP2_PPCF128, "exp2l$LDBL128");
874   }
875
876   // With 32 condition bits, we don't need to sink (and duplicate) compares
877   // aggressively in CodeGenPrep.
878   if (Subtarget.useCRBits()) {
879     setHasMultipleConditionRegisters();
880     setJumpIsExpensive();
881   }
882
883   setMinFunctionAlignment(2);
884   if (Subtarget.isDarwin())
885     setPrefFunctionAlignment(4);
886
887   switch (Subtarget.getDarwinDirective()) {
888   default: break;
889   case PPC::DIR_970:
890   case PPC::DIR_A2:
891   case PPC::DIR_E500mc:
892   case PPC::DIR_E5500:
893   case PPC::DIR_PWR4:
894   case PPC::DIR_PWR5:
895   case PPC::DIR_PWR5X:
896   case PPC::DIR_PWR6:
897   case PPC::DIR_PWR6X:
898   case PPC::DIR_PWR7:
899   case PPC::DIR_PWR8:
900     setPrefFunctionAlignment(4);
901     setPrefLoopAlignment(4);
902     break;
903   }
904
905   setInsertFencesForAtomic(true);
906
907   if (Subtarget.enableMachineScheduler())
908     setSchedulingPreference(Sched::Source);
909   else
910     setSchedulingPreference(Sched::Hybrid);
911
912   computeRegisterProperties(STI.getRegisterInfo());
913
914   // The Freescale cores do better with aggressive inlining of memcpy and
915   // friends. GCC uses same threshold of 128 bytes (= 32 word stores).
916   if (Subtarget.getDarwinDirective() == PPC::DIR_E500mc ||
917       Subtarget.getDarwinDirective() == PPC::DIR_E5500) {
918     MaxStoresPerMemset = 32;
919     MaxStoresPerMemsetOptSize = 16;
920     MaxStoresPerMemcpy = 32;
921     MaxStoresPerMemcpyOptSize = 8;
922     MaxStoresPerMemmove = 32;
923     MaxStoresPerMemmoveOptSize = 8;
924   } else if (Subtarget.getDarwinDirective() == PPC::DIR_A2) {
925     // The A2 also benefits from (very) aggressive inlining of memcpy and
926     // friends. The overhead of a the function call, even when warm, can be
927     // over one hundred cycles.
928     MaxStoresPerMemset = 128;
929     MaxStoresPerMemcpy = 128;
930     MaxStoresPerMemmove = 128;
931   }
932 }
933
934 /// getMaxByValAlign - Helper for getByValTypeAlignment to determine
935 /// the desired ByVal argument alignment.
936 static void getMaxByValAlign(Type *Ty, unsigned &MaxAlign,
937                              unsigned MaxMaxAlign) {
938   if (MaxAlign == MaxMaxAlign)
939     return;
940   if (VectorType *VTy = dyn_cast<VectorType>(Ty)) {
941     if (MaxMaxAlign >= 32 && VTy->getBitWidth() >= 256)
942       MaxAlign = 32;
943     else if (VTy->getBitWidth() >= 128 && MaxAlign < 16)
944       MaxAlign = 16;
945   } else if (ArrayType *ATy = dyn_cast<ArrayType>(Ty)) {
946     unsigned EltAlign = 0;
947     getMaxByValAlign(ATy->getElementType(), EltAlign, MaxMaxAlign);
948     if (EltAlign > MaxAlign)
949       MaxAlign = EltAlign;
950   } else if (StructType *STy = dyn_cast<StructType>(Ty)) {
951     for (auto *EltTy : STy->elements()) {
952       unsigned EltAlign = 0;
953       getMaxByValAlign(EltTy, EltAlign, MaxMaxAlign);
954       if (EltAlign > MaxAlign)
955         MaxAlign = EltAlign;
956       if (MaxAlign == MaxMaxAlign)
957         break;
958     }
959   }
960 }
961
962 /// getByValTypeAlignment - Return the desired alignment for ByVal aggregate
963 /// function arguments in the caller parameter area.
964 unsigned PPCTargetLowering::getByValTypeAlignment(Type *Ty,
965                                                   const DataLayout &DL) const {
966   // Darwin passes everything on 4 byte boundary.
967   if (Subtarget.isDarwin())
968     return 4;
969
970   // 16byte and wider vectors are passed on 16byte boundary.
971   // The rest is 8 on PPC64 and 4 on PPC32 boundary.
972   unsigned Align = Subtarget.isPPC64() ? 8 : 4;
973   if (Subtarget.hasAltivec() || Subtarget.hasQPX())
974     getMaxByValAlign(Ty, Align, Subtarget.hasQPX() ? 32 : 16);
975   return Align;
976 }
977
978 const char *PPCTargetLowering::getTargetNodeName(unsigned Opcode) const {
979   switch ((PPCISD::NodeType)Opcode) {
980   case PPCISD::FIRST_NUMBER:    break;
981   case PPCISD::FSEL:            return "PPCISD::FSEL";
982   case PPCISD::FCFID:           return "PPCISD::FCFID";
983   case PPCISD::FCFIDU:          return "PPCISD::FCFIDU";
984   case PPCISD::FCFIDS:          return "PPCISD::FCFIDS";
985   case PPCISD::FCFIDUS:         return "PPCISD::FCFIDUS";
986   case PPCISD::FCTIDZ:          return "PPCISD::FCTIDZ";
987   case PPCISD::FCTIWZ:          return "PPCISD::FCTIWZ";
988   case PPCISD::FCTIDUZ:         return "PPCISD::FCTIDUZ";
989   case PPCISD::FCTIWUZ:         return "PPCISD::FCTIWUZ";
990   case PPCISD::FRE:             return "PPCISD::FRE";
991   case PPCISD::FRSQRTE:         return "PPCISD::FRSQRTE";
992   case PPCISD::STFIWX:          return "PPCISD::STFIWX";
993   case PPCISD::VMADDFP:         return "PPCISD::VMADDFP";
994   case PPCISD::VNMSUBFP:        return "PPCISD::VNMSUBFP";
995   case PPCISD::VPERM:           return "PPCISD::VPERM";
996   case PPCISD::CMPB:            return "PPCISD::CMPB";
997   case PPCISD::Hi:              return "PPCISD::Hi";
998   case PPCISD::Lo:              return "PPCISD::Lo";
999   case PPCISD::TOC_ENTRY:       return "PPCISD::TOC_ENTRY";
1000   case PPCISD::DYNALLOC:        return "PPCISD::DYNALLOC";
1001   case PPCISD::GlobalBaseReg:   return "PPCISD::GlobalBaseReg";
1002   case PPCISD::SRL:             return "PPCISD::SRL";
1003   case PPCISD::SRA:             return "PPCISD::SRA";
1004   case PPCISD::SHL:             return "PPCISD::SHL";
1005   case PPCISD::SRA_ADDZE:       return "PPCISD::SRA_ADDZE";
1006   case PPCISD::CALL:            return "PPCISD::CALL";
1007   case PPCISD::CALL_NOP:        return "PPCISD::CALL_NOP";
1008   case PPCISD::MTCTR:           return "PPCISD::MTCTR";
1009   case PPCISD::BCTRL:           return "PPCISD::BCTRL";
1010   case PPCISD::BCTRL_LOAD_TOC:  return "PPCISD::BCTRL_LOAD_TOC";
1011   case PPCISD::RET_FLAG:        return "PPCISD::RET_FLAG";
1012   case PPCISD::READ_TIME_BASE:  return "PPCISD::READ_TIME_BASE";
1013   case PPCISD::EH_SJLJ_SETJMP:  return "PPCISD::EH_SJLJ_SETJMP";
1014   case PPCISD::EH_SJLJ_LONGJMP: return "PPCISD::EH_SJLJ_LONGJMP";
1015   case PPCISD::MFOCRF:          return "PPCISD::MFOCRF";
1016   case PPCISD::MFVSR:           return "PPCISD::MFVSR";
1017   case PPCISD::MTVSRA:          return "PPCISD::MTVSRA";
1018   case PPCISD::MTVSRZ:          return "PPCISD::MTVSRZ";
1019   case PPCISD::ANDIo_1_EQ_BIT:  return "PPCISD::ANDIo_1_EQ_BIT";
1020   case PPCISD::ANDIo_1_GT_BIT:  return "PPCISD::ANDIo_1_GT_BIT";
1021   case PPCISD::VCMP:            return "PPCISD::VCMP";
1022   case PPCISD::VCMPo:           return "PPCISD::VCMPo";
1023   case PPCISD::LBRX:            return "PPCISD::LBRX";
1024   case PPCISD::STBRX:           return "PPCISD::STBRX";
1025   case PPCISD::LFIWAX:          return "PPCISD::LFIWAX";
1026   case PPCISD::LFIWZX:          return "PPCISD::LFIWZX";
1027   case PPCISD::LXVD2X:          return "PPCISD::LXVD2X";
1028   case PPCISD::STXVD2X:         return "PPCISD::STXVD2X";
1029   case PPCISD::COND_BRANCH:     return "PPCISD::COND_BRANCH";
1030   case PPCISD::BDNZ:            return "PPCISD::BDNZ";
1031   case PPCISD::BDZ:             return "PPCISD::BDZ";
1032   case PPCISD::MFFS:            return "PPCISD::MFFS";
1033   case PPCISD::FADDRTZ:         return "PPCISD::FADDRTZ";
1034   case PPCISD::TC_RETURN:       return "PPCISD::TC_RETURN";
1035   case PPCISD::CR6SET:          return "PPCISD::CR6SET";
1036   case PPCISD::CR6UNSET:        return "PPCISD::CR6UNSET";
1037   case PPCISD::PPC32_GOT:       return "PPCISD::PPC32_GOT";
1038   case PPCISD::PPC32_PICGOT:    return "PPCISD::PPC32_PICGOT";
1039   case PPCISD::ADDIS_GOT_TPREL_HA: return "PPCISD::ADDIS_GOT_TPREL_HA";
1040   case PPCISD::LD_GOT_TPREL_L:  return "PPCISD::LD_GOT_TPREL_L";
1041   case PPCISD::ADD_TLS:         return "PPCISD::ADD_TLS";
1042   case PPCISD::ADDIS_TLSGD_HA:  return "PPCISD::ADDIS_TLSGD_HA";
1043   case PPCISD::ADDI_TLSGD_L:    return "PPCISD::ADDI_TLSGD_L";
1044   case PPCISD::GET_TLS_ADDR:    return "PPCISD::GET_TLS_ADDR";
1045   case PPCISD::ADDI_TLSGD_L_ADDR: return "PPCISD::ADDI_TLSGD_L_ADDR";
1046   case PPCISD::ADDIS_TLSLD_HA:  return "PPCISD::ADDIS_TLSLD_HA";
1047   case PPCISD::ADDI_TLSLD_L:    return "PPCISD::ADDI_TLSLD_L";
1048   case PPCISD::GET_TLSLD_ADDR:  return "PPCISD::GET_TLSLD_ADDR";
1049   case PPCISD::ADDI_TLSLD_L_ADDR: return "PPCISD::ADDI_TLSLD_L_ADDR";
1050   case PPCISD::ADDIS_DTPREL_HA: return "PPCISD::ADDIS_DTPREL_HA";
1051   case PPCISD::ADDI_DTPREL_L:   return "PPCISD::ADDI_DTPREL_L";
1052   case PPCISD::VADD_SPLAT:      return "PPCISD::VADD_SPLAT";
1053   case PPCISD::SC:              return "PPCISD::SC";
1054   case PPCISD::CLRBHRB:         return "PPCISD::CLRBHRB";
1055   case PPCISD::MFBHRBE:         return "PPCISD::MFBHRBE";
1056   case PPCISD::RFEBB:           return "PPCISD::RFEBB";
1057   case PPCISD::XXSWAPD:         return "PPCISD::XXSWAPD";
1058   case PPCISD::QVFPERM:         return "PPCISD::QVFPERM";
1059   case PPCISD::QVGPCI:          return "PPCISD::QVGPCI";
1060   case PPCISD::QVALIGNI:        return "PPCISD::QVALIGNI";
1061   case PPCISD::QVESPLATI:       return "PPCISD::QVESPLATI";
1062   case PPCISD::QBFLT:           return "PPCISD::QBFLT";
1063   case PPCISD::QVLFSb:          return "PPCISD::QVLFSb";
1064   }
1065   return nullptr;
1066 }
1067
1068 EVT PPCTargetLowering::getSetCCResultType(const DataLayout &DL, LLVMContext &C,
1069                                           EVT VT) const {
1070   if (!VT.isVector())
1071     return Subtarget.useCRBits() ? MVT::i1 : MVT::i32;
1072
1073   if (Subtarget.hasQPX())
1074     return EVT::getVectorVT(C, MVT::i1, VT.getVectorNumElements());
1075
1076   return VT.changeVectorElementTypeToInteger();
1077 }
1078
1079 bool PPCTargetLowering::enableAggressiveFMAFusion(EVT VT) const {
1080   assert(VT.isFloatingPoint() && "Non-floating-point FMA?");
1081   return true;
1082 }
1083
1084 //===----------------------------------------------------------------------===//
1085 // Node matching predicates, for use by the tblgen matching code.
1086 //===----------------------------------------------------------------------===//
1087
1088 /// isFloatingPointZero - Return true if this is 0.0 or -0.0.
1089 static bool isFloatingPointZero(SDValue Op) {
1090   if (ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(Op))
1091     return CFP->getValueAPF().isZero();
1092   else if (ISD::isEXTLoad(Op.getNode()) || ISD::isNON_EXTLoad(Op.getNode())) {
1093     // Maybe this has already been legalized into the constant pool?
1094     if (ConstantPoolSDNode *CP = dyn_cast<ConstantPoolSDNode>(Op.getOperand(1)))
1095       if (const ConstantFP *CFP = dyn_cast<ConstantFP>(CP->getConstVal()))
1096         return CFP->getValueAPF().isZero();
1097   }
1098   return false;
1099 }
1100
1101 /// isConstantOrUndef - Op is either an undef node or a ConstantSDNode.  Return
1102 /// true if Op is undef or if it matches the specified value.
1103 static bool isConstantOrUndef(int Op, int Val) {
1104   return Op < 0 || Op == Val;
1105 }
1106
1107 /// isVPKUHUMShuffleMask - Return true if this is the shuffle mask for a
1108 /// VPKUHUM instruction.
1109 /// The ShuffleKind distinguishes between big-endian operations with
1110 /// two different inputs (0), either-endian operations with two identical
1111 /// inputs (1), and little-endian operations with two different inputs (2).
1112 /// For the latter, the input operands are swapped (see PPCInstrAltivec.td).
1113 bool PPC::isVPKUHUMShuffleMask(ShuffleVectorSDNode *N, unsigned ShuffleKind,
1114                                SelectionDAG &DAG) {
1115   bool IsLE = DAG.getDataLayout().isLittleEndian();
1116   if (ShuffleKind == 0) {
1117     if (IsLE)
1118       return false;
1119     for (unsigned i = 0; i != 16; ++i)
1120       if (!isConstantOrUndef(N->getMaskElt(i), i*2+1))
1121         return false;
1122   } else if (ShuffleKind == 2) {
1123     if (!IsLE)
1124       return false;
1125     for (unsigned i = 0; i != 16; ++i)
1126       if (!isConstantOrUndef(N->getMaskElt(i), i*2))
1127         return false;
1128   } else if (ShuffleKind == 1) {
1129     unsigned j = IsLE ? 0 : 1;
1130     for (unsigned i = 0; i != 8; ++i)
1131       if (!isConstantOrUndef(N->getMaskElt(i),    i*2+j) ||
1132           !isConstantOrUndef(N->getMaskElt(i+8),  i*2+j))
1133         return false;
1134   }
1135   return true;
1136 }
1137
1138 /// isVPKUWUMShuffleMask - Return true if this is the shuffle mask for a
1139 /// VPKUWUM instruction.
1140 /// The ShuffleKind distinguishes between big-endian operations with
1141 /// two different inputs (0), either-endian operations with two identical
1142 /// inputs (1), and little-endian operations with two different inputs (2).
1143 /// For the latter, the input operands are swapped (see PPCInstrAltivec.td).
1144 bool PPC::isVPKUWUMShuffleMask(ShuffleVectorSDNode *N, unsigned ShuffleKind,
1145                                SelectionDAG &DAG) {
1146   bool IsLE = DAG.getDataLayout().isLittleEndian();
1147   if (ShuffleKind == 0) {
1148     if (IsLE)
1149       return false;
1150     for (unsigned i = 0; i != 16; i += 2)
1151       if (!isConstantOrUndef(N->getMaskElt(i  ),  i*2+2) ||
1152           !isConstantOrUndef(N->getMaskElt(i+1),  i*2+3))
1153         return false;
1154   } else if (ShuffleKind == 2) {
1155     if (!IsLE)
1156       return false;
1157     for (unsigned i = 0; i != 16; i += 2)
1158       if (!isConstantOrUndef(N->getMaskElt(i  ),  i*2) ||
1159           !isConstantOrUndef(N->getMaskElt(i+1),  i*2+1))
1160         return false;
1161   } else if (ShuffleKind == 1) {
1162     unsigned j = IsLE ? 0 : 2;
1163     for (unsigned i = 0; i != 8; i += 2)
1164       if (!isConstantOrUndef(N->getMaskElt(i  ),  i*2+j)   ||
1165           !isConstantOrUndef(N->getMaskElt(i+1),  i*2+j+1) ||
1166           !isConstantOrUndef(N->getMaskElt(i+8),  i*2+j)   ||
1167           !isConstantOrUndef(N->getMaskElt(i+9),  i*2+j+1))
1168         return false;
1169   }
1170   return true;
1171 }
1172
1173 /// isVPKUDUMShuffleMask - Return true if this is the shuffle mask for a
1174 /// VPKUDUM instruction, AND the VPKUDUM instruction exists for the
1175 /// current subtarget.
1176 ///
1177 /// The ShuffleKind distinguishes between big-endian operations with
1178 /// two different inputs (0), either-endian operations with two identical
1179 /// inputs (1), and little-endian operations with two different inputs (2).
1180 /// For the latter, the input operands are swapped (see PPCInstrAltivec.td).
1181 bool PPC::isVPKUDUMShuffleMask(ShuffleVectorSDNode *N, unsigned ShuffleKind,
1182                                SelectionDAG &DAG) {
1183   const PPCSubtarget& Subtarget =
1184     static_cast<const PPCSubtarget&>(DAG.getSubtarget());
1185   if (!Subtarget.hasP8Vector())
1186     return false;
1187
1188   bool IsLE = DAG.getDataLayout().isLittleEndian();
1189   if (ShuffleKind == 0) {
1190     if (IsLE)
1191       return false;
1192     for (unsigned i = 0; i != 16; i += 4)
1193       if (!isConstantOrUndef(N->getMaskElt(i  ),  i*2+4) ||
1194           !isConstantOrUndef(N->getMaskElt(i+1),  i*2+5) ||
1195           !isConstantOrUndef(N->getMaskElt(i+2),  i*2+6) ||
1196           !isConstantOrUndef(N->getMaskElt(i+3),  i*2+7))
1197         return false;
1198   } else if (ShuffleKind == 2) {
1199     if (!IsLE)
1200       return false;
1201     for (unsigned i = 0; i != 16; i += 4)
1202       if (!isConstantOrUndef(N->getMaskElt(i  ),  i*2) ||
1203           !isConstantOrUndef(N->getMaskElt(i+1),  i*2+1) ||
1204           !isConstantOrUndef(N->getMaskElt(i+2),  i*2+2) ||
1205           !isConstantOrUndef(N->getMaskElt(i+3),  i*2+3))
1206         return false;
1207   } else if (ShuffleKind == 1) {
1208     unsigned j = IsLE ? 0 : 4;
1209     for (unsigned i = 0; i != 8; i += 4)
1210       if (!isConstantOrUndef(N->getMaskElt(i  ),  i*2+j)   ||
1211           !isConstantOrUndef(N->getMaskElt(i+1),  i*2+j+1) ||
1212           !isConstantOrUndef(N->getMaskElt(i+2),  i*2+j+2) ||
1213           !isConstantOrUndef(N->getMaskElt(i+3),  i*2+j+3) ||
1214           !isConstantOrUndef(N->getMaskElt(i+8),  i*2+j)   ||
1215           !isConstantOrUndef(N->getMaskElt(i+9),  i*2+j+1) ||
1216           !isConstantOrUndef(N->getMaskElt(i+10), i*2+j+2) ||
1217           !isConstantOrUndef(N->getMaskElt(i+11), i*2+j+3))
1218         return false;
1219   }
1220   return true;
1221 }
1222
1223 /// isVMerge - Common function, used to match vmrg* shuffles.
1224 ///
1225 static bool isVMerge(ShuffleVectorSDNode *N, unsigned UnitSize,
1226                      unsigned LHSStart, unsigned RHSStart) {
1227   if (N->getValueType(0) != MVT::v16i8)
1228     return false;
1229   assert((UnitSize == 1 || UnitSize == 2 || UnitSize == 4) &&
1230          "Unsupported merge size!");
1231
1232   for (unsigned i = 0; i != 8/UnitSize; ++i)     // Step over units
1233     for (unsigned j = 0; j != UnitSize; ++j) {   // Step over bytes within unit
1234       if (!isConstantOrUndef(N->getMaskElt(i*UnitSize*2+j),
1235                              LHSStart+j+i*UnitSize) ||
1236           !isConstantOrUndef(N->getMaskElt(i*UnitSize*2+UnitSize+j),
1237                              RHSStart+j+i*UnitSize))
1238         return false;
1239     }
1240   return true;
1241 }
1242
1243 /// isVMRGLShuffleMask - Return true if this is a shuffle mask suitable for
1244 /// a VMRGL* instruction with the specified unit size (1,2 or 4 bytes).
1245 /// The ShuffleKind distinguishes between big-endian merges with two
1246 /// different inputs (0), either-endian merges with two identical inputs (1),
1247 /// and little-endian merges with two different inputs (2).  For the latter,
1248 /// the input operands are swapped (see PPCInstrAltivec.td).
1249 bool PPC::isVMRGLShuffleMask(ShuffleVectorSDNode *N, unsigned UnitSize,
1250                              unsigned ShuffleKind, SelectionDAG &DAG) {
1251   if (DAG.getDataLayout().isLittleEndian()) {
1252     if (ShuffleKind == 1) // unary
1253       return isVMerge(N, UnitSize, 0, 0);
1254     else if (ShuffleKind == 2) // swapped
1255       return isVMerge(N, UnitSize, 0, 16);
1256     else
1257       return false;
1258   } else {
1259     if (ShuffleKind == 1) // unary
1260       return isVMerge(N, UnitSize, 8, 8);
1261     else if (ShuffleKind == 0) // normal
1262       return isVMerge(N, UnitSize, 8, 24);
1263     else
1264       return false;
1265   }
1266 }
1267
1268 /// isVMRGHShuffleMask - Return true if this is a shuffle mask suitable for
1269 /// a VMRGH* instruction with the specified unit size (1,2 or 4 bytes).
1270 /// The ShuffleKind distinguishes between big-endian merges with two
1271 /// different inputs (0), either-endian merges with two identical inputs (1),
1272 /// and little-endian merges with two different inputs (2).  For the latter,
1273 /// the input operands are swapped (see PPCInstrAltivec.td).
1274 bool PPC::isVMRGHShuffleMask(ShuffleVectorSDNode *N, unsigned UnitSize,
1275                              unsigned ShuffleKind, SelectionDAG &DAG) {
1276   if (DAG.getDataLayout().isLittleEndian()) {
1277     if (ShuffleKind == 1) // unary
1278       return isVMerge(N, UnitSize, 8, 8);
1279     else if (ShuffleKind == 2) // swapped
1280       return isVMerge(N, UnitSize, 8, 24);
1281     else
1282       return false;
1283   } else {
1284     if (ShuffleKind == 1) // unary
1285       return isVMerge(N, UnitSize, 0, 0);
1286     else if (ShuffleKind == 0) // normal
1287       return isVMerge(N, UnitSize, 0, 16);
1288     else
1289       return false;
1290   }
1291 }
1292
1293 /**
1294  * \brief Common function used to match vmrgew and vmrgow shuffles
1295  *
1296  * The indexOffset determines whether to look for even or odd words in
1297  * the shuffle mask. This is based on the of the endianness of the target
1298  * machine.
1299  *   - Little Endian:
1300  *     - Use offset of 0 to check for odd elements
1301  *     - Use offset of 4 to check for even elements
1302  *   - Big Endian:
1303  *     - Use offset of 0 to check for even elements
1304  *     - Use offset of 4 to check for odd elements
1305  * A detailed description of the vector element ordering for little endian and
1306  * big endian can be found at
1307  * http://www.ibm.com/developerworks/library/l-ibm-xl-c-cpp-compiler/index.html
1308  * Targeting your applications - what little endian and big endian IBM XL C/C++
1309  * compiler differences mean to you
1310  *
1311  * The mask to the shuffle vector instruction specifies the indices of the
1312  * elements from the two input vectors to place in the result. The elements are
1313  * numbered in array-access order, starting with the first vector. These vectors
1314  * are always of type v16i8, thus each vector will contain 16 elements of size
1315  * 8. More info on the shuffle vector can be found in the
1316  * http://llvm.org/docs/LangRef.html#shufflevector-instruction
1317  * Language Reference.
1318  *
1319  * The RHSStartValue indicates whether the same input vectors are used (unary)
1320  * or two different input vectors are used, based on the following:
1321  *   - If the instruction uses the same vector for both inputs, the range of the
1322  *     indices will be 0 to 15. In this case, the RHSStart value passed should
1323  *     be 0.
1324  *   - If the instruction has two different vectors then the range of the
1325  *     indices will be 0 to 31. In this case, the RHSStart value passed should
1326  *     be 16 (indices 0-15 specify elements in the first vector while indices 16
1327  *     to 31 specify elements in the second vector).
1328  *
1329  * \param[in] N The shuffle vector SD Node to analyze
1330  * \param[in] IndexOffset Specifies whether to look for even or odd elements
1331  * \param[in] RHSStartValue Specifies the starting index for the righthand input
1332  * vector to the shuffle_vector instruction
1333  * \return true iff this shuffle vector represents an even or odd word merge
1334  */
1335 static bool isVMerge(ShuffleVectorSDNode *N, unsigned IndexOffset,
1336                      unsigned RHSStartValue) {
1337   if (N->getValueType(0) != MVT::v16i8)
1338     return false;
1339
1340   for (unsigned i = 0; i < 2; ++i)
1341     for (unsigned j = 0; j < 4; ++j)
1342       if (!isConstantOrUndef(N->getMaskElt(i*4+j),
1343                              i*RHSStartValue+j+IndexOffset) ||
1344           !isConstantOrUndef(N->getMaskElt(i*4+j+8),
1345                              i*RHSStartValue+j+IndexOffset+8))
1346         return false;
1347   return true;
1348 }
1349
1350 /**
1351  * \brief Determine if the specified shuffle mask is suitable for the vmrgew or
1352  * vmrgow instructions.
1353  *
1354  * \param[in] N The shuffle vector SD Node to analyze
1355  * \param[in] CheckEven Check for an even merge (true) or an odd merge (false)
1356  * \param[in] ShuffleKind Identify the type of merge:
1357  *   - 0 = big-endian merge with two different inputs;
1358  *   - 1 = either-endian merge with two identical inputs;
1359  *   - 2 = little-endian merge with two different inputs (inputs are swapped for
1360  *     little-endian merges).
1361  * \param[in] DAG The current SelectionDAG
1362  * \return true iff this shuffle mask
1363  */
1364 bool PPC::isVMRGEOShuffleMask(ShuffleVectorSDNode *N, bool CheckEven,
1365                               unsigned ShuffleKind, SelectionDAG &DAG) {
1366   if (DAG.getDataLayout().isLittleEndian()) {
1367     unsigned indexOffset = CheckEven ? 4 : 0;
1368     if (ShuffleKind == 1) // Unary
1369       return isVMerge(N, indexOffset, 0);
1370     else if (ShuffleKind == 2) // swapped
1371       return isVMerge(N, indexOffset, 16);
1372     else
1373       return false;
1374   }
1375   else {
1376     unsigned indexOffset = CheckEven ? 0 : 4;
1377     if (ShuffleKind == 1) // Unary
1378       return isVMerge(N, indexOffset, 0);
1379     else if (ShuffleKind == 0) // Normal
1380       return isVMerge(N, indexOffset, 16);
1381     else
1382       return false;
1383   }
1384   return false;
1385 }
1386
1387 /// isVSLDOIShuffleMask - If this is a vsldoi shuffle mask, return the shift
1388 /// amount, otherwise return -1.
1389 /// The ShuffleKind distinguishes between big-endian operations with two
1390 /// different inputs (0), either-endian operations with two identical inputs
1391 /// (1), and little-endian operations with two different inputs (2).  For the
1392 /// latter, the input operands are swapped (see PPCInstrAltivec.td).
1393 int PPC::isVSLDOIShuffleMask(SDNode *N, unsigned ShuffleKind,
1394                              SelectionDAG &DAG) {
1395   if (N->getValueType(0) != MVT::v16i8)
1396     return -1;
1397
1398   ShuffleVectorSDNode *SVOp = cast<ShuffleVectorSDNode>(N);
1399
1400   // Find the first non-undef value in the shuffle mask.
1401   unsigned i;
1402   for (i = 0; i != 16 && SVOp->getMaskElt(i) < 0; ++i)
1403     /*search*/;
1404
1405   if (i == 16) return -1;  // all undef.
1406
1407   // Otherwise, check to see if the rest of the elements are consecutively
1408   // numbered from this value.
1409   unsigned ShiftAmt = SVOp->getMaskElt(i);
1410   if (ShiftAmt < i) return -1;
1411
1412   ShiftAmt -= i;
1413   bool isLE = DAG.getDataLayout().isLittleEndian();
1414
1415   if ((ShuffleKind == 0 && !isLE) || (ShuffleKind == 2 && isLE)) {
1416     // Check the rest of the elements to see if they are consecutive.
1417     for (++i; i != 16; ++i)
1418       if (!isConstantOrUndef(SVOp->getMaskElt(i), ShiftAmt+i))
1419         return -1;
1420   } else if (ShuffleKind == 1) {
1421     // Check the rest of the elements to see if they are consecutive.
1422     for (++i; i != 16; ++i)
1423       if (!isConstantOrUndef(SVOp->getMaskElt(i), (ShiftAmt+i) & 15))
1424         return -1;
1425   } else
1426     return -1;
1427
1428   if (isLE)
1429     ShiftAmt = 16 - ShiftAmt;
1430
1431   return ShiftAmt;
1432 }
1433
1434 /// isSplatShuffleMask - Return true if the specified VECTOR_SHUFFLE operand
1435 /// specifies a splat of a single element that is suitable for input to
1436 /// VSPLTB/VSPLTH/VSPLTW.
1437 bool PPC::isSplatShuffleMask(ShuffleVectorSDNode *N, unsigned EltSize) {
1438   assert(N->getValueType(0) == MVT::v16i8 &&
1439          (EltSize == 1 || EltSize == 2 || EltSize == 4));
1440
1441   // The consecutive indices need to specify an element, not part of two
1442   // different elements.  So abandon ship early if this isn't the case.
1443   if (N->getMaskElt(0) % EltSize != 0)
1444     return false;
1445
1446   // This is a splat operation if each element of the permute is the same, and
1447   // if the value doesn't reference the second vector.
1448   unsigned ElementBase = N->getMaskElt(0);
1449
1450   // FIXME: Handle UNDEF elements too!
1451   if (ElementBase >= 16)
1452     return false;
1453
1454   // Check that the indices are consecutive, in the case of a multi-byte element
1455   // splatted with a v16i8 mask.
1456   for (unsigned i = 1; i != EltSize; ++i)
1457     if (N->getMaskElt(i) < 0 || N->getMaskElt(i) != (int)(i+ElementBase))
1458       return false;
1459
1460   for (unsigned i = EltSize, e = 16; i != e; i += EltSize) {
1461     if (N->getMaskElt(i) < 0) continue;
1462     for (unsigned j = 0; j != EltSize; ++j)
1463       if (N->getMaskElt(i+j) != N->getMaskElt(j))
1464         return false;
1465   }
1466   return true;
1467 }
1468
1469 /// getVSPLTImmediate - Return the appropriate VSPLT* immediate to splat the
1470 /// specified isSplatShuffleMask VECTOR_SHUFFLE mask.
1471 unsigned PPC::getVSPLTImmediate(SDNode *N, unsigned EltSize,
1472                                 SelectionDAG &DAG) {
1473   ShuffleVectorSDNode *SVOp = cast<ShuffleVectorSDNode>(N);
1474   assert(isSplatShuffleMask(SVOp, EltSize));
1475   if (DAG.getDataLayout().isLittleEndian())
1476     return (16 / EltSize) - 1 - (SVOp->getMaskElt(0) / EltSize);
1477   else
1478     return SVOp->getMaskElt(0) / EltSize;
1479 }
1480
1481 /// get_VSPLTI_elt - If this is a build_vector of constants which can be formed
1482 /// by using a vspltis[bhw] instruction of the specified element size, return
1483 /// the constant being splatted.  The ByteSize field indicates the number of
1484 /// bytes of each element [124] -> [bhw].
1485 SDValue PPC::get_VSPLTI_elt(SDNode *N, unsigned ByteSize, SelectionDAG &DAG) {
1486   SDValue OpVal(nullptr, 0);
1487
1488   // If ByteSize of the splat is bigger than the element size of the
1489   // build_vector, then we have a case where we are checking for a splat where
1490   // multiple elements of the buildvector are folded together into a single
1491   // logical element of the splat (e.g. "vsplish 1" to splat {0,1}*8).
1492   unsigned EltSize = 16/N->getNumOperands();
1493   if (EltSize < ByteSize) {
1494     unsigned Multiple = ByteSize/EltSize;   // Number of BV entries per spltval.
1495     SDValue UniquedVals[4];
1496     assert(Multiple > 1 && Multiple <= 4 && "How can this happen?");
1497
1498     // See if all of the elements in the buildvector agree across.
1499     for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) {
1500       if (N->getOperand(i).getOpcode() == ISD::UNDEF) continue;
1501       // If the element isn't a constant, bail fully out.
1502       if (!isa<ConstantSDNode>(N->getOperand(i))) return SDValue();
1503
1504
1505       if (!UniquedVals[i&(Multiple-1)].getNode())
1506         UniquedVals[i&(Multiple-1)] = N->getOperand(i);
1507       else if (UniquedVals[i&(Multiple-1)] != N->getOperand(i))
1508         return SDValue();  // no match.
1509     }
1510
1511     // Okay, if we reached this point, UniquedVals[0..Multiple-1] contains
1512     // either constant or undef values that are identical for each chunk.  See
1513     // if these chunks can form into a larger vspltis*.
1514
1515     // Check to see if all of the leading entries are either 0 or -1.  If
1516     // neither, then this won't fit into the immediate field.
1517     bool LeadingZero = true;
1518     bool LeadingOnes = true;
1519     for (unsigned i = 0; i != Multiple-1; ++i) {
1520       if (!UniquedVals[i].getNode()) continue;  // Must have been undefs.
1521
1522       LeadingZero &= cast<ConstantSDNode>(UniquedVals[i])->isNullValue();
1523       LeadingOnes &= cast<ConstantSDNode>(UniquedVals[i])->isAllOnesValue();
1524     }
1525     // Finally, check the least significant entry.
1526     if (LeadingZero) {
1527       if (!UniquedVals[Multiple-1].getNode())
1528         return DAG.getTargetConstant(0, SDLoc(N), MVT::i32);  // 0,0,0,undef
1529       int Val = cast<ConstantSDNode>(UniquedVals[Multiple-1])->getZExtValue();
1530       if (Val < 16)                                   // 0,0,0,4 -> vspltisw(4)
1531         return DAG.getTargetConstant(Val, SDLoc(N), MVT::i32);
1532     }
1533     if (LeadingOnes) {
1534       if (!UniquedVals[Multiple-1].getNode())
1535         return DAG.getTargetConstant(~0U, SDLoc(N), MVT::i32); // -1,-1,-1,undef
1536       int Val =cast<ConstantSDNode>(UniquedVals[Multiple-1])->getSExtValue();
1537       if (Val >= -16)                            // -1,-1,-1,-2 -> vspltisw(-2)
1538         return DAG.getTargetConstant(Val, SDLoc(N), MVT::i32);
1539     }
1540
1541     return SDValue();
1542   }
1543
1544   // Check to see if this buildvec has a single non-undef value in its elements.
1545   for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) {
1546     if (N->getOperand(i).getOpcode() == ISD::UNDEF) continue;
1547     if (!OpVal.getNode())
1548       OpVal = N->getOperand(i);
1549     else if (OpVal != N->getOperand(i))
1550       return SDValue();
1551   }
1552
1553   if (!OpVal.getNode()) return SDValue();  // All UNDEF: use implicit def.
1554
1555   unsigned ValSizeInBytes = EltSize;
1556   uint64_t Value = 0;
1557   if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(OpVal)) {
1558     Value = CN->getZExtValue();
1559   } else if (ConstantFPSDNode *CN = dyn_cast<ConstantFPSDNode>(OpVal)) {
1560     assert(CN->getValueType(0) == MVT::f32 && "Only one legal FP vector type!");
1561     Value = FloatToBits(CN->getValueAPF().convertToFloat());
1562   }
1563
1564   // If the splat value is larger than the element value, then we can never do
1565   // this splat.  The only case that we could fit the replicated bits into our
1566   // immediate field for would be zero, and we prefer to use vxor for it.
1567   if (ValSizeInBytes < ByteSize) return SDValue();
1568
1569   // If the element value is larger than the splat value, check if it consists
1570   // of a repeated bit pattern of size ByteSize.
1571   if (!APInt(ValSizeInBytes * 8, Value).isSplat(ByteSize * 8))
1572     return SDValue();
1573
1574   // Properly sign extend the value.
1575   int MaskVal = SignExtend32(Value, ByteSize * 8);
1576
1577   // If this is zero, don't match, zero matches ISD::isBuildVectorAllZeros.
1578   if (MaskVal == 0) return SDValue();
1579
1580   // Finally, if this value fits in a 5 bit sext field, return it
1581   if (SignExtend32<5>(MaskVal) == MaskVal)
1582     return DAG.getTargetConstant(MaskVal, SDLoc(N), MVT::i32);
1583   return SDValue();
1584 }
1585
1586 /// isQVALIGNIShuffleMask - If this is a qvaligni shuffle mask, return the shift
1587 /// amount, otherwise return -1.
1588 int PPC::isQVALIGNIShuffleMask(SDNode *N) {
1589   EVT VT = N->getValueType(0);
1590   if (VT != MVT::v4f64 && VT != MVT::v4f32 && VT != MVT::v4i1)
1591     return -1;
1592
1593   ShuffleVectorSDNode *SVOp = cast<ShuffleVectorSDNode>(N);
1594
1595   // Find the first non-undef value in the shuffle mask.
1596   unsigned i;
1597   for (i = 0; i != 4 && SVOp->getMaskElt(i) < 0; ++i)
1598     /*search*/;
1599
1600   if (i == 4) return -1;  // all undef.
1601
1602   // Otherwise, check to see if the rest of the elements are consecutively
1603   // numbered from this value.
1604   unsigned ShiftAmt = SVOp->getMaskElt(i);
1605   if (ShiftAmt < i) return -1;
1606   ShiftAmt -= i;
1607
1608   // Check the rest of the elements to see if they are consecutive.
1609   for (++i; i != 4; ++i)
1610     if (!isConstantOrUndef(SVOp->getMaskElt(i), ShiftAmt+i))
1611       return -1;
1612
1613   return ShiftAmt;
1614 }
1615
1616 //===----------------------------------------------------------------------===//
1617 //  Addressing Mode Selection
1618 //===----------------------------------------------------------------------===//
1619
1620 /// isIntS16Immediate - This method tests to see if the node is either a 32-bit
1621 /// or 64-bit immediate, and if the value can be accurately represented as a
1622 /// sign extension from a 16-bit value.  If so, this returns true and the
1623 /// immediate.
1624 static bool isIntS16Immediate(SDNode *N, short &Imm) {
1625   if (!isa<ConstantSDNode>(N))
1626     return false;
1627
1628   Imm = (short)cast<ConstantSDNode>(N)->getZExtValue();
1629   if (N->getValueType(0) == MVT::i32)
1630     return Imm == (int32_t)cast<ConstantSDNode>(N)->getZExtValue();
1631   else
1632     return Imm == (int64_t)cast<ConstantSDNode>(N)->getZExtValue();
1633 }
1634 static bool isIntS16Immediate(SDValue Op, short &Imm) {
1635   return isIntS16Immediate(Op.getNode(), Imm);
1636 }
1637
1638 /// SelectAddressRegReg - Given the specified addressed, check to see if it
1639 /// can be represented as an indexed [r+r] operation.  Returns false if it
1640 /// can be more efficiently represented with [r+imm].
1641 bool PPCTargetLowering::SelectAddressRegReg(SDValue N, SDValue &Base,
1642                                             SDValue &Index,
1643                                             SelectionDAG &DAG) const {
1644   short imm = 0;
1645   if (N.getOpcode() == ISD::ADD) {
1646     if (isIntS16Immediate(N.getOperand(1), imm))
1647       return false;    // r+i
1648     if (N.getOperand(1).getOpcode() == PPCISD::Lo)
1649       return false;    // r+i
1650
1651     Base = N.getOperand(0);
1652     Index = N.getOperand(1);
1653     return true;
1654   } else if (N.getOpcode() == ISD::OR) {
1655     if (isIntS16Immediate(N.getOperand(1), imm))
1656       return false;    // r+i can fold it if we can.
1657
1658     // If this is an or of disjoint bitfields, we can codegen this as an add
1659     // (for better address arithmetic) if the LHS and RHS of the OR are provably
1660     // disjoint.
1661     APInt LHSKnownZero, LHSKnownOne;
1662     APInt RHSKnownZero, RHSKnownOne;
1663     DAG.computeKnownBits(N.getOperand(0),
1664                          LHSKnownZero, LHSKnownOne);
1665
1666     if (LHSKnownZero.getBoolValue()) {
1667       DAG.computeKnownBits(N.getOperand(1),
1668                            RHSKnownZero, RHSKnownOne);
1669       // If all of the bits are known zero on the LHS or RHS, the add won't
1670       // carry.
1671       if (~(LHSKnownZero | RHSKnownZero) == 0) {
1672         Base = N.getOperand(0);
1673         Index = N.getOperand(1);
1674         return true;
1675       }
1676     }
1677   }
1678
1679   return false;
1680 }
1681
1682 // If we happen to be doing an i64 load or store into a stack slot that has
1683 // less than a 4-byte alignment, then the frame-index elimination may need to
1684 // use an indexed load or store instruction (because the offset may not be a
1685 // multiple of 4). The extra register needed to hold the offset comes from the
1686 // register scavenger, and it is possible that the scavenger will need to use
1687 // an emergency spill slot. As a result, we need to make sure that a spill slot
1688 // is allocated when doing an i64 load/store into a less-than-4-byte-aligned
1689 // stack slot.
1690 static void fixupFuncForFI(SelectionDAG &DAG, int FrameIdx, EVT VT) {
1691   // FIXME: This does not handle the LWA case.
1692   if (VT != MVT::i64)
1693     return;
1694
1695   // NOTE: We'll exclude negative FIs here, which come from argument
1696   // lowering, because there are no known test cases triggering this problem
1697   // using packed structures (or similar). We can remove this exclusion if
1698   // we find such a test case. The reason why this is so test-case driven is
1699   // because this entire 'fixup' is only to prevent crashes (from the
1700   // register scavenger) on not-really-valid inputs. For example, if we have:
1701   //   %a = alloca i1
1702   //   %b = bitcast i1* %a to i64*
1703   //   store i64* a, i64 b
1704   // then the store should really be marked as 'align 1', but is not. If it
1705   // were marked as 'align 1' then the indexed form would have been
1706   // instruction-selected initially, and the problem this 'fixup' is preventing
1707   // won't happen regardless.
1708   if (FrameIdx < 0)
1709     return;
1710
1711   MachineFunction &MF = DAG.getMachineFunction();
1712   MachineFrameInfo *MFI = MF.getFrameInfo();
1713
1714   unsigned Align = MFI->getObjectAlignment(FrameIdx);
1715   if (Align >= 4)
1716     return;
1717
1718   PPCFunctionInfo *FuncInfo = MF.getInfo<PPCFunctionInfo>();
1719   FuncInfo->setHasNonRISpills();
1720 }
1721
1722 /// Returns true if the address N can be represented by a base register plus
1723 /// a signed 16-bit displacement [r+imm], and if it is not better
1724 /// represented as reg+reg.  If Aligned is true, only accept displacements
1725 /// suitable for STD and friends, i.e. multiples of 4.
1726 bool PPCTargetLowering::SelectAddressRegImm(SDValue N, SDValue &Disp,
1727                                             SDValue &Base,
1728                                             SelectionDAG &DAG,
1729                                             bool Aligned) const {
1730   // FIXME dl should come from parent load or store, not from address
1731   SDLoc dl(N);
1732   // If this can be more profitably realized as r+r, fail.
1733   if (SelectAddressRegReg(N, Disp, Base, DAG))
1734     return false;
1735
1736   if (N.getOpcode() == ISD::ADD) {
1737     short imm = 0;
1738     if (isIntS16Immediate(N.getOperand(1), imm) &&
1739         (!Aligned || (imm & 3) == 0)) {
1740       Disp = DAG.getTargetConstant(imm, dl, N.getValueType());
1741       if (FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(N.getOperand(0))) {
1742         Base = DAG.getTargetFrameIndex(FI->getIndex(), N.getValueType());
1743         fixupFuncForFI(DAG, FI->getIndex(), N.getValueType());
1744       } else {
1745         Base = N.getOperand(0);
1746       }
1747       return true; // [r+i]
1748     } else if (N.getOperand(1).getOpcode() == PPCISD::Lo) {
1749       // Match LOAD (ADD (X, Lo(G))).
1750       assert(!cast<ConstantSDNode>(N.getOperand(1).getOperand(1))->getZExtValue()
1751              && "Cannot handle constant offsets yet!");
1752       Disp = N.getOperand(1).getOperand(0);  // The global address.
1753       assert(Disp.getOpcode() == ISD::TargetGlobalAddress ||
1754              Disp.getOpcode() == ISD::TargetGlobalTLSAddress ||
1755              Disp.getOpcode() == ISD::TargetConstantPool ||
1756              Disp.getOpcode() == ISD::TargetJumpTable);
1757       Base = N.getOperand(0);
1758       return true;  // [&g+r]
1759     }
1760   } else if (N.getOpcode() == ISD::OR) {
1761     short imm = 0;
1762     if (isIntS16Immediate(N.getOperand(1), imm) &&
1763         (!Aligned || (imm & 3) == 0)) {
1764       // If this is an or of disjoint bitfields, we can codegen this as an add
1765       // (for better address arithmetic) if the LHS and RHS of the OR are
1766       // provably disjoint.
1767       APInt LHSKnownZero, LHSKnownOne;
1768       DAG.computeKnownBits(N.getOperand(0), LHSKnownZero, LHSKnownOne);
1769
1770       if ((LHSKnownZero.getZExtValue()|~(uint64_t)imm) == ~0ULL) {
1771         // If all of the bits are known zero on the LHS or RHS, the add won't
1772         // carry.
1773         if (FrameIndexSDNode *FI =
1774               dyn_cast<FrameIndexSDNode>(N.getOperand(0))) {
1775           Base = DAG.getTargetFrameIndex(FI->getIndex(), N.getValueType());
1776           fixupFuncForFI(DAG, FI->getIndex(), N.getValueType());
1777         } else {
1778           Base = N.getOperand(0);
1779         }
1780         Disp = DAG.getTargetConstant(imm, dl, N.getValueType());
1781         return true;
1782       }
1783     }
1784   } else if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(N)) {
1785     // Loading from a constant address.
1786
1787     // If this address fits entirely in a 16-bit sext immediate field, codegen
1788     // this as "d, 0"
1789     short Imm;
1790     if (isIntS16Immediate(CN, Imm) && (!Aligned || (Imm & 3) == 0)) {
1791       Disp = DAG.getTargetConstant(Imm, dl, CN->getValueType(0));
1792       Base = DAG.getRegister(Subtarget.isPPC64() ? PPC::ZERO8 : PPC::ZERO,
1793                              CN->getValueType(0));
1794       return true;
1795     }
1796
1797     // Handle 32-bit sext immediates with LIS + addr mode.
1798     if ((CN->getValueType(0) == MVT::i32 ||
1799          (int64_t)CN->getZExtValue() == (int)CN->getZExtValue()) &&
1800         (!Aligned || (CN->getZExtValue() & 3) == 0)) {
1801       int Addr = (int)CN->getZExtValue();
1802
1803       // Otherwise, break this down into an LIS + disp.
1804       Disp = DAG.getTargetConstant((short)Addr, dl, MVT::i32);
1805
1806       Base = DAG.getTargetConstant((Addr - (signed short)Addr) >> 16, dl,
1807                                    MVT::i32);
1808       unsigned Opc = CN->getValueType(0) == MVT::i32 ? PPC::LIS : PPC::LIS8;
1809       Base = SDValue(DAG.getMachineNode(Opc, dl, CN->getValueType(0), Base), 0);
1810       return true;
1811     }
1812   }
1813
1814   Disp = DAG.getTargetConstant(0, dl, getPointerTy(DAG.getDataLayout()));
1815   if (FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(N)) {
1816     Base = DAG.getTargetFrameIndex(FI->getIndex(), N.getValueType());
1817     fixupFuncForFI(DAG, FI->getIndex(), N.getValueType());
1818   } else
1819     Base = N;
1820   return true;      // [r+0]
1821 }
1822
1823 /// SelectAddressRegRegOnly - Given the specified addressed, force it to be
1824 /// represented as an indexed [r+r] operation.
1825 bool PPCTargetLowering::SelectAddressRegRegOnly(SDValue N, SDValue &Base,
1826                                                 SDValue &Index,
1827                                                 SelectionDAG &DAG) const {
1828   // Check to see if we can easily represent this as an [r+r] address.  This
1829   // will fail if it thinks that the address is more profitably represented as
1830   // reg+imm, e.g. where imm = 0.
1831   if (SelectAddressRegReg(N, Base, Index, DAG))
1832     return true;
1833
1834   // If the operand is an addition, always emit this as [r+r], since this is
1835   // better (for code size, and execution, as the memop does the add for free)
1836   // than emitting an explicit add.
1837   if (N.getOpcode() == ISD::ADD) {
1838     Base = N.getOperand(0);
1839     Index = N.getOperand(1);
1840     return true;
1841   }
1842
1843   // Otherwise, do it the hard way, using R0 as the base register.
1844   Base = DAG.getRegister(Subtarget.isPPC64() ? PPC::ZERO8 : PPC::ZERO,
1845                          N.getValueType());
1846   Index = N;
1847   return true;
1848 }
1849
1850 /// getPreIndexedAddressParts - returns true by value, base pointer and
1851 /// offset pointer and addressing mode by reference if the node's address
1852 /// can be legally represented as pre-indexed load / store address.
1853 bool PPCTargetLowering::getPreIndexedAddressParts(SDNode *N, SDValue &Base,
1854                                                   SDValue &Offset,
1855                                                   ISD::MemIndexedMode &AM,
1856                                                   SelectionDAG &DAG) const {
1857   if (DisablePPCPreinc) return false;
1858
1859   bool isLoad = true;
1860   SDValue Ptr;
1861   EVT VT;
1862   unsigned Alignment;
1863   if (LoadSDNode *LD = dyn_cast<LoadSDNode>(N)) {
1864     Ptr = LD->getBasePtr();
1865     VT = LD->getMemoryVT();
1866     Alignment = LD->getAlignment();
1867   } else if (StoreSDNode *ST = dyn_cast<StoreSDNode>(N)) {
1868     Ptr = ST->getBasePtr();
1869     VT  = ST->getMemoryVT();
1870     Alignment = ST->getAlignment();
1871     isLoad = false;
1872   } else
1873     return false;
1874
1875   // PowerPC doesn't have preinc load/store instructions for vectors (except
1876   // for QPX, which does have preinc r+r forms).
1877   if (VT.isVector()) {
1878     if (!Subtarget.hasQPX() || (VT != MVT::v4f64 && VT != MVT::v4f32)) {
1879       return false;
1880     } else if (SelectAddressRegRegOnly(Ptr, Offset, Base, DAG)) {
1881       AM = ISD::PRE_INC;
1882       return true;
1883     }
1884   }
1885
1886   if (SelectAddressRegReg(Ptr, Base, Offset, DAG)) {
1887
1888     // Common code will reject creating a pre-inc form if the base pointer
1889     // is a frame index, or if N is a store and the base pointer is either
1890     // the same as or a predecessor of the value being stored.  Check for
1891     // those situations here, and try with swapped Base/Offset instead.
1892     bool Swap = false;
1893
1894     if (isa<FrameIndexSDNode>(Base) || isa<RegisterSDNode>(Base))
1895       Swap = true;
1896     else if (!isLoad) {
1897       SDValue Val = cast<StoreSDNode>(N)->getValue();
1898       if (Val == Base || Base.getNode()->isPredecessorOf(Val.getNode()))
1899         Swap = true;
1900     }
1901
1902     if (Swap)
1903       std::swap(Base, Offset);
1904
1905     AM = ISD::PRE_INC;
1906     return true;
1907   }
1908
1909   // LDU/STU can only handle immediates that are a multiple of 4.
1910   if (VT != MVT::i64) {
1911     if (!SelectAddressRegImm(Ptr, Offset, Base, DAG, false))
1912       return false;
1913   } else {
1914     // LDU/STU need an address with at least 4-byte alignment.
1915     if (Alignment < 4)
1916       return false;
1917
1918     if (!SelectAddressRegImm(Ptr, Offset, Base, DAG, true))
1919       return false;
1920   }
1921
1922   if (LoadSDNode *LD = dyn_cast<LoadSDNode>(N)) {
1923     // PPC64 doesn't have lwau, but it does have lwaux.  Reject preinc load of
1924     // sext i32 to i64 when addr mode is r+i.
1925     if (LD->getValueType(0) == MVT::i64 && LD->getMemoryVT() == MVT::i32 &&
1926         LD->getExtensionType() == ISD::SEXTLOAD &&
1927         isa<ConstantSDNode>(Offset))
1928       return false;
1929   }
1930
1931   AM = ISD::PRE_INC;
1932   return true;
1933 }
1934
1935 //===----------------------------------------------------------------------===//
1936 //  LowerOperation implementation
1937 //===----------------------------------------------------------------------===//
1938
1939 /// GetLabelAccessInfo - Return true if we should reference labels using a
1940 /// PICBase, set the HiOpFlags and LoOpFlags to the target MO flags.
1941 static bool GetLabelAccessInfo(const TargetMachine &TM,
1942                                const PPCSubtarget &Subtarget,
1943                                unsigned &HiOpFlags, unsigned &LoOpFlags,
1944                                const GlobalValue *GV = nullptr) {
1945   HiOpFlags = PPCII::MO_HA;
1946   LoOpFlags = PPCII::MO_LO;
1947
1948   // Don't use the pic base if not in PIC relocation model.
1949   bool isPIC = TM.getRelocationModel() == Reloc::PIC_;
1950
1951   if (isPIC) {
1952     HiOpFlags |= PPCII::MO_PIC_FLAG;
1953     LoOpFlags |= PPCII::MO_PIC_FLAG;
1954   }
1955
1956   // If this is a reference to a global value that requires a non-lazy-ptr, make
1957   // sure that instruction lowering adds it.
1958   if (GV && Subtarget.hasLazyResolverStub(GV)) {
1959     HiOpFlags |= PPCII::MO_NLP_FLAG;
1960     LoOpFlags |= PPCII::MO_NLP_FLAG;
1961
1962     if (GV->hasHiddenVisibility()) {
1963       HiOpFlags |= PPCII::MO_NLP_HIDDEN_FLAG;
1964       LoOpFlags |= PPCII::MO_NLP_HIDDEN_FLAG;
1965     }
1966   }
1967
1968   return isPIC;
1969 }
1970
1971 static SDValue LowerLabelRef(SDValue HiPart, SDValue LoPart, bool isPIC,
1972                              SelectionDAG &DAG) {
1973   SDLoc DL(HiPart);
1974   EVT PtrVT = HiPart.getValueType();
1975   SDValue Zero = DAG.getConstant(0, DL, PtrVT);
1976
1977   SDValue Hi = DAG.getNode(PPCISD::Hi, DL, PtrVT, HiPart, Zero);
1978   SDValue Lo = DAG.getNode(PPCISD::Lo, DL, PtrVT, LoPart, Zero);
1979
1980   // With PIC, the first instruction is actually "GR+hi(&G)".
1981   if (isPIC)
1982     Hi = DAG.getNode(ISD::ADD, DL, PtrVT,
1983                      DAG.getNode(PPCISD::GlobalBaseReg, DL, PtrVT), Hi);
1984
1985   // Generate non-pic code that has direct accesses to the constant pool.
1986   // The address of the global is just (hi(&g)+lo(&g)).
1987   return DAG.getNode(ISD::ADD, DL, PtrVT, Hi, Lo);
1988 }
1989
1990 static void setUsesTOCBasePtr(MachineFunction &MF) {
1991   PPCFunctionInfo *FuncInfo = MF.getInfo<PPCFunctionInfo>();
1992   FuncInfo->setUsesTOCBasePtr();
1993 }
1994
1995 static void setUsesTOCBasePtr(SelectionDAG &DAG) {
1996   setUsesTOCBasePtr(DAG.getMachineFunction());
1997 }
1998
1999 static SDValue getTOCEntry(SelectionDAG &DAG, SDLoc dl, bool Is64Bit,
2000                            SDValue GA) {
2001   EVT VT = Is64Bit ? MVT::i64 : MVT::i32;
2002   SDValue Reg = Is64Bit ? DAG.getRegister(PPC::X2, VT) :
2003                 DAG.getNode(PPCISD::GlobalBaseReg, dl, VT);
2004
2005   SDValue Ops[] = { GA, Reg };
2006   return DAG.getMemIntrinsicNode(
2007       PPCISD::TOC_ENTRY, dl, DAG.getVTList(VT, MVT::Other), Ops, VT,
2008       MachinePointerInfo::getGOT(DAG.getMachineFunction()), 0, false, true,
2009       false, 0);
2010 }
2011
2012 SDValue PPCTargetLowering::LowerConstantPool(SDValue Op,
2013                                              SelectionDAG &DAG) const {
2014   EVT PtrVT = Op.getValueType();
2015   ConstantPoolSDNode *CP = cast<ConstantPoolSDNode>(Op);
2016   const Constant *C = CP->getConstVal();
2017
2018   // 64-bit SVR4 ABI code is always position-independent.
2019   // The actual address of the GlobalValue is stored in the TOC.
2020   if (Subtarget.isSVR4ABI() && Subtarget.isPPC64()) {
2021     setUsesTOCBasePtr(DAG);
2022     SDValue GA = DAG.getTargetConstantPool(C, PtrVT, CP->getAlignment(), 0);
2023     return getTOCEntry(DAG, SDLoc(CP), true, GA);
2024   }
2025
2026   unsigned MOHiFlag, MOLoFlag;
2027   bool isPIC =
2028       GetLabelAccessInfo(DAG.getTarget(), Subtarget, MOHiFlag, MOLoFlag);
2029
2030   if (isPIC && Subtarget.isSVR4ABI()) {
2031     SDValue GA = DAG.getTargetConstantPool(C, PtrVT, CP->getAlignment(),
2032                                            PPCII::MO_PIC_FLAG);
2033     return getTOCEntry(DAG, SDLoc(CP), false, GA);
2034   }
2035
2036   SDValue CPIHi =
2037     DAG.getTargetConstantPool(C, PtrVT, CP->getAlignment(), 0, MOHiFlag);
2038   SDValue CPILo =
2039     DAG.getTargetConstantPool(C, PtrVT, CP->getAlignment(), 0, MOLoFlag);
2040   return LowerLabelRef(CPIHi, CPILo, isPIC, DAG);
2041 }
2042
2043 SDValue PPCTargetLowering::LowerJumpTable(SDValue Op, SelectionDAG &DAG) const {
2044   EVT PtrVT = Op.getValueType();
2045   JumpTableSDNode *JT = cast<JumpTableSDNode>(Op);
2046
2047   // 64-bit SVR4 ABI code is always position-independent.
2048   // The actual address of the GlobalValue is stored in the TOC.
2049   if (Subtarget.isSVR4ABI() && Subtarget.isPPC64()) {
2050     setUsesTOCBasePtr(DAG);
2051     SDValue GA = DAG.getTargetJumpTable(JT->getIndex(), PtrVT);
2052     return getTOCEntry(DAG, SDLoc(JT), true, GA);
2053   }
2054
2055   unsigned MOHiFlag, MOLoFlag;
2056   bool isPIC =
2057       GetLabelAccessInfo(DAG.getTarget(), Subtarget, MOHiFlag, MOLoFlag);
2058
2059   if (isPIC && Subtarget.isSVR4ABI()) {
2060     SDValue GA = DAG.getTargetJumpTable(JT->getIndex(), PtrVT,
2061                                         PPCII::MO_PIC_FLAG);
2062     return getTOCEntry(DAG, SDLoc(GA), false, GA);
2063   }
2064
2065   SDValue JTIHi = DAG.getTargetJumpTable(JT->getIndex(), PtrVT, MOHiFlag);
2066   SDValue JTILo = DAG.getTargetJumpTable(JT->getIndex(), PtrVT, MOLoFlag);
2067   return LowerLabelRef(JTIHi, JTILo, isPIC, DAG);
2068 }
2069
2070 SDValue PPCTargetLowering::LowerBlockAddress(SDValue Op,
2071                                              SelectionDAG &DAG) const {
2072   EVT PtrVT = Op.getValueType();
2073   BlockAddressSDNode *BASDN = cast<BlockAddressSDNode>(Op);
2074   const BlockAddress *BA = BASDN->getBlockAddress();
2075
2076   // 64-bit SVR4 ABI code is always position-independent.
2077   // The actual BlockAddress is stored in the TOC.
2078   if (Subtarget.isSVR4ABI() && Subtarget.isPPC64()) {
2079     setUsesTOCBasePtr(DAG);
2080     SDValue GA = DAG.getTargetBlockAddress(BA, PtrVT, BASDN->getOffset());
2081     return getTOCEntry(DAG, SDLoc(BASDN), true, GA);
2082   }
2083
2084   unsigned MOHiFlag, MOLoFlag;
2085   bool isPIC =
2086       GetLabelAccessInfo(DAG.getTarget(), Subtarget, MOHiFlag, MOLoFlag);
2087   SDValue TgtBAHi = DAG.getTargetBlockAddress(BA, PtrVT, 0, MOHiFlag);
2088   SDValue TgtBALo = DAG.getTargetBlockAddress(BA, PtrVT, 0, MOLoFlag);
2089   return LowerLabelRef(TgtBAHi, TgtBALo, isPIC, DAG);
2090 }
2091
2092 SDValue PPCTargetLowering::LowerGlobalTLSAddress(SDValue Op,
2093                                               SelectionDAG &DAG) const {
2094
2095   // FIXME: TLS addresses currently use medium model code sequences,
2096   // which is the most useful form.  Eventually support for small and
2097   // large models could be added if users need it, at the cost of
2098   // additional complexity.
2099   GlobalAddressSDNode *GA = cast<GlobalAddressSDNode>(Op);
2100   if (DAG.getTarget().Options.EmulatedTLS)
2101     return LowerToTLSEmulatedModel(GA, DAG);
2102
2103   SDLoc dl(GA);
2104   const GlobalValue *GV = GA->getGlobal();
2105   EVT PtrVT = getPointerTy(DAG.getDataLayout());
2106   bool is64bit = Subtarget.isPPC64();
2107   const Module *M = DAG.getMachineFunction().getFunction()->getParent();
2108   PICLevel::Level picLevel = M->getPICLevel();
2109
2110   TLSModel::Model Model = getTargetMachine().getTLSModel(GV);
2111
2112   if (Model == TLSModel::LocalExec) {
2113     SDValue TGAHi = DAG.getTargetGlobalAddress(GV, dl, PtrVT, 0,
2114                                                PPCII::MO_TPREL_HA);
2115     SDValue TGALo = DAG.getTargetGlobalAddress(GV, dl, PtrVT, 0,
2116                                                PPCII::MO_TPREL_LO);
2117     SDValue TLSReg = DAG.getRegister(is64bit ? PPC::X13 : PPC::R2,
2118                                      is64bit ? MVT::i64 : MVT::i32);
2119     SDValue Hi = DAG.getNode(PPCISD::Hi, dl, PtrVT, TGAHi, TLSReg);
2120     return DAG.getNode(PPCISD::Lo, dl, PtrVT, TGALo, Hi);
2121   }
2122
2123   if (Model == TLSModel::InitialExec) {
2124     SDValue TGA = DAG.getTargetGlobalAddress(GV, dl, PtrVT, 0, 0);
2125     SDValue TGATLS = DAG.getTargetGlobalAddress(GV, dl, PtrVT, 0,
2126                                                 PPCII::MO_TLS);
2127     SDValue GOTPtr;
2128     if (is64bit) {
2129       setUsesTOCBasePtr(DAG);
2130       SDValue GOTReg = DAG.getRegister(PPC::X2, MVT::i64);
2131       GOTPtr = DAG.getNode(PPCISD::ADDIS_GOT_TPREL_HA, dl,
2132                            PtrVT, GOTReg, TGA);
2133     } else
2134       GOTPtr = DAG.getNode(PPCISD::PPC32_GOT, dl, PtrVT);
2135     SDValue TPOffset = DAG.getNode(PPCISD::LD_GOT_TPREL_L, dl,
2136                                    PtrVT, TGA, GOTPtr);
2137     return DAG.getNode(PPCISD::ADD_TLS, dl, PtrVT, TPOffset, TGATLS);
2138   }
2139
2140   if (Model == TLSModel::GeneralDynamic) {
2141     SDValue TGA = DAG.getTargetGlobalAddress(GV, dl, PtrVT, 0, 0);
2142     SDValue GOTPtr;
2143     if (is64bit) {
2144       setUsesTOCBasePtr(DAG);
2145       SDValue GOTReg = DAG.getRegister(PPC::X2, MVT::i64);
2146       GOTPtr = DAG.getNode(PPCISD::ADDIS_TLSGD_HA, dl, PtrVT,
2147                                    GOTReg, TGA);
2148     } else {
2149       if (picLevel == PICLevel::Small)
2150         GOTPtr = DAG.getNode(PPCISD::GlobalBaseReg, dl, PtrVT);
2151       else
2152         GOTPtr = DAG.getNode(PPCISD::PPC32_PICGOT, dl, PtrVT);
2153     }
2154     return DAG.getNode(PPCISD::ADDI_TLSGD_L_ADDR, dl, PtrVT,
2155                        GOTPtr, TGA, TGA);
2156   }
2157
2158   if (Model == TLSModel::LocalDynamic) {
2159     SDValue TGA = DAG.getTargetGlobalAddress(GV, dl, PtrVT, 0, 0);
2160     SDValue GOTPtr;
2161     if (is64bit) {
2162       setUsesTOCBasePtr(DAG);
2163       SDValue GOTReg = DAG.getRegister(PPC::X2, MVT::i64);
2164       GOTPtr = DAG.getNode(PPCISD::ADDIS_TLSLD_HA, dl, PtrVT,
2165                            GOTReg, TGA);
2166     } else {
2167       if (picLevel == PICLevel::Small)
2168         GOTPtr = DAG.getNode(PPCISD::GlobalBaseReg, dl, PtrVT);
2169       else
2170         GOTPtr = DAG.getNode(PPCISD::PPC32_PICGOT, dl, PtrVT);
2171     }
2172     SDValue TLSAddr = DAG.getNode(PPCISD::ADDI_TLSLD_L_ADDR, dl,
2173                                   PtrVT, GOTPtr, TGA, TGA);
2174     SDValue DtvOffsetHi = DAG.getNode(PPCISD::ADDIS_DTPREL_HA, dl,
2175                                       PtrVT, TLSAddr, TGA);
2176     return DAG.getNode(PPCISD::ADDI_DTPREL_L, dl, PtrVT, DtvOffsetHi, TGA);
2177   }
2178
2179   llvm_unreachable("Unknown TLS model!");
2180 }
2181
2182 SDValue PPCTargetLowering::LowerGlobalAddress(SDValue Op,
2183                                               SelectionDAG &DAG) const {
2184   EVT PtrVT = Op.getValueType();
2185   GlobalAddressSDNode *GSDN = cast<GlobalAddressSDNode>(Op);
2186   SDLoc DL(GSDN);
2187   const GlobalValue *GV = GSDN->getGlobal();
2188
2189   // 64-bit SVR4 ABI code is always position-independent.
2190   // The actual address of the GlobalValue is stored in the TOC.
2191   if (Subtarget.isSVR4ABI() && Subtarget.isPPC64()) {
2192     setUsesTOCBasePtr(DAG);
2193     SDValue GA = DAG.getTargetGlobalAddress(GV, DL, PtrVT, GSDN->getOffset());
2194     return getTOCEntry(DAG, DL, true, GA);
2195   }
2196
2197   unsigned MOHiFlag, MOLoFlag;
2198   bool isPIC =
2199       GetLabelAccessInfo(DAG.getTarget(), Subtarget, MOHiFlag, MOLoFlag, GV);
2200
2201   if (isPIC && Subtarget.isSVR4ABI()) {
2202     SDValue GA = DAG.getTargetGlobalAddress(GV, DL, PtrVT,
2203                                             GSDN->getOffset(),
2204                                             PPCII::MO_PIC_FLAG);
2205     return getTOCEntry(DAG, DL, false, GA);
2206   }
2207
2208   SDValue GAHi =
2209     DAG.getTargetGlobalAddress(GV, DL, PtrVT, GSDN->getOffset(), MOHiFlag);
2210   SDValue GALo =
2211     DAG.getTargetGlobalAddress(GV, DL, PtrVT, GSDN->getOffset(), MOLoFlag);
2212
2213   SDValue Ptr = LowerLabelRef(GAHi, GALo, isPIC, DAG);
2214
2215   // If the global reference is actually to a non-lazy-pointer, we have to do an
2216   // extra load to get the address of the global.
2217   if (MOHiFlag & PPCII::MO_NLP_FLAG)
2218     Ptr = DAG.getLoad(PtrVT, DL, DAG.getEntryNode(), Ptr, MachinePointerInfo(),
2219                       false, false, false, 0);
2220   return Ptr;
2221 }
2222
2223 SDValue PPCTargetLowering::LowerSETCC(SDValue Op, SelectionDAG &DAG) const {
2224   ISD::CondCode CC = cast<CondCodeSDNode>(Op.getOperand(2))->get();
2225   SDLoc dl(Op);
2226
2227   if (Op.getValueType() == MVT::v2i64) {
2228     // When the operands themselves are v2i64 values, we need to do something
2229     // special because VSX has no underlying comparison operations for these.
2230     if (Op.getOperand(0).getValueType() == MVT::v2i64) {
2231       // Equality can be handled by casting to the legal type for Altivec
2232       // comparisons, everything else needs to be expanded.
2233       if (CC == ISD::SETEQ || CC == ISD::SETNE) {
2234         return DAG.getNode(ISD::BITCAST, dl, MVT::v2i64,
2235                  DAG.getSetCC(dl, MVT::v4i32,
2236                    DAG.getNode(ISD::BITCAST, dl, MVT::v4i32, Op.getOperand(0)),
2237                    DAG.getNode(ISD::BITCAST, dl, MVT::v4i32, Op.getOperand(1)),
2238                    CC));
2239       }
2240
2241       return SDValue();
2242     }
2243
2244     // We handle most of these in the usual way.
2245     return Op;
2246   }
2247
2248   // If we're comparing for equality to zero, expose the fact that this is
2249   // implented as a ctlz/srl pair on ppc, so that the dag combiner can
2250   // fold the new nodes.
2251   if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
2252     if (C->isNullValue() && CC == ISD::SETEQ) {
2253       EVT VT = Op.getOperand(0).getValueType();
2254       SDValue Zext = Op.getOperand(0);
2255       if (VT.bitsLT(MVT::i32)) {
2256         VT = MVT::i32;
2257         Zext = DAG.getNode(ISD::ZERO_EXTEND, dl, VT, Op.getOperand(0));
2258       }
2259       unsigned Log2b = Log2_32(VT.getSizeInBits());
2260       SDValue Clz = DAG.getNode(ISD::CTLZ, dl, VT, Zext);
2261       SDValue Scc = DAG.getNode(ISD::SRL, dl, VT, Clz,
2262                                 DAG.getConstant(Log2b, dl, MVT::i32));
2263       return DAG.getNode(ISD::TRUNCATE, dl, MVT::i32, Scc);
2264     }
2265     // Leave comparisons against 0 and -1 alone for now, since they're usually
2266     // optimized.  FIXME: revisit this when we can custom lower all setcc
2267     // optimizations.
2268     if (C->isAllOnesValue() || C->isNullValue())
2269       return SDValue();
2270   }
2271
2272   // If we have an integer seteq/setne, turn it into a compare against zero
2273   // by xor'ing the rhs with the lhs, which is faster than setting a
2274   // condition register, reading it back out, and masking the correct bit.  The
2275   // normal approach here uses sub to do this instead of xor.  Using xor exposes
2276   // the result to other bit-twiddling opportunities.
2277   EVT LHSVT = Op.getOperand(0).getValueType();
2278   if (LHSVT.isInteger() && (CC == ISD::SETEQ || CC == ISD::SETNE)) {
2279     EVT VT = Op.getValueType();
2280     SDValue Sub = DAG.getNode(ISD::XOR, dl, LHSVT, Op.getOperand(0),
2281                                 Op.getOperand(1));
2282     return DAG.getSetCC(dl, VT, Sub, DAG.getConstant(0, dl, LHSVT), CC);
2283   }
2284   return SDValue();
2285 }
2286
2287 SDValue PPCTargetLowering::LowerVAARG(SDValue Op, SelectionDAG &DAG,
2288                                       const PPCSubtarget &Subtarget) const {
2289   SDNode *Node = Op.getNode();
2290   EVT VT = Node->getValueType(0);
2291   EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(DAG.getDataLayout());
2292   SDValue InChain = Node->getOperand(0);
2293   SDValue VAListPtr = Node->getOperand(1);
2294   const Value *SV = cast<SrcValueSDNode>(Node->getOperand(2))->getValue();
2295   SDLoc dl(Node);
2296
2297   assert(!Subtarget.isPPC64() && "LowerVAARG is PPC32 only");
2298
2299   // gpr_index
2300   SDValue GprIndex = DAG.getExtLoad(ISD::ZEXTLOAD, dl, MVT::i32, InChain,
2301                                     VAListPtr, MachinePointerInfo(SV), MVT::i8,
2302                                     false, false, false, 0);
2303   InChain = GprIndex.getValue(1);
2304
2305   if (VT == MVT::i64) {
2306     // Check if GprIndex is even
2307     SDValue GprAnd = DAG.getNode(ISD::AND, dl, MVT::i32, GprIndex,
2308                                  DAG.getConstant(1, dl, MVT::i32));
2309     SDValue CC64 = DAG.getSetCC(dl, MVT::i32, GprAnd,
2310                                 DAG.getConstant(0, dl, MVT::i32), ISD::SETNE);
2311     SDValue GprIndexPlusOne = DAG.getNode(ISD::ADD, dl, MVT::i32, GprIndex,
2312                                           DAG.getConstant(1, dl, MVT::i32));
2313     // Align GprIndex to be even if it isn't
2314     GprIndex = DAG.getNode(ISD::SELECT, dl, MVT::i32, CC64, GprIndexPlusOne,
2315                            GprIndex);
2316   }
2317
2318   // fpr index is 1 byte after gpr
2319   SDValue FprPtr = DAG.getNode(ISD::ADD, dl, PtrVT, VAListPtr,
2320                                DAG.getConstant(1, dl, MVT::i32));
2321
2322   // fpr
2323   SDValue FprIndex = DAG.getExtLoad(ISD::ZEXTLOAD, dl, MVT::i32, InChain,
2324                                     FprPtr, MachinePointerInfo(SV), MVT::i8,
2325                                     false, false, false, 0);
2326   InChain = FprIndex.getValue(1);
2327
2328   SDValue RegSaveAreaPtr = DAG.getNode(ISD::ADD, dl, PtrVT, VAListPtr,
2329                                        DAG.getConstant(8, dl, MVT::i32));
2330
2331   SDValue OverflowAreaPtr = DAG.getNode(ISD::ADD, dl, PtrVT, VAListPtr,
2332                                         DAG.getConstant(4, dl, MVT::i32));
2333
2334   // areas
2335   SDValue OverflowArea = DAG.getLoad(MVT::i32, dl, InChain, OverflowAreaPtr,
2336                                      MachinePointerInfo(), false, false,
2337                                      false, 0);
2338   InChain = OverflowArea.getValue(1);
2339
2340   SDValue RegSaveArea = DAG.getLoad(MVT::i32, dl, InChain, RegSaveAreaPtr,
2341                                     MachinePointerInfo(), false, false,
2342                                     false, 0);
2343   InChain = RegSaveArea.getValue(1);
2344
2345   // select overflow_area if index > 8
2346   SDValue CC = DAG.getSetCC(dl, MVT::i32, VT.isInteger() ? GprIndex : FprIndex,
2347                             DAG.getConstant(8, dl, MVT::i32), ISD::SETLT);
2348
2349   // adjustment constant gpr_index * 4/8
2350   SDValue RegConstant = DAG.getNode(ISD::MUL, dl, MVT::i32,
2351                                     VT.isInteger() ? GprIndex : FprIndex,
2352                                     DAG.getConstant(VT.isInteger() ? 4 : 8, dl,
2353                                                     MVT::i32));
2354
2355   // OurReg = RegSaveArea + RegConstant
2356   SDValue OurReg = DAG.getNode(ISD::ADD, dl, PtrVT, RegSaveArea,
2357                                RegConstant);
2358
2359   // Floating types are 32 bytes into RegSaveArea
2360   if (VT.isFloatingPoint())
2361     OurReg = DAG.getNode(ISD::ADD, dl, PtrVT, OurReg,
2362                          DAG.getConstant(32, dl, MVT::i32));
2363
2364   // increase {f,g}pr_index by 1 (or 2 if VT is i64)
2365   SDValue IndexPlus1 = DAG.getNode(ISD::ADD, dl, MVT::i32,
2366                                    VT.isInteger() ? GprIndex : FprIndex,
2367                                    DAG.getConstant(VT == MVT::i64 ? 2 : 1, dl,
2368                                                    MVT::i32));
2369
2370   InChain = DAG.getTruncStore(InChain, dl, IndexPlus1,
2371                               VT.isInteger() ? VAListPtr : FprPtr,
2372                               MachinePointerInfo(SV),
2373                               MVT::i8, false, false, 0);
2374
2375   // determine if we should load from reg_save_area or overflow_area
2376   SDValue Result = DAG.getNode(ISD::SELECT, dl, PtrVT, CC, OurReg, OverflowArea);
2377
2378   // increase overflow_area by 4/8 if gpr/fpr > 8
2379   SDValue OverflowAreaPlusN = DAG.getNode(ISD::ADD, dl, PtrVT, OverflowArea,
2380                                           DAG.getConstant(VT.isInteger() ? 4 : 8,
2381                                           dl, MVT::i32));
2382
2383   OverflowArea = DAG.getNode(ISD::SELECT, dl, MVT::i32, CC, OverflowArea,
2384                              OverflowAreaPlusN);
2385
2386   InChain = DAG.getTruncStore(InChain, dl, OverflowArea,
2387                               OverflowAreaPtr,
2388                               MachinePointerInfo(),
2389                               MVT::i32, false, false, 0);
2390
2391   return DAG.getLoad(VT, dl, InChain, Result, MachinePointerInfo(),
2392                      false, false, false, 0);
2393 }
2394
2395 SDValue PPCTargetLowering::LowerVACOPY(SDValue Op, SelectionDAG &DAG,
2396                                        const PPCSubtarget &Subtarget) const {
2397   assert(!Subtarget.isPPC64() && "LowerVACOPY is PPC32 only");
2398
2399   // We have to copy the entire va_list struct:
2400   // 2*sizeof(char) + 2 Byte alignment + 2*sizeof(char*) = 12 Byte
2401   return DAG.getMemcpy(Op.getOperand(0), Op,
2402                        Op.getOperand(1), Op.getOperand(2),
2403                        DAG.getConstant(12, SDLoc(Op), MVT::i32), 8, false, true,
2404                        false, MachinePointerInfo(), MachinePointerInfo());
2405 }
2406
2407 SDValue PPCTargetLowering::LowerADJUST_TRAMPOLINE(SDValue Op,
2408                                                   SelectionDAG &DAG) const {
2409   return Op.getOperand(0);
2410 }
2411
2412 SDValue PPCTargetLowering::LowerINIT_TRAMPOLINE(SDValue Op,
2413                                                 SelectionDAG &DAG) const {
2414   SDValue Chain = Op.getOperand(0);
2415   SDValue Trmp = Op.getOperand(1); // trampoline
2416   SDValue FPtr = Op.getOperand(2); // nested function
2417   SDValue Nest = Op.getOperand(3); // 'nest' parameter value
2418   SDLoc dl(Op);
2419
2420   EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(DAG.getDataLayout());
2421   bool isPPC64 = (PtrVT == MVT::i64);
2422   Type *IntPtrTy = DAG.getDataLayout().getIntPtrType(*DAG.getContext());
2423
2424   TargetLowering::ArgListTy Args;
2425   TargetLowering::ArgListEntry Entry;
2426
2427   Entry.Ty = IntPtrTy;
2428   Entry.Node = Trmp; Args.push_back(Entry);
2429
2430   // TrampSize == (isPPC64 ? 48 : 40);
2431   Entry.Node = DAG.getConstant(isPPC64 ? 48 : 40, dl,
2432                                isPPC64 ? MVT::i64 : MVT::i32);
2433   Args.push_back(Entry);
2434
2435   Entry.Node = FPtr; Args.push_back(Entry);
2436   Entry.Node = Nest; Args.push_back(Entry);
2437
2438   // Lower to a call to __trampoline_setup(Trmp, TrampSize, FPtr, ctx_reg)
2439   TargetLowering::CallLoweringInfo CLI(DAG);
2440   CLI.setDebugLoc(dl).setChain(Chain)
2441     .setCallee(CallingConv::C, Type::getVoidTy(*DAG.getContext()),
2442                DAG.getExternalSymbol("__trampoline_setup", PtrVT),
2443                std::move(Args), 0);
2444
2445   std::pair<SDValue, SDValue> CallResult = LowerCallTo(CLI);
2446   return CallResult.second;
2447 }
2448
2449 SDValue PPCTargetLowering::LowerVASTART(SDValue Op, SelectionDAG &DAG,
2450                                         const PPCSubtarget &Subtarget) const {
2451   MachineFunction &MF = DAG.getMachineFunction();
2452   PPCFunctionInfo *FuncInfo = MF.getInfo<PPCFunctionInfo>();
2453
2454   SDLoc dl(Op);
2455
2456   if (Subtarget.isDarwinABI() || Subtarget.isPPC64()) {
2457     // vastart just stores the address of the VarArgsFrameIndex slot into the
2458     // memory location argument.
2459     EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(MF.getDataLayout());
2460     SDValue FR = DAG.getFrameIndex(FuncInfo->getVarArgsFrameIndex(), PtrVT);
2461     const Value *SV = cast<SrcValueSDNode>(Op.getOperand(2))->getValue();
2462     return DAG.getStore(Op.getOperand(0), dl, FR, Op.getOperand(1),
2463                         MachinePointerInfo(SV),
2464                         false, false, 0);
2465   }
2466
2467   // For the 32-bit SVR4 ABI we follow the layout of the va_list struct.
2468   // We suppose the given va_list is already allocated.
2469   //
2470   // typedef struct {
2471   //  char gpr;     /* index into the array of 8 GPRs
2472   //                 * stored in the register save area
2473   //                 * gpr=0 corresponds to r3,
2474   //                 * gpr=1 to r4, etc.
2475   //                 */
2476   //  char fpr;     /* index into the array of 8 FPRs
2477   //                 * stored in the register save area
2478   //                 * fpr=0 corresponds to f1,
2479   //                 * fpr=1 to f2, etc.
2480   //                 */
2481   //  char *overflow_arg_area;
2482   //                /* location on stack that holds
2483   //                 * the next overflow argument
2484   //                 */
2485   //  char *reg_save_area;
2486   //               /* where r3:r10 and f1:f8 (if saved)
2487   //                * are stored
2488   //                */
2489   // } va_list[1];
2490
2491   SDValue ArgGPR = DAG.getConstant(FuncInfo->getVarArgsNumGPR(), dl, MVT::i32);
2492   SDValue ArgFPR = DAG.getConstant(FuncInfo->getVarArgsNumFPR(), dl, MVT::i32);
2493
2494   EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(MF.getDataLayout());
2495
2496   SDValue StackOffsetFI = DAG.getFrameIndex(FuncInfo->getVarArgsStackOffset(),
2497                                             PtrVT);
2498   SDValue FR = DAG.getFrameIndex(FuncInfo->getVarArgsFrameIndex(),
2499                                  PtrVT);
2500
2501   uint64_t FrameOffset = PtrVT.getSizeInBits()/8;
2502   SDValue ConstFrameOffset = DAG.getConstant(FrameOffset, dl, PtrVT);
2503
2504   uint64_t StackOffset = PtrVT.getSizeInBits()/8 - 1;
2505   SDValue ConstStackOffset = DAG.getConstant(StackOffset, dl, PtrVT);
2506
2507   uint64_t FPROffset = 1;
2508   SDValue ConstFPROffset = DAG.getConstant(FPROffset, dl, PtrVT);
2509
2510   const Value *SV = cast<SrcValueSDNode>(Op.getOperand(2))->getValue();
2511
2512   // Store first byte : number of int regs
2513   SDValue firstStore = DAG.getTruncStore(Op.getOperand(0), dl, ArgGPR,
2514                                          Op.getOperand(1),
2515                                          MachinePointerInfo(SV),
2516                                          MVT::i8, false, false, 0);
2517   uint64_t nextOffset = FPROffset;
2518   SDValue nextPtr = DAG.getNode(ISD::ADD, dl, PtrVT, Op.getOperand(1),
2519                                   ConstFPROffset);
2520
2521   // Store second byte : number of float regs
2522   SDValue secondStore =
2523     DAG.getTruncStore(firstStore, dl, ArgFPR, nextPtr,
2524                       MachinePointerInfo(SV, nextOffset), MVT::i8,
2525                       false, false, 0);
2526   nextOffset += StackOffset;
2527   nextPtr = DAG.getNode(ISD::ADD, dl, PtrVT, nextPtr, ConstStackOffset);
2528
2529   // Store second word : arguments given on stack
2530   SDValue thirdStore =
2531     DAG.getStore(secondStore, dl, StackOffsetFI, nextPtr,
2532                  MachinePointerInfo(SV, nextOffset),
2533                  false, false, 0);
2534   nextOffset += FrameOffset;
2535   nextPtr = DAG.getNode(ISD::ADD, dl, PtrVT, nextPtr, ConstFrameOffset);
2536
2537   // Store third word : arguments given in registers
2538   return DAG.getStore(thirdStore, dl, FR, nextPtr,
2539                       MachinePointerInfo(SV, nextOffset),
2540                       false, false, 0);
2541
2542 }
2543
2544 #include "PPCGenCallingConv.inc"
2545
2546 // Function whose sole purpose is to kill compiler warnings
2547 // stemming from unused functions included from PPCGenCallingConv.inc.
2548 CCAssignFn *PPCTargetLowering::useFastISelCCs(unsigned Flag) const {
2549   return Flag ? CC_PPC64_ELF_FIS : RetCC_PPC64_ELF_FIS;
2550 }
2551
2552 bool llvm::CC_PPC32_SVR4_Custom_Dummy(unsigned &ValNo, MVT &ValVT, MVT &LocVT,
2553                                       CCValAssign::LocInfo &LocInfo,
2554                                       ISD::ArgFlagsTy &ArgFlags,
2555                                       CCState &State) {
2556   return true;
2557 }
2558
2559 bool llvm::CC_PPC32_SVR4_Custom_AlignArgRegs(unsigned &ValNo, MVT &ValVT,
2560                                              MVT &LocVT,
2561                                              CCValAssign::LocInfo &LocInfo,
2562                                              ISD::ArgFlagsTy &ArgFlags,
2563                                              CCState &State) {
2564   static const MCPhysReg ArgRegs[] = {
2565     PPC::R3, PPC::R4, PPC::R5, PPC::R6,
2566     PPC::R7, PPC::R8, PPC::R9, PPC::R10,
2567   };
2568   const unsigned NumArgRegs = array_lengthof(ArgRegs);
2569
2570   unsigned RegNum = State.getFirstUnallocated(ArgRegs);
2571
2572   // Skip one register if the first unallocated register has an even register
2573   // number and there are still argument registers available which have not been
2574   // allocated yet. RegNum is actually an index into ArgRegs, which means we
2575   // need to skip a register if RegNum is odd.
2576   if (RegNum != NumArgRegs && RegNum % 2 == 1) {
2577     State.AllocateReg(ArgRegs[RegNum]);
2578   }
2579
2580   // Always return false here, as this function only makes sure that the first
2581   // unallocated register has an odd register number and does not actually
2582   // allocate a register for the current argument.
2583   return false;
2584 }
2585
2586 bool llvm::CC_PPC32_SVR4_Custom_AlignFPArgRegs(unsigned &ValNo, MVT &ValVT,
2587                                                MVT &LocVT,
2588                                                CCValAssign::LocInfo &LocInfo,
2589                                                ISD::ArgFlagsTy &ArgFlags,
2590                                                CCState &State) {
2591   static const MCPhysReg ArgRegs[] = {
2592     PPC::F1, PPC::F2, PPC::F3, PPC::F4, PPC::F5, PPC::F6, PPC::F7,
2593     PPC::F8
2594   };
2595
2596   const unsigned NumArgRegs = array_lengthof(ArgRegs);
2597
2598   unsigned RegNum = State.getFirstUnallocated(ArgRegs);
2599
2600   // If there is only one Floating-point register left we need to put both f64
2601   // values of a split ppc_fp128 value on the stack.
2602   if (RegNum != NumArgRegs && ArgRegs[RegNum] == PPC::F8) {
2603     State.AllocateReg(ArgRegs[RegNum]);
2604   }
2605
2606   // Always return false here, as this function only makes sure that the two f64
2607   // values a ppc_fp128 value is split into are both passed in registers or both
2608   // passed on the stack and does not actually allocate a register for the
2609   // current argument.
2610   return false;
2611 }
2612
2613 /// FPR - The set of FP registers that should be allocated for arguments,
2614 /// on Darwin.
2615 static const MCPhysReg FPR[] = {PPC::F1,  PPC::F2,  PPC::F3, PPC::F4, PPC::F5,
2616                                 PPC::F6,  PPC::F7,  PPC::F8, PPC::F9, PPC::F10,
2617                                 PPC::F11, PPC::F12, PPC::F13};
2618
2619 /// QFPR - The set of QPX registers that should be allocated for arguments.
2620 static const MCPhysReg QFPR[] = {
2621     PPC::QF1, PPC::QF2, PPC::QF3,  PPC::QF4,  PPC::QF5,  PPC::QF6, PPC::QF7,
2622     PPC::QF8, PPC::QF9, PPC::QF10, PPC::QF11, PPC::QF12, PPC::QF13};
2623
2624 /// CalculateStackSlotSize - Calculates the size reserved for this argument on
2625 /// the stack.
2626 static unsigned CalculateStackSlotSize(EVT ArgVT, ISD::ArgFlagsTy Flags,
2627                                        unsigned PtrByteSize) {
2628   unsigned ArgSize = ArgVT.getStoreSize();
2629   if (Flags.isByVal())
2630     ArgSize = Flags.getByValSize();
2631
2632   // Round up to multiples of the pointer size, except for array members,
2633   // which are always packed.
2634   if (!Flags.isInConsecutiveRegs())
2635     ArgSize = ((ArgSize + PtrByteSize - 1)/PtrByteSize) * PtrByteSize;
2636
2637   return ArgSize;
2638 }
2639
2640 /// CalculateStackSlotAlignment - Calculates the alignment of this argument
2641 /// on the stack.
2642 static unsigned CalculateStackSlotAlignment(EVT ArgVT, EVT OrigVT,
2643                                             ISD::ArgFlagsTy Flags,
2644                                             unsigned PtrByteSize) {
2645   unsigned Align = PtrByteSize;
2646
2647   // Altivec parameters are padded to a 16 byte boundary.
2648   if (ArgVT == MVT::v4f32 || ArgVT == MVT::v4i32 ||
2649       ArgVT == MVT::v8i16 || ArgVT == MVT::v16i8 ||
2650       ArgVT == MVT::v2f64 || ArgVT == MVT::v2i64 ||
2651       ArgVT == MVT::v1i128)
2652     Align = 16;
2653   // QPX vector types stored in double-precision are padded to a 32 byte
2654   // boundary.
2655   else if (ArgVT == MVT::v4f64 || ArgVT == MVT::v4i1)
2656     Align = 32;
2657
2658   // ByVal parameters are aligned as requested.
2659   if (Flags.isByVal()) {
2660     unsigned BVAlign = Flags.getByValAlign();
2661     if (BVAlign > PtrByteSize) {
2662       if (BVAlign % PtrByteSize != 0)
2663           llvm_unreachable(
2664             "ByVal alignment is not a multiple of the pointer size");
2665
2666       Align = BVAlign;
2667     }
2668   }
2669
2670   // Array members are always packed to their original alignment.
2671   if (Flags.isInConsecutiveRegs()) {
2672     // If the array member was split into multiple registers, the first
2673     // needs to be aligned to the size of the full type.  (Except for
2674     // ppcf128, which is only aligned as its f64 components.)
2675     if (Flags.isSplit() && OrigVT != MVT::ppcf128)
2676       Align = OrigVT.getStoreSize();
2677     else
2678       Align = ArgVT.getStoreSize();
2679   }
2680
2681   return Align;
2682 }
2683
2684 /// CalculateStackSlotUsed - Return whether this argument will use its
2685 /// stack slot (instead of being passed in registers).  ArgOffset,
2686 /// AvailableFPRs, and AvailableVRs must hold the current argument
2687 /// position, and will be updated to account for this argument.
2688 static bool CalculateStackSlotUsed(EVT ArgVT, EVT OrigVT,
2689                                    ISD::ArgFlagsTy Flags,
2690                                    unsigned PtrByteSize,
2691                                    unsigned LinkageSize,
2692                                    unsigned ParamAreaSize,
2693                                    unsigned &ArgOffset,
2694                                    unsigned &AvailableFPRs,
2695                                    unsigned &AvailableVRs, bool HasQPX) {
2696   bool UseMemory = false;
2697
2698   // Respect alignment of argument on the stack.
2699   unsigned Align =
2700     CalculateStackSlotAlignment(ArgVT, OrigVT, Flags, PtrByteSize);
2701   ArgOffset = ((ArgOffset + Align - 1) / Align) * Align;
2702   // If there's no space left in the argument save area, we must
2703   // use memory (this check also catches zero-sized arguments).
2704   if (ArgOffset >= LinkageSize + ParamAreaSize)
2705     UseMemory = true;
2706
2707   // Allocate argument on the stack.
2708   ArgOffset += CalculateStackSlotSize(ArgVT, Flags, PtrByteSize);
2709   if (Flags.isInConsecutiveRegsLast())
2710     ArgOffset = ((ArgOffset + PtrByteSize - 1)/PtrByteSize) * PtrByteSize;
2711   // If we overran the argument save area, we must use memory
2712   // (this check catches arguments passed partially in memory)
2713   if (ArgOffset > LinkageSize + ParamAreaSize)
2714     UseMemory = true;
2715
2716   // However, if the argument is actually passed in an FPR or a VR,
2717   // we don't use memory after all.
2718   if (!Flags.isByVal()) {
2719     if (ArgVT == MVT::f32 || ArgVT == MVT::f64 ||
2720         // QPX registers overlap with the scalar FP registers.
2721         (HasQPX && (ArgVT == MVT::v4f32 ||
2722                     ArgVT == MVT::v4f64 ||
2723                     ArgVT == MVT::v4i1)))
2724       if (AvailableFPRs > 0) {
2725         --AvailableFPRs;
2726         return false;
2727       }
2728     if (ArgVT == MVT::v4f32 || ArgVT == MVT::v4i32 ||
2729         ArgVT == MVT::v8i16 || ArgVT == MVT::v16i8 ||
2730         ArgVT == MVT::v2f64 || ArgVT == MVT::v2i64 ||
2731         ArgVT == MVT::v1i128)
2732       if (AvailableVRs > 0) {
2733         --AvailableVRs;
2734         return false;
2735       }
2736   }
2737
2738   return UseMemory;
2739 }
2740
2741 /// EnsureStackAlignment - Round stack frame size up from NumBytes to
2742 /// ensure minimum alignment required for target.
2743 static unsigned EnsureStackAlignment(const PPCFrameLowering *Lowering,
2744                                      unsigned NumBytes) {
2745   unsigned TargetAlign = Lowering->getStackAlignment();
2746   unsigned AlignMask = TargetAlign - 1;
2747   NumBytes = (NumBytes + AlignMask) & ~AlignMask;
2748   return NumBytes;
2749 }
2750
2751 SDValue
2752 PPCTargetLowering::LowerFormalArguments(SDValue Chain,
2753                                         CallingConv::ID CallConv, bool isVarArg,
2754                                         const SmallVectorImpl<ISD::InputArg>
2755                                           &Ins,
2756                                         SDLoc dl, SelectionDAG &DAG,
2757                                         SmallVectorImpl<SDValue> &InVals)
2758                                           const {
2759   if (Subtarget.isSVR4ABI()) {
2760     if (Subtarget.isPPC64())
2761       return LowerFormalArguments_64SVR4(Chain, CallConv, isVarArg, Ins,
2762                                          dl, DAG, InVals);
2763     else
2764       return LowerFormalArguments_32SVR4(Chain, CallConv, isVarArg, Ins,
2765                                          dl, DAG, InVals);
2766   } else {
2767     return LowerFormalArguments_Darwin(Chain, CallConv, isVarArg, Ins,
2768                                        dl, DAG, InVals);
2769   }
2770 }
2771
2772 SDValue
2773 PPCTargetLowering::LowerFormalArguments_32SVR4(
2774                                       SDValue Chain,
2775                                       CallingConv::ID CallConv, bool isVarArg,
2776                                       const SmallVectorImpl<ISD::InputArg>
2777                                         &Ins,
2778                                       SDLoc dl, SelectionDAG &DAG,
2779                                       SmallVectorImpl<SDValue> &InVals) const {
2780
2781   // 32-bit SVR4 ABI Stack Frame Layout:
2782   //              +-----------------------------------+
2783   //        +-->  |            Back chain             |
2784   //        |     +-----------------------------------+
2785   //        |     | Floating-point register save area |
2786   //        |     +-----------------------------------+
2787   //        |     |    General register save area     |
2788   //        |     +-----------------------------------+
2789   //        |     |          CR save word             |
2790   //        |     +-----------------------------------+
2791   //        |     |         VRSAVE save word          |
2792   //        |     +-----------------------------------+
2793   //        |     |         Alignment padding         |
2794   //        |     +-----------------------------------+
2795   //        |     |     Vector register save area     |
2796   //        |     +-----------------------------------+
2797   //        |     |       Local variable space        |
2798   //        |     +-----------------------------------+
2799   //        |     |        Parameter list area        |
2800   //        |     +-----------------------------------+
2801   //        |     |           LR save word            |
2802   //        |     +-----------------------------------+
2803   // SP-->  +---  |            Back chain             |
2804   //              +-----------------------------------+
2805   //
2806   // Specifications:
2807   //   System V Application Binary Interface PowerPC Processor Supplement
2808   //   AltiVec Technology Programming Interface Manual
2809
2810   MachineFunction &MF = DAG.getMachineFunction();
2811   MachineFrameInfo *MFI = MF.getFrameInfo();
2812   PPCFunctionInfo *FuncInfo = MF.getInfo<PPCFunctionInfo>();
2813
2814   EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(MF.getDataLayout());
2815   // Potential tail calls could cause overwriting of argument stack slots.
2816   bool isImmutable = !(getTargetMachine().Options.GuaranteedTailCallOpt &&
2817                        (CallConv == CallingConv::Fast));
2818   unsigned PtrByteSize = 4;
2819
2820   // Assign locations to all of the incoming arguments.
2821   SmallVector<CCValAssign, 16> ArgLocs;
2822   CCState CCInfo(CallConv, isVarArg, DAG.getMachineFunction(), ArgLocs,
2823                  *DAG.getContext());
2824
2825   // Reserve space for the linkage area on the stack.
2826   unsigned LinkageSize = Subtarget.getFrameLowering()->getLinkageSize();
2827   CCInfo.AllocateStack(LinkageSize, PtrByteSize);
2828
2829   CCInfo.AnalyzeFormalArguments(Ins, CC_PPC32_SVR4);
2830
2831   for (unsigned i = 0, e = ArgLocs.size(); i != e; ++i) {
2832     CCValAssign &VA = ArgLocs[i];
2833
2834     // Arguments stored in registers.
2835     if (VA.isRegLoc()) {
2836       const TargetRegisterClass *RC;
2837       EVT ValVT = VA.getValVT();
2838
2839       switch (ValVT.getSimpleVT().SimpleTy) {
2840         default:
2841           llvm_unreachable("ValVT not supported by formal arguments Lowering");
2842         case MVT::i1:
2843         case MVT::i32:
2844           RC = &PPC::GPRCRegClass;
2845           break;
2846         case MVT::f32:
2847           if (Subtarget.hasP8Vector())
2848             RC = &PPC::VSSRCRegClass;
2849           else
2850             RC = &PPC::F4RCRegClass;
2851           break;
2852         case MVT::f64:
2853           if (Subtarget.hasVSX())
2854             RC = &PPC::VSFRCRegClass;
2855           else
2856             RC = &PPC::F8RCRegClass;
2857           break;
2858         case MVT::v16i8:
2859         case MVT::v8i16:
2860         case MVT::v4i32:
2861           RC = &PPC::VRRCRegClass;
2862           break;
2863         case MVT::v4f32:
2864           RC = Subtarget.hasQPX() ? &PPC::QSRCRegClass : &PPC::VRRCRegClass;
2865           break;
2866         case MVT::v2f64:
2867         case MVT::v2i64:
2868           RC = &PPC::VSHRCRegClass;
2869           break;
2870         case MVT::v4f64:
2871           RC = &PPC::QFRCRegClass;
2872           break;
2873         case MVT::v4i1:
2874           RC = &PPC::QBRCRegClass;
2875           break;
2876       }
2877
2878       // Transform the arguments stored in physical registers into virtual ones.
2879       unsigned Reg = MF.addLiveIn(VA.getLocReg(), RC);
2880       SDValue ArgValue = DAG.getCopyFromReg(Chain, dl, Reg,
2881                                             ValVT == MVT::i1 ? MVT::i32 : ValVT);
2882
2883       if (ValVT == MVT::i1)
2884         ArgValue = DAG.getNode(ISD::TRUNCATE, dl, MVT::i1, ArgValue);
2885
2886       InVals.push_back(ArgValue);
2887     } else {
2888       // Argument stored in memory.
2889       assert(VA.isMemLoc());
2890
2891       unsigned ArgSize = VA.getLocVT().getStoreSize();
2892       int FI = MFI->CreateFixedObject(ArgSize, VA.getLocMemOffset(),
2893                                       isImmutable);
2894
2895       // Create load nodes to retrieve arguments from the stack.
2896       SDValue FIN = DAG.getFrameIndex(FI, PtrVT);
2897       InVals.push_back(DAG.getLoad(VA.getValVT(), dl, Chain, FIN,
2898                                    MachinePointerInfo(),
2899                                    false, false, false, 0));
2900     }
2901   }
2902
2903   // Assign locations to all of the incoming aggregate by value arguments.
2904   // Aggregates passed by value are stored in the local variable space of the
2905   // caller's stack frame, right above the parameter list area.
2906   SmallVector<CCValAssign, 16> ByValArgLocs;
2907   CCState CCByValInfo(CallConv, isVarArg, DAG.getMachineFunction(),
2908                       ByValArgLocs, *DAG.getContext());
2909
2910   // Reserve stack space for the allocations in CCInfo.
2911   CCByValInfo.AllocateStack(CCInfo.getNextStackOffset(), PtrByteSize);
2912
2913   CCByValInfo.AnalyzeFormalArguments(Ins, CC_PPC32_SVR4_ByVal);
2914
2915   // Area that is at least reserved in the caller of this function.
2916   unsigned MinReservedArea = CCByValInfo.getNextStackOffset();
2917   MinReservedArea = std::max(MinReservedArea, LinkageSize);
2918
2919   // Set the size that is at least reserved in caller of this function.  Tail
2920   // call optimized function's reserved stack space needs to be aligned so that
2921   // taking the difference between two stack areas will result in an aligned
2922   // stack.
2923   MinReservedArea =
2924       EnsureStackAlignment(Subtarget.getFrameLowering(), MinReservedArea);
2925   FuncInfo->setMinReservedArea(MinReservedArea);
2926
2927   SmallVector<SDValue, 8> MemOps;
2928
2929   // If the function takes variable number of arguments, make a frame index for
2930   // the start of the first vararg value... for expansion of llvm.va_start.
2931   if (isVarArg) {
2932     static const MCPhysReg GPArgRegs[] = {
2933       PPC::R3, PPC::R4, PPC::R5, PPC::R6,
2934       PPC::R7, PPC::R8, PPC::R9, PPC::R10,
2935     };
2936     const unsigned NumGPArgRegs = array_lengthof(GPArgRegs);
2937
2938     static const MCPhysReg FPArgRegs[] = {
2939       PPC::F1, PPC::F2, PPC::F3, PPC::F4, PPC::F5, PPC::F6, PPC::F7,
2940       PPC::F8
2941     };
2942     unsigned NumFPArgRegs = array_lengthof(FPArgRegs);
2943     if (DisablePPCFloatInVariadic)
2944       NumFPArgRegs = 0;
2945
2946     FuncInfo->setVarArgsNumGPR(CCInfo.getFirstUnallocated(GPArgRegs));
2947     FuncInfo->setVarArgsNumFPR(CCInfo.getFirstUnallocated(FPArgRegs));
2948
2949     // Make room for NumGPArgRegs and NumFPArgRegs.
2950     int Depth = NumGPArgRegs * PtrVT.getSizeInBits()/8 +
2951                 NumFPArgRegs * MVT(MVT::f64).getSizeInBits()/8;
2952
2953     FuncInfo->setVarArgsStackOffset(
2954       MFI->CreateFixedObject(PtrVT.getSizeInBits()/8,
2955                              CCInfo.getNextStackOffset(), true));
2956
2957     FuncInfo->setVarArgsFrameIndex(MFI->CreateStackObject(Depth, 8, false));
2958     SDValue FIN = DAG.getFrameIndex(FuncInfo->getVarArgsFrameIndex(), PtrVT);
2959
2960     // The fixed integer arguments of a variadic function are stored to the
2961     // VarArgsFrameIndex on the stack so that they may be loaded by deferencing
2962     // the result of va_next.
2963     for (unsigned GPRIndex = 0; GPRIndex != NumGPArgRegs; ++GPRIndex) {
2964       // Get an existing live-in vreg, or add a new one.
2965       unsigned VReg = MF.getRegInfo().getLiveInVirtReg(GPArgRegs[GPRIndex]);
2966       if (!VReg)
2967         VReg = MF.addLiveIn(GPArgRegs[GPRIndex], &PPC::GPRCRegClass);
2968
2969       SDValue Val = DAG.getCopyFromReg(Chain, dl, VReg, PtrVT);
2970       SDValue Store = DAG.getStore(Val.getValue(1), dl, Val, FIN,
2971                                    MachinePointerInfo(), false, false, 0);
2972       MemOps.push_back(Store);
2973       // Increment the address by four for the next argument to store
2974       SDValue PtrOff = DAG.getConstant(PtrVT.getSizeInBits()/8, dl, PtrVT);
2975       FIN = DAG.getNode(ISD::ADD, dl, PtrOff.getValueType(), FIN, PtrOff);
2976     }
2977
2978     // FIXME 32-bit SVR4: We only need to save FP argument registers if CR bit 6
2979     // is set.
2980     // The double arguments are stored to the VarArgsFrameIndex
2981     // on the stack.
2982     for (unsigned FPRIndex = 0; FPRIndex != NumFPArgRegs; ++FPRIndex) {
2983       // Get an existing live-in vreg, or add a new one.
2984       unsigned VReg = MF.getRegInfo().getLiveInVirtReg(FPArgRegs[FPRIndex]);
2985       if (!VReg)
2986         VReg = MF.addLiveIn(FPArgRegs[FPRIndex], &PPC::F8RCRegClass);
2987
2988       SDValue Val = DAG.getCopyFromReg(Chain, dl, VReg, MVT::f64);
2989       SDValue Store = DAG.getStore(Val.getValue(1), dl, Val, FIN,
2990                                    MachinePointerInfo(), false, false, 0);
2991       MemOps.push_back(Store);
2992       // Increment the address by eight for the next argument to store
2993       SDValue PtrOff = DAG.getConstant(MVT(MVT::f64).getSizeInBits()/8, dl,
2994                                          PtrVT);
2995       FIN = DAG.getNode(ISD::ADD, dl, PtrOff.getValueType(), FIN, PtrOff);
2996     }
2997   }
2998
2999   if (!MemOps.empty())
3000     Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, MemOps);
3001
3002   return Chain;
3003 }
3004
3005 // PPC64 passes i8, i16, and i32 values in i64 registers. Promote
3006 // value to MVT::i64 and then truncate to the correct register size.
3007 SDValue
3008 PPCTargetLowering::extendArgForPPC64(ISD::ArgFlagsTy Flags, EVT ObjectVT,
3009                                      SelectionDAG &DAG, SDValue ArgVal,
3010                                      SDLoc dl) const {
3011   if (Flags.isSExt())
3012     ArgVal = DAG.getNode(ISD::AssertSext, dl, MVT::i64, ArgVal,
3013                          DAG.getValueType(ObjectVT));
3014   else if (Flags.isZExt())
3015     ArgVal = DAG.getNode(ISD::AssertZext, dl, MVT::i64, ArgVal,
3016                          DAG.getValueType(ObjectVT));
3017
3018   return DAG.getNode(ISD::TRUNCATE, dl, ObjectVT, ArgVal);
3019 }
3020
3021 SDValue
3022 PPCTargetLowering::LowerFormalArguments_64SVR4(
3023                                       SDValue Chain,
3024                                       CallingConv::ID CallConv, bool isVarArg,
3025                                       const SmallVectorImpl<ISD::InputArg>
3026                                         &Ins,
3027                                       SDLoc dl, SelectionDAG &DAG,
3028                                       SmallVectorImpl<SDValue> &InVals) const {
3029   // TODO: add description of PPC stack frame format, or at least some docs.
3030   //
3031   bool isELFv2ABI = Subtarget.isELFv2ABI();
3032   bool isLittleEndian = Subtarget.isLittleEndian();
3033   MachineFunction &MF = DAG.getMachineFunction();
3034   MachineFrameInfo *MFI = MF.getFrameInfo();
3035   PPCFunctionInfo *FuncInfo = MF.getInfo<PPCFunctionInfo>();
3036
3037   assert(!(CallConv == CallingConv::Fast && isVarArg) &&
3038          "fastcc not supported on varargs functions");
3039
3040   EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(MF.getDataLayout());
3041   // Potential tail calls could cause overwriting of argument stack slots.
3042   bool isImmutable = !(getTargetMachine().Options.GuaranteedTailCallOpt &&
3043                        (CallConv == CallingConv::Fast));
3044   unsigned PtrByteSize = 8;
3045   unsigned LinkageSize = Subtarget.getFrameLowering()->getLinkageSize();
3046
3047   static const MCPhysReg GPR[] = {
3048     PPC::X3, PPC::X4, PPC::X5, PPC::X6,
3049     PPC::X7, PPC::X8, PPC::X9, PPC::X10,
3050   };
3051   static const MCPhysReg VR[] = {
3052     PPC::V2, PPC::V3, PPC::V4, PPC::V5, PPC::V6, PPC::V7, PPC::V8,
3053     PPC::V9, PPC::V10, PPC::V11, PPC::V12, PPC::V13
3054   };
3055   static const MCPhysReg VSRH[] = {
3056     PPC::VSH2, PPC::VSH3, PPC::VSH4, PPC::VSH5, PPC::VSH6, PPC::VSH7, PPC::VSH8,
3057     PPC::VSH9, PPC::VSH10, PPC::VSH11, PPC::VSH12, PPC::VSH13
3058   };
3059
3060   const unsigned Num_GPR_Regs = array_lengthof(GPR);
3061   const unsigned Num_FPR_Regs = 13;
3062   const unsigned Num_VR_Regs  = array_lengthof(VR);
3063   const unsigned Num_QFPR_Regs = Num_FPR_Regs;
3064
3065   // Do a first pass over the arguments to determine whether the ABI
3066   // guarantees that our caller has allocated the parameter save area
3067   // on its stack frame.  In the ELFv1 ABI, this is always the case;
3068   // in the ELFv2 ABI, it is true if this is a vararg function or if
3069   // any parameter is located in a stack slot.
3070
3071   bool HasParameterArea = !isELFv2ABI || isVarArg;
3072   unsigned ParamAreaSize = Num_GPR_Regs * PtrByteSize;
3073   unsigned NumBytes = LinkageSize;
3074   unsigned AvailableFPRs = Num_FPR_Regs;
3075   unsigned AvailableVRs = Num_VR_Regs;
3076   for (unsigned i = 0, e = Ins.size(); i != e; ++i) {
3077     if (Ins[i].Flags.isNest())
3078       continue;
3079
3080     if (CalculateStackSlotUsed(Ins[i].VT, Ins[i].ArgVT, Ins[i].Flags,
3081                                PtrByteSize, LinkageSize, ParamAreaSize,
3082                                NumBytes, AvailableFPRs, AvailableVRs,
3083                                Subtarget.hasQPX()))
3084       HasParameterArea = true;
3085   }
3086
3087   // Add DAG nodes to load the arguments or copy them out of registers.  On
3088   // entry to a function on PPC, the arguments start after the linkage area,
3089   // although the first ones are often in registers.
3090
3091   unsigned ArgOffset = LinkageSize;
3092   unsigned GPR_idx = 0, FPR_idx = 0, VR_idx = 0;
3093   unsigned &QFPR_idx = FPR_idx;
3094   SmallVector<SDValue, 8> MemOps;
3095   Function::const_arg_iterator FuncArg = MF.getFunction()->arg_begin();
3096   unsigned CurArgIdx = 0;
3097   for (unsigned ArgNo = 0, e = Ins.size(); ArgNo != e; ++ArgNo) {
3098     SDValue ArgVal;
3099     bool needsLoad = false;
3100     EVT ObjectVT = Ins[ArgNo].VT;
3101     EVT OrigVT = Ins[ArgNo].ArgVT;
3102     unsigned ObjSize = ObjectVT.getStoreSize();
3103     unsigned ArgSize = ObjSize;
3104     ISD::ArgFlagsTy Flags = Ins[ArgNo].Flags;
3105     if (Ins[ArgNo].isOrigArg()) {
3106       std::advance(FuncArg, Ins[ArgNo].getOrigArgIndex() - CurArgIdx);
3107       CurArgIdx = Ins[ArgNo].getOrigArgIndex();
3108     }
3109     // We re-align the argument offset for each argument, except when using the
3110     // fast calling convention, when we need to make sure we do that only when
3111     // we'll actually use a stack slot.
3112     unsigned CurArgOffset, Align;
3113     auto ComputeArgOffset = [&]() {
3114       /* Respect alignment of argument on the stack.  */
3115       Align = CalculateStackSlotAlignment(ObjectVT, OrigVT, Flags, PtrByteSize);
3116       ArgOffset = ((ArgOffset + Align - 1) / Align) * Align;
3117       CurArgOffset = ArgOffset;
3118     };
3119
3120     if (CallConv != CallingConv::Fast) {
3121       ComputeArgOffset();
3122
3123       /* Compute GPR index associated with argument offset.  */
3124       GPR_idx = (ArgOffset - LinkageSize) / PtrByteSize;
3125       GPR_idx = std::min(GPR_idx, Num_GPR_Regs);
3126     }
3127
3128     // FIXME the codegen can be much improved in some cases.
3129     // We do not have to keep everything in memory.
3130     if (Flags.isByVal()) {
3131       assert(Ins[ArgNo].isOrigArg() && "Byval arguments cannot be implicit");
3132
3133       if (CallConv == CallingConv::Fast)
3134         ComputeArgOffset();
3135
3136       // ObjSize is the true size, ArgSize rounded up to multiple of registers.
3137       ObjSize = Flags.getByValSize();
3138       ArgSize = ((ObjSize + PtrByteSize - 1)/PtrByteSize) * PtrByteSize;
3139       // Empty aggregate parameters do not take up registers.  Examples:
3140       //   struct { } a;
3141       //   union  { } b;
3142       //   int c[0];
3143       // etc.  However, we have to provide a place-holder in InVals, so
3144       // pretend we have an 8-byte item at the current address for that
3145       // purpose.
3146       if (!ObjSize) {
3147         int FI = MFI->CreateFixedObject(PtrByteSize, ArgOffset, true);
3148         SDValue FIN = DAG.getFrameIndex(FI, PtrVT);
3149         InVals.push_back(FIN);
3150         continue;
3151       }
3152
3153       // Create a stack object covering all stack doublewords occupied
3154       // by the argument.  If the argument is (fully or partially) on
3155       // the stack, or if the argument is fully in registers but the
3156       // caller has allocated the parameter save anyway, we can refer
3157       // directly to the caller's stack frame.  Otherwise, create a
3158       // local copy in our own frame.
3159       int FI;
3160       if (HasParameterArea ||
3161           ArgSize + ArgOffset > LinkageSize + Num_GPR_Regs * PtrByteSize)
3162         FI = MFI->CreateFixedObject(ArgSize, ArgOffset, false, true);
3163       else
3164         FI = MFI->CreateStackObject(ArgSize, Align, false);
3165       SDValue FIN = DAG.getFrameIndex(FI, PtrVT);
3166
3167       // Handle aggregates smaller than 8 bytes.
3168       if (ObjSize < PtrByteSize) {
3169         // The value of the object is its address, which differs from the
3170         // address of the enclosing doubleword on big-endian systems.
3171         SDValue Arg = FIN;
3172         if (!isLittleEndian) {
3173           SDValue ArgOff = DAG.getConstant(PtrByteSize - ObjSize, dl, PtrVT);
3174           Arg = DAG.getNode(ISD::ADD, dl, ArgOff.getValueType(), Arg, ArgOff);
3175         }
3176         InVals.push_back(Arg);
3177
3178         if (GPR_idx != Num_GPR_Regs) {
3179           unsigned VReg = MF.addLiveIn(GPR[GPR_idx++], &PPC::G8RCRegClass);
3180           SDValue Val = DAG.getCopyFromReg(Chain, dl, VReg, PtrVT);
3181           SDValue Store;
3182
3183           if (ObjSize==1 || ObjSize==2 || ObjSize==4) {
3184             EVT ObjType = (ObjSize == 1 ? MVT::i8 :
3185                            (ObjSize == 2 ? MVT::i16 : MVT::i32));
3186             Store = DAG.getTruncStore(Val.getValue(1), dl, Val, Arg,
3187                                       MachinePointerInfo(&*FuncArg), ObjType,
3188                                       false, false, 0);
3189           } else {
3190             // For sizes that don't fit a truncating store (3, 5, 6, 7),
3191             // store the whole register as-is to the parameter save area
3192             // slot.
3193             Store =
3194                 DAG.getStore(Val.getValue(1), dl, Val, FIN,
3195                              MachinePointerInfo(&*FuncArg), false, false, 0);
3196           }
3197
3198           MemOps.push_back(Store);
3199         }
3200         // Whether we copied from a register or not, advance the offset
3201         // into the parameter save area by a full doubleword.
3202         ArgOffset += PtrByteSize;
3203         continue;
3204       }
3205
3206       // The value of the object is its address, which is the address of
3207       // its first stack doubleword.
3208       InVals.push_back(FIN);
3209
3210       // Store whatever pieces of the object are in registers to memory.
3211       for (unsigned j = 0; j < ArgSize; j += PtrByteSize) {
3212         if (GPR_idx == Num_GPR_Regs)
3213           break;
3214
3215         unsigned VReg = MF.addLiveIn(GPR[GPR_idx], &PPC::G8RCRegClass);
3216         SDValue Val = DAG.getCopyFromReg(Chain, dl, VReg, PtrVT);
3217         SDValue Addr = FIN;
3218         if (j) {
3219           SDValue Off = DAG.getConstant(j, dl, PtrVT);
3220           Addr = DAG.getNode(ISD::ADD, dl, Off.getValueType(), Addr, Off);
3221         }
3222         SDValue Store =
3223             DAG.getStore(Val.getValue(1), dl, Val, Addr,
3224                          MachinePointerInfo(&*FuncArg, j), false, false, 0);
3225         MemOps.push_back(Store);
3226         ++GPR_idx;
3227       }
3228       ArgOffset += ArgSize;
3229       continue;
3230     }
3231
3232     switch (ObjectVT.getSimpleVT().SimpleTy) {
3233     default: llvm_unreachable("Unhandled argument type!");
3234     case MVT::i1:
3235     case MVT::i32:
3236     case MVT::i64:
3237       if (Flags.isNest()) {
3238         // The 'nest' parameter, if any, is passed in R11.
3239         unsigned VReg = MF.addLiveIn(PPC::X11, &PPC::G8RCRegClass);
3240         ArgVal = DAG.getCopyFromReg(Chain, dl, VReg, MVT::i64);
3241
3242         if (ObjectVT == MVT::i32 || ObjectVT == MVT::i1)
3243           ArgVal = extendArgForPPC64(Flags, ObjectVT, DAG, ArgVal, dl);
3244
3245         break;
3246       }
3247
3248       // These can be scalar arguments or elements of an integer array type
3249       // passed directly.  Clang may use those instead of "byval" aggregate
3250       // types to avoid forcing arguments to memory unnecessarily.
3251       if (GPR_idx != Num_GPR_Regs) {
3252         unsigned VReg = MF.addLiveIn(GPR[GPR_idx++], &PPC::G8RCRegClass);
3253         ArgVal = DAG.getCopyFromReg(Chain, dl, VReg, MVT::i64);
3254
3255         if (ObjectVT == MVT::i32 || ObjectVT == MVT::i1)
3256           // PPC64 passes i8, i16, and i32 values in i64 registers. Promote
3257           // value to MVT::i64 and then truncate to the correct register size.
3258           ArgVal = extendArgForPPC64(Flags, ObjectVT, DAG, ArgVal, dl);
3259       } else {
3260         if (CallConv == CallingConv::Fast)
3261           ComputeArgOffset();
3262
3263         needsLoad = true;
3264         ArgSize = PtrByteSize;
3265       }
3266       if (CallConv != CallingConv::Fast || needsLoad)
3267         ArgOffset += 8;
3268       break;
3269
3270     case MVT::f32:
3271     case MVT::f64:
3272       // These can be scalar arguments or elements of a float array type
3273       // passed directly.  The latter are used to implement ELFv2 homogenous
3274       // float aggregates.
3275       if (FPR_idx != Num_FPR_Regs) {
3276         unsigned VReg;
3277
3278         if (ObjectVT == MVT::f32)
3279           VReg = MF.addLiveIn(FPR[FPR_idx],
3280                               Subtarget.hasP8Vector()
3281                                   ? &PPC::VSSRCRegClass
3282                                   : &PPC::F4RCRegClass);
3283         else
3284           VReg = MF.addLiveIn(FPR[FPR_idx], Subtarget.hasVSX()
3285                                                 ? &PPC::VSFRCRegClass
3286                                                 : &PPC::F8RCRegClass);
3287
3288         ArgVal = DAG.getCopyFromReg(Chain, dl, VReg, ObjectVT);
3289         ++FPR_idx;
3290       } else if (GPR_idx != Num_GPR_Regs && CallConv != CallingConv::Fast) {
3291         // FIXME: We may want to re-enable this for CallingConv::Fast on the P8
3292         // once we support fp <-> gpr moves.
3293
3294         // This can only ever happen in the presence of f32 array types,
3295         // since otherwise we never run out of FPRs before running out
3296         // of GPRs.
3297         unsigned VReg = MF.addLiveIn(GPR[GPR_idx++], &PPC::G8RCRegClass);
3298         ArgVal = DAG.getCopyFromReg(Chain, dl, VReg, MVT::i64);
3299
3300         if (ObjectVT == MVT::f32) {
3301           if ((ArgOffset % PtrByteSize) == (isLittleEndian ? 4 : 0))
3302             ArgVal = DAG.getNode(ISD::SRL, dl, MVT::i64, ArgVal,
3303                                  DAG.getConstant(32, dl, MVT::i32));
3304           ArgVal = DAG.getNode(ISD::TRUNCATE, dl, MVT::i32, ArgVal);
3305         }
3306
3307         ArgVal = DAG.getNode(ISD::BITCAST, dl, ObjectVT, ArgVal);
3308       } else {
3309         if (CallConv == CallingConv::Fast)
3310           ComputeArgOffset();
3311
3312         needsLoad = true;
3313       }
3314
3315       // When passing an array of floats, the array occupies consecutive
3316       // space in the argument area; only round up to the next doubleword
3317       // at the end of the array.  Otherwise, each float takes 8 bytes.
3318       if (CallConv != CallingConv::Fast || needsLoad) {
3319         ArgSize = Flags.isInConsecutiveRegs() ? ObjSize : PtrByteSize;
3320         ArgOffset += ArgSize;
3321         if (Flags.isInConsecutiveRegsLast())
3322           ArgOffset = ((ArgOffset + PtrByteSize - 1)/PtrByteSize) * PtrByteSize;
3323       }
3324       break;
3325     case MVT::v4f32:
3326     case MVT::v4i32:
3327     case MVT::v8i16:
3328     case MVT::v16i8:
3329     case MVT::v2f64:
3330     case MVT::v2i64:
3331     case MVT::v1i128:
3332       if (!Subtarget.hasQPX()) {
3333       // These can be scalar arguments or elements of a vector array type
3334       // passed directly.  The latter are used to implement ELFv2 homogenous
3335       // vector aggregates.
3336       if (VR_idx != Num_VR_Regs) {
3337         unsigned VReg = (ObjectVT == MVT::v2f64 || ObjectVT == MVT::v2i64) ?
3338                         MF.addLiveIn(VSRH[VR_idx], &PPC::VSHRCRegClass) :
3339                         MF.addLiveIn(VR[VR_idx], &PPC::VRRCRegClass);
3340         ArgVal = DAG.getCopyFromReg(Chain, dl, VReg, ObjectVT);
3341         ++VR_idx;
3342       } else {
3343         if (CallConv == CallingConv::Fast)
3344           ComputeArgOffset();
3345
3346         needsLoad = true;
3347       }
3348       if (CallConv != CallingConv::Fast || needsLoad)
3349         ArgOffset += 16;
3350       break;
3351       } // not QPX
3352
3353       assert(ObjectVT.getSimpleVT().SimpleTy == MVT::v4f32 &&
3354              "Invalid QPX parameter type");
3355       /* fall through */
3356
3357     case MVT::v4f64:
3358     case MVT::v4i1:
3359       // QPX vectors are treated like their scalar floating-point subregisters
3360       // (except that they're larger).
3361       unsigned Sz = ObjectVT.getSimpleVT().SimpleTy == MVT::v4f32 ? 16 : 32;
3362       if (QFPR_idx != Num_QFPR_Regs) {
3363         const TargetRegisterClass *RC;
3364         switch (ObjectVT.getSimpleVT().SimpleTy) {
3365         case MVT::v4f64: RC = &PPC::QFRCRegClass; break;
3366         case MVT::v4f32: RC = &PPC::QSRCRegClass; break;
3367         default:         RC = &PPC::QBRCRegClass; break;
3368         }
3369
3370         unsigned VReg = MF.addLiveIn(QFPR[QFPR_idx], RC);
3371         ArgVal = DAG.getCopyFromReg(Chain, dl, VReg, ObjectVT);
3372         ++QFPR_idx;
3373       } else {
3374         if (CallConv == CallingConv::Fast)
3375           ComputeArgOffset();
3376         needsLoad = true;
3377       }
3378       if (CallConv != CallingConv::Fast || needsLoad)
3379         ArgOffset += Sz;
3380       break;
3381     }
3382
3383     // We need to load the argument to a virtual register if we determined
3384     // above that we ran out of physical registers of the appropriate type.
3385     if (needsLoad) {
3386       if (ObjSize < ArgSize && !isLittleEndian)
3387         CurArgOffset += ArgSize - ObjSize;
3388       int FI = MFI->CreateFixedObject(ObjSize, CurArgOffset, isImmutable);
3389       SDValue FIN = DAG.getFrameIndex(FI, PtrVT);
3390       ArgVal = DAG.getLoad(ObjectVT, dl, Chain, FIN, MachinePointerInfo(),
3391                            false, false, false, 0);
3392     }
3393
3394     InVals.push_back(ArgVal);
3395   }
3396
3397   // Area that is at least reserved in the caller of this function.
3398   unsigned MinReservedArea;
3399   if (HasParameterArea)
3400     MinReservedArea = std::max(ArgOffset, LinkageSize + 8 * PtrByteSize);
3401   else
3402     MinReservedArea = LinkageSize;
3403
3404   // Set the size that is at least reserved in caller of this function.  Tail
3405   // call optimized functions' reserved stack space needs to be aligned so that
3406   // taking the difference between two stack areas will result in an aligned
3407   // stack.
3408   MinReservedArea =
3409       EnsureStackAlignment(Subtarget.getFrameLowering(), MinReservedArea);
3410   FuncInfo->setMinReservedArea(MinReservedArea);
3411
3412   // If the function takes variable number of arguments, make a frame index for
3413   // the start of the first vararg value... for expansion of llvm.va_start.
3414   if (isVarArg) {
3415     int Depth = ArgOffset;
3416
3417     FuncInfo->setVarArgsFrameIndex(
3418       MFI->CreateFixedObject(PtrByteSize, Depth, true));
3419     SDValue FIN = DAG.getFrameIndex(FuncInfo->getVarArgsFrameIndex(), PtrVT);
3420
3421     // If this function is vararg, store any remaining integer argument regs
3422     // to their spots on the stack so that they may be loaded by deferencing the
3423     // result of va_next.
3424     for (GPR_idx = (ArgOffset - LinkageSize) / PtrByteSize;
3425          GPR_idx < Num_GPR_Regs; ++GPR_idx) {
3426       unsigned VReg = MF.addLiveIn(GPR[GPR_idx], &PPC::G8RCRegClass);
3427       SDValue Val = DAG.getCopyFromReg(Chain, dl, VReg, PtrVT);
3428       SDValue Store = DAG.getStore(Val.getValue(1), dl, Val, FIN,
3429                                    MachinePointerInfo(), false, false, 0);
3430       MemOps.push_back(Store);
3431       // Increment the address by four for the next argument to store
3432       SDValue PtrOff = DAG.getConstant(PtrByteSize, dl, PtrVT);
3433       FIN = DAG.getNode(ISD::ADD, dl, PtrOff.getValueType(), FIN, PtrOff);
3434     }
3435   }
3436
3437   if (!MemOps.empty())
3438     Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, MemOps);
3439
3440   return Chain;
3441 }
3442
3443 SDValue
3444 PPCTargetLowering::LowerFormalArguments_Darwin(
3445                                       SDValue Chain,
3446                                       CallingConv::ID CallConv, bool isVarArg,
3447                                       const SmallVectorImpl<ISD::InputArg>
3448                                         &Ins,
3449                                       SDLoc dl, SelectionDAG &DAG,
3450                                       SmallVectorImpl<SDValue> &InVals) const {
3451   // TODO: add description of PPC stack frame format, or at least some docs.
3452   //
3453   MachineFunction &MF = DAG.getMachineFunction();
3454   MachineFrameInfo *MFI = MF.getFrameInfo();
3455   PPCFunctionInfo *FuncInfo = MF.getInfo<PPCFunctionInfo>();
3456
3457   EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(MF.getDataLayout());
3458   bool isPPC64 = PtrVT == MVT::i64;
3459   // Potential tail calls could cause overwriting of argument stack slots.
3460   bool isImmutable = !(getTargetMachine().Options.GuaranteedTailCallOpt &&
3461                        (CallConv == CallingConv::Fast));
3462   unsigned PtrByteSize = isPPC64 ? 8 : 4;
3463   unsigned LinkageSize = Subtarget.getFrameLowering()->getLinkageSize();
3464   unsigned ArgOffset = LinkageSize;
3465   // Area that is at least reserved in caller of this function.
3466   unsigned MinReservedArea = ArgOffset;
3467
3468   static const MCPhysReg GPR_32[] = {           // 32-bit registers.
3469     PPC::R3, PPC::R4, PPC::R5, PPC::R6,
3470     PPC::R7, PPC::R8, PPC::R9, PPC::R10,
3471   };
3472   static const MCPhysReg GPR_64[] = {           // 64-bit registers.
3473     PPC::X3, PPC::X4, PPC::X5, PPC::X6,
3474     PPC::X7, PPC::X8, PPC::X9, PPC::X10,
3475   };
3476   static const MCPhysReg VR[] = {
3477     PPC::V2, PPC::V3, PPC::V4, PPC::V5, PPC::V6, PPC::V7, PPC::V8,
3478     PPC::V9, PPC::V10, PPC::V11, PPC::V12, PPC::V13
3479   };
3480
3481   const unsigned Num_GPR_Regs = array_lengthof(GPR_32);
3482   const unsigned Num_FPR_Regs = 13;
3483   const unsigned Num_VR_Regs  = array_lengthof( VR);
3484
3485   unsigned GPR_idx = 0, FPR_idx = 0, VR_idx = 0;
3486
3487   const MCPhysReg *GPR = isPPC64 ? GPR_64 : GPR_32;
3488
3489   // In 32-bit non-varargs functions, the stack space for vectors is after the
3490   // stack space for non-vectors.  We do not use this space unless we have
3491   // too many vectors to fit in registers, something that only occurs in
3492   // constructed examples:), but we have to walk the arglist to figure
3493   // that out...for the pathological case, compute VecArgOffset as the
3494   // start of the vector parameter area.  Computing VecArgOffset is the
3495   // entire point of the following loop.
3496   unsigned VecArgOffset = ArgOffset;
3497   if (!isVarArg && !isPPC64) {
3498     for (unsigned ArgNo = 0, e = Ins.size(); ArgNo != e;
3499          ++ArgNo) {
3500       EVT ObjectVT = Ins[ArgNo].VT;
3501       ISD::ArgFlagsTy Flags = Ins[ArgNo].Flags;
3502
3503       if (Flags.isByVal()) {
3504         // ObjSize is the true size, ArgSize rounded up to multiple of regs.
3505         unsigned ObjSize = Flags.getByValSize();
3506         unsigned ArgSize =
3507                 ((ObjSize + PtrByteSize - 1)/PtrByteSize) * PtrByteSize;
3508         VecArgOffset += ArgSize;
3509         continue;
3510       }
3511
3512       switch(ObjectVT.getSimpleVT().SimpleTy) {
3513       default: llvm_unreachable("Unhandled argument type!");
3514       case MVT::i1:
3515       case MVT::i32:
3516       case MVT::f32:
3517         VecArgOffset += 4;
3518         break;
3519       case MVT::i64:  // PPC64
3520       case MVT::f64:
3521         // FIXME: We are guaranteed to be !isPPC64 at this point.
3522         // Does MVT::i64 apply?
3523         VecArgOffset += 8;
3524         break;
3525       case MVT::v4f32:
3526       case MVT::v4i32:
3527       case MVT::v8i16:
3528       case MVT::v16i8:
3529         // Nothing to do, we're only looking at Nonvector args here.
3530         break;
3531       }
3532     }
3533   }
3534   // We've found where the vector parameter area in memory is.  Skip the
3535   // first 12 parameters; these don't use that memory.
3536   VecArgOffset = ((VecArgOffset+15)/16)*16;
3537   VecArgOffset += 12*16;
3538
3539   // Add DAG nodes to load the arguments or copy them out of registers.  On
3540   // entry to a function on PPC, the arguments start after the linkage area,
3541   // although the first ones are often in registers.
3542
3543   SmallVector<SDValue, 8> MemOps;
3544   unsigned nAltivecParamsAtEnd = 0;
3545   Function::const_arg_iterator FuncArg = MF.getFunction()->arg_begin();
3546   unsigned CurArgIdx = 0;
3547   for (unsigned ArgNo = 0, e = Ins.size(); ArgNo != e; ++ArgNo) {
3548     SDValue ArgVal;
3549     bool needsLoad = false;
3550     EVT ObjectVT = Ins[ArgNo].VT;
3551     unsigned ObjSize = ObjectVT.getSizeInBits()/8;
3552     unsigned ArgSize = ObjSize;
3553     ISD::ArgFlagsTy Flags = Ins[ArgNo].Flags;
3554     if (Ins[ArgNo].isOrigArg()) {
3555       std::advance(FuncArg, Ins[ArgNo].getOrigArgIndex() - CurArgIdx);
3556       CurArgIdx = Ins[ArgNo].getOrigArgIndex();
3557     }
3558     unsigned CurArgOffset = ArgOffset;
3559
3560     // Varargs or 64 bit Altivec parameters are padded to a 16 byte boundary.
3561     if (ObjectVT==MVT::v4f32 || ObjectVT==MVT::v4i32 ||
3562         ObjectVT==MVT::v8i16 || ObjectVT==MVT::v16i8) {
3563       if (isVarArg || isPPC64) {
3564         MinReservedArea = ((MinReservedArea+15)/16)*16;
3565         MinReservedArea += CalculateStackSlotSize(ObjectVT,
3566                                                   Flags,
3567                                                   PtrByteSize);
3568       } else  nAltivecParamsAtEnd++;
3569     } else
3570       // Calculate min reserved area.
3571       MinReservedArea += CalculateStackSlotSize(Ins[ArgNo].VT,
3572                                                 Flags,
3573                                                 PtrByteSize);
3574
3575     // FIXME the codegen can be much improved in some cases.
3576     // We do not have to keep everything in memory.
3577     if (Flags.isByVal()) {
3578       assert(Ins[ArgNo].isOrigArg() && "Byval arguments cannot be implicit");
3579
3580       // ObjSize is the true size, ArgSize rounded up to multiple of registers.
3581       ObjSize = Flags.getByValSize();
3582       ArgSize = ((ObjSize + PtrByteSize - 1)/PtrByteSize) * PtrByteSize;
3583       // Objects of size 1 and 2 are right justified, everything else is
3584       // left justified.  This means the memory address is adjusted forwards.
3585       if (ObjSize==1 || ObjSize==2) {
3586         CurArgOffset = CurArgOffset + (4 - ObjSize);
3587       }
3588       // The value of the object is its address.
3589       int FI = MFI->CreateFixedObject(ObjSize, CurArgOffset, false, true);
3590       SDValue FIN = DAG.getFrameIndex(FI, PtrVT);
3591       InVals.push_back(FIN);
3592       if (ObjSize==1 || ObjSize==2) {
3593         if (GPR_idx != Num_GPR_Regs) {
3594           unsigned VReg;
3595           if (isPPC64)
3596             VReg = MF.addLiveIn(GPR[GPR_idx], &PPC::G8RCRegClass);
3597           else
3598             VReg = MF.addLiveIn(GPR[GPR_idx], &PPC::GPRCRegClass);
3599           SDValue Val = DAG.getCopyFromReg(Chain, dl, VReg, PtrVT);
3600           EVT ObjType = ObjSize == 1 ? MVT::i8 : MVT::i16;
3601           SDValue Store = DAG.getTruncStore(Val.getValue(1), dl, Val, FIN,
3602                                             MachinePointerInfo(&*FuncArg),
3603                                             ObjType, false, false, 0);
3604           MemOps.push_back(Store);
3605           ++GPR_idx;
3606         }
3607
3608         ArgOffset += PtrByteSize;
3609
3610         continue;
3611       }
3612       for (unsigned j = 0; j < ArgSize; j += PtrByteSize) {
3613         // Store whatever pieces of the object are in registers
3614         // to memory.  ArgOffset will be the address of the beginning
3615         // of the object.
3616         if (GPR_idx != Num_GPR_Regs) {
3617           unsigned VReg;
3618           if (isPPC64)
3619             VReg = MF.addLiveIn(GPR[GPR_idx], &PPC::G8RCRegClass);
3620           else
3621             VReg = MF.addLiveIn(GPR[GPR_idx], &PPC::GPRCRegClass);
3622           int FI = MFI->CreateFixedObject(PtrByteSize, ArgOffset, true);
3623           SDValue FIN = DAG.getFrameIndex(FI, PtrVT);
3624           SDValue Val = DAG.getCopyFromReg(Chain, dl, VReg, PtrVT);
3625           SDValue Store =
3626               DAG.getStore(Val.getValue(1), dl, Val, FIN,
3627                            MachinePointerInfo(&*FuncArg, j), false, false, 0);
3628           MemOps.push_back(Store);
3629           ++GPR_idx;
3630           ArgOffset += PtrByteSize;
3631         } else {
3632           ArgOffset += ArgSize - (ArgOffset-CurArgOffset);
3633           break;
3634         }
3635       }
3636       continue;
3637     }
3638
3639     switch (ObjectVT.getSimpleVT().SimpleTy) {
3640     default: llvm_unreachable("Unhandled argument type!");
3641     case MVT::i1:
3642     case MVT::i32:
3643       if (!isPPC64) {
3644         if (GPR_idx != Num_GPR_Regs) {
3645           unsigned VReg = MF.addLiveIn(GPR[GPR_idx], &PPC::GPRCRegClass);
3646           ArgVal = DAG.getCopyFromReg(Chain, dl, VReg, MVT::i32);
3647
3648           if (ObjectVT == MVT::i1)
3649             ArgVal = DAG.getNode(ISD::TRUNCATE, dl, MVT::i1, ArgVal);
3650
3651           ++GPR_idx;
3652         } else {
3653           needsLoad = true;
3654           ArgSize = PtrByteSize;
3655         }
3656         // All int arguments reserve stack space in the Darwin ABI.
3657         ArgOffset += PtrByteSize;
3658         break;
3659       }
3660       // FALLTHROUGH
3661     case MVT::i64:  // PPC64
3662       if (GPR_idx != Num_GPR_Regs) {
3663         unsigned VReg = MF.addLiveIn(GPR[GPR_idx], &PPC::G8RCRegClass);
3664         ArgVal = DAG.getCopyFromReg(Chain, dl, VReg, MVT::i64);
3665
3666         if (ObjectVT == MVT::i32 || ObjectVT == MVT::i1)
3667           // PPC64 passes i8, i16, and i32 values in i64 registers. Promote
3668           // value to MVT::i64 and then truncate to the correct register size.
3669           ArgVal = extendArgForPPC64(Flags, ObjectVT, DAG, ArgVal, dl);
3670
3671         ++GPR_idx;
3672       } else {
3673         needsLoad = true;
3674         ArgSize = PtrByteSize;
3675       }
3676       // All int arguments reserve stack space in the Darwin ABI.
3677       ArgOffset += 8;
3678       break;
3679
3680     case MVT::f32:
3681     case MVT::f64:
3682       // Every 4 bytes of argument space consumes one of the GPRs available for
3683       // argument passing.
3684       if (GPR_idx != Num_GPR_Regs) {
3685         ++GPR_idx;
3686         if (ObjSize == 8 && GPR_idx != Num_GPR_Regs && !isPPC64)
3687           ++GPR_idx;
3688       }
3689       if (FPR_idx != Num_FPR_Regs) {
3690         unsigned VReg;
3691
3692         if (ObjectVT == MVT::f32)
3693           VReg = MF.addLiveIn(FPR[FPR_idx], &PPC::F4RCRegClass);
3694         else
3695           VReg = MF.addLiveIn(FPR[FPR_idx], &PPC::F8RCRegClass);
3696
3697         ArgVal = DAG.getCopyFromReg(Chain, dl, VReg, ObjectVT);
3698         ++FPR_idx;
3699       } else {
3700         needsLoad = true;
3701       }
3702
3703       // All FP arguments reserve stack space in the Darwin ABI.
3704       ArgOffset += isPPC64 ? 8 : ObjSize;
3705       break;
3706     case MVT::v4f32:
3707     case MVT::v4i32:
3708     case MVT::v8i16:
3709     case MVT::v16i8:
3710       // Note that vector arguments in registers don't reserve stack space,
3711       // except in varargs functions.
3712       if (VR_idx != Num_VR_Regs) {
3713         unsigned VReg = MF.addLiveIn(VR[VR_idx], &PPC::VRRCRegClass);
3714         ArgVal = DAG.getCopyFromReg(Chain, dl, VReg, ObjectVT);
3715         if (isVarArg) {
3716           while ((ArgOffset % 16) != 0) {
3717             ArgOffset += PtrByteSize;
3718             if (GPR_idx != Num_GPR_Regs)
3719               GPR_idx++;
3720           }
3721           ArgOffset += 16;
3722           GPR_idx = std::min(GPR_idx+4, Num_GPR_Regs); // FIXME correct for ppc64?
3723         }
3724         ++VR_idx;
3725       } else {
3726         if (!isVarArg && !isPPC64) {
3727           // Vectors go after all the nonvectors.
3728           CurArgOffset = VecArgOffset;
3729           VecArgOffset += 16;
3730         } else {
3731           // Vectors are aligned.
3732           ArgOffset = ((ArgOffset+15)/16)*16;
3733           CurArgOffset = ArgOffset;
3734           ArgOffset += 16;
3735         }
3736         needsLoad = true;
3737       }
3738       break;
3739     }
3740
3741     // We need to load the argument to a virtual register if we determined above
3742     // that we ran out of physical registers of the appropriate type.
3743     if (needsLoad) {
3744       int FI = MFI->CreateFixedObject(ObjSize,
3745                                       CurArgOffset + (ArgSize - ObjSize),
3746                                       isImmutable);
3747       SDValue FIN = DAG.getFrameIndex(FI, PtrVT);
3748       ArgVal = DAG.getLoad(ObjectVT, dl, Chain, FIN, MachinePointerInfo(),
3749                            false, false, false, 0);
3750     }
3751
3752     InVals.push_back(ArgVal);
3753   }
3754
3755   // Allow for Altivec parameters at the end, if needed.
3756   if (nAltivecParamsAtEnd) {
3757     MinReservedArea = ((MinReservedArea+15)/16)*16;
3758     MinReservedArea += 16*nAltivecParamsAtEnd;
3759   }
3760
3761   // Area that is at least reserved in the caller of this function.
3762   MinReservedArea = std::max(MinReservedArea, LinkageSize + 8 * PtrByteSize);
3763
3764   // Set the size that is at least reserved in caller of this function.  Tail
3765   // call optimized functions' reserved stack space needs to be aligned so that
3766   // taking the difference between two stack areas will result in an aligned
3767   // stack.
3768   MinReservedArea =
3769       EnsureStackAlignment(Subtarget.getFrameLowering(), MinReservedArea);
3770   FuncInfo->setMinReservedArea(MinReservedArea);
3771
3772   // If the function takes variable number of arguments, make a frame index for
3773   // the start of the first vararg value... for expansion of llvm.va_start.
3774   if (isVarArg) {
3775     int Depth = ArgOffset;
3776
3777     FuncInfo->setVarArgsFrameIndex(
3778       MFI->CreateFixedObject(PtrVT.getSizeInBits()/8,
3779                              Depth, true));
3780     SDValue FIN = DAG.getFrameIndex(FuncInfo->getVarArgsFrameIndex(), PtrVT);
3781
3782     // If this function is vararg, store any remaining integer argument regs
3783     // to their spots on the stack so that they may be loaded by deferencing the
3784     // result of va_next.
3785     for (; GPR_idx != Num_GPR_Regs; ++GPR_idx) {
3786       unsigned VReg;
3787
3788       if (isPPC64)
3789         VReg = MF.addLiveIn(GPR[GPR_idx], &PPC::G8RCRegClass);
3790       else
3791         VReg = MF.addLiveIn(GPR[GPR_idx], &PPC::GPRCRegClass);
3792
3793       SDValue Val = DAG.getCopyFromReg(Chain, dl, VReg, PtrVT);
3794       SDValue Store = DAG.getStore(Val.getValue(1), dl, Val, FIN,
3795                                    MachinePointerInfo(), false, false, 0);
3796       MemOps.push_back(Store);
3797       // Increment the address by four for the next argument to store
3798       SDValue PtrOff = DAG.getConstant(PtrVT.getSizeInBits()/8, dl, PtrVT);
3799       FIN = DAG.getNode(ISD::ADD, dl, PtrOff.getValueType(), FIN, PtrOff);
3800     }
3801   }
3802
3803   if (!MemOps.empty())
3804     Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, MemOps);
3805
3806   return Chain;
3807 }
3808
3809 /// CalculateTailCallSPDiff - Get the amount the stack pointer has to be
3810 /// adjusted to accommodate the arguments for the tailcall.
3811 static int CalculateTailCallSPDiff(SelectionDAG& DAG, bool isTailCall,
3812                                    unsigned ParamSize) {
3813
3814   if (!isTailCall) return 0;
3815
3816   PPCFunctionInfo *FI = DAG.getMachineFunction().getInfo<PPCFunctionInfo>();
3817   unsigned CallerMinReservedArea = FI->getMinReservedArea();
3818   int SPDiff = (int)CallerMinReservedArea - (int)ParamSize;
3819   // Remember only if the new adjustement is bigger.
3820   if (SPDiff < FI->getTailCallSPDelta())
3821     FI->setTailCallSPDelta(SPDiff);
3822
3823   return SPDiff;
3824 }
3825
3826 /// IsEligibleForTailCallOptimization - Check whether the call is eligible
3827 /// for tail call optimization. Targets which want to do tail call
3828 /// optimization should implement this function.
3829 bool
3830 PPCTargetLowering::IsEligibleForTailCallOptimization(SDValue Callee,
3831                                                      CallingConv::ID CalleeCC,
3832                                                      bool isVarArg,
3833                                       const SmallVectorImpl<ISD::InputArg> &Ins,
3834                                                      SelectionDAG& DAG) const {
3835   if (!getTargetMachine().Options.GuaranteedTailCallOpt)
3836     return false;
3837
3838   // Variable argument functions are not supported.
3839   if (isVarArg)
3840     return false;
3841
3842   MachineFunction &MF = DAG.getMachineFunction();
3843   CallingConv::ID CallerCC = MF.getFunction()->getCallingConv();
3844   if (CalleeCC == CallingConv::Fast && CallerCC == CalleeCC) {
3845     // Functions containing by val parameters are not supported.
3846     for (unsigned i = 0; i != Ins.size(); i++) {
3847        ISD::ArgFlagsTy Flags = Ins[i].Flags;
3848        if (Flags.isByVal()) return false;
3849     }
3850
3851     // Non-PIC/GOT tail calls are supported.
3852     if (getTargetMachine().getRelocationModel() != Reloc::PIC_)
3853       return true;
3854
3855     // At the moment we can only do local tail calls (in same module, hidden
3856     // or protected) if we are generating PIC.
3857     if (GlobalAddressSDNode *G = dyn_cast<GlobalAddressSDNode>(Callee))
3858       return G->getGlobal()->hasHiddenVisibility()
3859           || G->getGlobal()->hasProtectedVisibility();
3860   }
3861
3862   return false;
3863 }
3864
3865 /// isCallCompatibleAddress - Return the immediate to use if the specified
3866 /// 32-bit value is representable in the immediate field of a BxA instruction.
3867 static SDNode *isBLACompatibleAddress(SDValue Op, SelectionDAG &DAG) {
3868   ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op);
3869   if (!C) return nullptr;
3870
3871   int Addr = C->getZExtValue();
3872   if ((Addr & 3) != 0 ||  // Low 2 bits are implicitly zero.
3873       SignExtend32<26>(Addr) != Addr)
3874     return nullptr;  // Top 6 bits have to be sext of immediate.
3875
3876   return DAG.getConstant((int)C->getZExtValue() >> 2, SDLoc(Op),
3877                          DAG.getTargetLoweringInfo().getPointerTy(
3878                              DAG.getDataLayout())).getNode();
3879 }
3880
3881 namespace {
3882
3883 struct TailCallArgumentInfo {
3884   SDValue Arg;
3885   SDValue FrameIdxOp;
3886   int       FrameIdx;
3887
3888   TailCallArgumentInfo() : FrameIdx(0) {}
3889 };
3890 }
3891
3892 /// StoreTailCallArgumentsToStackSlot - Stores arguments to their stack slot.
3893 static void
3894 StoreTailCallArgumentsToStackSlot(SelectionDAG &DAG,
3895                                            SDValue Chain,
3896                    const SmallVectorImpl<TailCallArgumentInfo> &TailCallArgs,
3897                    SmallVectorImpl<SDValue> &MemOpChains,
3898                    SDLoc dl) {
3899   for (unsigned i = 0, e = TailCallArgs.size(); i != e; ++i) {
3900     SDValue Arg = TailCallArgs[i].Arg;
3901     SDValue FIN = TailCallArgs[i].FrameIdxOp;
3902     int FI = TailCallArgs[i].FrameIdx;
3903     // Store relative to framepointer.
3904     MemOpChains.push_back(DAG.getStore(
3905         Chain, dl, Arg, FIN,
3906         MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI), false,
3907         false, 0));
3908   }
3909 }
3910
3911 /// EmitTailCallStoreFPAndRetAddr - Move the frame pointer and return address to
3912 /// the appropriate stack slot for the tail call optimized function call.
3913 static SDValue EmitTailCallStoreFPAndRetAddr(SelectionDAG &DAG,
3914                                                MachineFunction &MF,
3915                                                SDValue Chain,
3916                                                SDValue OldRetAddr,
3917                                                SDValue OldFP,
3918                                                int SPDiff,
3919                                                bool isPPC64,
3920                                                bool isDarwinABI,
3921                                                SDLoc dl) {
3922   if (SPDiff) {
3923     // Calculate the new stack slot for the return address.
3924     int SlotSize = isPPC64 ? 8 : 4;
3925     const PPCFrameLowering *FL =
3926         MF.getSubtarget<PPCSubtarget>().getFrameLowering();
3927     int NewRetAddrLoc = SPDiff + FL->getReturnSaveOffset();
3928     int NewRetAddr = MF.getFrameInfo()->CreateFixedObject(SlotSize,
3929                                                           NewRetAddrLoc, true);
3930     EVT VT = isPPC64 ? MVT::i64 : MVT::i32;
3931     SDValue NewRetAddrFrIdx = DAG.getFrameIndex(NewRetAddr, VT);
3932     Chain = DAG.getStore(
3933         Chain, dl, OldRetAddr, NewRetAddrFrIdx,
3934         MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), NewRetAddr),
3935         false, false, 0);
3936
3937     // When using the 32/64-bit SVR4 ABI there is no need to move the FP stack
3938     // slot as the FP is never overwritten.
3939     if (isDarwinABI) {
3940       int NewFPLoc = SPDiff + FL->getFramePointerSaveOffset();
3941       int NewFPIdx = MF.getFrameInfo()->CreateFixedObject(SlotSize, NewFPLoc,
3942                                                           true);
3943       SDValue NewFramePtrIdx = DAG.getFrameIndex(NewFPIdx, VT);
3944       Chain = DAG.getStore(
3945           Chain, dl, OldFP, NewFramePtrIdx,
3946           MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), NewFPIdx),
3947           false, false, 0);
3948     }
3949   }
3950   return Chain;
3951 }
3952
3953 /// CalculateTailCallArgDest - Remember Argument for later processing. Calculate
3954 /// the position of the argument.
3955 static void
3956 CalculateTailCallArgDest(SelectionDAG &DAG, MachineFunction &MF, bool isPPC64,
3957                          SDValue Arg, int SPDiff, unsigned ArgOffset,
3958                      SmallVectorImpl<TailCallArgumentInfo>& TailCallArguments) {
3959   int Offset = ArgOffset + SPDiff;
3960   uint32_t OpSize = (Arg.getValueType().getSizeInBits()+7)/8;
3961   int FI = MF.getFrameInfo()->CreateFixedObject(OpSize, Offset, true);
3962   EVT VT = isPPC64 ? MVT::i64 : MVT::i32;
3963   SDValue FIN = DAG.getFrameIndex(FI, VT);
3964   TailCallArgumentInfo Info;
3965   Info.Arg = Arg;
3966   Info.FrameIdxOp = FIN;
3967   Info.FrameIdx = FI;
3968   TailCallArguments.push_back(Info);
3969 }
3970
3971 /// EmitTCFPAndRetAddrLoad - Emit load from frame pointer and return address
3972 /// stack slot. Returns the chain as result and the loaded frame pointers in
3973 /// LROpOut/FPOpout. Used when tail calling.
3974 SDValue PPCTargetLowering::EmitTailCallLoadFPAndRetAddr(SelectionDAG & DAG,
3975                                                         int SPDiff,
3976                                                         SDValue Chain,
3977                                                         SDValue &LROpOut,
3978                                                         SDValue &FPOpOut,
3979                                                         bool isDarwinABI,
3980                                                         SDLoc dl) const {
3981   if (SPDiff) {
3982     // Load the LR and FP stack slot for later adjusting.
3983     EVT VT = Subtarget.isPPC64() ? MVT::i64 : MVT::i32;
3984     LROpOut = getReturnAddrFrameIndex(DAG);
3985     LROpOut = DAG.getLoad(VT, dl, Chain, LROpOut, MachinePointerInfo(),
3986                           false, false, false, 0);
3987     Chain = SDValue(LROpOut.getNode(), 1);
3988
3989     // When using the 32/64-bit SVR4 ABI there is no need to load the FP stack
3990     // slot as the FP is never overwritten.
3991     if (isDarwinABI) {
3992       FPOpOut = getFramePointerFrameIndex(DAG);
3993       FPOpOut = DAG.getLoad(VT, dl, Chain, FPOpOut, MachinePointerInfo(),
3994                             false, false, false, 0);
3995       Chain = SDValue(FPOpOut.getNode(), 1);
3996     }
3997   }
3998   return Chain;
3999 }
4000
4001 /// CreateCopyOfByValArgument - Make a copy of an aggregate at address specified
4002 /// by "Src" to address "Dst" of size "Size".  Alignment information is
4003 /// specified by the specific parameter attribute. The copy will be passed as
4004 /// a byval function parameter.
4005 /// Sometimes what we are copying is the end of a larger object, the part that
4006 /// does not fit in registers.
4007 static SDValue
4008 CreateCopyOfByValArgument(SDValue Src, SDValue Dst, SDValue Chain,
4009                           ISD::ArgFlagsTy Flags, SelectionDAG &DAG,
4010                           SDLoc dl) {
4011   SDValue SizeNode = DAG.getConstant(Flags.getByValSize(), dl, MVT::i32);
4012   return DAG.getMemcpy(Chain, dl, Dst, Src, SizeNode, Flags.getByValAlign(),
4013                        false, false, false, MachinePointerInfo(),
4014                        MachinePointerInfo());
4015 }
4016
4017 /// LowerMemOpCallTo - Store the argument to the stack or remember it in case of
4018 /// tail calls.
4019 static void
4020 LowerMemOpCallTo(SelectionDAG &DAG, MachineFunction &MF, SDValue Chain,
4021                  SDValue Arg, SDValue PtrOff, int SPDiff,
4022                  unsigned ArgOffset, bool isPPC64, bool isTailCall,
4023                  bool isVector, SmallVectorImpl<SDValue> &MemOpChains,
4024                  SmallVectorImpl<TailCallArgumentInfo> &TailCallArguments,
4025                  SDLoc dl) {
4026   EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(DAG.getDataLayout());
4027   if (!isTailCall) {
4028     if (isVector) {
4029       SDValue StackPtr;
4030       if (isPPC64)
4031         StackPtr = DAG.getRegister(PPC::X1, MVT::i64);
4032       else
4033         StackPtr = DAG.getRegister(PPC::R1, MVT::i32);
4034       PtrOff = DAG.getNode(ISD::ADD, dl, PtrVT, StackPtr,
4035                            DAG.getConstant(ArgOffset, dl, PtrVT));
4036     }
4037     MemOpChains.push_back(DAG.getStore(Chain, dl, Arg, PtrOff,
4038                                        MachinePointerInfo(), false, false, 0));
4039   // Calculate and remember argument location.
4040   } else CalculateTailCallArgDest(DAG, MF, isPPC64, Arg, SPDiff, ArgOffset,
4041                                   TailCallArguments);
4042 }
4043
4044 static
4045 void PrepareTailCall(SelectionDAG &DAG, SDValue &InFlag, SDValue &Chain,
4046                      SDLoc dl, bool isPPC64, int SPDiff, unsigned NumBytes,
4047                      SDValue LROp, SDValue FPOp, bool isDarwinABI,
4048                      SmallVectorImpl<TailCallArgumentInfo> &TailCallArguments) {
4049   MachineFunction &MF = DAG.getMachineFunction();
4050
4051   // Emit a sequence of copyto/copyfrom virtual registers for arguments that
4052   // might overwrite each other in case of tail call optimization.
4053   SmallVector<SDValue, 8> MemOpChains2;
4054   // Do not flag preceding copytoreg stuff together with the following stuff.
4055   InFlag = SDValue();
4056   StoreTailCallArgumentsToStackSlot(DAG, Chain, TailCallArguments,
4057                                     MemOpChains2, dl);
4058   if (!MemOpChains2.empty())
4059     Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, MemOpChains2);
4060
4061   // Store the return address to the appropriate stack slot.
4062   Chain = EmitTailCallStoreFPAndRetAddr(DAG, MF, Chain, LROp, FPOp, SPDiff,
4063                                         isPPC64, isDarwinABI, dl);
4064
4065   // Emit callseq_end just before tailcall node.
4066   Chain = DAG.getCALLSEQ_END(Chain, DAG.getIntPtrConstant(NumBytes, dl, true),
4067                              DAG.getIntPtrConstant(0, dl, true), InFlag, dl);
4068   InFlag = Chain.getValue(1);
4069 }
4070
4071 // Is this global address that of a function that can be called by name? (as
4072 // opposed to something that must hold a descriptor for an indirect call).
4073 static bool isFunctionGlobalAddress(SDValue Callee) {
4074   if (GlobalAddressSDNode *G = dyn_cast<GlobalAddressSDNode>(Callee)) {
4075     if (Callee.getOpcode() == ISD::GlobalTLSAddress ||
4076         Callee.getOpcode() == ISD::TargetGlobalTLSAddress)
4077       return false;
4078
4079     return G->getGlobal()->getType()->getElementType()->isFunctionTy();
4080   }
4081
4082   return false;
4083 }
4084
4085 static
4086 unsigned PrepareCall(SelectionDAG &DAG, SDValue &Callee, SDValue &InFlag,
4087                      SDValue &Chain, SDValue CallSeqStart, SDLoc dl, int SPDiff,
4088                      bool isTailCall, bool IsPatchPoint, bool hasNest,
4089                      SmallVectorImpl<std::pair<unsigned, SDValue> > &RegsToPass,
4090                      SmallVectorImpl<SDValue> &Ops, std::vector<EVT> &NodeTys,
4091                      ImmutableCallSite *CS, const PPCSubtarget &Subtarget) {
4092
4093   bool isPPC64 = Subtarget.isPPC64();
4094   bool isSVR4ABI = Subtarget.isSVR4ABI();
4095   bool isELFv2ABI = Subtarget.isELFv2ABI();
4096
4097   EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(DAG.getDataLayout());
4098   NodeTys.push_back(MVT::Other);   // Returns a chain
4099   NodeTys.push_back(MVT::Glue);    // Returns a flag for retval copy to use.
4100
4101   unsigned CallOpc = PPCISD::CALL;
4102
4103   bool needIndirectCall = true;
4104   if (!isSVR4ABI || !isPPC64)
4105     if (SDNode *Dest = isBLACompatibleAddress(Callee, DAG)) {
4106       // If this is an absolute destination address, use the munged value.
4107       Callee = SDValue(Dest, 0);
4108       needIndirectCall = false;
4109     }
4110
4111   if (isFunctionGlobalAddress(Callee)) {
4112     GlobalAddressSDNode *G = cast<GlobalAddressSDNode>(Callee);
4113     // A call to a TLS address is actually an indirect call to a
4114     // thread-specific pointer.
4115     unsigned OpFlags = 0;
4116     if ((DAG.getTarget().getRelocationModel() != Reloc::Static &&
4117          (Subtarget.getTargetTriple().isMacOSX() &&
4118           Subtarget.getTargetTriple().isMacOSXVersionLT(10, 5)) &&
4119          !G->getGlobal()->isStrongDefinitionForLinker()) ||
4120         (Subtarget.isTargetELF() && !isPPC64 &&
4121          !G->getGlobal()->hasLocalLinkage() &&
4122          DAG.getTarget().getRelocationModel() == Reloc::PIC_)) {
4123       // PC-relative references to external symbols should go through $stub,
4124       // unless we're building with the leopard linker or later, which
4125       // automatically synthesizes these stubs.
4126       OpFlags = PPCII::MO_PLT_OR_STUB;
4127     }
4128
4129     // If the callee is a GlobalAddress/ExternalSymbol node (quite common,
4130     // every direct call is) turn it into a TargetGlobalAddress /
4131     // TargetExternalSymbol node so that legalize doesn't hack it.
4132     Callee = DAG.getTargetGlobalAddress(G->getGlobal(), dl,
4133                                         Callee.getValueType(), 0, OpFlags);
4134     needIndirectCall = false;
4135   }
4136
4137   if (ExternalSymbolSDNode *S = dyn_cast<ExternalSymbolSDNode>(Callee)) {
4138     unsigned char OpFlags = 0;
4139
4140     if ((DAG.getTarget().getRelocationModel() != Reloc::Static &&
4141          (Subtarget.getTargetTriple().isMacOSX() &&
4142           Subtarget.getTargetTriple().isMacOSXVersionLT(10, 5))) ||
4143         (Subtarget.isTargetELF() && !isPPC64 &&
4144          DAG.getTarget().getRelocationModel() == Reloc::PIC_)) {
4145       // PC-relative references to external symbols should go through $stub,
4146       // unless we're building with the leopard linker or later, which
4147       // automatically synthesizes these stubs.
4148       OpFlags = PPCII::MO_PLT_OR_STUB;
4149     }
4150
4151     Callee = DAG.getTargetExternalSymbol(S->getSymbol(), Callee.getValueType(),
4152                                          OpFlags);
4153     needIndirectCall = false;
4154   }
4155
4156   if (IsPatchPoint) {
4157     // We'll form an invalid direct call when lowering a patchpoint; the full
4158     // sequence for an indirect call is complicated, and many of the
4159     // instructions introduced might have side effects (and, thus, can't be
4160     // removed later). The call itself will be removed as soon as the
4161     // argument/return lowering is complete, so the fact that it has the wrong
4162     // kind of operands should not really matter.
4163     needIndirectCall = false;
4164   }
4165
4166   if (needIndirectCall) {
4167     // Otherwise, this is an indirect call.  We have to use a MTCTR/BCTRL pair
4168     // to do the call, we can't use PPCISD::CALL.
4169     SDValue MTCTROps[] = {Chain, Callee, InFlag};
4170
4171     if (isSVR4ABI && isPPC64 && !isELFv2ABI) {
4172       // Function pointers in the 64-bit SVR4 ABI do not point to the function
4173       // entry point, but to the function descriptor (the function entry point
4174       // address is part of the function descriptor though).
4175       // The function descriptor is a three doubleword structure with the
4176       // following fields: function entry point, TOC base address and
4177       // environment pointer.
4178       // Thus for a call through a function pointer, the following actions need
4179       // to be performed:
4180       //   1. Save the TOC of the caller in the TOC save area of its stack
4181       //      frame (this is done in LowerCall_Darwin() or LowerCall_64SVR4()).
4182       //   2. Load the address of the function entry point from the function
4183       //      descriptor.
4184       //   3. Load the TOC of the callee from the function descriptor into r2.
4185       //   4. Load the environment pointer from the function descriptor into
4186       //      r11.
4187       //   5. Branch to the function entry point address.
4188       //   6. On return of the callee, the TOC of the caller needs to be
4189       //      restored (this is done in FinishCall()).
4190       //
4191       // The loads are scheduled at the beginning of the call sequence, and the
4192       // register copies are flagged together to ensure that no other
4193       // operations can be scheduled in between. E.g. without flagging the
4194       // copies together, a TOC access in the caller could be scheduled between
4195       // the assignment of the callee TOC and the branch to the callee, which
4196       // results in the TOC access going through the TOC of the callee instead
4197       // of going through the TOC of the caller, which leads to incorrect code.
4198
4199       // Load the address of the function entry point from the function
4200       // descriptor.
4201       SDValue LDChain = CallSeqStart.getValue(CallSeqStart->getNumValues()-1);
4202       if (LDChain.getValueType() == MVT::Glue)
4203         LDChain = CallSeqStart.getValue(CallSeqStart->getNumValues()-2);
4204
4205       bool LoadsInv = Subtarget.hasInvariantFunctionDescriptors();
4206
4207       MachinePointerInfo MPI(CS ? CS->getCalledValue() : nullptr);
4208       SDValue LoadFuncPtr = DAG.getLoad(MVT::i64, dl, LDChain, Callee, MPI,
4209                                         false, false, LoadsInv, 8);
4210
4211       // Load environment pointer into r11.
4212       SDValue PtrOff = DAG.getIntPtrConstant(16, dl);
4213       SDValue AddPtr = DAG.getNode(ISD::ADD, dl, MVT::i64, Callee, PtrOff);
4214       SDValue LoadEnvPtr = DAG.getLoad(MVT::i64, dl, LDChain, AddPtr,
4215                                        MPI.getWithOffset(16), false, false,
4216                                        LoadsInv, 8);
4217
4218       SDValue TOCOff = DAG.getIntPtrConstant(8, dl);
4219       SDValue AddTOC = DAG.getNode(ISD::ADD, dl, MVT::i64, Callee, TOCOff);
4220       SDValue TOCPtr = DAG.getLoad(MVT::i64, dl, LDChain, AddTOC,
4221                                    MPI.getWithOffset(8), false, false,
4222                                    LoadsInv, 8);
4223
4224       setUsesTOCBasePtr(DAG);
4225       SDValue TOCVal = DAG.getCopyToReg(Chain, dl, PPC::X2, TOCPtr,
4226                                         InFlag);
4227       Chain = TOCVal.getValue(0);
4228       InFlag = TOCVal.getValue(1);
4229
4230       // If the function call has an explicit 'nest' parameter, it takes the
4231       // place of the environment pointer.
4232       if (!hasNest) {
4233         SDValue EnvVal = DAG.getCopyToReg(Chain, dl, PPC::X11, LoadEnvPtr,
4234                                           InFlag);
4235
4236         Chain = EnvVal.getValue(0);
4237         InFlag = EnvVal.getValue(1);
4238       }
4239
4240       MTCTROps[0] = Chain;
4241       MTCTROps[1] = LoadFuncPtr;
4242       MTCTROps[2] = InFlag;
4243     }
4244
4245     Chain = DAG.getNode(PPCISD::MTCTR, dl, NodeTys,
4246                         makeArrayRef(MTCTROps, InFlag.getNode() ? 3 : 2));
4247     InFlag = Chain.getValue(1);
4248
4249     NodeTys.clear();
4250     NodeTys.push_back(MVT::Other);
4251     NodeTys.push_back(MVT::Glue);
4252     Ops.push_back(Chain);
4253     CallOpc = PPCISD::BCTRL;
4254     Callee.setNode(nullptr);
4255     // Add use of X11 (holding environment pointer)
4256     if (isSVR4ABI && isPPC64 && !isELFv2ABI && !hasNest)
4257       Ops.push_back(DAG.getRegister(PPC::X11, PtrVT));
4258     // Add CTR register as callee so a bctr can be emitted later.
4259     if (isTailCall)
4260       Ops.push_back(DAG.getRegister(isPPC64 ? PPC::CTR8 : PPC::CTR, PtrVT));
4261   }
4262
4263   // If this is a direct call, pass the chain and the callee.
4264   if (Callee.getNode()) {
4265     Ops.push_back(Chain);
4266     Ops.push_back(Callee);
4267   }
4268   // If this is a tail call add stack pointer delta.
4269   if (isTailCall)
4270     Ops.push_back(DAG.getConstant(SPDiff, dl, MVT::i32));
4271
4272   // Add argument registers to the end of the list so that they are known live
4273   // into the call.
4274   for (unsigned i = 0, e = RegsToPass.size(); i != e; ++i)
4275     Ops.push_back(DAG.getRegister(RegsToPass[i].first,
4276                                   RegsToPass[i].second.getValueType()));
4277
4278   // All calls, in both the ELF V1 and V2 ABIs, need the TOC register live
4279   // into the call.
4280   if (isSVR4ABI && isPPC64 && !IsPatchPoint) {
4281     setUsesTOCBasePtr(DAG);
4282     Ops.push_back(DAG.getRegister(PPC::X2, PtrVT));
4283   }
4284
4285   return CallOpc;
4286 }
4287
4288 static
4289 bool isLocalCall(const SDValue &Callee)
4290 {
4291   if (GlobalAddressSDNode *G = dyn_cast<GlobalAddressSDNode>(Callee))
4292     return G->getGlobal()->isStrongDefinitionForLinker();
4293   return false;
4294 }
4295
4296 SDValue
4297 PPCTargetLowering::LowerCallResult(SDValue Chain, SDValue InFlag,
4298                                    CallingConv::ID CallConv, bool isVarArg,
4299                                    const SmallVectorImpl<ISD::InputArg> &Ins,
4300                                    SDLoc dl, SelectionDAG &DAG,
4301                                    SmallVectorImpl<SDValue> &InVals) const {
4302
4303   SmallVector<CCValAssign, 16> RVLocs;
4304   CCState CCRetInfo(CallConv, isVarArg, DAG.getMachineFunction(), RVLocs,
4305                     *DAG.getContext());
4306   CCRetInfo.AnalyzeCallResult(Ins, RetCC_PPC);
4307
4308   // Copy all of the result registers out of their specified physreg.
4309   for (unsigned i = 0, e = RVLocs.size(); i != e; ++i) {
4310     CCValAssign &VA = RVLocs[i];
4311     assert(VA.isRegLoc() && "Can only return in registers!");
4312
4313     SDValue Val = DAG.getCopyFromReg(Chain, dl,
4314                                      VA.getLocReg(), VA.getLocVT(), InFlag);
4315     Chain = Val.getValue(1);
4316     InFlag = Val.getValue(2);
4317
4318     switch (VA.getLocInfo()) {
4319     default: llvm_unreachable("Unknown loc info!");
4320     case CCValAssign::Full: break;
4321     case CCValAssign::AExt:
4322       Val = DAG.getNode(ISD::TRUNCATE, dl, VA.getValVT(), Val);
4323       break;
4324     case CCValAssign::ZExt:
4325       Val = DAG.getNode(ISD::AssertZext, dl, VA.getLocVT(), Val,
4326                         DAG.getValueType(VA.getValVT()));
4327       Val = DAG.getNode(ISD::TRUNCATE, dl, VA.getValVT(), Val);
4328       break;
4329     case CCValAssign::SExt:
4330       Val = DAG.getNode(ISD::AssertSext, dl, VA.getLocVT(), Val,
4331                         DAG.getValueType(VA.getValVT()));
4332       Val = DAG.getNode(ISD::TRUNCATE, dl, VA.getValVT(), Val);
4333       break;
4334     }
4335
4336     InVals.push_back(Val);
4337   }
4338
4339   return Chain;
4340 }
4341
4342 SDValue
4343 PPCTargetLowering::FinishCall(CallingConv::ID CallConv, SDLoc dl,
4344                               bool isTailCall, bool isVarArg, bool IsPatchPoint,
4345                               bool hasNest, SelectionDAG &DAG,
4346                               SmallVector<std::pair<unsigned, SDValue>, 8>
4347                                 &RegsToPass,
4348                               SDValue InFlag, SDValue Chain,
4349                               SDValue CallSeqStart, SDValue &Callee,
4350                               int SPDiff, unsigned NumBytes,
4351                               const SmallVectorImpl<ISD::InputArg> &Ins,
4352                               SmallVectorImpl<SDValue> &InVals,
4353                               ImmutableCallSite *CS) const {
4354
4355   std::vector<EVT> NodeTys;
4356   SmallVector<SDValue, 8> Ops;
4357   unsigned CallOpc = PrepareCall(DAG, Callee, InFlag, Chain, CallSeqStart, dl,
4358                                  SPDiff, isTailCall, IsPatchPoint, hasNest,
4359                                  RegsToPass, Ops, NodeTys, CS, Subtarget);
4360
4361   // Add implicit use of CR bit 6 for 32-bit SVR4 vararg calls
4362   if (isVarArg && Subtarget.isSVR4ABI() && !Subtarget.isPPC64())
4363     Ops.push_back(DAG.getRegister(PPC::CR1EQ, MVT::i32));
4364
4365   // When performing tail call optimization the callee pops its arguments off
4366   // the stack. Account for this here so these bytes can be pushed back on in
4367   // PPCFrameLowering::eliminateCallFramePseudoInstr.
4368   int BytesCalleePops =
4369     (CallConv == CallingConv::Fast &&
4370      getTargetMachine().Options.GuaranteedTailCallOpt) ? NumBytes : 0;
4371
4372   // Add a register mask operand representing the call-preserved registers.
4373   const TargetRegisterInfo *TRI = Subtarget.getRegisterInfo();
4374   const uint32_t *Mask =
4375       TRI->getCallPreservedMask(DAG.getMachineFunction(), CallConv);
4376   assert(Mask && "Missing call preserved mask for calling convention");
4377   Ops.push_back(DAG.getRegisterMask(Mask));
4378
4379   if (InFlag.getNode())
4380     Ops.push_back(InFlag);
4381
4382   // Emit tail call.
4383   if (isTailCall) {
4384     assert(((Callee.getOpcode() == ISD::Register &&
4385              cast<RegisterSDNode>(Callee)->getReg() == PPC::CTR) ||
4386             Callee.getOpcode() == ISD::TargetExternalSymbol ||
4387             Callee.getOpcode() == ISD::TargetGlobalAddress ||
4388             isa<ConstantSDNode>(Callee)) &&
4389     "Expecting an global address, external symbol, absolute value or register");
4390
4391     DAG.getMachineFunction().getFrameInfo()->setHasTailCall();
4392     return DAG.getNode(PPCISD::TC_RETURN, dl, MVT::Other, Ops);
4393   }
4394
4395   // Add a NOP immediately after the branch instruction when using the 64-bit
4396   // SVR4 ABI. At link time, if caller and callee are in a different module and
4397   // thus have a different TOC, the call will be replaced with a call to a stub
4398   // function which saves the current TOC, loads the TOC of the callee and
4399   // branches to the callee. The NOP will be replaced with a load instruction
4400   // which restores the TOC of the caller from the TOC save slot of the current
4401   // stack frame. If caller and callee belong to the same module (and have the
4402   // same TOC), the NOP will remain unchanged.
4403
4404   if (!isTailCall && Subtarget.isSVR4ABI()&& Subtarget.isPPC64() &&
4405       !IsPatchPoint) {
4406     if (CallOpc == PPCISD::BCTRL) {
4407       // This is a call through a function pointer.
4408       // Restore the caller TOC from the save area into R2.
4409       // See PrepareCall() for more information about calls through function
4410       // pointers in the 64-bit SVR4 ABI.
4411       // We are using a target-specific load with r2 hard coded, because the
4412       // result of a target-independent load would never go directly into r2,
4413       // since r2 is a reserved register (which prevents the register allocator
4414       // from allocating it), resulting in an additional register being
4415       // allocated and an unnecessary move instruction being generated.
4416       CallOpc = PPCISD::BCTRL_LOAD_TOC;
4417
4418       EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(DAG.getDataLayout());
4419       SDValue StackPtr = DAG.getRegister(PPC::X1, PtrVT);
4420       unsigned TOCSaveOffset = Subtarget.getFrameLowering()->getTOCSaveOffset();
4421       SDValue TOCOff = DAG.getIntPtrConstant(TOCSaveOffset, dl);
4422       SDValue AddTOC = DAG.getNode(ISD::ADD, dl, MVT::i64, StackPtr, TOCOff);
4423
4424       // The address needs to go after the chain input but before the flag (or
4425       // any other variadic arguments).
4426       Ops.insert(std::next(Ops.begin()), AddTOC);
4427     } else if ((CallOpc == PPCISD::CALL) &&
4428                (!isLocalCall(Callee) ||
4429                 DAG.getTarget().getRelocationModel() == Reloc::PIC_))
4430       // Otherwise insert NOP for non-local calls.
4431       CallOpc = PPCISD::CALL_NOP;
4432   }
4433
4434   Chain = DAG.getNode(CallOpc, dl, NodeTys, Ops);
4435   InFlag = Chain.getValue(1);
4436
4437   Chain = DAG.getCALLSEQ_END(Chain, DAG.getIntPtrConstant(NumBytes, dl, true),
4438                              DAG.getIntPtrConstant(BytesCalleePops, dl, true),
4439                              InFlag, dl);
4440   if (!Ins.empty())
4441     InFlag = Chain.getValue(1);
4442
4443   return LowerCallResult(Chain, InFlag, CallConv, isVarArg,
4444                          Ins, dl, DAG, InVals);
4445 }
4446
4447 SDValue
4448 PPCTargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
4449                              SmallVectorImpl<SDValue> &InVals) const {
4450   SelectionDAG &DAG                     = CLI.DAG;
4451   SDLoc &dl                             = CLI.DL;
4452   SmallVectorImpl<ISD::OutputArg> &Outs = CLI.Outs;
4453   SmallVectorImpl<SDValue> &OutVals     = CLI.OutVals;
4454   SmallVectorImpl<ISD::InputArg> &Ins   = CLI.Ins;
4455   SDValue Chain                         = CLI.Chain;
4456   SDValue Callee                        = CLI.Callee;
4457   bool &isTailCall                      = CLI.IsTailCall;
4458   CallingConv::ID CallConv              = CLI.CallConv;
4459   bool isVarArg                         = CLI.IsVarArg;
4460   bool IsPatchPoint                     = CLI.IsPatchPoint;
4461   ImmutableCallSite *CS                 = CLI.CS;
4462
4463   if (isTailCall)
4464     isTailCall = IsEligibleForTailCallOptimization(Callee, CallConv, isVarArg,
4465                                                    Ins, DAG);
4466
4467   if (!isTailCall && CS && CS->isMustTailCall())
4468     report_fatal_error("failed to perform tail call elimination on a call "
4469                        "site marked musttail");
4470
4471   if (Subtarget.isSVR4ABI()) {
4472     if (Subtarget.isPPC64())
4473       return LowerCall_64SVR4(Chain, Callee, CallConv, isVarArg,
4474                               isTailCall, IsPatchPoint, Outs, OutVals, Ins,
4475                               dl, DAG, InVals, CS);
4476     else
4477       return LowerCall_32SVR4(Chain, Callee, CallConv, isVarArg,
4478                               isTailCall, IsPatchPoint, Outs, OutVals, Ins,
4479                               dl, DAG, InVals, CS);
4480   }
4481
4482   return LowerCall_Darwin(Chain, Callee, CallConv, isVarArg,
4483                           isTailCall, IsPatchPoint, Outs, OutVals, Ins,
4484                           dl, DAG, InVals, CS);
4485 }
4486
4487 SDValue
4488 PPCTargetLowering::LowerCall_32SVR4(SDValue Chain, SDValue Callee,
4489                                     CallingConv::ID CallConv, bool isVarArg,
4490                                     bool isTailCall, bool IsPatchPoint,
4491                                     const SmallVectorImpl<ISD::OutputArg> &Outs,
4492                                     const SmallVectorImpl<SDValue> &OutVals,
4493                                     const SmallVectorImpl<ISD::InputArg> &Ins,
4494                                     SDLoc dl, SelectionDAG &DAG,
4495                                     SmallVectorImpl<SDValue> &InVals,
4496                                     ImmutableCallSite *CS) const {
4497   // See PPCTargetLowering::LowerFormalArguments_32SVR4() for a description
4498   // of the 32-bit SVR4 ABI stack frame layout.
4499
4500   assert((CallConv == CallingConv::C ||
4501           CallConv == CallingConv::Fast) && "Unknown calling convention!");
4502
4503   unsigned PtrByteSize = 4;
4504
4505   MachineFunction &MF = DAG.getMachineFunction();
4506
4507   // Mark this function as potentially containing a function that contains a
4508   // tail call. As a consequence the frame pointer will be used for dynamicalloc
4509   // and restoring the callers stack pointer in this functions epilog. This is
4510   // done because by tail calling the called function might overwrite the value
4511   // in this function's (MF) stack pointer stack slot 0(SP).
4512   if (getTargetMachine().Options.GuaranteedTailCallOpt &&
4513       CallConv == CallingConv::Fast)
4514     MF.getInfo<PPCFunctionInfo>()->setHasFastCall();
4515
4516   // Count how many bytes are to be pushed on the stack, including the linkage
4517   // area, parameter list area and the part of the local variable space which
4518   // contains copies of aggregates which are passed by value.
4519
4520   // Assign locations to all of the outgoing arguments.
4521   SmallVector<CCValAssign, 16> ArgLocs;
4522   CCState CCInfo(CallConv, isVarArg, DAG.getMachineFunction(), ArgLocs,
4523                  *DAG.getContext());
4524
4525   // Reserve space for the linkage area on the stack.
4526   CCInfo.AllocateStack(Subtarget.getFrameLowering()->getLinkageSize(),
4527                        PtrByteSize);
4528
4529   if (isVarArg) {
4530     // Handle fixed and variable vector arguments differently.
4531     // Fixed vector arguments go into registers as long as registers are
4532     // available. Variable vector arguments always go into memory.
4533     unsigned NumArgs = Outs.size();
4534
4535     for (unsigned i = 0; i != NumArgs; ++i) {
4536       MVT ArgVT = Outs[i].VT;
4537       ISD::ArgFlagsTy ArgFlags = Outs[i].Flags;
4538       bool Result;
4539
4540       if (Outs[i].IsFixed) {
4541         Result = CC_PPC32_SVR4(i, ArgVT, ArgVT, CCValAssign::Full, ArgFlags,
4542                                CCInfo);
4543       } else {
4544         Result = CC_PPC32_SVR4_VarArg(i, ArgVT, ArgVT, CCValAssign::Full,
4545                                       ArgFlags, CCInfo);
4546       }
4547
4548       if (Result) {
4549 #ifndef NDEBUG
4550         errs() << "Call operand #" << i << " has unhandled type "
4551              << EVT(ArgVT).getEVTString() << "\n";
4552 #endif
4553         llvm_unreachable(nullptr);
4554       }
4555     }
4556   } else {
4557     // All arguments are treated the same.
4558     CCInfo.AnalyzeCallOperands(Outs, CC_PPC32_SVR4);
4559   }
4560
4561   // Assign locations to all of the outgoing aggregate by value arguments.
4562   SmallVector<CCValAssign, 16> ByValArgLocs;
4563   CCState CCByValInfo(CallConv, isVarArg, DAG.getMachineFunction(),
4564                       ByValArgLocs, *DAG.getContext());
4565
4566   // Reserve stack space for the allocations in CCInfo.
4567   CCByValInfo.AllocateStack(CCInfo.getNextStackOffset(), PtrByteSize);
4568
4569   CCByValInfo.AnalyzeCallOperands(Outs, CC_PPC32_SVR4_ByVal);
4570
4571   // Size of the linkage area, parameter list area and the part of the local
4572   // space variable where copies of aggregates which are passed by value are
4573   // stored.
4574   unsigned NumBytes = CCByValInfo.getNextStackOffset();
4575
4576   // Calculate by how many bytes the stack has to be adjusted in case of tail
4577   // call optimization.
4578   int SPDiff = CalculateTailCallSPDiff(DAG, isTailCall, NumBytes);
4579
4580   // Adjust the stack pointer for the new arguments...
4581   // These operations are automatically eliminated by the prolog/epilog pass
4582   Chain = DAG.getCALLSEQ_START(Chain, DAG.getIntPtrConstant(NumBytes, dl, true),
4583                                dl);
4584   SDValue CallSeqStart = Chain;
4585
4586   // Load the return address and frame pointer so it can be moved somewhere else
4587   // later.
4588   SDValue LROp, FPOp;
4589   Chain = EmitTailCallLoadFPAndRetAddr(DAG, SPDiff, Chain, LROp, FPOp, false,
4590                                        dl);
4591
4592   // Set up a copy of the stack pointer for use loading and storing any
4593   // arguments that may not fit in the registers available for argument
4594   // passing.
4595   SDValue StackPtr = DAG.getRegister(PPC::R1, MVT::i32);
4596
4597   SmallVector<std::pair<unsigned, SDValue>, 8> RegsToPass;
4598   SmallVector<TailCallArgumentInfo, 8> TailCallArguments;
4599   SmallVector<SDValue, 8> MemOpChains;
4600
4601   bool seenFloatArg = false;
4602   // Walk the register/memloc assignments, inserting copies/loads.
4603   for (unsigned i = 0, j = 0, e = ArgLocs.size();
4604        i != e;
4605        ++i) {
4606     CCValAssign &VA = ArgLocs[i];
4607     SDValue Arg = OutVals[i];
4608     ISD::ArgFlagsTy Flags = Outs[i].Flags;
4609
4610     if (Flags.isByVal()) {
4611       // Argument is an aggregate which is passed by value, thus we need to
4612       // create a copy of it in the local variable space of the current stack
4613       // frame (which is the stack frame of the caller) and pass the address of
4614       // this copy to the callee.
4615       assert((j < ByValArgLocs.size()) && "Index out of bounds!");
4616       CCValAssign &ByValVA = ByValArgLocs[j++];
4617       assert((VA.getValNo() == ByValVA.getValNo()) && "ValNo mismatch!");
4618
4619       // Memory reserved in the local variable space of the callers stack frame.
4620       unsigned LocMemOffset = ByValVA.getLocMemOffset();
4621
4622       SDValue PtrOff = DAG.getIntPtrConstant(LocMemOffset, dl);
4623       PtrOff = DAG.getNode(ISD::ADD, dl, getPointerTy(MF.getDataLayout()),
4624                            StackPtr, PtrOff);
4625
4626       // Create a copy of the argument in the local area of the current
4627       // stack frame.
4628       SDValue MemcpyCall =
4629         CreateCopyOfByValArgument(Arg, PtrOff,
4630                                   CallSeqStart.getNode()->getOperand(0),
4631                                   Flags, DAG, dl);
4632
4633       // This must go outside the CALLSEQ_START..END.
4634       SDValue NewCallSeqStart = DAG.getCALLSEQ_START(MemcpyCall,
4635                            CallSeqStart.getNode()->getOperand(1),
4636                            SDLoc(MemcpyCall));
4637       DAG.ReplaceAllUsesWith(CallSeqStart.getNode(),
4638                              NewCallSeqStart.getNode());
4639       Chain = CallSeqStart = NewCallSeqStart;
4640
4641       // Pass the address of the aggregate copy on the stack either in a
4642       // physical register or in the parameter list area of the current stack
4643       // frame to the callee.
4644       Arg = PtrOff;
4645     }
4646
4647     if (VA.isRegLoc()) {
4648       if (Arg.getValueType() == MVT::i1)
4649         Arg = DAG.getNode(ISD::ZERO_EXTEND, dl, MVT::i32, Arg);
4650
4651       seenFloatArg |= VA.getLocVT().isFloatingPoint();
4652       // Put argument in a physical register.
4653       RegsToPass.push_back(std::make_pair(VA.getLocReg(), Arg));
4654     } else {
4655       // Put argument in the parameter list area of the current stack frame.
4656       assert(VA.isMemLoc());
4657       unsigned LocMemOffset = VA.getLocMemOffset();
4658
4659       if (!isTailCall) {
4660         SDValue PtrOff = DAG.getIntPtrConstant(LocMemOffset, dl);
4661         PtrOff = DAG.getNode(ISD::ADD, dl, getPointerTy(MF.getDataLayout()),
4662                              StackPtr, PtrOff);
4663
4664         MemOpChains.push_back(DAG.getStore(Chain, dl, Arg, PtrOff,
4665                                            MachinePointerInfo(),
4666                                            false, false, 0));
4667       } else {
4668         // Calculate and remember argument location.
4669         CalculateTailCallArgDest(DAG, MF, false, Arg, SPDiff, LocMemOffset,
4670                                  TailCallArguments);
4671       }
4672     }
4673   }
4674
4675   if (!MemOpChains.empty())
4676     Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, MemOpChains);
4677
4678   // Build a sequence of copy-to-reg nodes chained together with token chain
4679   // and flag operands which copy the outgoing args into the appropriate regs.
4680   SDValue InFlag;
4681   for (unsigned i = 0, e = RegsToPass.size(); i != e; ++i) {
4682     Chain = DAG.getCopyToReg(Chain, dl, RegsToPass[i].first,
4683                              RegsToPass[i].second, InFlag);
4684     InFlag = Chain.getValue(1);
4685   }
4686
4687   // Set CR bit 6 to true if this is a vararg call with floating args passed in
4688   // registers.
4689   if (isVarArg) {
4690     SDVTList VTs = DAG.getVTList(MVT::Other, MVT::Glue);
4691     SDValue Ops[] = { Chain, InFlag };
4692
4693     Chain = DAG.getNode(seenFloatArg ? PPCISD::CR6SET : PPCISD::CR6UNSET,
4694                         dl, VTs, makeArrayRef(Ops, InFlag.getNode() ? 2 : 1));
4695
4696     InFlag = Chain.getValue(1);
4697   }
4698
4699   if (isTailCall)
4700     PrepareTailCall(DAG, InFlag, Chain, dl, false, SPDiff, NumBytes, LROp, FPOp,
4701                     false, TailCallArguments);
4702
4703   return FinishCall(CallConv, dl, isTailCall, isVarArg, IsPatchPoint,
4704                     /* unused except on PPC64 ELFv1 */ false, DAG,
4705                     RegsToPass, InFlag, Chain, CallSeqStart, Callee, SPDiff,
4706                     NumBytes, Ins, InVals, CS);
4707 }
4708
4709 // Copy an argument into memory, being careful to do this outside the
4710 // call sequence for the call to which the argument belongs.
4711 SDValue
4712 PPCTargetLowering::createMemcpyOutsideCallSeq(SDValue Arg, SDValue PtrOff,
4713                                               SDValue CallSeqStart,
4714                                               ISD::ArgFlagsTy Flags,
4715                                               SelectionDAG &DAG,
4716                                               SDLoc dl) const {
4717   SDValue MemcpyCall = CreateCopyOfByValArgument(Arg, PtrOff,
4718                         CallSeqStart.getNode()->getOperand(0),
4719                         Flags, DAG, dl);
4720   // The MEMCPY must go outside the CALLSEQ_START..END.
4721   SDValue NewCallSeqStart = DAG.getCALLSEQ_START(MemcpyCall,
4722                              CallSeqStart.getNode()->getOperand(1),
4723                              SDLoc(MemcpyCall));
4724   DAG.ReplaceAllUsesWith(CallSeqStart.getNode(),
4725                          NewCallSeqStart.getNode());
4726   return NewCallSeqStart;
4727 }
4728
4729 SDValue
4730 PPCTargetLowering::LowerCall_64SVR4(SDValue Chain, SDValue Callee,
4731                                     CallingConv::ID CallConv, bool isVarArg,
4732                                     bool isTailCall, bool IsPatchPoint,
4733                                     const SmallVectorImpl<ISD::OutputArg> &Outs,
4734                                     const SmallVectorImpl<SDValue> &OutVals,
4735                                     const SmallVectorImpl<ISD::InputArg> &Ins,
4736                                     SDLoc dl, SelectionDAG &DAG,
4737                                     SmallVectorImpl<SDValue> &InVals,
4738                                     ImmutableCallSite *CS) const {
4739
4740   bool isELFv2ABI = Subtarget.isELFv2ABI();
4741   bool isLittleEndian = Subtarget.isLittleEndian();
4742   unsigned NumOps = Outs.size();
4743   bool hasNest = false;
4744
4745   EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(DAG.getDataLayout());
4746   unsigned PtrByteSize = 8;
4747
4748   MachineFunction &MF = DAG.getMachineFunction();
4749
4750   // Mark this function as potentially containing a function that contains a
4751   // tail call. As a consequence the frame pointer will be used for dynamicalloc
4752   // and restoring the callers stack pointer in this functions epilog. This is
4753   // done because by tail calling the called function might overwrite the value
4754   // in this function's (MF) stack pointer stack slot 0(SP).
4755   if (getTargetMachine().Options.GuaranteedTailCallOpt &&
4756       CallConv == CallingConv::Fast)
4757     MF.getInfo<PPCFunctionInfo>()->setHasFastCall();
4758
4759   assert(!(CallConv == CallingConv::Fast && isVarArg) &&
4760          "fastcc not supported on varargs functions");
4761
4762   // Count how many bytes are to be pushed on the stack, including the linkage
4763   // area, and parameter passing area.  On ELFv1, the linkage area is 48 bytes
4764   // reserved space for [SP][CR][LR][2 x unused][TOC]; on ELFv2, the linkage
4765   // area is 32 bytes reserved space for [SP][CR][LR][TOC].
4766   unsigned LinkageSize = Subtarget.getFrameLowering()->getLinkageSize();
4767   unsigned NumBytes = LinkageSize;
4768   unsigned GPR_idx = 0, FPR_idx = 0, VR_idx = 0;
4769   unsigned &QFPR_idx = FPR_idx;
4770
4771   static const MCPhysReg GPR[] = {
4772     PPC::X3, PPC::X4, PPC::X5, PPC::X6,
4773     PPC::X7, PPC::X8, PPC::X9, PPC::X10,
4774   };
4775   static const MCPhysReg VR[] = {
4776     PPC::V2, PPC::V3, PPC::V4, PPC::V5, PPC::V6, PPC::V7, PPC::V8,
4777     PPC::V9, PPC::V10, PPC::V11, PPC::V12, PPC::V13
4778   };
4779   static const MCPhysReg VSRH[] = {
4780     PPC::VSH2, PPC::VSH3, PPC::VSH4, PPC::VSH5, PPC::VSH6, PPC::VSH7, PPC::VSH8,
4781     PPC::VSH9, PPC::VSH10, PPC::VSH11, PPC::VSH12, PPC::VSH13
4782   };
4783
4784   const unsigned NumGPRs = array_lengthof(GPR);
4785   const unsigned NumFPRs = 13;
4786   const unsigned NumVRs  = array_lengthof(VR);
4787   const unsigned NumQFPRs = NumFPRs;
4788
4789   // When using the fast calling convention, we don't provide backing for
4790   // arguments that will be in registers.
4791   unsigned NumGPRsUsed = 0, NumFPRsUsed = 0, NumVRsUsed = 0;
4792
4793   // Add up all the space actually used.
4794   for (unsigned i = 0; i != NumOps; ++i) {
4795     ISD::ArgFlagsTy Flags = Outs[i].Flags;
4796     EVT ArgVT = Outs[i].VT;
4797     EVT OrigVT = Outs[i].ArgVT;
4798
4799     if (Flags.isNest())
4800       continue;
4801
4802     if (CallConv == CallingConv::Fast) {
4803       if (Flags.isByVal())
4804         NumGPRsUsed += (Flags.getByValSize()+7)/8;
4805       else
4806         switch (ArgVT.getSimpleVT().SimpleTy) {
4807         default: llvm_unreachable("Unexpected ValueType for argument!");
4808         case MVT::i1:
4809         case MVT::i32:
4810         case MVT::i64:
4811           if (++NumGPRsUsed <= NumGPRs)
4812             continue;
4813           break;
4814         case MVT::v4i32:
4815         case MVT::v8i16:
4816         case MVT::v16i8:
4817         case MVT::v2f64:
4818         case MVT::v2i64:
4819         case MVT::v1i128:
4820           if (++NumVRsUsed <= NumVRs)
4821             continue;
4822           break;
4823         case MVT::v4f32:
4824           // When using QPX, this is handled like a FP register, otherwise, it
4825           // is an Altivec register.
4826           if (Subtarget.hasQPX()) {
4827             if (++NumFPRsUsed <= NumFPRs)
4828               continue;
4829           } else {
4830             if (++NumVRsUsed <= NumVRs)
4831               continue;
4832           }
4833           break;
4834         case MVT::f32:
4835         case MVT::f64:
4836         case MVT::v4f64: // QPX
4837         case MVT::v4i1:  // QPX
4838           if (++NumFPRsUsed <= NumFPRs)
4839             continue;
4840           break;
4841         }
4842     }
4843
4844     /* Respect alignment of argument on the stack.  */
4845     unsigned Align =
4846       CalculateStackSlotAlignment(ArgVT, OrigVT, Flags, PtrByteSize);
4847     NumBytes = ((NumBytes + Align - 1) / Align) * Align;
4848
4849     NumBytes += CalculateStackSlotSize(ArgVT, Flags, PtrByteSize);
4850     if (Flags.isInConsecutiveRegsLast())
4851       NumBytes = ((NumBytes + PtrByteSize - 1)/PtrByteSize) * PtrByteSize;
4852   }
4853
4854   unsigned NumBytesActuallyUsed = NumBytes;
4855
4856   // The prolog code of the callee may store up to 8 GPR argument registers to
4857   // the stack, allowing va_start to index over them in memory if its varargs.
4858   // Because we cannot tell if this is needed on the caller side, we have to
4859   // conservatively assume that it is needed.  As such, make sure we have at
4860   // least enough stack space for the caller to store the 8 GPRs.
4861   // FIXME: On ELFv2, it may be unnecessary to allocate the parameter area.
4862   NumBytes = std::max(NumBytes, LinkageSize + 8 * PtrByteSize);
4863
4864   // Tail call needs the stack to be aligned.
4865   if (getTargetMachine().Options.GuaranteedTailCallOpt &&
4866       CallConv == CallingConv::Fast)
4867     NumBytes = EnsureStackAlignment(Subtarget.getFrameLowering(), NumBytes);
4868
4869   // Calculate by how many bytes the stack has to be adjusted in case of tail
4870   // call optimization.
4871   int SPDiff = CalculateTailCallSPDiff(DAG, isTailCall, NumBytes);
4872
4873   // To protect arguments on the stack from being clobbered in a tail call,
4874   // force all the loads to happen before doing any other lowering.
4875   if (isTailCall)
4876     Chain = DAG.getStackArgumentTokenFactor(Chain);
4877
4878   // Adjust the stack pointer for the new arguments...
4879   // These operations are automatically eliminated by the prolog/epilog pass
4880   Chain = DAG.getCALLSEQ_START(Chain, DAG.getIntPtrConstant(NumBytes, dl, true),
4881                                dl);
4882   SDValue CallSeqStart = Chain;
4883
4884   // Load the return address and frame pointer so it can be move somewhere else
4885   // later.
4886   SDValue LROp, FPOp;
4887   Chain = EmitTailCallLoadFPAndRetAddr(DAG, SPDiff, Chain, LROp, FPOp, true,
4888                                        dl);
4889
4890   // Set up a copy of the stack pointer for use loading and storing any
4891   // arguments that may not fit in the registers available for argument
4892   // passing.
4893   SDValue StackPtr = DAG.getRegister(PPC::X1, MVT::i64);
4894
4895   // Figure out which arguments are going to go in registers, and which in
4896   // memory.  Also, if this is a vararg function, floating point operations
4897   // must be stored to our stack, and loaded into integer regs as well, if
4898   // any integer regs are available for argument passing.
4899   unsigned ArgOffset = LinkageSize;
4900
4901   SmallVector<std::pair<unsigned, SDValue>, 8> RegsToPass;
4902   SmallVector<TailCallArgumentInfo, 8> TailCallArguments;
4903
4904   SmallVector<SDValue, 8> MemOpChains;
4905   for (unsigned i = 0; i != NumOps; ++i) {
4906     SDValue Arg = OutVals[i];
4907     ISD::ArgFlagsTy Flags = Outs[i].Flags;
4908     EVT ArgVT = Outs[i].VT;
4909     EVT OrigVT = Outs[i].ArgVT;
4910
4911     // PtrOff will be used to store the current argument to the stack if a
4912     // register cannot be found for it.
4913     SDValue PtrOff;
4914
4915     // We re-align the argument offset for each argument, except when using the
4916     // fast calling convention, when we need to make sure we do that only when
4917     // we'll actually use a stack slot.
4918     auto ComputePtrOff = [&]() {
4919       /* Respect alignment of argument on the stack.  */
4920       unsigned Align =
4921         CalculateStackSlotAlignment(ArgVT, OrigVT, Flags, PtrByteSize);
4922       ArgOffset = ((ArgOffset + Align - 1) / Align) * Align;
4923
4924       PtrOff = DAG.getConstant(ArgOffset, dl, StackPtr.getValueType());
4925
4926       PtrOff = DAG.getNode(ISD::ADD, dl, PtrVT, StackPtr, PtrOff);
4927     };
4928
4929     if (CallConv != CallingConv::Fast) {
4930       ComputePtrOff();
4931
4932       /* Compute GPR index associated with argument offset.  */
4933       GPR_idx = (ArgOffset - LinkageSize) / PtrByteSize;
4934       GPR_idx = std::min(GPR_idx, NumGPRs);
4935     }
4936
4937     // Promote integers to 64-bit values.
4938     if (Arg.getValueType() == MVT::i32 || Arg.getValueType() == MVT::i1) {
4939       // FIXME: Should this use ANY_EXTEND if neither sext nor zext?
4940       unsigned ExtOp = Flags.isSExt() ? ISD::SIGN_EXTEND : ISD::ZERO_EXTEND;
4941       Arg = DAG.getNode(ExtOp, dl, MVT::i64, Arg);
4942     }
4943
4944     // FIXME memcpy is used way more than necessary.  Correctness first.
4945     // Note: "by value" is code for passing a structure by value, not
4946     // basic types.
4947     if (Flags.isByVal()) {
4948       // Note: Size includes alignment padding, so
4949       //   struct x { short a; char b; }
4950       // will have Size = 4.  With #pragma pack(1), it will have Size = 3.
4951       // These are the proper values we need for right-justifying the
4952       // aggregate in a parameter register.
4953       unsigned Size = Flags.getByValSize();
4954
4955       // An empty aggregate parameter takes up no storage and no
4956       // registers.
4957       if (Size == 0)
4958         continue;
4959
4960       if (CallConv == CallingConv::Fast)
4961         ComputePtrOff();
4962
4963       // All aggregates smaller than 8 bytes must be passed right-justified.
4964       if (Size==1 || Size==2 || Size==4) {
4965         EVT VT = (Size==1) ? MVT::i8 : ((Size==2) ? MVT::i16 : MVT::i32);
4966         if (GPR_idx != NumGPRs) {
4967           SDValue Load = DAG.getExtLoad(ISD::EXTLOAD, dl, PtrVT, Chain, Arg,
4968                                         MachinePointerInfo(), VT,
4969                                         false, false, false, 0);
4970           MemOpChains.push_back(Load.getValue(1));
4971           RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load));
4972
4973           ArgOffset += PtrByteSize;
4974           continue;
4975         }
4976       }
4977
4978       if (GPR_idx == NumGPRs && Size < 8) {
4979         SDValue AddPtr = PtrOff;
4980         if (!isLittleEndian) {
4981           SDValue Const = DAG.getConstant(PtrByteSize - Size, dl,
4982                                           PtrOff.getValueType());
4983           AddPtr = DAG.getNode(ISD::ADD, dl, PtrVT, PtrOff, Const);
4984         }
4985         Chain = CallSeqStart = createMemcpyOutsideCallSeq(Arg, AddPtr,
4986                                                           CallSeqStart,
4987                                                           Flags, DAG, dl);
4988         ArgOffset += PtrByteSize;
4989         continue;
4990       }
4991       // Copy entire object into memory.  There are cases where gcc-generated
4992       // code assumes it is there, even if it could be put entirely into
4993       // registers.  (This is not what the doc says.)
4994
4995       // FIXME: The above statement is likely due to a misunderstanding of the
4996       // documents.  All arguments must be copied into the parameter area BY
4997       // THE CALLEE in the event that the callee takes the address of any
4998       // formal argument.  That has not yet been implemented.  However, it is
4999       // reasonable to use the stack area as a staging area for the register
5000       // load.
5001
5002       // Skip this for small aggregates, as we will use the same slot for a
5003       // right-justified copy, below.
5004       if (Size >= 8)
5005         Chain = CallSeqStart = createMemcpyOutsideCallSeq(Arg, PtrOff,
5006                                                           CallSeqStart,
5007                                                           Flags, DAG, dl);
5008
5009       // When a register is available, pass a small aggregate right-justified.
5010       if (Size < 8 && GPR_idx != NumGPRs) {
5011         // The easiest way to get this right-justified in a register
5012         // is to copy the structure into the rightmost portion of a
5013         // local variable slot, then load the whole slot into the
5014         // register.
5015         // FIXME: The memcpy seems to produce pretty awful code for
5016         // small aggregates, particularly for packed ones.
5017         // FIXME: It would be preferable to use the slot in the
5018         // parameter save area instead of a new local variable.
5019         SDValue AddPtr = PtrOff;
5020         if (!isLittleEndian) {
5021           SDValue Const = DAG.getConstant(8 - Size, dl, PtrOff.getValueType());
5022           AddPtr = DAG.getNode(ISD::ADD, dl, PtrVT, PtrOff, Const);
5023         }
5024         Chain = CallSeqStart = createMemcpyOutsideCallSeq(Arg, AddPtr,
5025                                                           CallSeqStart,
5026                                                           Flags, DAG, dl);
5027
5028         // Load the slot into the register.
5029         SDValue Load = DAG.getLoad(PtrVT, dl, Chain, PtrOff,
5030                                    MachinePointerInfo(),
5031                                    false, false, false, 0);
5032         MemOpChains.push_back(Load.getValue(1));
5033         RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load));
5034
5035         // Done with this argument.
5036         ArgOffset += PtrByteSize;
5037         continue;
5038       }
5039
5040       // For aggregates larger than PtrByteSize, copy the pieces of the
5041       // object that fit into registers from the parameter save area.
5042       for (unsigned j=0; j<Size; j+=PtrByteSize) {
5043         SDValue Const = DAG.getConstant(j, dl, PtrOff.getValueType());
5044         SDValue AddArg = DAG.getNode(ISD::ADD, dl, PtrVT, Arg, Const);
5045         if (GPR_idx != NumGPRs) {
5046           SDValue Load = DAG.getLoad(PtrVT, dl, Chain, AddArg,
5047                                      MachinePointerInfo(),
5048                                      false, false, false, 0);
5049           MemOpChains.push_back(Load.getValue(1));
5050           RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load));
5051           ArgOffset += PtrByteSize;
5052         } else {
5053           ArgOffset += ((Size - j + PtrByteSize-1)/PtrByteSize)*PtrByteSize;
5054           break;
5055         }
5056       }
5057       continue;
5058     }
5059
5060     switch (Arg.getSimpleValueType().SimpleTy) {
5061     default: llvm_unreachable("Unexpected ValueType for argument!");
5062     case MVT::i1:
5063     case MVT::i32:
5064     case MVT::i64:
5065       if (Flags.isNest()) {
5066         // The 'nest' parameter, if any, is passed in R11.
5067         RegsToPass.push_back(std::make_pair(PPC::X11, Arg));
5068         hasNest = true;
5069         break;
5070       }
5071
5072       // These can be scalar arguments or elements of an integer array type
5073       // passed directly.  Clang may use those instead of "byval" aggregate
5074       // types to avoid forcing arguments to memory unnecessarily.
5075       if (GPR_idx != NumGPRs) {
5076         RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Arg));
5077       } else {
5078         if (CallConv == CallingConv::Fast)
5079           ComputePtrOff();
5080
5081         LowerMemOpCallTo(DAG, MF, Chain, Arg, PtrOff, SPDiff, ArgOffset,
5082                          true, isTailCall, false, MemOpChains,
5083                          TailCallArguments, dl);
5084         if (CallConv == CallingConv::Fast)
5085           ArgOffset += PtrByteSize;
5086       }
5087       if (CallConv != CallingConv::Fast)
5088         ArgOffset += PtrByteSize;
5089       break;
5090     case MVT::f32:
5091     case MVT::f64: {
5092       // These can be scalar arguments or elements of a float array type
5093       // passed directly.  The latter are used to implement ELFv2 homogenous
5094       // float aggregates.
5095
5096       // Named arguments go into FPRs first, and once they overflow, the
5097       // remaining arguments go into GPRs and then the parameter save area.
5098       // Unnamed arguments for vararg functions always go to GPRs and
5099       // then the parameter save area.  For now, put all arguments to vararg
5100       // routines always in both locations (FPR *and* GPR or stack slot).
5101       bool NeedGPROrStack = isVarArg || FPR_idx == NumFPRs;
5102       bool NeededLoad = false;
5103
5104       // First load the argument into the next available FPR.
5105       if (FPR_idx != NumFPRs)
5106         RegsToPass.push_back(std::make_pair(FPR[FPR_idx++], Arg));
5107
5108       // Next, load the argument into GPR or stack slot if needed.
5109       if (!NeedGPROrStack)
5110         ;
5111       else if (GPR_idx != NumGPRs && CallConv != CallingConv::Fast) {
5112         // FIXME: We may want to re-enable this for CallingConv::Fast on the P8
5113         // once we support fp <-> gpr moves.
5114
5115         // In the non-vararg case, this can only ever happen in the
5116         // presence of f32 array types, since otherwise we never run
5117         // out of FPRs before running out of GPRs.
5118         SDValue ArgVal;
5119
5120         // Double values are always passed in a single GPR.
5121         if (Arg.getValueType() != MVT::f32) {
5122           ArgVal = DAG.getNode(ISD::BITCAST, dl, MVT::i64, Arg);
5123
5124         // Non-array float values are extended and passed in a GPR.
5125         } else if (!Flags.isInConsecutiveRegs()) {
5126           ArgVal = DAG.getNode(ISD::BITCAST, dl, MVT::i32, Arg);
5127           ArgVal = DAG.getNode(ISD::ANY_EXTEND, dl, MVT::i64, ArgVal);
5128
5129         // If we have an array of floats, we collect every odd element
5130         // together with its predecessor into one GPR.
5131         } else if (ArgOffset % PtrByteSize != 0) {
5132           SDValue Lo, Hi;
5133           Lo = DAG.getNode(ISD::BITCAST, dl, MVT::i32, OutVals[i - 1]);
5134           Hi = DAG.getNode(ISD::BITCAST, dl, MVT::i32, Arg);
5135           if (!isLittleEndian)
5136             std::swap(Lo, Hi);
5137           ArgVal = DAG.getNode(ISD::BUILD_PAIR, dl, MVT::i64, Lo, Hi);
5138
5139         // The final element, if even, goes into the first half of a GPR.
5140         } else if (Flags.isInConsecutiveRegsLast()) {
5141           ArgVal = DAG.getNode(ISD::BITCAST, dl, MVT::i32, Arg);
5142           ArgVal = DAG.getNode(ISD::ANY_EXTEND, dl, MVT::i64, ArgVal);
5143           if (!isLittleEndian)
5144             ArgVal = DAG.getNode(ISD::SHL, dl, MVT::i64, ArgVal,
5145                                  DAG.getConstant(32, dl, MVT::i32));
5146
5147         // Non-final even elements are skipped; they will be handled
5148         // together the with subsequent argument on the next go-around.
5149         } else
5150           ArgVal = SDValue();
5151
5152         if (ArgVal.getNode())
5153           RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], ArgVal));
5154       } else {
5155         if (CallConv == CallingConv::Fast)
5156           ComputePtrOff();
5157
5158         // Single-precision floating-point values are mapped to the
5159         // second (rightmost) word of the stack doubleword.
5160         if (Arg.getValueType() == MVT::f32 &&
5161             !isLittleEndian && !Flags.isInConsecutiveRegs()) {
5162           SDValue ConstFour = DAG.getConstant(4, dl, PtrOff.getValueType());
5163           PtrOff = DAG.getNode(ISD::ADD, dl, PtrVT, PtrOff, ConstFour);
5164         }
5165
5166         LowerMemOpCallTo(DAG, MF, Chain, Arg, PtrOff, SPDiff, ArgOffset,
5167                          true, isTailCall, false, MemOpChains,
5168                          TailCallArguments, dl);
5169
5170         NeededLoad = true;
5171       }
5172       // When passing an array of floats, the array occupies consecutive
5173       // space in the argument area; only round up to the next doubleword
5174       // at the end of the array.  Otherwise, each float takes 8 bytes.
5175       if (CallConv != CallingConv::Fast || NeededLoad) {
5176         ArgOffset += (Arg.getValueType() == MVT::f32 &&
5177                       Flags.isInConsecutiveRegs()) ? 4 : 8;
5178         if (Flags.isInConsecutiveRegsLast())
5179           ArgOffset = ((ArgOffset + PtrByteSize - 1)/PtrByteSize) * PtrByteSize;
5180       }
5181       break;
5182     }
5183     case MVT::v4f32:
5184     case MVT::v4i32:
5185     case MVT::v8i16:
5186     case MVT::v16i8:
5187     case MVT::v2f64:
5188     case MVT::v2i64:
5189     case MVT::v1i128:
5190       if (!Subtarget.hasQPX()) {
5191       // These can be scalar arguments or elements of a vector array type
5192       // passed directly.  The latter are used to implement ELFv2 homogenous
5193       // vector aggregates.
5194
5195       // For a varargs call, named arguments go into VRs or on the stack as
5196       // usual; unnamed arguments always go to the stack or the corresponding
5197       // GPRs when within range.  For now, we always put the value in both
5198       // locations (or even all three).
5199       if (isVarArg) {
5200         // We could elide this store in the case where the object fits
5201         // entirely in R registers.  Maybe later.
5202         SDValue Store = DAG.getStore(Chain, dl, Arg, PtrOff,
5203                                      MachinePointerInfo(), false, false, 0);
5204         MemOpChains.push_back(Store);
5205         if (VR_idx != NumVRs) {
5206           SDValue Load = DAG.getLoad(MVT::v4f32, dl, Store, PtrOff,
5207                                      MachinePointerInfo(),
5208                                      false, false, false, 0);
5209           MemOpChains.push_back(Load.getValue(1));
5210
5211           unsigned VReg = (Arg.getSimpleValueType() == MVT::v2f64 ||
5212                            Arg.getSimpleValueType() == MVT::v2i64) ?
5213                           VSRH[VR_idx] : VR[VR_idx];
5214           ++VR_idx;
5215
5216           RegsToPass.push_back(std::make_pair(VReg, Load));
5217         }
5218         ArgOffset += 16;
5219         for (unsigned i=0; i<16; i+=PtrByteSize) {
5220           if (GPR_idx == NumGPRs)
5221             break;
5222           SDValue Ix = DAG.getNode(ISD::ADD, dl, PtrVT, PtrOff,
5223                                    DAG.getConstant(i, dl, PtrVT));
5224           SDValue Load = DAG.getLoad(PtrVT, dl, Store, Ix, MachinePointerInfo(),
5225                                      false, false, false, 0);
5226           MemOpChains.push_back(Load.getValue(1));
5227           RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load));
5228         }
5229         break;
5230       }
5231
5232       // Non-varargs Altivec params go into VRs or on the stack.
5233       if (VR_idx != NumVRs) {
5234         unsigned VReg = (Arg.getSimpleValueType() == MVT::v2f64 ||
5235                          Arg.getSimpleValueType() == MVT::v2i64) ?
5236                         VSRH[VR_idx] : VR[VR_idx];
5237         ++VR_idx;
5238
5239         RegsToPass.push_back(std::make_pair(VReg, Arg));
5240       } else {
5241         if (CallConv == CallingConv::Fast)
5242           ComputePtrOff();
5243
5244         LowerMemOpCallTo(DAG, MF, Chain, Arg, PtrOff, SPDiff, ArgOffset,
5245                          true, isTailCall, true, MemOpChains,
5246                          TailCallArguments, dl);
5247         if (CallConv == CallingConv::Fast)
5248           ArgOffset += 16;
5249       }
5250
5251       if (CallConv != CallingConv::Fast)
5252         ArgOffset += 16;
5253       break;
5254       } // not QPX
5255
5256       assert(Arg.getValueType().getSimpleVT().SimpleTy == MVT::v4f32 &&
5257              "Invalid QPX parameter type");
5258
5259       /* fall through */
5260     case MVT::v4f64:
5261     case MVT::v4i1: {
5262       bool IsF32 = Arg.getValueType().getSimpleVT().SimpleTy == MVT::v4f32;
5263       if (isVarArg) {
5264         // We could elide this store in the case where the object fits
5265         // entirely in R registers.  Maybe later.
5266         SDValue Store = DAG.getStore(Chain, dl, Arg, PtrOff,
5267                                      MachinePointerInfo(), false, false, 0);
5268         MemOpChains.push_back(Store);
5269         if (QFPR_idx != NumQFPRs) {
5270           SDValue Load = DAG.getLoad(IsF32 ? MVT::v4f32 : MVT::v4f64, dl,
5271                                      Store, PtrOff, MachinePointerInfo(),
5272                                      false, false, false, 0);
5273           MemOpChains.push_back(Load.getValue(1));
5274           RegsToPass.push_back(std::make_pair(QFPR[QFPR_idx++], Load));
5275         }
5276         ArgOffset += (IsF32 ? 16 : 32);
5277         for (unsigned i = 0; i < (IsF32 ? 16U : 32U); i += PtrByteSize) {
5278           if (GPR_idx == NumGPRs)
5279             break;
5280           SDValue Ix = DAG.getNode(ISD::ADD, dl, PtrVT, PtrOff,
5281                                    DAG.getConstant(i, dl, PtrVT));
5282           SDValue Load = DAG.getLoad(PtrVT, dl, Store, Ix, MachinePointerInfo(),
5283                                      false, false, false, 0);
5284           MemOpChains.push_back(Load.getValue(1));
5285           RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load));
5286         }
5287         break;
5288       }
5289
5290       // Non-varargs QPX params go into registers or on the stack.
5291       if (QFPR_idx != NumQFPRs) {
5292         RegsToPass.push_back(std::make_pair(QFPR[QFPR_idx++], Arg));
5293       } else {
5294         if (CallConv == CallingConv::Fast)
5295           ComputePtrOff();
5296
5297         LowerMemOpCallTo(DAG, MF, Chain, Arg, PtrOff, SPDiff, ArgOffset,
5298                          true, isTailCall, true, MemOpChains,
5299                          TailCallArguments, dl);
5300         if (CallConv == CallingConv::Fast)
5301           ArgOffset += (IsF32 ? 16 : 32);
5302       }
5303
5304       if (CallConv != CallingConv::Fast)
5305         ArgOffset += (IsF32 ? 16 : 32);
5306       break;
5307       }
5308     }
5309   }
5310
5311   assert(NumBytesActuallyUsed == ArgOffset);
5312   (void)NumBytesActuallyUsed;
5313
5314   if (!MemOpChains.empty())
5315     Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, MemOpChains);
5316
5317   // Check if this is an indirect call (MTCTR/BCTRL).
5318   // See PrepareCall() for more information about calls through function
5319   // pointers in the 64-bit SVR4 ABI.
5320   if (!isTailCall && !IsPatchPoint &&
5321       !isFunctionGlobalAddress(Callee) &&
5322       !isa<ExternalSymbolSDNode>(Callee)) {
5323     // Load r2 into a virtual register and store it to the TOC save area.
5324     setUsesTOCBasePtr(DAG);
5325     SDValue Val = DAG.getCopyFromReg(Chain, dl, PPC::X2, MVT::i64);
5326     // TOC save area offset.
5327     unsigned TOCSaveOffset = Subtarget.getFrameLowering()->getTOCSaveOffset();
5328     SDValue PtrOff = DAG.getIntPtrConstant(TOCSaveOffset, dl);
5329     SDValue AddPtr = DAG.getNode(ISD::ADD, dl, PtrVT, StackPtr, PtrOff);
5330     Chain = DAG.getStore(
5331         Val.getValue(1), dl, Val, AddPtr,
5332         MachinePointerInfo::getStack(DAG.getMachineFunction(), TOCSaveOffset),
5333         false, false, 0);
5334     // In the ELFv2 ABI, R12 must contain the address of an indirect callee.
5335     // This does not mean the MTCTR instruction must use R12; it's easier
5336     // to model this as an extra parameter, so do that.
5337     if (isELFv2ABI && !IsPatchPoint)
5338       RegsToPass.push_back(std::make_pair((unsigned)PPC::X12, Callee));
5339   }
5340
5341   // Build a sequence of copy-to-reg nodes chained together with token chain
5342   // and flag operands which copy the outgoing args into the appropriate regs.
5343   SDValue InFlag;
5344   for (unsigned i = 0, e = RegsToPass.size(); i != e; ++i) {
5345     Chain = DAG.getCopyToReg(Chain, dl, RegsToPass[i].first,
5346                              RegsToPass[i].second, InFlag);
5347     InFlag = Chain.getValue(1);
5348   }
5349
5350   if (isTailCall)
5351     PrepareTailCall(DAG, InFlag, Chain, dl, true, SPDiff, NumBytes, LROp,
5352                     FPOp, true, TailCallArguments);
5353
5354   return FinishCall(CallConv, dl, isTailCall, isVarArg, IsPatchPoint, hasNest,
5355                     DAG, RegsToPass, InFlag, Chain, CallSeqStart, Callee,
5356                     SPDiff, NumBytes, Ins, InVals, CS);
5357 }
5358
5359 SDValue
5360 PPCTargetLowering::LowerCall_Darwin(SDValue Chain, SDValue Callee,
5361                                     CallingConv::ID CallConv, bool isVarArg,
5362                                     bool isTailCall, bool IsPatchPoint,
5363                                     const SmallVectorImpl<ISD::OutputArg> &Outs,
5364                                     const SmallVectorImpl<SDValue> &OutVals,
5365                                     const SmallVectorImpl<ISD::InputArg> &Ins,
5366                                     SDLoc dl, SelectionDAG &DAG,
5367                                     SmallVectorImpl<SDValue> &InVals,
5368                                     ImmutableCallSite *CS) const {
5369
5370   unsigned NumOps = Outs.size();
5371
5372   EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(DAG.getDataLayout());
5373   bool isPPC64 = PtrVT == MVT::i64;
5374   unsigned PtrByteSize = isPPC64 ? 8 : 4;
5375
5376   MachineFunction &MF = DAG.getMachineFunction();
5377
5378   // Mark this function as potentially containing a function that contains a
5379   // tail call. As a consequence the frame pointer will be used for dynamicalloc
5380   // and restoring the callers stack pointer in this functions epilog. This is
5381   // done because by tail calling the called function might overwrite the value
5382   // in this function's (MF) stack pointer stack slot 0(SP).
5383   if (getTargetMachine().Options.GuaranteedTailCallOpt &&
5384       CallConv == CallingConv::Fast)
5385     MF.getInfo<PPCFunctionInfo>()->setHasFastCall();
5386
5387   // Count how many bytes are to be pushed on the stack, including the linkage
5388   // area, and parameter passing area.  We start with 24/48 bytes, which is
5389   // prereserved space for [SP][CR][LR][3 x unused].
5390   unsigned LinkageSize = Subtarget.getFrameLowering()->getLinkageSize();
5391   unsigned NumBytes = LinkageSize;
5392
5393   // Add up all the space actually used.
5394   // In 32-bit non-varargs calls, Altivec parameters all go at the end; usually
5395   // they all go in registers, but we must reserve stack space for them for
5396   // possible use by the caller.  In varargs or 64-bit calls, parameters are
5397   // assigned stack space in order, with padding so Altivec parameters are
5398   // 16-byte aligned.
5399   unsigned nAltivecParamsAtEnd = 0;
5400   for (unsigned i = 0; i != NumOps; ++i) {
5401     ISD::ArgFlagsTy Flags = Outs[i].Flags;
5402     EVT ArgVT = Outs[i].VT;
5403     // Varargs Altivec parameters are padded to a 16 byte boundary.
5404     if (ArgVT == MVT::v4f32 || ArgVT == MVT::v4i32 ||
5405         ArgVT == MVT::v8i16 || ArgVT == MVT::v16i8 ||
5406         ArgVT == MVT::v2f64 || ArgVT == MVT::v2i64) {
5407       if (!isVarArg && !isPPC64) {
5408         // Non-varargs Altivec parameters go after all the non-Altivec
5409         // parameters; handle those later so we know how much padding we need.
5410         nAltivecParamsAtEnd++;
5411         continue;
5412       }
5413       // Varargs and 64-bit Altivec parameters are padded to 16 byte boundary.
5414       NumBytes = ((NumBytes+15)/16)*16;
5415     }
5416     NumBytes += CalculateStackSlotSize(ArgVT, Flags, PtrByteSize);
5417   }
5418
5419   // Allow for Altivec parameters at the end, if needed.
5420   if (nAltivecParamsAtEnd) {
5421     NumBytes = ((NumBytes+15)/16)*16;
5422     NumBytes += 16*nAltivecParamsAtEnd;
5423   }
5424
5425   // The prolog code of the callee may store up to 8 GPR argument registers to
5426   // the stack, allowing va_start to index over them in memory if its varargs.
5427   // Because we cannot tell if this is needed on the caller side, we have to
5428   // conservatively assume that it is needed.  As such, make sure we have at
5429   // least enough stack space for the caller to store the 8 GPRs.
5430   NumBytes = std::max(NumBytes, LinkageSize + 8 * PtrByteSize);
5431
5432   // Tail call needs the stack to be aligned.
5433   if (getTargetMachine().Options.GuaranteedTailCallOpt &&
5434       CallConv == CallingConv::Fast)
5435     NumBytes = EnsureStackAlignment(Subtarget.getFrameLowering(), NumBytes);
5436
5437   // Calculate by how many bytes the stack has to be adjusted in case of tail
5438   // call optimization.
5439   int SPDiff = CalculateTailCallSPDiff(DAG, isTailCall, NumBytes);
5440
5441   // To protect arguments on the stack from being clobbered in a tail call,
5442   // force all the loads to happen before doing any other lowering.
5443   if (isTailCall)
5444     Chain = DAG.getStackArgumentTokenFactor(Chain);
5445
5446   // Adjust the stack pointer for the new arguments...
5447   // These operations are automatically eliminated by the prolog/epilog pass
5448   Chain = DAG.getCALLSEQ_START(Chain, DAG.getIntPtrConstant(NumBytes, dl, true),
5449                                dl);
5450   SDValue CallSeqStart = Chain;
5451
5452   // Load the return address and frame pointer so it can be move somewhere else
5453   // later.
5454   SDValue LROp, FPOp;
5455   Chain = EmitTailCallLoadFPAndRetAddr(DAG, SPDiff, Chain, LROp, FPOp, true,
5456                                        dl);
5457
5458   // Set up a copy of the stack pointer for use loading and storing any
5459   // arguments that may not fit in the registers available for argument
5460   // passing.
5461   SDValue StackPtr;
5462   if (isPPC64)
5463     StackPtr = DAG.getRegister(PPC::X1, MVT::i64);
5464   else
5465     StackPtr = DAG.getRegister(PPC::R1, MVT::i32);
5466
5467   // Figure out which arguments are going to go in registers, and which in
5468   // memory.  Also, if this is a vararg function, floating point operations
5469   // must be stored to our stack, and loaded into integer regs as well, if
5470   // any integer regs are available for argument passing.
5471   unsigned ArgOffset = LinkageSize;
5472   unsigned GPR_idx = 0, FPR_idx = 0, VR_idx = 0;
5473
5474   static const MCPhysReg GPR_32[] = {           // 32-bit registers.
5475     PPC::R3, PPC::R4, PPC::R5, PPC::R6,
5476     PPC::R7, PPC::R8, PPC::R9, PPC::R10,
5477   };
5478   static const MCPhysReg GPR_64[] = {           // 64-bit registers.
5479     PPC::X3, PPC::X4, PPC::X5, PPC::X6,
5480     PPC::X7, PPC::X8, PPC::X9, PPC::X10,
5481   };
5482   static const MCPhysReg VR[] = {
5483     PPC::V2, PPC::V3, PPC::V4, PPC::V5, PPC::V6, PPC::V7, PPC::V8,
5484     PPC::V9, PPC::V10, PPC::V11, PPC::V12, PPC::V13
5485   };
5486   const unsigned NumGPRs = array_lengthof(GPR_32);
5487   const unsigned NumFPRs = 13;
5488   const unsigned NumVRs  = array_lengthof(VR);
5489
5490   const MCPhysReg *GPR = isPPC64 ? GPR_64 : GPR_32;
5491
5492   SmallVector<std::pair<unsigned, SDValue>, 8> RegsToPass;
5493   SmallVector<TailCallArgumentInfo, 8> TailCallArguments;
5494
5495   SmallVector<SDValue, 8> MemOpChains;
5496   for (unsigned i = 0; i != NumOps; ++i) {
5497     SDValue Arg = OutVals[i];
5498     ISD::ArgFlagsTy Flags = Outs[i].Flags;
5499
5500     // PtrOff will be used to store the current argument to the stack if a
5501     // register cannot be found for it.
5502     SDValue PtrOff;
5503
5504     PtrOff = DAG.getConstant(ArgOffset, dl, StackPtr.getValueType());
5505
5506     PtrOff = DAG.getNode(ISD::ADD, dl, PtrVT, StackPtr, PtrOff);
5507
5508     // On PPC64, promote integers to 64-bit values.
5509     if (isPPC64 && Arg.getValueType() == MVT::i32) {
5510       // FIXME: Should this use ANY_EXTEND if neither sext nor zext?
5511       unsigned ExtOp = Flags.isSExt() ? ISD::SIGN_EXTEND : ISD::ZERO_EXTEND;
5512       Arg = DAG.getNode(ExtOp, dl, MVT::i64, Arg);
5513     }
5514
5515     // FIXME memcpy is used way more than necessary.  Correctness first.
5516     // Note: "by value" is code for passing a structure by value, not
5517     // basic types.
5518     if (Flags.isByVal()) {
5519       unsigned Size = Flags.getByValSize();
5520       // Very small objects are passed right-justified.  Everything else is
5521       // passed left-justified.
5522       if (Size==1 || Size==2) {
5523         EVT VT = (Size==1) ? MVT::i8 : MVT::i16;
5524         if (GPR_idx != NumGPRs) {
5525           SDValue Load = DAG.getExtLoad(ISD::EXTLOAD, dl, PtrVT, Chain, Arg,
5526                                         MachinePointerInfo(), VT,
5527                                         false, false, false, 0);
5528           MemOpChains.push_back(Load.getValue(1));
5529           RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load));
5530
5531           ArgOffset += PtrByteSize;
5532         } else {
5533           SDValue Const = DAG.getConstant(PtrByteSize - Size, dl,
5534                                           PtrOff.getValueType());
5535           SDValue AddPtr = DAG.getNode(ISD::ADD, dl, PtrVT, PtrOff, Const);
5536           Chain = CallSeqStart = createMemcpyOutsideCallSeq(Arg, AddPtr,
5537                                                             CallSeqStart,
5538                                                             Flags, DAG, dl);
5539           ArgOffset += PtrByteSize;
5540         }
5541         continue;
5542       }
5543       // Copy entire object into memory.  There are cases where gcc-generated
5544       // code assumes it is there, even if it could be put entirely into
5545       // registers.  (This is not what the doc says.)
5546       Chain = CallSeqStart = createMemcpyOutsideCallSeq(Arg, PtrOff,
5547                                                         CallSeqStart,
5548                                                         Flags, DAG, dl);
5549
5550       // For small aggregates (Darwin only) and aggregates >= PtrByteSize,
5551       // copy the pieces of the object that fit into registers from the
5552       // parameter save area.
5553       for (unsigned j=0; j<Size; j+=PtrByteSize) {
5554         SDValue Const = DAG.getConstant(j, dl, PtrOff.getValueType());
5555         SDValue AddArg = DAG.getNode(ISD::ADD, dl, PtrVT, Arg, Const);
5556         if (GPR_idx != NumGPRs) {
5557           SDValue Load = DAG.getLoad(PtrVT, dl, Chain, AddArg,
5558                                      MachinePointerInfo(),
5559                                      false, false, false, 0);
5560           MemOpChains.push_back(Load.getValue(1));
5561           RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load));
5562           ArgOffset += PtrByteSize;
5563         } else {
5564           ArgOffset += ((Size - j + PtrByteSize-1)/PtrByteSize)*PtrByteSize;
5565           break;
5566         }
5567       }
5568       continue;
5569     }
5570
5571     switch (Arg.getSimpleValueType().SimpleTy) {
5572     default: llvm_unreachable("Unexpected ValueType for argument!");
5573     case MVT::i1:
5574     case MVT::i32:
5575     case MVT::i64:
5576       if (GPR_idx != NumGPRs) {
5577         if (Arg.getValueType() == MVT::i1)
5578           Arg = DAG.getNode(ISD::ZERO_EXTEND, dl, PtrVT, Arg);
5579
5580         RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Arg));
5581       } else {
5582         LowerMemOpCallTo(DAG, MF, Chain, Arg, PtrOff, SPDiff, ArgOffset,
5583                          isPPC64, isTailCall, false, MemOpChains,
5584                          TailCallArguments, dl);
5585       }
5586       ArgOffset += PtrByteSize;
5587       break;
5588     case MVT::f32:
5589     case MVT::f64:
5590       if (FPR_idx != NumFPRs) {
5591         RegsToPass.push_back(std::make_pair(FPR[FPR_idx++], Arg));
5592
5593         if (isVarArg) {
5594           SDValue Store = DAG.getStore(Chain, dl, Arg, PtrOff,
5595                                        MachinePointerInfo(), false, false, 0);
5596           MemOpChains.push_back(Store);
5597
5598           // Float varargs are always shadowed in available integer registers
5599           if (GPR_idx != NumGPRs) {
5600             SDValue Load = DAG.getLoad(PtrVT, dl, Store, PtrOff,
5601                                        MachinePointerInfo(), false, false,
5602                                        false, 0);
5603             MemOpChains.push_back(Load.getValue(1));
5604             RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load));
5605           }
5606           if (GPR_idx != NumGPRs && Arg.getValueType() == MVT::f64 && !isPPC64){
5607             SDValue ConstFour = DAG.getConstant(4, dl, PtrOff.getValueType());
5608             PtrOff = DAG.getNode(ISD::ADD, dl, PtrVT, PtrOff, ConstFour);
5609             SDValue Load = DAG.getLoad(PtrVT, dl, Store, PtrOff,
5610                                        MachinePointerInfo(),
5611                                        false, false, false, 0);
5612             MemOpChains.push_back(Load.getValue(1));
5613             RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load));
5614           }
5615         } else {
5616           // If we have any FPRs remaining, we may also have GPRs remaining.
5617           // Args passed in FPRs consume either 1 (f32) or 2 (f64) available
5618           // GPRs.
5619           if (GPR_idx != NumGPRs)
5620             ++GPR_idx;
5621           if (GPR_idx != NumGPRs && Arg.getValueType() == MVT::f64 &&
5622               !isPPC64)  // PPC64 has 64-bit GPR's obviously :)
5623             ++GPR_idx;
5624         }
5625       } else
5626         LowerMemOpCallTo(DAG, MF, Chain, Arg, PtrOff, SPDiff, ArgOffset,
5627                          isPPC64, isTailCall, false, MemOpChains,
5628                          TailCallArguments, dl);
5629       if (isPPC64)
5630         ArgOffset += 8;
5631       else
5632         ArgOffset += Arg.getValueType() == MVT::f32 ? 4 : 8;
5633       break;
5634     case MVT::v4f32:
5635     case MVT::v4i32:
5636     case MVT::v8i16:
5637     case MVT::v16i8:
5638       if (isVarArg) {
5639         // These go aligned on the stack, or in the corresponding R registers
5640         // when within range.  The Darwin PPC ABI doc claims they also go in
5641         // V registers; in fact gcc does this only for arguments that are
5642         // prototyped, not for those that match the ...  We do it for all
5643         // arguments, seems to work.
5644         while (ArgOffset % 16 !=0) {
5645           ArgOffset += PtrByteSize;
5646           if (GPR_idx != NumGPRs)
5647             GPR_idx++;
5648         }
5649         // We could elide this store in the case where the object fits
5650         // entirely in R registers.  Maybe later.
5651         PtrOff = DAG.getNode(ISD::ADD, dl, PtrVT, StackPtr,
5652                              DAG.getConstant(ArgOffset, dl, PtrVT));
5653         SDValue Store = DAG.getStore(Chain, dl, Arg, PtrOff,
5654                                      MachinePointerInfo(), false, false, 0);
5655         MemOpChains.push_back(Store);
5656         if (VR_idx != NumVRs) {
5657           SDValue Load = DAG.getLoad(MVT::v4f32, dl, Store, PtrOff,
5658                                      MachinePointerInfo(),
5659                                      false, false, false, 0);
5660           MemOpChains.push_back(Load.getValue(1));
5661           RegsToPass.push_back(std::make_pair(VR[VR_idx++], Load));
5662         }
5663         ArgOffset += 16;
5664         for (unsigned i=0; i<16; i+=PtrByteSize) {
5665           if (GPR_idx == NumGPRs)
5666             break;
5667           SDValue Ix = DAG.getNode(ISD::ADD, dl, PtrVT, PtrOff,
5668                                    DAG.getConstant(i, dl, PtrVT));
5669           SDValue Load = DAG.getLoad(PtrVT, dl, Store, Ix, MachinePointerInfo(),
5670                                      false, false, false, 0);
5671           MemOpChains.push_back(Load.getValue(1));
5672           RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load));
5673         }
5674         break;
5675       }
5676
5677       // Non-varargs Altivec params generally go in registers, but have
5678       // stack space allocated at the end.
5679       if (VR_idx != NumVRs) {
5680         // Doesn't have GPR space allocated.
5681         RegsToPass.push_back(std::make_pair(VR[VR_idx++], Arg));
5682       } else if (nAltivecParamsAtEnd==0) {
5683         // We are emitting Altivec params in order.
5684         LowerMemOpCallTo(DAG, MF, Chain, Arg, PtrOff, SPDiff, ArgOffset,
5685                          isPPC64, isTailCall, true, MemOpChains,
5686                          TailCallArguments, dl);
5687         ArgOffset += 16;
5688       }
5689       break;
5690     }
5691   }
5692   // If all Altivec parameters fit in registers, as they usually do,
5693   // they get stack space following the non-Altivec parameters.  We
5694   // don't track this here because nobody below needs it.
5695   // If there are more Altivec parameters than fit in registers emit
5696   // the stores here.
5697   if (!isVarArg && nAltivecParamsAtEnd > NumVRs) {
5698     unsigned j = 0;
5699     // Offset is aligned; skip 1st 12 params which go in V registers.
5700     ArgOffset = ((ArgOffset+15)/16)*16;
5701     ArgOffset += 12*16;
5702     for (unsigned i = 0; i != NumOps; ++i) {
5703       SDValue Arg = OutVals[i];
5704       EVT ArgType = Outs[i].VT;
5705       if (ArgType==MVT::v4f32 || ArgType==MVT::v4i32 ||
5706           ArgType==MVT::v8i16 || ArgType==MVT::v16i8) {
5707         if (++j > NumVRs) {
5708           SDValue PtrOff;
5709           // We are emitting Altivec params in order.
5710           LowerMemOpCallTo(DAG, MF, Chain, Arg, PtrOff, SPDiff, ArgOffset,
5711                            isPPC64, isTailCall, true, MemOpChains,
5712                            TailCallArguments, dl);
5713           ArgOffset += 16;
5714         }
5715       }
5716     }
5717   }
5718
5719   if (!MemOpChains.empty())
5720     Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, MemOpChains);
5721
5722   // On Darwin, R12 must contain the address of an indirect callee.  This does
5723   // not mean the MTCTR instruction must use R12; it's easier to model this as
5724   // an extra parameter, so do that.
5725   if (!isTailCall &&
5726       !isFunctionGlobalAddress(Callee) &&
5727       !isa<ExternalSymbolSDNode>(Callee) &&
5728       !isBLACompatibleAddress(Callee, DAG))
5729     RegsToPass.push_back(std::make_pair((unsigned)(isPPC64 ? PPC::X12 :
5730                                                    PPC::R12), Callee));
5731
5732   // Build a sequence of copy-to-reg nodes chained together with token chain
5733   // and flag operands which copy the outgoing args into the appropriate regs.
5734   SDValue InFlag;
5735   for (unsigned i = 0, e = RegsToPass.size(); i != e; ++i) {
5736     Chain = DAG.getCopyToReg(Chain, dl, RegsToPass[i].first,
5737                              RegsToPass[i].second, InFlag);
5738     InFlag = Chain.getValue(1);
5739   }
5740
5741   if (isTailCall)
5742     PrepareTailCall(DAG, InFlag, Chain, dl, isPPC64, SPDiff, NumBytes, LROp,
5743                     FPOp, true, TailCallArguments);
5744
5745   return FinishCall(CallConv, dl, isTailCall, isVarArg, IsPatchPoint,
5746                     /* unused except on PPC64 ELFv1 */ false, DAG,
5747                     RegsToPass, InFlag, Chain, CallSeqStart, Callee, SPDiff,
5748                     NumBytes, Ins, InVals, CS);
5749 }
5750
5751 bool
5752 PPCTargetLowering::CanLowerReturn(CallingConv::ID CallConv,
5753                                   MachineFunction &MF, bool isVarArg,
5754                                   const SmallVectorImpl<ISD::OutputArg> &Outs,
5755                                   LLVMContext &Context) const {
5756   SmallVector<CCValAssign, 16> RVLocs;
5757   CCState CCInfo(CallConv, isVarArg, MF, RVLocs, Context);
5758   return CCInfo.CheckReturn(Outs, RetCC_PPC);
5759 }
5760
5761 SDValue
5762 PPCTargetLowering::LowerReturn(SDValue Chain,
5763                                CallingConv::ID CallConv, bool isVarArg,
5764                                const SmallVectorImpl<ISD::OutputArg> &Outs,
5765                                const SmallVectorImpl<SDValue> &OutVals,
5766                                SDLoc dl, SelectionDAG &DAG) const {
5767
5768   SmallVector<CCValAssign, 16> RVLocs;
5769   CCState CCInfo(CallConv, isVarArg, DAG.getMachineFunction(), RVLocs,
5770                  *DAG.getContext());
5771   CCInfo.AnalyzeReturn(Outs, RetCC_PPC);
5772
5773   SDValue Flag;
5774   SmallVector<SDValue, 4> RetOps(1, Chain);
5775
5776   // Copy the result values into the output registers.
5777   for (unsigned i = 0; i != RVLocs.size(); ++i) {
5778     CCValAssign &VA = RVLocs[i];
5779     assert(VA.isRegLoc() && "Can only return in registers!");
5780
5781     SDValue Arg = OutVals[i];
5782
5783     switch (VA.getLocInfo()) {
5784     default: llvm_unreachable("Unknown loc info!");
5785     case CCValAssign::Full: break;
5786     case CCValAssign::AExt:
5787       Arg = DAG.getNode(ISD::ANY_EXTEND, dl, VA.getLocVT(), Arg);
5788       break;
5789     case CCValAssign::ZExt:
5790       Arg = DAG.getNode(ISD::ZERO_EXTEND, dl, VA.getLocVT(), Arg);
5791       break;
5792     case CCValAssign::SExt:
5793       Arg = DAG.getNode(ISD::SIGN_EXTEND, dl, VA.getLocVT(), Arg);
5794       break;
5795     }
5796
5797     Chain = DAG.getCopyToReg(Chain, dl, VA.getLocReg(), Arg, Flag);
5798     Flag = Chain.getValue(1);
5799     RetOps.push_back(DAG.getRegister(VA.getLocReg(), VA.getLocVT()));
5800   }
5801
5802   RetOps[0] = Chain;  // Update chain.
5803
5804   // Add the flag if we have it.
5805   if (Flag.getNode())
5806     RetOps.push_back(Flag);
5807
5808   return DAG.getNode(PPCISD::RET_FLAG, dl, MVT::Other, RetOps);
5809 }
5810
5811 SDValue PPCTargetLowering::LowerSTACKRESTORE(SDValue Op, SelectionDAG &DAG,
5812                                    const PPCSubtarget &Subtarget) const {
5813   // When we pop the dynamic allocation we need to restore the SP link.
5814   SDLoc dl(Op);
5815
5816   // Get the corect type for pointers.
5817   EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(DAG.getDataLayout());
5818
5819   // Construct the stack pointer operand.
5820   bool isPPC64 = Subtarget.isPPC64();
5821   unsigned SP = isPPC64 ? PPC::X1 : PPC::R1;
5822   SDValue StackPtr = DAG.getRegister(SP, PtrVT);
5823
5824   // Get the operands for the STACKRESTORE.
5825   SDValue Chain = Op.getOperand(0);
5826   SDValue SaveSP = Op.getOperand(1);
5827
5828   // Load the old link SP.
5829   SDValue LoadLinkSP = DAG.getLoad(PtrVT, dl, Chain, StackPtr,
5830                                    MachinePointerInfo(),
5831                                    false, false, false, 0);
5832
5833   // Restore the stack pointer.
5834   Chain = DAG.getCopyToReg(LoadLinkSP.getValue(1), dl, SP, SaveSP);
5835
5836   // Store the old link SP.
5837   return DAG.getStore(Chain, dl, LoadLinkSP, StackPtr, MachinePointerInfo(),
5838                       false, false, 0);
5839 }
5840
5841 SDValue PPCTargetLowering::getReturnAddrFrameIndex(SelectionDAG &DAG) const {
5842   MachineFunction &MF = DAG.getMachineFunction();
5843   bool isPPC64 = Subtarget.isPPC64();
5844   EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(MF.getDataLayout());
5845
5846   // Get current frame pointer save index.  The users of this index will be
5847   // primarily DYNALLOC instructions.
5848   PPCFunctionInfo *FI = MF.getInfo<PPCFunctionInfo>();
5849   int RASI = FI->getReturnAddrSaveIndex();
5850
5851   // If the frame pointer save index hasn't been defined yet.
5852   if (!RASI) {
5853     // Find out what the fix offset of the frame pointer save area.
5854     int LROffset = Subtarget.getFrameLowering()->getReturnSaveOffset();
5855     // Allocate the frame index for frame pointer save area.
5856     RASI = MF.getFrameInfo()->CreateFixedObject(isPPC64? 8 : 4, LROffset, false);
5857     // Save the result.
5858     FI->setReturnAddrSaveIndex(RASI);
5859   }
5860   return DAG.getFrameIndex(RASI, PtrVT);
5861 }
5862
5863 SDValue
5864 PPCTargetLowering::getFramePointerFrameIndex(SelectionDAG & DAG) const {
5865   MachineFunction &MF = DAG.getMachineFunction();
5866   bool isPPC64 = Subtarget.isPPC64();
5867   EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(MF.getDataLayout());
5868
5869   // Get current frame pointer save index.  The users of this index will be
5870   // primarily DYNALLOC instructions.
5871   PPCFunctionInfo *FI = MF.getInfo<PPCFunctionInfo>();
5872   int FPSI = FI->getFramePointerSaveIndex();
5873
5874   // If the frame pointer save index hasn't been defined yet.
5875   if (!FPSI) {
5876     // Find out what the fix offset of the frame pointer save area.
5877     int FPOffset = Subtarget.getFrameLowering()->getFramePointerSaveOffset();
5878     // Allocate the frame index for frame pointer save area.
5879     FPSI = MF.getFrameInfo()->CreateFixedObject(isPPC64? 8 : 4, FPOffset, true);
5880     // Save the result.
5881     FI->setFramePointerSaveIndex(FPSI);
5882   }
5883   return DAG.getFrameIndex(FPSI, PtrVT);
5884 }
5885
5886 SDValue PPCTargetLowering::LowerDYNAMIC_STACKALLOC(SDValue Op,
5887                                          SelectionDAG &DAG,
5888                                          const PPCSubtarget &Subtarget) const {
5889   // Get the inputs.
5890   SDValue Chain = Op.getOperand(0);
5891   SDValue Size  = Op.getOperand(1);
5892   SDLoc dl(Op);
5893
5894   // Get the corect type for pointers.
5895   EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(DAG.getDataLayout());
5896   // Negate the size.
5897   SDValue NegSize = DAG.getNode(ISD::SUB, dl, PtrVT,
5898                                 DAG.getConstant(0, dl, PtrVT), Size);
5899   // Construct a node for the frame pointer save index.
5900   SDValue FPSIdx = getFramePointerFrameIndex(DAG);
5901   // Build a DYNALLOC node.
5902   SDValue Ops[3] = { Chain, NegSize, FPSIdx };
5903   SDVTList VTs = DAG.getVTList(PtrVT, MVT::Other);
5904   return DAG.getNode(PPCISD::DYNALLOC, dl, VTs, Ops);
5905 }
5906
5907 SDValue PPCTargetLowering::lowerEH_SJLJ_SETJMP(SDValue Op,
5908                                                SelectionDAG &DAG) const {
5909   SDLoc DL(Op);
5910   return DAG.getNode(PPCISD::EH_SJLJ_SETJMP, DL,
5911                      DAG.getVTList(MVT::i32, MVT::Other),
5912                      Op.getOperand(0), Op.getOperand(1));
5913 }
5914
5915 SDValue PPCTargetLowering::lowerEH_SJLJ_LONGJMP(SDValue Op,
5916                                                 SelectionDAG &DAG) const {
5917   SDLoc DL(Op);
5918   return DAG.getNode(PPCISD::EH_SJLJ_LONGJMP, DL, MVT::Other,
5919                      Op.getOperand(0), Op.getOperand(1));
5920 }
5921
5922 SDValue PPCTargetLowering::LowerLOAD(SDValue Op, SelectionDAG &DAG) const {
5923   if (Op.getValueType().isVector())
5924     return LowerVectorLoad(Op, DAG);
5925
5926   assert(Op.getValueType() == MVT::i1 &&
5927          "Custom lowering only for i1 loads");
5928
5929   // First, load 8 bits into 32 bits, then truncate to 1 bit.
5930
5931   SDLoc dl(Op);
5932   LoadSDNode *LD = cast<LoadSDNode>(Op);
5933
5934   SDValue Chain = LD->getChain();
5935   SDValue BasePtr = LD->getBasePtr();
5936   MachineMemOperand *MMO = LD->getMemOperand();
5937
5938   SDValue NewLD =
5939       DAG.getExtLoad(ISD::EXTLOAD, dl, getPointerTy(DAG.getDataLayout()), Chain,
5940                      BasePtr, MVT::i8, MMO);
5941   SDValue Result = DAG.getNode(ISD::TRUNCATE, dl, MVT::i1, NewLD);
5942
5943   SDValue Ops[] = { Result, SDValue(NewLD.getNode(), 1) };
5944   return DAG.getMergeValues(Ops, dl);
5945 }
5946
5947 SDValue PPCTargetLowering::LowerSTORE(SDValue Op, SelectionDAG &DAG) const {
5948   if (Op.getOperand(1).getValueType().isVector())
5949     return LowerVectorStore(Op, DAG);
5950
5951   assert(Op.getOperand(1).getValueType() == MVT::i1 &&
5952          "Custom lowering only for i1 stores");
5953
5954   // First, zero extend to 32 bits, then use a truncating store to 8 bits.
5955
5956   SDLoc dl(Op);
5957   StoreSDNode *ST = cast<StoreSDNode>(Op);
5958
5959   SDValue Chain = ST->getChain();
5960   SDValue BasePtr = ST->getBasePtr();
5961   SDValue Value = ST->getValue();
5962   MachineMemOperand *MMO = ST->getMemOperand();
5963
5964   Value = DAG.getNode(ISD::ZERO_EXTEND, dl, getPointerTy(DAG.getDataLayout()),
5965                       Value);
5966   return DAG.getTruncStore(Chain, dl, Value, BasePtr, MVT::i8, MMO);
5967 }
5968
5969 // FIXME: Remove this once the ANDI glue bug is fixed:
5970 SDValue PPCTargetLowering::LowerTRUNCATE(SDValue Op, SelectionDAG &DAG) const {
5971   assert(Op.getValueType() == MVT::i1 &&
5972          "Custom lowering only for i1 results");
5973
5974   SDLoc DL(Op);
5975   return DAG.getNode(PPCISD::ANDIo_1_GT_BIT, DL, MVT::i1,
5976                      Op.getOperand(0));
5977 }
5978
5979 /// LowerSELECT_CC - Lower floating point select_cc's into fsel instruction when
5980 /// possible.
5981 SDValue PPCTargetLowering::LowerSELECT_CC(SDValue Op, SelectionDAG &DAG) const {
5982   // Not FP? Not a fsel.
5983   if (!Op.getOperand(0).getValueType().isFloatingPoint() ||
5984       !Op.getOperand(2).getValueType().isFloatingPoint())
5985     return Op;
5986
5987   // We might be able to do better than this under some circumstances, but in
5988   // general, fsel-based lowering of select is a finite-math-only optimization.
5989   // For more information, see section F.3 of the 2.06 ISA specification.
5990   if (!DAG.getTarget().Options.NoInfsFPMath ||
5991       !DAG.getTarget().Options.NoNaNsFPMath)
5992     return Op;
5993   // TODO: Propagate flags from the select rather than global settings.
5994   SDNodeFlags Flags;
5995   Flags.setNoInfs(true);
5996   Flags.setNoNaNs(true);
5997
5998   ISD::CondCode CC = cast<CondCodeSDNode>(Op.getOperand(4))->get();
5999
6000   EVT ResVT = Op.getValueType();
6001   EVT CmpVT = Op.getOperand(0).getValueType();
6002   SDValue LHS = Op.getOperand(0), RHS = Op.getOperand(1);
6003   SDValue TV  = Op.getOperand(2), FV  = Op.getOperand(3);
6004   SDLoc dl(Op);
6005
6006   // If the RHS of the comparison is a 0.0, we don't need to do the
6007   // subtraction at all.
6008   SDValue Sel1;
6009   if (isFloatingPointZero(RHS))
6010     switch (CC) {
6011     default: break;       // SETUO etc aren't handled by fsel.
6012     case ISD::SETNE:
6013       std::swap(TV, FV);
6014     case ISD::SETEQ:
6015       if (LHS.getValueType() == MVT::f32)   // Comparison is always 64-bits
6016         LHS = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, LHS);
6017       Sel1 = DAG.getNode(PPCISD::FSEL, dl, ResVT, LHS, TV, FV);
6018       if (Sel1.getValueType() == MVT::f32)   // Comparison is always 64-bits
6019         Sel1 = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, Sel1);
6020       return DAG.getNode(PPCISD::FSEL, dl, ResVT,
6021                          DAG.getNode(ISD::FNEG, dl, MVT::f64, LHS), Sel1, FV);
6022     case ISD::SETULT:
6023     case ISD::SETLT:
6024       std::swap(TV, FV);  // fsel is natively setge, swap operands for setlt
6025     case ISD::SETOGE:
6026     case ISD::SETGE:
6027       if (LHS.getValueType() == MVT::f32)   // Comparison is always 64-bits
6028         LHS = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, LHS);
6029       return DAG.getNode(PPCISD::FSEL, dl, ResVT, LHS, TV, FV);
6030     case ISD::SETUGT:
6031     case ISD::SETGT:
6032       std::swap(TV, FV);  // fsel is natively setge, swap operands for setlt
6033     case ISD::SETOLE:
6034     case ISD::SETLE:
6035       if (LHS.getValueType() == MVT::f32)   // Comparison is always 64-bits
6036         LHS = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, LHS);
6037       return DAG.getNode(PPCISD::FSEL, dl, ResVT,
6038                          DAG.getNode(ISD::FNEG, dl, MVT::f64, LHS), TV, FV);
6039     }
6040
6041   SDValue Cmp;
6042   switch (CC) {
6043   default: break;       // SETUO etc aren't handled by fsel.
6044   case ISD::SETNE:
6045     std::swap(TV, FV);
6046   case ISD::SETEQ:
6047     Cmp = DAG.getNode(ISD::FSUB, dl, CmpVT, LHS, RHS, &Flags);
6048     if (Cmp.getValueType() == MVT::f32)   // Comparison is always 64-bits
6049       Cmp = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, Cmp);
6050     Sel1 = DAG.getNode(PPCISD::FSEL, dl, ResVT, Cmp, TV, FV);
6051     if (Sel1.getValueType() == MVT::f32)   // Comparison is always 64-bits
6052       Sel1 = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, Sel1);
6053     return DAG.getNode(PPCISD::FSEL, dl, ResVT,
6054                        DAG.getNode(ISD::FNEG, dl, MVT::f64, Cmp), Sel1, FV);
6055   case ISD::SETULT:
6056   case ISD::SETLT:
6057     Cmp = DAG.getNode(ISD::FSUB, dl, CmpVT, LHS, RHS, &Flags);
6058     if (Cmp.getValueType() == MVT::f32)   // Comparison is always 64-bits
6059       Cmp = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, Cmp);
6060     return DAG.getNode(PPCISD::FSEL, dl, ResVT, Cmp, FV, TV);
6061   case ISD::SETOGE:
6062   case ISD::SETGE:
6063     Cmp = DAG.getNode(ISD::FSUB, dl, CmpVT, LHS, RHS, &Flags);
6064     if (Cmp.getValueType() == MVT::f32)   // Comparison is always 64-bits
6065       Cmp = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, Cmp);
6066     return DAG.getNode(PPCISD::FSEL, dl, ResVT, Cmp, TV, FV);
6067   case ISD::SETUGT:
6068   case ISD::SETGT:
6069     Cmp = DAG.getNode(ISD::FSUB, dl, CmpVT, RHS, LHS, &Flags);
6070     if (Cmp.getValueType() == MVT::f32)   // Comparison is always 64-bits
6071       Cmp = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, Cmp);
6072     return DAG.getNode(PPCISD::FSEL, dl, ResVT, Cmp, FV, TV);
6073   case ISD::SETOLE:
6074   case ISD::SETLE:
6075     Cmp = DAG.getNode(ISD::FSUB, dl, CmpVT, RHS, LHS, &Flags);
6076     if (Cmp.getValueType() == MVT::f32)   // Comparison is always 64-bits
6077       Cmp = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, Cmp);
6078     return DAG.getNode(PPCISD::FSEL, dl, ResVT, Cmp, TV, FV);
6079   }
6080   return Op;
6081 }
6082
6083 void PPCTargetLowering::LowerFP_TO_INTForReuse(SDValue Op, ReuseLoadInfo &RLI,
6084                                                SelectionDAG &DAG,
6085                                                SDLoc dl) const {
6086   assert(Op.getOperand(0).getValueType().isFloatingPoint());
6087   SDValue Src = Op.getOperand(0);
6088   if (Src.getValueType() == MVT::f32)
6089     Src = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, Src);
6090
6091   SDValue Tmp;
6092   switch (Op.getSimpleValueType().SimpleTy) {
6093   default: llvm_unreachable("Unhandled FP_TO_INT type in custom expander!");
6094   case MVT::i32:
6095     Tmp = DAG.getNode(
6096         Op.getOpcode() == ISD::FP_TO_SINT
6097             ? PPCISD::FCTIWZ
6098             : (Subtarget.hasFPCVT() ? PPCISD::FCTIWUZ : PPCISD::FCTIDZ),
6099         dl, MVT::f64, Src);
6100     break;
6101   case MVT::i64:
6102     assert((Op.getOpcode() == ISD::FP_TO_SINT || Subtarget.hasFPCVT()) &&
6103            "i64 FP_TO_UINT is supported only with FPCVT");
6104     Tmp = DAG.getNode(Op.getOpcode()==ISD::FP_TO_SINT ? PPCISD::FCTIDZ :
6105                                                         PPCISD::FCTIDUZ,
6106                       dl, MVT::f64, Src);
6107     break;
6108   }
6109
6110   // Convert the FP value to an int value through memory.
6111   bool i32Stack = Op.getValueType() == MVT::i32 && Subtarget.hasSTFIWX() &&
6112     (Op.getOpcode() == ISD::FP_TO_SINT || Subtarget.hasFPCVT());
6113   SDValue FIPtr = DAG.CreateStackTemporary(i32Stack ? MVT::i32 : MVT::f64);
6114   int FI = cast<FrameIndexSDNode>(FIPtr)->getIndex();
6115   MachinePointerInfo MPI =
6116       MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI);
6117
6118   // Emit a store to the stack slot.
6119   SDValue Chain;
6120   if (i32Stack) {
6121     MachineFunction &MF = DAG.getMachineFunction();
6122     MachineMemOperand *MMO =
6123       MF.getMachineMemOperand(MPI, MachineMemOperand::MOStore, 4, 4);
6124     SDValue Ops[] = { DAG.getEntryNode(), Tmp, FIPtr };
6125     Chain = DAG.getMemIntrinsicNode(PPCISD::STFIWX, dl,
6126               DAG.getVTList(MVT::Other), Ops, MVT::i32, MMO);
6127   } else
6128     Chain = DAG.getStore(DAG.getEntryNode(), dl, Tmp, FIPtr,
6129                          MPI, false, false, 0);
6130
6131   // Result is a load from the stack slot.  If loading 4 bytes, make sure to
6132   // add in a bias.
6133   if (Op.getValueType() == MVT::i32 && !i32Stack) {
6134     FIPtr = DAG.getNode(ISD::ADD, dl, FIPtr.getValueType(), FIPtr,
6135                         DAG.getConstant(4, dl, FIPtr.getValueType()));
6136     MPI = MPI.getWithOffset(4);
6137   }
6138
6139   RLI.Chain = Chain;
6140   RLI.Ptr = FIPtr;
6141   RLI.MPI = MPI;
6142 }
6143
6144 /// \brief Custom lowers floating point to integer conversions to use
6145 /// the direct move instructions available in ISA 2.07 to avoid the
6146 /// need for load/store combinations.
6147 SDValue PPCTargetLowering::LowerFP_TO_INTDirectMove(SDValue Op,
6148                                                     SelectionDAG &DAG,
6149                                                     SDLoc dl) const {
6150   assert(Op.getOperand(0).getValueType().isFloatingPoint());
6151   SDValue Src = Op.getOperand(0);
6152
6153   if (Src.getValueType() == MVT::f32)
6154     Src = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, Src);
6155
6156   SDValue Tmp;
6157   switch (Op.getSimpleValueType().SimpleTy) {
6158   default: llvm_unreachable("Unhandled FP_TO_INT type in custom expander!");
6159   case MVT::i32:
6160     Tmp = DAG.getNode(
6161         Op.getOpcode() == ISD::FP_TO_SINT
6162             ? PPCISD::FCTIWZ
6163             : (Subtarget.hasFPCVT() ? PPCISD::FCTIWUZ : PPCISD::FCTIDZ),
6164         dl, MVT::f64, Src);
6165     Tmp = DAG.getNode(PPCISD::MFVSR, dl, MVT::i32, Tmp);
6166     break;
6167   case MVT::i64:
6168     assert((Op.getOpcode() == ISD::FP_TO_SINT || Subtarget.hasFPCVT()) &&
6169            "i64 FP_TO_UINT is supported only with FPCVT");
6170     Tmp = DAG.getNode(Op.getOpcode()==ISD::FP_TO_SINT ? PPCISD::FCTIDZ :
6171                                                         PPCISD::FCTIDUZ,
6172                       dl, MVT::f64, Src);
6173     Tmp = DAG.getNode(PPCISD::MFVSR, dl, MVT::i64, Tmp);
6174     break;
6175   }
6176   return Tmp;
6177 }
6178
6179 SDValue PPCTargetLowering::LowerFP_TO_INT(SDValue Op, SelectionDAG &DAG,
6180                                           SDLoc dl) const {
6181   if (Subtarget.hasDirectMove() && Subtarget.isPPC64())
6182     return LowerFP_TO_INTDirectMove(Op, DAG, dl);
6183
6184   ReuseLoadInfo RLI;
6185   LowerFP_TO_INTForReuse(Op, RLI, DAG, dl);
6186
6187   return DAG.getLoad(Op.getValueType(), dl, RLI.Chain, RLI.Ptr, RLI.MPI, false,
6188                      false, RLI.IsInvariant, RLI.Alignment, RLI.AAInfo,
6189                      RLI.Ranges);
6190 }
6191
6192 // We're trying to insert a regular store, S, and then a load, L. If the
6193 // incoming value, O, is a load, we might just be able to have our load use the
6194 // address used by O. However, we don't know if anything else will store to
6195 // that address before we can load from it. To prevent this situation, we need
6196 // to insert our load, L, into the chain as a peer of O. To do this, we give L
6197 // the same chain operand as O, we create a token factor from the chain results
6198 // of O and L, and we replace all uses of O's chain result with that token
6199 // factor (see spliceIntoChain below for this last part).
6200 bool PPCTargetLowering::canReuseLoadAddress(SDValue Op, EVT MemVT,
6201                                             ReuseLoadInfo &RLI,
6202                                             SelectionDAG &DAG,
6203                                             ISD::LoadExtType ET) const {
6204   SDLoc dl(Op);
6205   if (ET == ISD::NON_EXTLOAD &&
6206       (Op.getOpcode() == ISD::FP_TO_UINT ||
6207        Op.getOpcode() == ISD::FP_TO_SINT) &&
6208       isOperationLegalOrCustom(Op.getOpcode(),
6209                                Op.getOperand(0).getValueType())) {
6210
6211     LowerFP_TO_INTForReuse(Op, RLI, DAG, dl);
6212     return true;
6213   }
6214
6215   LoadSDNode *LD = dyn_cast<LoadSDNode>(Op);
6216   if (!LD || LD->getExtensionType() != ET || LD->isVolatile() ||
6217       LD->isNonTemporal())
6218     return false;
6219   if (LD->getMemoryVT() != MemVT)
6220     return false;
6221
6222   RLI.Ptr = LD->getBasePtr();
6223   if (LD->isIndexed() && LD->getOffset().getOpcode() != ISD::UNDEF) {
6224     assert(LD->getAddressingMode() == ISD::PRE_INC &&
6225            "Non-pre-inc AM on PPC?");
6226     RLI.Ptr = DAG.getNode(ISD::ADD, dl, RLI.Ptr.getValueType(), RLI.Ptr,
6227                           LD->getOffset());
6228   }
6229
6230   RLI.Chain = LD->getChain();
6231   RLI.MPI = LD->getPointerInfo();
6232   RLI.IsInvariant = LD->isInvariant();
6233   RLI.Alignment = LD->getAlignment();
6234   RLI.AAInfo = LD->getAAInfo();
6235   RLI.Ranges = LD->getRanges();
6236
6237   RLI.ResChain = SDValue(LD, LD->isIndexed() ? 2 : 1);
6238   return true;
6239 }
6240
6241 // Given the head of the old chain, ResChain, insert a token factor containing
6242 // it and NewResChain, and make users of ResChain now be users of that token
6243 // factor.
6244 void PPCTargetLowering::spliceIntoChain(SDValue ResChain,
6245                                         SDValue NewResChain,
6246                                         SelectionDAG &DAG) const {
6247   if (!ResChain)
6248     return;
6249
6250   SDLoc dl(NewResChain);
6251
6252   SDValue TF = DAG.getNode(ISD::TokenFactor, dl, MVT::Other,
6253                            NewResChain, DAG.getUNDEF(MVT::Other));
6254   assert(TF.getNode() != NewResChain.getNode() &&
6255          "A new TF really is required here");
6256
6257   DAG.ReplaceAllUsesOfValueWith(ResChain, TF);
6258   DAG.UpdateNodeOperands(TF.getNode(), ResChain, NewResChain);
6259 }
6260
6261 /// \brief Custom lowers integer to floating point conversions to use
6262 /// the direct move instructions available in ISA 2.07 to avoid the
6263 /// need for load/store combinations.
6264 SDValue PPCTargetLowering::LowerINT_TO_FPDirectMove(SDValue Op,
6265                                                     SelectionDAG &DAG,
6266                                                     SDLoc dl) const {
6267   assert((Op.getValueType() == MVT::f32 ||
6268           Op.getValueType() == MVT::f64) &&
6269          "Invalid floating point type as target of conversion");
6270   assert(Subtarget.hasFPCVT() &&
6271          "Int to FP conversions with direct moves require FPCVT");
6272   SDValue FP;
6273   SDValue Src = Op.getOperand(0);
6274   bool SinglePrec = Op.getValueType() == MVT::f32;
6275   bool WordInt = Src.getSimpleValueType().SimpleTy == MVT::i32;
6276   bool Signed = Op.getOpcode() == ISD::SINT_TO_FP;
6277   unsigned ConvOp = Signed ? (SinglePrec ? PPCISD::FCFIDS : PPCISD::FCFID) :
6278                              (SinglePrec ? PPCISD::FCFIDUS : PPCISD::FCFIDU);
6279
6280   if (WordInt) {
6281     FP = DAG.getNode(Signed ? PPCISD::MTVSRA : PPCISD::MTVSRZ,
6282                      dl, MVT::f64, Src);
6283     FP = DAG.getNode(ConvOp, dl, SinglePrec ? MVT::f32 : MVT::f64, FP);
6284   }
6285   else {
6286     FP = DAG.getNode(PPCISD::MTVSRA, dl, MVT::f64, Src);
6287     FP = DAG.getNode(ConvOp, dl, SinglePrec ? MVT::f32 : MVT::f64, FP);
6288   }
6289
6290   return FP;
6291 }
6292
6293 SDValue PPCTargetLowering::LowerINT_TO_FP(SDValue Op,
6294                                           SelectionDAG &DAG) const {
6295   SDLoc dl(Op);
6296
6297   if (Subtarget.hasQPX() && Op.getOperand(0).getValueType() == MVT::v4i1) {
6298     if (Op.getValueType() != MVT::v4f32 && Op.getValueType() != MVT::v4f64)
6299       return SDValue();
6300
6301     SDValue Value = Op.getOperand(0);
6302     // The values are now known to be -1 (false) or 1 (true). To convert this
6303     // into 0 (false) and 1 (true), add 1 and then divide by 2 (multiply by 0.5).
6304     // This can be done with an fma and the 0.5 constant: (V+1.0)*0.5 = 0.5*V+0.5
6305     Value = DAG.getNode(PPCISD::QBFLT, dl, MVT::v4f64, Value);
6306
6307     SDValue FPHalfs = DAG.getConstantFP(0.5, dl, MVT::f64);
6308     FPHalfs = DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v4f64, FPHalfs, FPHalfs,
6309                           FPHalfs, FPHalfs);
6310
6311     Value = DAG.getNode(ISD::FMA, dl, MVT::v4f64, Value, FPHalfs, FPHalfs);
6312
6313     if (Op.getValueType() != MVT::v4f64)
6314       Value = DAG.getNode(ISD::FP_ROUND, dl,
6315                           Op.getValueType(), Value,
6316                           DAG.getIntPtrConstant(1, dl));
6317     return Value;
6318   }
6319
6320   // Don't handle ppc_fp128 here; let it be lowered to a libcall.
6321   if (Op.getValueType() != MVT::f32 && Op.getValueType() != MVT::f64)
6322     return SDValue();
6323
6324   if (Op.getOperand(0).getValueType() == MVT::i1)
6325     return DAG.getNode(ISD::SELECT, dl, Op.getValueType(), Op.getOperand(0),
6326                        DAG.getConstantFP(1.0, dl, Op.getValueType()),
6327                        DAG.getConstantFP(0.0, dl, Op.getValueType()));
6328
6329   // If we have direct moves, we can do all the conversion, skip the store/load
6330   // however, without FPCVT we can't do most conversions.
6331   if (Subtarget.hasDirectMove() && Subtarget.isPPC64() && Subtarget.hasFPCVT())
6332     return LowerINT_TO_FPDirectMove(Op, DAG, dl);
6333
6334   assert((Op.getOpcode() == ISD::SINT_TO_FP || Subtarget.hasFPCVT()) &&
6335          "UINT_TO_FP is supported only with FPCVT");
6336
6337   // If we have FCFIDS, then use it when converting to single-precision.
6338   // Otherwise, convert to double-precision and then round.
6339   unsigned FCFOp = (Subtarget.hasFPCVT() && Op.getValueType() == MVT::f32)
6340                        ? (Op.getOpcode() == ISD::UINT_TO_FP ? PPCISD::FCFIDUS
6341                                                             : PPCISD::FCFIDS)
6342                        : (Op.getOpcode() == ISD::UINT_TO_FP ? PPCISD::FCFIDU
6343                                                             : PPCISD::FCFID);
6344   MVT FCFTy = (Subtarget.hasFPCVT() && Op.getValueType() == MVT::f32)
6345                   ? MVT::f32
6346                   : MVT::f64;
6347
6348   if (Op.getOperand(0).getValueType() == MVT::i64) {
6349     SDValue SINT = Op.getOperand(0);
6350     // When converting to single-precision, we actually need to convert
6351     // to double-precision first and then round to single-precision.
6352     // To avoid double-rounding effects during that operation, we have
6353     // to prepare the input operand.  Bits that might be truncated when
6354     // converting to double-precision are replaced by a bit that won't
6355     // be lost at this stage, but is below the single-precision rounding
6356     // position.
6357     //
6358     // However, if -enable-unsafe-fp-math is in effect, accept double
6359     // rounding to avoid the extra overhead.
6360     if (Op.getValueType() == MVT::f32 &&
6361         !Subtarget.hasFPCVT() &&
6362         !DAG.getTarget().Options.UnsafeFPMath) {
6363
6364       // Twiddle input to make sure the low 11 bits are zero.  (If this
6365       // is the case, we are guaranteed the value will fit into the 53 bit
6366       // mantissa of an IEEE double-precision value without rounding.)
6367       // If any of those low 11 bits were not zero originally, make sure
6368       // bit 12 (value 2048) is set instead, so that the final rounding
6369       // to single-precision gets the correct result.
6370       SDValue Round = DAG.getNode(ISD::AND, dl, MVT::i64,
6371                                   SINT, DAG.getConstant(2047, dl, MVT::i64));
6372       Round = DAG.getNode(ISD::ADD, dl, MVT::i64,
6373                           Round, DAG.getConstant(2047, dl, MVT::i64));
6374       Round = DAG.getNode(ISD::OR, dl, MVT::i64, Round, SINT);
6375       Round = DAG.getNode(ISD::AND, dl, MVT::i64,
6376                           Round, DAG.getConstant(-2048, dl, MVT::i64));
6377
6378       // However, we cannot use that value unconditionally: if the magnitude
6379       // of the input value is small, the bit-twiddling we did above might
6380       // end up visibly changing the output.  Fortunately, in that case, we
6381       // don't need to twiddle bits since the original input will convert
6382       // exactly to double-precision floating-point already.  Therefore,
6383       // construct a conditional to use the original value if the top 11
6384       // bits are all sign-bit copies, and use the rounded value computed
6385       // above otherwise.
6386       SDValue Cond = DAG.getNode(ISD::SRA, dl, MVT::i64,
6387                                  SINT, DAG.getConstant(53, dl, MVT::i32));
6388       Cond = DAG.getNode(ISD::ADD, dl, MVT::i64,
6389                          Cond, DAG.getConstant(1, dl, MVT::i64));
6390       Cond = DAG.getSetCC(dl, MVT::i32,
6391                           Cond, DAG.getConstant(1, dl, MVT::i64), ISD::SETUGT);
6392
6393       SINT = DAG.getNode(ISD::SELECT, dl, MVT::i64, Cond, Round, SINT);
6394     }
6395
6396     ReuseLoadInfo RLI;
6397     SDValue Bits;
6398
6399     MachineFunction &MF = DAG.getMachineFunction();
6400     if (canReuseLoadAddress(SINT, MVT::i64, RLI, DAG)) {
6401       Bits = DAG.getLoad(MVT::f64, dl, RLI.Chain, RLI.Ptr, RLI.MPI, false,
6402                          false, RLI.IsInvariant, RLI.Alignment, RLI.AAInfo,
6403                          RLI.Ranges);
6404       spliceIntoChain(RLI.ResChain, Bits.getValue(1), DAG);
6405     } else if (Subtarget.hasLFIWAX() &&
6406                canReuseLoadAddress(SINT, MVT::i32, RLI, DAG, ISD::SEXTLOAD)) {
6407       MachineMemOperand *MMO =
6408         MF.getMachineMemOperand(RLI.MPI, MachineMemOperand::MOLoad, 4,
6409                                 RLI.Alignment, RLI.AAInfo, RLI.Ranges);
6410       SDValue Ops[] = { RLI.Chain, RLI.Ptr };
6411       Bits = DAG.getMemIntrinsicNode(PPCISD::LFIWAX, dl,
6412                                      DAG.getVTList(MVT::f64, MVT::Other),
6413                                      Ops, MVT::i32, MMO);
6414       spliceIntoChain(RLI.ResChain, Bits.getValue(1), DAG);
6415     } else if (Subtarget.hasFPCVT() &&
6416                canReuseLoadAddress(SINT, MVT::i32, RLI, DAG, ISD::ZEXTLOAD)) {
6417       MachineMemOperand *MMO =
6418         MF.getMachineMemOperand(RLI.MPI, MachineMemOperand::MOLoad, 4,
6419                                 RLI.Alignment, RLI.AAInfo, RLI.Ranges);
6420       SDValue Ops[] = { RLI.Chain, RLI.Ptr };
6421       Bits = DAG.getMemIntrinsicNode(PPCISD::LFIWZX, dl,
6422                                      DAG.getVTList(MVT::f64, MVT::Other),
6423                                      Ops, MVT::i32, MMO);
6424       spliceIntoChain(RLI.ResChain, Bits.getValue(1), DAG);
6425     } else if (((Subtarget.hasLFIWAX() &&
6426                  SINT.getOpcode() == ISD::SIGN_EXTEND) ||
6427                 (Subtarget.hasFPCVT() &&
6428                  SINT.getOpcode() == ISD::ZERO_EXTEND)) &&
6429                SINT.getOperand(0).getValueType() == MVT::i32) {
6430       MachineFrameInfo *FrameInfo = MF.getFrameInfo();
6431       EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(DAG.getDataLayout());
6432
6433       int FrameIdx = FrameInfo->CreateStackObject(4, 4, false);
6434       SDValue FIdx = DAG.getFrameIndex(FrameIdx, PtrVT);
6435
6436       SDValue Store = DAG.getStore(
6437           DAG.getEntryNode(), dl, SINT.getOperand(0), FIdx,
6438           MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FrameIdx),
6439           false, false, 0);
6440
6441       assert(cast<StoreSDNode>(Store)->getMemoryVT() == MVT::i32 &&
6442              "Expected an i32 store");
6443
6444       RLI.Ptr = FIdx;
6445       RLI.Chain = Store;
6446       RLI.MPI =
6447           MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FrameIdx);
6448       RLI.Alignment = 4;
6449
6450       MachineMemOperand *MMO =
6451         MF.getMachineMemOperand(RLI.MPI, MachineMemOperand::MOLoad, 4,
6452                                 RLI.Alignment, RLI.AAInfo, RLI.Ranges);
6453       SDValue Ops[] = { RLI.Chain, RLI.Ptr };
6454       Bits = DAG.getMemIntrinsicNode(SINT.getOpcode() == ISD::ZERO_EXTEND ?
6455                                      PPCISD::LFIWZX : PPCISD::LFIWAX,
6456                                      dl, DAG.getVTList(MVT::f64, MVT::Other),
6457                                      Ops, MVT::i32, MMO);
6458     } else
6459       Bits = DAG.getNode(ISD::BITCAST, dl, MVT::f64, SINT);
6460
6461     SDValue FP = DAG.getNode(FCFOp, dl, FCFTy, Bits);
6462
6463     if (Op.getValueType() == MVT::f32 && !Subtarget.hasFPCVT())
6464       FP = DAG.getNode(ISD::FP_ROUND, dl,
6465                        MVT::f32, FP, DAG.getIntPtrConstant(0, dl));
6466     return FP;
6467   }
6468
6469   assert(Op.getOperand(0).getValueType() == MVT::i32 &&
6470          "Unhandled INT_TO_FP type in custom expander!");
6471   // Since we only generate this in 64-bit mode, we can take advantage of
6472   // 64-bit registers.  In particular, sign extend the input value into the
6473   // 64-bit register with extsw, store the WHOLE 64-bit value into the stack
6474   // then lfd it and fcfid it.
6475   MachineFunction &MF = DAG.getMachineFunction();
6476   MachineFrameInfo *FrameInfo = MF.getFrameInfo();
6477   EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(MF.getDataLayout());
6478
6479   SDValue Ld;
6480   if (Subtarget.hasLFIWAX() || Subtarget.hasFPCVT()) {
6481     ReuseLoadInfo RLI;
6482     bool ReusingLoad;
6483     if (!(ReusingLoad = canReuseLoadAddress(Op.getOperand(0), MVT::i32, RLI,
6484                                             DAG))) {
6485       int FrameIdx = FrameInfo->CreateStackObject(4, 4, false);
6486       SDValue FIdx = DAG.getFrameIndex(FrameIdx, PtrVT);
6487
6488       SDValue Store = DAG.getStore(
6489           DAG.getEntryNode(), dl, Op.getOperand(0), FIdx,
6490           MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FrameIdx),
6491           false, false, 0);
6492
6493       assert(cast<StoreSDNode>(Store)->getMemoryVT() == MVT::i32 &&
6494              "Expected an i32 store");
6495
6496       RLI.Ptr = FIdx;
6497       RLI.Chain = Store;
6498       RLI.MPI =
6499           MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FrameIdx);
6500       RLI.Alignment = 4;
6501     }
6502
6503     MachineMemOperand *MMO =
6504       MF.getMachineMemOperand(RLI.MPI, MachineMemOperand::MOLoad, 4,
6505                               RLI.Alignment, RLI.AAInfo, RLI.Ranges);
6506     SDValue Ops[] = { RLI.Chain, RLI.Ptr };
6507     Ld = DAG.getMemIntrinsicNode(Op.getOpcode() == ISD::UINT_TO_FP ?
6508                                    PPCISD::LFIWZX : PPCISD::LFIWAX,
6509                                  dl, DAG.getVTList(MVT::f64, MVT::Other),
6510                                  Ops, MVT::i32, MMO);
6511     if (ReusingLoad)
6512       spliceIntoChain(RLI.ResChain, Ld.getValue(1), DAG);
6513   } else {
6514     assert(Subtarget.isPPC64() &&
6515            "i32->FP without LFIWAX supported only on PPC64");
6516
6517     int FrameIdx = FrameInfo->CreateStackObject(8, 8, false);
6518     SDValue FIdx = DAG.getFrameIndex(FrameIdx, PtrVT);
6519
6520     SDValue Ext64 = DAG.getNode(ISD::SIGN_EXTEND, dl, MVT::i64,
6521                                 Op.getOperand(0));
6522
6523     // STD the extended value into the stack slot.
6524     SDValue Store = DAG.getStore(
6525         DAG.getEntryNode(), dl, Ext64, FIdx,
6526         MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FrameIdx),
6527         false, false, 0);
6528
6529     // Load the value as a double.
6530     Ld = DAG.getLoad(
6531         MVT::f64, dl, Store, FIdx,
6532         MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FrameIdx),
6533         false, false, false, 0);
6534   }
6535
6536   // FCFID it and return it.
6537   SDValue FP = DAG.getNode(FCFOp, dl, FCFTy, Ld);
6538   if (Op.getValueType() == MVT::f32 && !Subtarget.hasFPCVT())
6539     FP = DAG.getNode(ISD::FP_ROUND, dl, MVT::f32, FP,
6540                      DAG.getIntPtrConstant(0, dl));
6541   return FP;
6542 }
6543
6544 SDValue PPCTargetLowering::LowerFLT_ROUNDS_(SDValue Op,
6545                                             SelectionDAG &DAG) const {
6546   SDLoc dl(Op);
6547   /*
6548    The rounding mode is in bits 30:31 of FPSR, and has the following
6549    settings:
6550      00 Round to nearest
6551      01 Round to 0
6552      10 Round to +inf
6553      11 Round to -inf
6554
6555   FLT_ROUNDS, on the other hand, expects the following:
6556     -1 Undefined
6557      0 Round to 0
6558      1 Round to nearest
6559      2 Round to +inf
6560      3 Round to -inf
6561
6562   To perform the conversion, we do:
6563     ((FPSCR & 0x3) ^ ((~FPSCR & 0x3) >> 1))
6564   */
6565
6566   MachineFunction &MF = DAG.getMachineFunction();
6567   EVT VT = Op.getValueType();
6568   EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(MF.getDataLayout());
6569
6570   // Save FP Control Word to register
6571   EVT NodeTys[] = {
6572     MVT::f64,    // return register
6573     MVT::Glue    // unused in this context
6574   };
6575   SDValue Chain = DAG.getNode(PPCISD::MFFS, dl, NodeTys, None);
6576
6577   // Save FP register to stack slot
6578   int SSFI = MF.getFrameInfo()->CreateStackObject(8, 8, false);
6579   SDValue StackSlot = DAG.getFrameIndex(SSFI, PtrVT);
6580   SDValue Store = DAG.getStore(DAG.getEntryNode(), dl, Chain,
6581                                StackSlot, MachinePointerInfo(), false, false,0);
6582
6583   // Load FP Control Word from low 32 bits of stack slot.
6584   SDValue Four = DAG.getConstant(4, dl, PtrVT);
6585   SDValue Addr = DAG.getNode(ISD::ADD, dl, PtrVT, StackSlot, Four);
6586   SDValue CWD = DAG.getLoad(MVT::i32, dl, Store, Addr, MachinePointerInfo(),
6587                             false, false, false, 0);
6588
6589   // Transform as necessary
6590   SDValue CWD1 =
6591     DAG.getNode(ISD::AND, dl, MVT::i32,
6592                 CWD, DAG.getConstant(3, dl, MVT::i32));
6593   SDValue CWD2 =
6594     DAG.getNode(ISD::SRL, dl, MVT::i32,
6595                 DAG.getNode(ISD::AND, dl, MVT::i32,
6596                             DAG.getNode(ISD::XOR, dl, MVT::i32,
6597                                         CWD, DAG.getConstant(3, dl, MVT::i32)),
6598                             DAG.getConstant(3, dl, MVT::i32)),
6599                 DAG.getConstant(1, dl, MVT::i32));
6600
6601   SDValue RetVal =
6602     DAG.getNode(ISD::XOR, dl, MVT::i32, CWD1, CWD2);
6603
6604   return DAG.getNode((VT.getSizeInBits() < 16 ?
6605                       ISD::TRUNCATE : ISD::ZERO_EXTEND), dl, VT, RetVal);
6606 }
6607
6608 SDValue PPCTargetLowering::LowerSHL_PARTS(SDValue Op, SelectionDAG &DAG) const {
6609   EVT VT = Op.getValueType();
6610   unsigned BitWidth = VT.getSizeInBits();
6611   SDLoc dl(Op);
6612   assert(Op.getNumOperands() == 3 &&
6613          VT == Op.getOperand(1).getValueType() &&
6614          "Unexpected SHL!");
6615
6616   // Expand into a bunch of logical ops.  Note that these ops
6617   // depend on the PPC behavior for oversized shift amounts.
6618   SDValue Lo = Op.getOperand(0);
6619   SDValue Hi = Op.getOperand(1);
6620   SDValue Amt = Op.getOperand(2);
6621   EVT AmtVT = Amt.getValueType();
6622
6623   SDValue Tmp1 = DAG.getNode(ISD::SUB, dl, AmtVT,
6624                              DAG.getConstant(BitWidth, dl, AmtVT), Amt);
6625   SDValue Tmp2 = DAG.getNode(PPCISD::SHL, dl, VT, Hi, Amt);
6626   SDValue Tmp3 = DAG.getNode(PPCISD::SRL, dl, VT, Lo, Tmp1);
6627   SDValue Tmp4 = DAG.getNode(ISD::OR , dl, VT, Tmp2, Tmp3);
6628   SDValue Tmp5 = DAG.getNode(ISD::ADD, dl, AmtVT, Amt,
6629                              DAG.getConstant(-BitWidth, dl, AmtVT));
6630   SDValue Tmp6 = DAG.getNode(PPCISD::SHL, dl, VT, Lo, Tmp5);
6631   SDValue OutHi = DAG.getNode(ISD::OR, dl, VT, Tmp4, Tmp6);
6632   SDValue OutLo = DAG.getNode(PPCISD::SHL, dl, VT, Lo, Amt);
6633   SDValue OutOps[] = { OutLo, OutHi };
6634   return DAG.getMergeValues(OutOps, dl);
6635 }
6636
6637 SDValue PPCTargetLowering::LowerSRL_PARTS(SDValue Op, SelectionDAG &DAG) const {
6638   EVT VT = Op.getValueType();
6639   SDLoc dl(Op);
6640   unsigned BitWidth = VT.getSizeInBits();
6641   assert(Op.getNumOperands() == 3 &&
6642          VT == Op.getOperand(1).getValueType() &&
6643          "Unexpected SRL!");
6644
6645   // Expand into a bunch of logical ops.  Note that these ops
6646   // depend on the PPC behavior for oversized shift amounts.
6647   SDValue Lo = Op.getOperand(0);
6648   SDValue Hi = Op.getOperand(1);
6649   SDValue Amt = Op.getOperand(2);
6650   EVT AmtVT = Amt.getValueType();
6651
6652   SDValue Tmp1 = DAG.getNode(ISD::SUB, dl, AmtVT,
6653                              DAG.getConstant(BitWidth, dl, AmtVT), Amt);
6654   SDValue Tmp2 = DAG.getNode(PPCISD::SRL, dl, VT, Lo, Amt);
6655   SDValue Tmp3 = DAG.getNode(PPCISD::SHL, dl, VT, Hi, Tmp1);
6656   SDValue Tmp4 = DAG.getNode(ISD::OR, dl, VT, Tmp2, Tmp3);
6657   SDValue Tmp5 = DAG.getNode(ISD::ADD, dl, AmtVT, Amt,
6658                              DAG.getConstant(-BitWidth, dl, AmtVT));
6659   SDValue Tmp6 = DAG.getNode(PPCISD::SRL, dl, VT, Hi, Tmp5);
6660   SDValue OutLo = DAG.getNode(ISD::OR, dl, VT, Tmp4, Tmp6);
6661   SDValue OutHi = DAG.getNode(PPCISD::SRL, dl, VT, Hi, Amt);
6662   SDValue OutOps[] = { OutLo, OutHi };
6663   return DAG.getMergeValues(OutOps, dl);
6664 }
6665
6666 SDValue PPCTargetLowering::LowerSRA_PARTS(SDValue Op, SelectionDAG &DAG) const {
6667   SDLoc dl(Op);
6668   EVT VT = Op.getValueType();
6669   unsigned BitWidth = VT.getSizeInBits();
6670   assert(Op.getNumOperands() == 3 &&
6671          VT == Op.getOperand(1).getValueType() &&
6672          "Unexpected SRA!");
6673
6674   // Expand into a bunch of logical ops, followed by a select_cc.
6675   SDValue Lo = Op.getOperand(0);
6676   SDValue Hi = Op.getOperand(1);
6677   SDValue Amt = Op.getOperand(2);
6678   EVT AmtVT = Amt.getValueType();
6679
6680   SDValue Tmp1 = DAG.getNode(ISD::SUB, dl, AmtVT,
6681                              DAG.getConstant(BitWidth, dl, AmtVT), Amt);
6682   SDValue Tmp2 = DAG.getNode(PPCISD::SRL, dl, VT, Lo, Amt);
6683   SDValue Tmp3 = DAG.getNode(PPCISD::SHL, dl, VT, Hi, Tmp1);
6684   SDValue Tmp4 = DAG.getNode(ISD::OR, dl, VT, Tmp2, Tmp3);
6685   SDValue Tmp5 = DAG.getNode(ISD::ADD, dl, AmtVT, Amt,
6686                              DAG.getConstant(-BitWidth, dl, AmtVT));
6687   SDValue Tmp6 = DAG.getNode(PPCISD::SRA, dl, VT, Hi, Tmp5);
6688   SDValue OutHi = DAG.getNode(PPCISD::SRA, dl, VT, Hi, Amt);
6689   SDValue OutLo = DAG.getSelectCC(dl, Tmp5, DAG.getConstant(0, dl, AmtVT),
6690                                   Tmp4, Tmp6, ISD::SETLE);
6691   SDValue OutOps[] = { OutLo, OutHi };
6692   return DAG.getMergeValues(OutOps, dl);
6693 }
6694
6695 //===----------------------------------------------------------------------===//
6696 // Vector related lowering.
6697 //
6698
6699 /// BuildSplatI - Build a canonical splati of Val with an element size of
6700 /// SplatSize.  Cast the result to VT.
6701 static SDValue BuildSplatI(int Val, unsigned SplatSize, EVT VT,
6702                              SelectionDAG &DAG, SDLoc dl) {
6703   assert(Val >= -16 && Val <= 15 && "vsplti is out of range!");
6704
6705   static const MVT VTys[] = { // canonical VT to use for each size.
6706     MVT::v16i8, MVT::v8i16, MVT::Other, MVT::v4i32
6707   };
6708
6709   EVT ReqVT = VT != MVT::Other ? VT : VTys[SplatSize-1];
6710
6711   // Force vspltis[hw] -1 to vspltisb -1 to canonicalize.
6712   if (Val == -1)
6713     SplatSize = 1;
6714
6715   EVT CanonicalVT = VTys[SplatSize-1];
6716
6717   // Build a canonical splat for this value.
6718   SDValue Elt = DAG.getConstant(Val, dl, MVT::i32);
6719   SmallVector<SDValue, 8> Ops;
6720   Ops.assign(CanonicalVT.getVectorNumElements(), Elt);
6721   SDValue Res = DAG.getNode(ISD::BUILD_VECTOR, dl, CanonicalVT, Ops);
6722   return DAG.getNode(ISD::BITCAST, dl, ReqVT, Res);
6723 }
6724
6725 /// BuildIntrinsicOp - Return a unary operator intrinsic node with the
6726 /// specified intrinsic ID.
6727 static SDValue BuildIntrinsicOp(unsigned IID, SDValue Op,
6728                                 SelectionDAG &DAG, SDLoc dl,
6729                                 EVT DestVT = MVT::Other) {
6730   if (DestVT == MVT::Other) DestVT = Op.getValueType();
6731   return DAG.getNode(ISD::INTRINSIC_WO_CHAIN, dl, DestVT,
6732                      DAG.getConstant(IID, dl, MVT::i32), Op);
6733 }
6734
6735 /// BuildIntrinsicOp - Return a binary operator intrinsic node with the
6736 /// specified intrinsic ID.
6737 static SDValue BuildIntrinsicOp(unsigned IID, SDValue LHS, SDValue RHS,
6738                                 SelectionDAG &DAG, SDLoc dl,
6739                                 EVT DestVT = MVT::Other) {
6740   if (DestVT == MVT::Other) DestVT = LHS.getValueType();
6741   return DAG.getNode(ISD::INTRINSIC_WO_CHAIN, dl, DestVT,
6742                      DAG.getConstant(IID, dl, MVT::i32), LHS, RHS);
6743 }
6744
6745 /// BuildIntrinsicOp - Return a ternary operator intrinsic node with the
6746 /// specified intrinsic ID.
6747 static SDValue BuildIntrinsicOp(unsigned IID, SDValue Op0, SDValue Op1,
6748                                 SDValue Op2, SelectionDAG &DAG,
6749                                 SDLoc dl, EVT DestVT = MVT::Other) {
6750   if (DestVT == MVT::Other) DestVT = Op0.getValueType();
6751   return DAG.getNode(ISD::INTRINSIC_WO_CHAIN, dl, DestVT,
6752                      DAG.getConstant(IID, dl, MVT::i32), Op0, Op1, Op2);
6753 }
6754
6755 /// BuildVSLDOI - Return a VECTOR_SHUFFLE that is a vsldoi of the specified
6756 /// amount.  The result has the specified value type.
6757 static SDValue BuildVSLDOI(SDValue LHS, SDValue RHS, unsigned Amt,
6758                              EVT VT, SelectionDAG &DAG, SDLoc dl) {
6759   // Force LHS/RHS to be the right type.
6760   LHS = DAG.getNode(ISD::BITCAST, dl, MVT::v16i8, LHS);
6761   RHS = DAG.getNode(ISD::BITCAST, dl, MVT::v16i8, RHS);
6762
6763   int Ops[16];
6764   for (unsigned i = 0; i != 16; ++i)
6765     Ops[i] = i + Amt;
6766   SDValue T = DAG.getVectorShuffle(MVT::v16i8, dl, LHS, RHS, Ops);
6767   return DAG.getNode(ISD::BITCAST, dl, VT, T);
6768 }
6769
6770 // If this is a case we can't handle, return null and let the default
6771 // expansion code take care of it.  If we CAN select this case, and if it
6772 // selects to a single instruction, return Op.  Otherwise, if we can codegen
6773 // this case more efficiently than a constant pool load, lower it to the
6774 // sequence of ops that should be used.
6775 SDValue PPCTargetLowering::LowerBUILD_VECTOR(SDValue Op,
6776                                              SelectionDAG &DAG) const {
6777   SDLoc dl(Op);
6778   BuildVectorSDNode *BVN = dyn_cast<BuildVectorSDNode>(Op.getNode());
6779   assert(BVN && "Expected a BuildVectorSDNode in LowerBUILD_VECTOR");
6780
6781   if (Subtarget.hasQPX() && Op.getValueType() == MVT::v4i1) {
6782     // We first build an i32 vector, load it into a QPX register,
6783     // then convert it to a floating-point vector and compare it
6784     // to a zero vector to get the boolean result.
6785     MachineFrameInfo *FrameInfo = DAG.getMachineFunction().getFrameInfo();
6786     int FrameIdx = FrameInfo->CreateStackObject(16, 16, false);
6787     MachinePointerInfo PtrInfo =
6788         MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FrameIdx);
6789     EVT PtrVT = getPointerTy(DAG.getDataLayout());
6790     SDValue FIdx = DAG.getFrameIndex(FrameIdx, PtrVT);
6791
6792     assert(BVN->getNumOperands() == 4 &&
6793       "BUILD_VECTOR for v4i1 does not have 4 operands");
6794
6795     bool IsConst = true;
6796     for (unsigned i = 0; i < 4; ++i) {
6797       if (BVN->getOperand(i).getOpcode() == ISD::UNDEF) continue;
6798       if (!isa<ConstantSDNode>(BVN->getOperand(i))) {
6799         IsConst = false;
6800         break;
6801       }
6802     }
6803
6804     if (IsConst) {
6805       Constant *One =
6806         ConstantFP::get(Type::getFloatTy(*DAG.getContext()), 1.0);
6807       Constant *NegOne =
6808         ConstantFP::get(Type::getFloatTy(*DAG.getContext()), -1.0);
6809
6810       SmallVector<Constant*, 4> CV(4, NegOne);
6811       for (unsigned i = 0; i < 4; ++i) {
6812         if (BVN->getOperand(i).getOpcode() == ISD::UNDEF)
6813           CV[i] = UndefValue::get(Type::getFloatTy(*DAG.getContext()));
6814         else if (cast<ConstantSDNode>(BVN->getOperand(i))->
6815                    getConstantIntValue()->isZero())
6816           continue;
6817         else
6818           CV[i] = One;
6819       }
6820
6821       Constant *CP = ConstantVector::get(CV);
6822       SDValue CPIdx = DAG.getConstantPool(CP, getPointerTy(DAG.getDataLayout()),
6823                                           16 /* alignment */);
6824
6825       SmallVector<SDValue, 2> Ops;
6826       Ops.push_back(DAG.getEntryNode());
6827       Ops.push_back(CPIdx);
6828
6829       SmallVector<EVT, 2> ValueVTs;
6830       ValueVTs.push_back(MVT::v4i1);
6831       ValueVTs.push_back(MVT::Other); // chain
6832       SDVTList VTs = DAG.getVTList(ValueVTs);
6833
6834       return DAG.getMemIntrinsicNode(
6835           PPCISD::QVLFSb, dl, VTs, Ops, MVT::v4f32,
6836           MachinePointerInfo::getConstantPool(DAG.getMachineFunction()));
6837     }
6838
6839     SmallVector<SDValue, 4> Stores;
6840     for (unsigned i = 0; i < 4; ++i) {
6841       if (BVN->getOperand(i).getOpcode() == ISD::UNDEF) continue;
6842
6843       unsigned Offset = 4*i;
6844       SDValue Idx = DAG.getConstant(Offset, dl, FIdx.getValueType());
6845       Idx = DAG.getNode(ISD::ADD, dl, FIdx.getValueType(), FIdx, Idx);
6846
6847       unsigned StoreSize = BVN->getOperand(i).getValueType().getStoreSize();
6848       if (StoreSize > 4) {
6849         Stores.push_back(DAG.getTruncStore(DAG.getEntryNode(), dl,
6850                                            BVN->getOperand(i), Idx,
6851                                            PtrInfo.getWithOffset(Offset),
6852                                            MVT::i32, false, false, 0));
6853       } else {
6854         SDValue StoreValue = BVN->getOperand(i);
6855         if (StoreSize < 4)
6856           StoreValue = DAG.getNode(ISD::ANY_EXTEND, dl, MVT::i32, StoreValue);
6857
6858         Stores.push_back(DAG.getStore(DAG.getEntryNode(), dl,
6859                                       StoreValue, Idx,
6860                                       PtrInfo.getWithOffset(Offset),
6861                                       false, false, 0));
6862       }
6863     }
6864
6865     SDValue StoreChain;
6866     if (!Stores.empty())
6867       StoreChain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Stores);
6868     else
6869       StoreChain = DAG.getEntryNode();
6870
6871     // Now load from v4i32 into the QPX register; this will extend it to
6872     // v4i64 but not yet convert it to a floating point. Nevertheless, this
6873     // is typed as v4f64 because the QPX register integer states are not
6874     // explicitly represented.
6875
6876     SmallVector<SDValue, 2> Ops;
6877     Ops.push_back(StoreChain);
6878     Ops.push_back(DAG.getConstant(Intrinsic::ppc_qpx_qvlfiwz, dl, MVT::i32));
6879     Ops.push_back(FIdx);
6880
6881     SmallVector<EVT, 2> ValueVTs;
6882     ValueVTs.push_back(MVT::v4f64);
6883     ValueVTs.push_back(MVT::Other); // chain
6884     SDVTList VTs = DAG.getVTList(ValueVTs);
6885
6886     SDValue LoadedVect = DAG.getMemIntrinsicNode(ISD::INTRINSIC_W_CHAIN,
6887       dl, VTs, Ops, MVT::v4i32, PtrInfo);
6888     LoadedVect = DAG.getNode(ISD::INTRINSIC_WO_CHAIN, dl, MVT::v4f64,
6889       DAG.getConstant(Intrinsic::ppc_qpx_qvfcfidu, dl, MVT::i32),
6890       LoadedVect);
6891
6892     SDValue FPZeros = DAG.getConstantFP(0.0, dl, MVT::f64);
6893     FPZeros = DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v4f64,
6894                           FPZeros, FPZeros, FPZeros, FPZeros);
6895
6896     return DAG.getSetCC(dl, MVT::v4i1, LoadedVect, FPZeros, ISD::SETEQ);
6897   }
6898
6899   // All other QPX vectors are handled by generic code.
6900   if (Subtarget.hasQPX())
6901     return SDValue();
6902
6903   // Check if this is a splat of a constant value.
6904   APInt APSplatBits, APSplatUndef;
6905   unsigned SplatBitSize;
6906   bool HasAnyUndefs;
6907   if (! BVN->isConstantSplat(APSplatBits, APSplatUndef, SplatBitSize,
6908                              HasAnyUndefs, 0, !Subtarget.isLittleEndian()) ||
6909       SplatBitSize > 32)
6910     return SDValue();
6911
6912   unsigned SplatBits = APSplatBits.getZExtValue();
6913   unsigned SplatUndef = APSplatUndef.getZExtValue();
6914   unsigned SplatSize = SplatBitSize / 8;
6915
6916   // First, handle single instruction cases.
6917
6918   // All zeros?
6919   if (SplatBits == 0) {
6920     // Canonicalize all zero vectors to be v4i32.
6921     if (Op.getValueType() != MVT::v4i32 || HasAnyUndefs) {
6922       SDValue Z = DAG.getConstant(0, dl, MVT::i32);
6923       Z = DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v4i32, Z, Z, Z, Z);
6924       Op = DAG.getNode(ISD::BITCAST, dl, Op.getValueType(), Z);
6925     }
6926     return Op;
6927   }
6928
6929   // If the sign extended value is in the range [-16,15], use VSPLTI[bhw].
6930   int32_t SextVal= (int32_t(SplatBits << (32-SplatBitSize)) >>
6931                     (32-SplatBitSize));
6932   if (SextVal >= -16 && SextVal <= 15)
6933     return BuildSplatI(SextVal, SplatSize, Op.getValueType(), DAG, dl);
6934
6935   // Two instruction sequences.
6936
6937   // If this value is in the range [-32,30] and is even, use:
6938   //     VSPLTI[bhw](val/2) + VSPLTI[bhw](val/2)
6939   // If this value is in the range [17,31] and is odd, use:
6940   //     VSPLTI[bhw](val-16) - VSPLTI[bhw](-16)
6941   // If this value is in the range [-31,-17] and is odd, use:
6942   //     VSPLTI[bhw](val+16) + VSPLTI[bhw](-16)
6943   // Note the last two are three-instruction sequences.
6944   if (SextVal >= -32 && SextVal <= 31) {
6945     // To avoid having these optimizations undone by constant folding,
6946     // we convert to a pseudo that will be expanded later into one of
6947     // the above forms.
6948     SDValue Elt = DAG.getConstant(SextVal, dl, MVT::i32);
6949     EVT VT = (SplatSize == 1 ? MVT::v16i8 :
6950               (SplatSize == 2 ? MVT::v8i16 : MVT::v4i32));
6951     SDValue EltSize = DAG.getConstant(SplatSize, dl, MVT::i32);
6952     SDValue RetVal = DAG.getNode(PPCISD::VADD_SPLAT, dl, VT, Elt, EltSize);
6953     if (VT == Op.getValueType())
6954       return RetVal;
6955     else
6956       return DAG.getNode(ISD::BITCAST, dl, Op.getValueType(), RetVal);
6957   }
6958
6959   // If this is 0x8000_0000 x 4, turn into vspltisw + vslw.  If it is
6960   // 0x7FFF_FFFF x 4, turn it into not(0x8000_0000).  This is important
6961   // for fneg/fabs.
6962   if (SplatSize == 4 && SplatBits == (0x7FFFFFFF&~SplatUndef)) {
6963     // Make -1 and vspltisw -1:
6964     SDValue OnesV = BuildSplatI(-1, 4, MVT::v4i32, DAG, dl);
6965
6966     // Make the VSLW intrinsic, computing 0x8000_0000.
6967     SDValue Res = BuildIntrinsicOp(Intrinsic::ppc_altivec_vslw, OnesV,
6968                                    OnesV, DAG, dl);
6969
6970     // xor by OnesV to invert it.
6971     Res = DAG.getNode(ISD::XOR, dl, MVT::v4i32, Res, OnesV);
6972     return DAG.getNode(ISD::BITCAST, dl, Op.getValueType(), Res);
6973   }
6974
6975   // Check to see if this is a wide variety of vsplti*, binop self cases.
6976   static const signed char SplatCsts[] = {
6977     -1, 1, -2, 2, -3, 3, -4, 4, -5, 5, -6, 6, -7, 7,
6978     -8, 8, -9, 9, -10, 10, -11, 11, -12, 12, -13, 13, 14, -14, 15, -15, -16
6979   };
6980
6981   for (unsigned idx = 0; idx < array_lengthof(SplatCsts); ++idx) {
6982     // Indirect through the SplatCsts array so that we favor 'vsplti -1' for
6983     // cases which are ambiguous (e.g. formation of 0x8000_0000).  'vsplti -1'
6984     int i = SplatCsts[idx];
6985
6986     // Figure out what shift amount will be used by altivec if shifted by i in
6987     // this splat size.
6988     unsigned TypeShiftAmt = i & (SplatBitSize-1);
6989
6990     // vsplti + shl self.
6991     if (SextVal == (int)((unsigned)i << TypeShiftAmt)) {
6992       SDValue Res = BuildSplatI(i, SplatSize, MVT::Other, DAG, dl);
6993       static const unsigned IIDs[] = { // Intrinsic to use for each size.
6994         Intrinsic::ppc_altivec_vslb, Intrinsic::ppc_altivec_vslh, 0,
6995         Intrinsic::ppc_altivec_vslw
6996       };
6997       Res = BuildIntrinsicOp(IIDs[SplatSize-1], Res, Res, DAG, dl);
6998       return DAG.getNode(ISD::BITCAST, dl, Op.getValueType(), Res);
6999     }
7000
7001     // vsplti + srl self.
7002     if (SextVal == (int)((unsigned)i >> TypeShiftAmt)) {
7003       SDValue Res = BuildSplatI(i, SplatSize, MVT::Other, DAG, dl);
7004       static const unsigned IIDs[] = { // Intrinsic to use for each size.
7005         Intrinsic::ppc_altivec_vsrb, Intrinsic::ppc_altivec_vsrh, 0,
7006         Intrinsic::ppc_altivec_vsrw
7007       };
7008       Res = BuildIntrinsicOp(IIDs[SplatSize-1], Res, Res, DAG, dl);
7009       return DAG.getNode(ISD::BITCAST, dl, Op.getValueType(), Res);
7010     }
7011
7012     // vsplti + sra self.
7013     if (SextVal == (int)((unsigned)i >> TypeShiftAmt)) {
7014       SDValue Res = BuildSplatI(i, SplatSize, MVT::Other, DAG, dl);
7015       static const unsigned IIDs[] = { // Intrinsic to use for each size.
7016         Intrinsic::ppc_altivec_vsrab, Intrinsic::ppc_altivec_vsrah, 0,
7017         Intrinsic::ppc_altivec_vsraw
7018       };
7019       Res = BuildIntrinsicOp(IIDs[SplatSize-1], Res, Res, DAG, dl);
7020       return DAG.getNode(ISD::BITCAST, dl, Op.getValueType(), Res);
7021     }
7022
7023     // vsplti + rol self.
7024     if (SextVal == (int)(((unsigned)i << TypeShiftAmt) |
7025                          ((unsigned)i >> (SplatBitSize-TypeShiftAmt)))) {
7026       SDValue Res = BuildSplatI(i, SplatSize, MVT::Other, DAG, dl);
7027       static const unsigned IIDs[] = { // Intrinsic to use for each size.
7028         Intrinsic::ppc_altivec_vrlb, Intrinsic::ppc_altivec_vrlh, 0,
7029         Intrinsic::ppc_altivec_vrlw
7030       };
7031       Res = BuildIntrinsicOp(IIDs[SplatSize-1], Res, Res, DAG, dl);
7032       return DAG.getNode(ISD::BITCAST, dl, Op.getValueType(), Res);
7033     }
7034
7035     // t = vsplti c, result = vsldoi t, t, 1
7036     if (SextVal == (int)(((unsigned)i << 8) | (i < 0 ? 0xFF : 0))) {
7037       SDValue T = BuildSplatI(i, SplatSize, MVT::v16i8, DAG, dl);
7038       unsigned Amt = Subtarget.isLittleEndian() ? 15 : 1;
7039       return BuildVSLDOI(T, T, Amt, Op.getValueType(), DAG, dl);
7040     }
7041     // t = vsplti c, result = vsldoi t, t, 2
7042     if (SextVal == (int)(((unsigned)i << 16) | (i < 0 ? 0xFFFF : 0))) {
7043       SDValue T = BuildSplatI(i, SplatSize, MVT::v16i8, DAG, dl);
7044       unsigned Amt = Subtarget.isLittleEndian() ? 14 : 2;
7045       return BuildVSLDOI(T, T, Amt, Op.getValueType(), DAG, dl);
7046     }
7047     // t = vsplti c, result = vsldoi t, t, 3
7048     if (SextVal == (int)(((unsigned)i << 24) | (i < 0 ? 0xFFFFFF : 0))) {
7049       SDValue T = BuildSplatI(i, SplatSize, MVT::v16i8, DAG, dl);
7050       unsigned Amt = Subtarget.isLittleEndian() ? 13 : 3;
7051       return BuildVSLDOI(T, T, Amt, Op.getValueType(), DAG, dl);
7052     }
7053   }
7054
7055   return SDValue();
7056 }
7057
7058 /// GeneratePerfectShuffle - Given an entry in the perfect-shuffle table, emit
7059 /// the specified operations to build the shuffle.
7060 static SDValue GeneratePerfectShuffle(unsigned PFEntry, SDValue LHS,
7061                                       SDValue RHS, SelectionDAG &DAG,
7062                                       SDLoc dl) {
7063   unsigned OpNum = (PFEntry >> 26) & 0x0F;
7064   unsigned LHSID = (PFEntry >> 13) & ((1 << 13)-1);
7065   unsigned RHSID = (PFEntry >>  0) & ((1 << 13)-1);
7066
7067   enum {
7068     OP_COPY = 0,  // Copy, used for things like <u,u,u,3> to say it is <0,1,2,3>
7069     OP_VMRGHW,
7070     OP_VMRGLW,
7071     OP_VSPLTISW0,
7072     OP_VSPLTISW1,
7073     OP_VSPLTISW2,
7074     OP_VSPLTISW3,
7075     OP_VSLDOI4,
7076     OP_VSLDOI8,
7077     OP_VSLDOI12
7078   };
7079
7080   if (OpNum == OP_COPY) {
7081     if (LHSID == (1*9+2)*9+3) return LHS;
7082     assert(LHSID == ((4*9+5)*9+6)*9+7 && "Illegal OP_COPY!");
7083     return RHS;
7084   }
7085
7086   SDValue OpLHS, OpRHS;
7087   OpLHS = GeneratePerfectShuffle(PerfectShuffleTable[LHSID], LHS, RHS, DAG, dl);
7088   OpRHS = GeneratePerfectShuffle(PerfectShuffleTable[RHSID], LHS, RHS, DAG, dl);
7089
7090   int ShufIdxs[16];
7091   switch (OpNum) {
7092   default: llvm_unreachable("Unknown i32 permute!");
7093   case OP_VMRGHW:
7094     ShufIdxs[ 0] =  0; ShufIdxs[ 1] =  1; ShufIdxs[ 2] =  2; ShufIdxs[ 3] =  3;
7095     ShufIdxs[ 4] = 16; ShufIdxs[ 5] = 17; ShufIdxs[ 6] = 18; ShufIdxs[ 7] = 19;
7096     ShufIdxs[ 8] =  4; ShufIdxs[ 9] =  5; ShufIdxs[10] =  6; ShufIdxs[11] =  7;
7097     ShufIdxs[12] = 20; ShufIdxs[13] = 21; ShufIdxs[14] = 22; ShufIdxs[15] = 23;
7098     break;
7099   case OP_VMRGLW:
7100     ShufIdxs[ 0] =  8; ShufIdxs[ 1] =  9; ShufIdxs[ 2] = 10; ShufIdxs[ 3] = 11;
7101     ShufIdxs[ 4] = 24; ShufIdxs[ 5] = 25; ShufIdxs[ 6] = 26; ShufIdxs[ 7] = 27;
7102     ShufIdxs[ 8] = 12; ShufIdxs[ 9] = 13; ShufIdxs[10] = 14; ShufIdxs[11] = 15;
7103     ShufIdxs[12] = 28; ShufIdxs[13] = 29; ShufIdxs[14] = 30; ShufIdxs[15] = 31;
7104     break;
7105   case OP_VSPLTISW0:
7106     for (unsigned i = 0; i != 16; ++i)
7107       ShufIdxs[i] = (i&3)+0;
7108     break;
7109   case OP_VSPLTISW1:
7110     for (unsigned i = 0; i != 16; ++i)
7111       ShufIdxs[i] = (i&3)+4;
7112     break;
7113   case OP_VSPLTISW2:
7114     for (unsigned i = 0; i != 16; ++i)
7115       ShufIdxs[i] = (i&3)+8;
7116     break;
7117   case OP_VSPLTISW3:
7118     for (unsigned i = 0; i != 16; ++i)
7119       ShufIdxs[i] = (i&3)+12;
7120     break;
7121   case OP_VSLDOI4:
7122     return BuildVSLDOI(OpLHS, OpRHS, 4, OpLHS.getValueType(), DAG, dl);
7123   case OP_VSLDOI8:
7124     return BuildVSLDOI(OpLHS, OpRHS, 8, OpLHS.getValueType(), DAG, dl);
7125   case OP_VSLDOI12:
7126     return BuildVSLDOI(OpLHS, OpRHS, 12, OpLHS.getValueType(), DAG, dl);
7127   }
7128   EVT VT = OpLHS.getValueType();
7129   OpLHS = DAG.getNode(ISD::BITCAST, dl, MVT::v16i8, OpLHS);
7130   OpRHS = DAG.getNode(ISD::BITCAST, dl, MVT::v16i8, OpRHS);
7131   SDValue T = DAG.getVectorShuffle(MVT::v16i8, dl, OpLHS, OpRHS, ShufIdxs);
7132   return DAG.getNode(ISD::BITCAST, dl, VT, T);
7133 }
7134
7135 /// LowerVECTOR_SHUFFLE - Return the code we lower for VECTOR_SHUFFLE.  If this
7136 /// is a shuffle we can handle in a single instruction, return it.  Otherwise,
7137 /// return the code it can be lowered into.  Worst case, it can always be
7138 /// lowered into a vperm.
7139 SDValue PPCTargetLowering::LowerVECTOR_SHUFFLE(SDValue Op,
7140                                                SelectionDAG &DAG) const {
7141   SDLoc dl(Op);
7142   SDValue V1 = Op.getOperand(0);
7143   SDValue V2 = Op.getOperand(1);
7144   ShuffleVectorSDNode *SVOp = cast<ShuffleVectorSDNode>(Op);
7145   EVT VT = Op.getValueType();
7146   bool isLittleEndian = Subtarget.isLittleEndian();
7147
7148   if (Subtarget.hasQPX()) {
7149     if (VT.getVectorNumElements() != 4)
7150       return SDValue();
7151
7152     if (V2.getOpcode() == ISD::UNDEF) V2 = V1;
7153
7154     int AlignIdx = PPC::isQVALIGNIShuffleMask(SVOp);
7155     if (AlignIdx != -1) {
7156       return DAG.getNode(PPCISD::QVALIGNI, dl, VT, V1, V2,
7157                          DAG.getConstant(AlignIdx, dl, MVT::i32));
7158     } else if (SVOp->isSplat()) {
7159       int SplatIdx = SVOp->getSplatIndex();
7160       if (SplatIdx >= 4) {
7161         std::swap(V1, V2);
7162         SplatIdx -= 4;
7163       }
7164
7165       // FIXME: If SplatIdx == 0 and the input came from a load, then there is
7166       // nothing to do.
7167
7168       return DAG.getNode(PPCISD::QVESPLATI, dl, VT, V1,
7169                          DAG.getConstant(SplatIdx, dl, MVT::i32));
7170     }
7171
7172     // Lower this into a qvgpci/qvfperm pair.
7173
7174     // Compute the qvgpci literal
7175     unsigned idx = 0;
7176     for (unsigned i = 0; i < 4; ++i) {
7177       int m = SVOp->getMaskElt(i);
7178       unsigned mm = m >= 0 ? (unsigned) m : i;
7179       idx |= mm << (3-i)*3;
7180     }
7181
7182     SDValue V3 = DAG.getNode(PPCISD::QVGPCI, dl, MVT::v4f64,
7183                              DAG.getConstant(idx, dl, MVT::i32));
7184     return DAG.getNode(PPCISD::QVFPERM, dl, VT, V1, V2, V3);
7185   }
7186
7187   // Cases that are handled by instructions that take permute immediates
7188   // (such as vsplt*) should be left as VECTOR_SHUFFLE nodes so they can be
7189   // selected by the instruction selector.
7190   if (V2.getOpcode() == ISD::UNDEF) {
7191     if (PPC::isSplatShuffleMask(SVOp, 1) ||
7192         PPC::isSplatShuffleMask(SVOp, 2) ||
7193         PPC::isSplatShuffleMask(SVOp, 4) ||
7194         PPC::isVPKUWUMShuffleMask(SVOp, 1, DAG) ||
7195         PPC::isVPKUHUMShuffleMask(SVOp, 1, DAG) ||
7196         PPC::isVSLDOIShuffleMask(SVOp, 1, DAG) != -1 ||
7197         PPC::isVMRGLShuffleMask(SVOp, 1, 1, DAG) ||
7198         PPC::isVMRGLShuffleMask(SVOp, 2, 1, DAG) ||
7199         PPC::isVMRGLShuffleMask(SVOp, 4, 1, DAG) ||
7200         PPC::isVMRGHShuffleMask(SVOp, 1, 1, DAG) ||
7201         PPC::isVMRGHShuffleMask(SVOp, 2, 1, DAG) ||
7202         PPC::isVMRGHShuffleMask(SVOp, 4, 1, DAG) ||
7203         (Subtarget.hasP8Altivec() && (
7204          PPC::isVPKUDUMShuffleMask(SVOp, 1, DAG) ||
7205          PPC::isVMRGEOShuffleMask(SVOp, true, 1, DAG) ||
7206          PPC::isVMRGEOShuffleMask(SVOp, false, 1, DAG)))) {
7207       return Op;
7208     }
7209   }
7210
7211   // Altivec has a variety of "shuffle immediates" that take two vector inputs
7212   // and produce a fixed permutation.  If any of these match, do not lower to
7213   // VPERM.
7214   unsigned int ShuffleKind = isLittleEndian ? 2 : 0;
7215   if (PPC::isVPKUWUMShuffleMask(SVOp, ShuffleKind, DAG) ||
7216       PPC::isVPKUHUMShuffleMask(SVOp, ShuffleKind, DAG) ||
7217       PPC::isVSLDOIShuffleMask(SVOp, ShuffleKind, DAG) != -1 ||
7218       PPC::isVMRGLShuffleMask(SVOp, 1, ShuffleKind, DAG) ||
7219       PPC::isVMRGLShuffleMask(SVOp, 2, ShuffleKind, DAG) ||
7220       PPC::isVMRGLShuffleMask(SVOp, 4, ShuffleKind, DAG) ||
7221       PPC::isVMRGHShuffleMask(SVOp, 1, ShuffleKind, DAG) ||
7222       PPC::isVMRGHShuffleMask(SVOp, 2, ShuffleKind, DAG) ||
7223       PPC::isVMRGHShuffleMask(SVOp, 4, ShuffleKind, DAG) ||
7224       (Subtarget.hasP8Altivec() && (
7225        PPC::isVPKUDUMShuffleMask(SVOp, ShuffleKind, DAG) ||
7226        PPC::isVMRGEOShuffleMask(SVOp, true, ShuffleKind, DAG) ||
7227        PPC::isVMRGEOShuffleMask(SVOp, false, ShuffleKind, DAG))))
7228     return Op;
7229
7230   // Check to see if this is a shuffle of 4-byte values.  If so, we can use our
7231   // perfect shuffle table to emit an optimal matching sequence.
7232   ArrayRef<int> PermMask = SVOp->getMask();
7233
7234   unsigned PFIndexes[4];
7235   bool isFourElementShuffle = true;
7236   for (unsigned i = 0; i != 4 && isFourElementShuffle; ++i) { // Element number
7237     unsigned EltNo = 8;   // Start out undef.
7238     for (unsigned j = 0; j != 4; ++j) {  // Intra-element byte.
7239       if (PermMask[i*4+j] < 0)
7240         continue;   // Undef, ignore it.
7241
7242       unsigned ByteSource = PermMask[i*4+j];
7243       if ((ByteSource & 3) != j) {
7244         isFourElementShuffle = false;
7245         break;
7246       }
7247
7248       if (EltNo == 8) {
7249         EltNo = ByteSource/4;
7250       } else if (EltNo != ByteSource/4) {
7251         isFourElementShuffle = false;
7252         break;
7253       }
7254     }
7255     PFIndexes[i] = EltNo;
7256   }
7257
7258   // If this shuffle can be expressed as a shuffle of 4-byte elements, use the
7259   // perfect shuffle vector to determine if it is cost effective to do this as
7260   // discrete instructions, or whether we should use a vperm.
7261   // For now, we skip this for little endian until such time as we have a
7262   // little-endian perfect shuffle table.
7263   if (isFourElementShuffle && !isLittleEndian) {
7264     // Compute the index in the perfect shuffle table.
7265     unsigned PFTableIndex =
7266       PFIndexes[0]*9*9*9+PFIndexes[1]*9*9+PFIndexes[2]*9+PFIndexes[3];
7267
7268     unsigned PFEntry = PerfectShuffleTable[PFTableIndex];
7269     unsigned Cost  = (PFEntry >> 30);
7270
7271     // Determining when to avoid vperm is tricky.  Many things affect the cost
7272     // of vperm, particularly how many times the perm mask needs to be computed.
7273     // For example, if the perm mask can be hoisted out of a loop or is already
7274     // used (perhaps because there are multiple permutes with the same shuffle
7275     // mask?) the vperm has a cost of 1.  OTOH, hoisting the permute mask out of
7276     // the loop requires an extra register.
7277     //
7278     // As a compromise, we only emit discrete instructions if the shuffle can be
7279     // generated in 3 or fewer operations.  When we have loop information
7280     // available, if this block is within a loop, we should avoid using vperm
7281     // for 3-operation perms and use a constant pool load instead.
7282     if (Cost < 3)
7283       return GeneratePerfectShuffle(PFEntry, V1, V2, DAG, dl);
7284   }
7285
7286   // Lower this to a VPERM(V1, V2, V3) expression, where V3 is a constant
7287   // vector that will get spilled to the constant pool.
7288   if (V2.getOpcode() == ISD::UNDEF) V2 = V1;
7289
7290   // The SHUFFLE_VECTOR mask is almost exactly what we want for vperm, except
7291   // that it is in input element units, not in bytes.  Convert now.
7292
7293   // For little endian, the order of the input vectors is reversed, and
7294   // the permutation mask is complemented with respect to 31.  This is
7295   // necessary to produce proper semantics with the big-endian-biased vperm
7296   // instruction.
7297   EVT EltVT = V1.getValueType().getVectorElementType();
7298   unsigned BytesPerElement = EltVT.getSizeInBits()/8;
7299
7300   SmallVector<SDValue, 16> ResultMask;
7301   for (unsigned i = 0, e = VT.getVectorNumElements(); i != e; ++i) {
7302     unsigned SrcElt = PermMask[i] < 0 ? 0 : PermMask[i];
7303
7304     for (unsigned j = 0; j != BytesPerElement; ++j)
7305       if (isLittleEndian)
7306         ResultMask.push_back(DAG.getConstant(31 - (SrcElt*BytesPerElement + j),
7307                                              dl, MVT::i32));
7308       else
7309         ResultMask.push_back(DAG.getConstant(SrcElt*BytesPerElement + j, dl,
7310                                              MVT::i32));
7311   }
7312
7313   SDValue VPermMask = DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v16i8,
7314                                   ResultMask);
7315   if (isLittleEndian)
7316     return DAG.getNode(PPCISD::VPERM, dl, V1.getValueType(),
7317                        V2, V1, VPermMask);
7318   else
7319     return DAG.getNode(PPCISD::VPERM, dl, V1.getValueType(),
7320                        V1, V2, VPermMask);
7321 }
7322
7323 /// getVectorCompareInfo - Given an intrinsic, return false if it is not a
7324 /// vector comparison.  If it is, return true and fill in Opc/isDot with
7325 /// information about the intrinsic.
7326 static bool getVectorCompareInfo(SDValue Intrin, int &CompareOpc,
7327                                  bool &isDot, const PPCSubtarget &Subtarget) {
7328   unsigned IntrinsicID =
7329     cast<ConstantSDNode>(Intrin.getOperand(0))->getZExtValue();
7330   CompareOpc = -1;
7331   isDot = false;
7332   switch (IntrinsicID) {
7333   default: return false;
7334     // Comparison predicates.
7335   case Intrinsic::ppc_altivec_vcmpbfp_p:  CompareOpc = 966; isDot = 1; break;
7336   case Intrinsic::ppc_altivec_vcmpeqfp_p: CompareOpc = 198; isDot = 1; break;
7337   case Intrinsic::ppc_altivec_vcmpequb_p: CompareOpc =   6; isDot = 1; break;
7338   case Intrinsic::ppc_altivec_vcmpequh_p: CompareOpc =  70; isDot = 1; break;
7339   case Intrinsic::ppc_altivec_vcmpequw_p: CompareOpc = 134; isDot = 1; break;
7340   case Intrinsic::ppc_altivec_vcmpequd_p:
7341     if (Subtarget.hasP8Altivec()) {
7342       CompareOpc = 199;
7343       isDot = 1;
7344     } else
7345       return false;
7346
7347     break;
7348   case Intrinsic::ppc_altivec_vcmpgefp_p: CompareOpc = 454; isDot = 1; break;
7349   case Intrinsic::ppc_altivec_vcmpgtfp_p: CompareOpc = 710; isDot = 1; break;
7350   case Intrinsic::ppc_altivec_vcmpgtsb_p: CompareOpc = 774; isDot = 1; break;
7351   case Intrinsic::ppc_altivec_vcmpgtsh_p: CompareOpc = 838; isDot = 1; break;
7352   case Intrinsic::ppc_altivec_vcmpgtsw_p: CompareOpc = 902; isDot = 1; break;
7353   case Intrinsic::ppc_altivec_vcmpgtsd_p:
7354     if (Subtarget.hasP8Altivec()) {
7355       CompareOpc = 967;
7356       isDot = 1;
7357     } else
7358       return false;
7359
7360     break;
7361   case Intrinsic::ppc_altivec_vcmpgtub_p: CompareOpc = 518; isDot = 1; break;
7362   case Intrinsic::ppc_altivec_vcmpgtuh_p: CompareOpc = 582; isDot = 1; break;
7363   case Intrinsic::ppc_altivec_vcmpgtuw_p: CompareOpc = 646; isDot = 1; break;
7364   case Intrinsic::ppc_altivec_vcmpgtud_p:
7365     if (Subtarget.hasP8Altivec()) {
7366       CompareOpc = 711;
7367       isDot = 1;
7368     } else
7369       return false;
7370
7371     break;
7372     // VSX predicate comparisons use the same infrastructure
7373   case Intrinsic::ppc_vsx_xvcmpeqdp_p:
7374   case Intrinsic::ppc_vsx_xvcmpgedp_p:
7375   case Intrinsic::ppc_vsx_xvcmpgtdp_p:
7376   case Intrinsic::ppc_vsx_xvcmpeqsp_p:
7377   case Intrinsic::ppc_vsx_xvcmpgesp_p:
7378   case Intrinsic::ppc_vsx_xvcmpgtsp_p:
7379     if (Subtarget.hasVSX()) {
7380       switch (IntrinsicID) {
7381       case Intrinsic::ppc_vsx_xvcmpeqdp_p: CompareOpc = 99; break;
7382       case Intrinsic::ppc_vsx_xvcmpgedp_p: CompareOpc = 115; break;
7383       case Intrinsic::ppc_vsx_xvcmpgtdp_p: CompareOpc = 107; break;
7384       case Intrinsic::ppc_vsx_xvcmpeqsp_p: CompareOpc = 67; break;
7385       case Intrinsic::ppc_vsx_xvcmpgesp_p: CompareOpc = 83; break;
7386       case Intrinsic::ppc_vsx_xvcmpgtsp_p: CompareOpc = 75; break;
7387       }
7388       isDot = 1;
7389     }
7390     else
7391       return false;
7392
7393     break;
7394
7395     // Normal Comparisons.
7396   case Intrinsic::ppc_altivec_vcmpbfp:    CompareOpc = 966; isDot = 0; break;
7397   case Intrinsic::ppc_altivec_vcmpeqfp:   CompareOpc = 198; isDot = 0; break;
7398   case Intrinsic::ppc_altivec_vcmpequb:   CompareOpc =   6; isDot = 0; break;
7399   case Intrinsic::ppc_altivec_vcmpequh:   CompareOpc =  70; isDot = 0; break;
7400   case Intrinsic::ppc_altivec_vcmpequw:   CompareOpc = 134; isDot = 0; break;
7401   case Intrinsic::ppc_altivec_vcmpequd:
7402     if (Subtarget.hasP8Altivec()) {
7403       CompareOpc = 199;
7404       isDot = 0;
7405     } else
7406       return false;
7407
7408     break;
7409   case Intrinsic::ppc_altivec_vcmpgefp:   CompareOpc = 454; isDot = 0; break;
7410   case Intrinsic::ppc_altivec_vcmpgtfp:   CompareOpc = 710; isDot = 0; break;
7411   case Intrinsic::ppc_altivec_vcmpgtsb:   CompareOpc = 774; isDot = 0; break;
7412   case Intrinsic::ppc_altivec_vcmpgtsh:   CompareOpc = 838; isDot = 0; break;
7413   case Intrinsic::ppc_altivec_vcmpgtsw:   CompareOpc = 902; isDot = 0; break;
7414   case Intrinsic::ppc_altivec_vcmpgtsd:
7415     if (Subtarget.hasP8Altivec()) {
7416       CompareOpc = 967;
7417       isDot = 0;
7418     } else
7419       return false;
7420
7421     break;
7422   case Intrinsic::ppc_altivec_vcmpgtub:   CompareOpc = 518; isDot = 0; break;
7423   case Intrinsic::ppc_altivec_vcmpgtuh:   CompareOpc = 582; isDot = 0; break;
7424   case Intrinsic::ppc_altivec_vcmpgtuw:   CompareOpc = 646; isDot = 0; break;
7425   case Intrinsic::ppc_altivec_vcmpgtud:
7426     if (Subtarget.hasP8Altivec()) {
7427       CompareOpc = 711;
7428       isDot = 0;
7429     } else
7430       return false;
7431
7432     break;
7433   }
7434   return true;
7435 }
7436
7437 /// LowerINTRINSIC_WO_CHAIN - If this is an intrinsic that we want to custom
7438 /// lower, do it, otherwise return null.
7439 SDValue PPCTargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op,
7440                                                    SelectionDAG &DAG) const {
7441   // If this is a lowered altivec predicate compare, CompareOpc is set to the
7442   // opcode number of the comparison.
7443   SDLoc dl(Op);
7444   int CompareOpc;
7445   bool isDot;
7446   if (!getVectorCompareInfo(Op, CompareOpc, isDot, Subtarget))
7447     return SDValue();    // Don't custom lower most intrinsics.
7448
7449   // If this is a non-dot comparison, make the VCMP node and we are done.
7450   if (!isDot) {
7451     SDValue Tmp = DAG.getNode(PPCISD::VCMP, dl, Op.getOperand(2).getValueType(),
7452                               Op.getOperand(1), Op.getOperand(2),
7453                               DAG.getConstant(CompareOpc, dl, MVT::i32));
7454     return DAG.getNode(ISD::BITCAST, dl, Op.getValueType(), Tmp);
7455   }
7456
7457   // Create the PPCISD altivec 'dot' comparison node.
7458   SDValue Ops[] = {
7459     Op.getOperand(2),  // LHS
7460     Op.getOperand(3),  // RHS
7461     DAG.getConstant(CompareOpc, dl, MVT::i32)
7462   };
7463   EVT VTs[] = { Op.getOperand(2).getValueType(), MVT::Glue };
7464   SDValue CompNode = DAG.getNode(PPCISD::VCMPo, dl, VTs, Ops);
7465
7466   // Now that we have the comparison, emit a copy from the CR to a GPR.
7467   // This is flagged to the above dot comparison.
7468   SDValue Flags = DAG.getNode(PPCISD::MFOCRF, dl, MVT::i32,
7469                                 DAG.getRegister(PPC::CR6, MVT::i32),
7470                                 CompNode.getValue(1));
7471
7472   // Unpack the result based on how the target uses it.
7473   unsigned BitNo;   // Bit # of CR6.
7474   bool InvertBit;   // Invert result?
7475   switch (cast<ConstantSDNode>(Op.getOperand(1))->getZExtValue()) {
7476   default:  // Can't happen, don't crash on invalid number though.
7477   case 0:   // Return the value of the EQ bit of CR6.
7478     BitNo = 0; InvertBit = false;
7479     break;
7480   case 1:   // Return the inverted value of the EQ bit of CR6.
7481     BitNo = 0; InvertBit = true;
7482     break;
7483   case 2:   // Return the value of the LT bit of CR6.
7484     BitNo = 2; InvertBit = false;
7485     break;
7486   case 3:   // Return the inverted value of the LT bit of CR6.
7487     BitNo = 2; InvertBit = true;
7488     break;
7489   }
7490
7491   // Shift the bit into the low position.
7492   Flags = DAG.getNode(ISD::SRL, dl, MVT::i32, Flags,
7493                       DAG.getConstant(8 - (3 - BitNo), dl, MVT::i32));
7494   // Isolate the bit.
7495   Flags = DAG.getNode(ISD::AND, dl, MVT::i32, Flags,
7496                       DAG.getConstant(1, dl, MVT::i32));
7497
7498   // If we are supposed to, toggle the bit.
7499   if (InvertBit)
7500     Flags = DAG.getNode(ISD::XOR, dl, MVT::i32, Flags,
7501                         DAG.getConstant(1, dl, MVT::i32));
7502   return Flags;
7503 }
7504
7505 SDValue PPCTargetLowering::LowerSIGN_EXTEND_INREG(SDValue Op,
7506                                                   SelectionDAG &DAG) const {
7507   SDLoc dl(Op);
7508   // For v2i64 (VSX), we can pattern patch the v2i32 case (using fp <-> int
7509   // instructions), but for smaller types, we need to first extend up to v2i32
7510   // before doing going farther.
7511   if (Op.getValueType() == MVT::v2i64) {
7512     EVT ExtVT = cast<VTSDNode>(Op.getOperand(1))->getVT();
7513     if (ExtVT != MVT::v2i32) {
7514       Op = DAG.getNode(ISD::BITCAST, dl, MVT::v4i32, Op.getOperand(0));
7515       Op = DAG.getNode(ISD::SIGN_EXTEND_INREG, dl, MVT::v4i32, Op,
7516                        DAG.getValueType(EVT::getVectorVT(*DAG.getContext(),
7517                                         ExtVT.getVectorElementType(), 4)));
7518       Op = DAG.getNode(ISD::BITCAST, dl, MVT::v2i64, Op);
7519       Op = DAG.getNode(ISD::SIGN_EXTEND_INREG, dl, MVT::v2i64, Op,
7520                        DAG.getValueType(MVT::v2i32));
7521     }
7522
7523     return Op;
7524   }
7525
7526   return SDValue();
7527 }
7528
7529 SDValue PPCTargetLowering::LowerSCALAR_TO_VECTOR(SDValue Op,
7530                                                    SelectionDAG &DAG) const {
7531   SDLoc dl(Op);
7532   // Create a stack slot that is 16-byte aligned.
7533   MachineFrameInfo *FrameInfo = DAG.getMachineFunction().getFrameInfo();
7534   int FrameIdx = FrameInfo->CreateStackObject(16, 16, false);
7535   EVT PtrVT = getPointerTy(DAG.getDataLayout());
7536   SDValue FIdx = DAG.getFrameIndex(FrameIdx, PtrVT);
7537
7538   // Store the input value into Value#0 of the stack slot.
7539   SDValue Store = DAG.getStore(DAG.getEntryNode(), dl,
7540                                Op.getOperand(0), FIdx, MachinePointerInfo(),
7541                                false, false, 0);
7542   // Load it out.
7543   return DAG.getLoad(Op.getValueType(), dl, Store, FIdx, MachinePointerInfo(),
7544                      false, false, false, 0);
7545 }
7546
7547 SDValue PPCTargetLowering::LowerEXTRACT_VECTOR_ELT(SDValue Op,
7548                                                    SelectionDAG &DAG) const {
7549   SDLoc dl(Op);
7550   SDNode *N = Op.getNode();
7551
7552   assert(N->getOperand(0).getValueType() == MVT::v4i1 &&
7553          "Unknown extract_vector_elt type");
7554
7555   SDValue Value = N->getOperand(0);
7556
7557   // The first part of this is like the store lowering except that we don't
7558   // need to track the chain.
7559
7560   // The values are now known to be -1 (false) or 1 (true). To convert this
7561   // into 0 (false) and 1 (true), add 1 and then divide by 2 (multiply by 0.5).
7562   // This can be done with an fma and the 0.5 constant: (V+1.0)*0.5 = 0.5*V+0.5
7563   Value = DAG.getNode(PPCISD::QBFLT, dl, MVT::v4f64, Value);
7564
7565   // FIXME: We can make this an f32 vector, but the BUILD_VECTOR code needs to
7566   // understand how to form the extending load.
7567   SDValue FPHalfs = DAG.getConstantFP(0.5, dl, MVT::f64);
7568   FPHalfs = DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v4f64,
7569                         FPHalfs, FPHalfs, FPHalfs, FPHalfs);
7570
7571   Value = DAG.getNode(ISD::FMA, dl, MVT::v4f64, Value, FPHalfs, FPHalfs);
7572
7573   // Now convert to an integer and store.
7574   Value = DAG.getNode(ISD::INTRINSIC_WO_CHAIN, dl, MVT::v4f64,
7575     DAG.getConstant(Intrinsic::ppc_qpx_qvfctiwu, dl, MVT::i32),
7576     Value);
7577
7578   MachineFrameInfo *FrameInfo = DAG.getMachineFunction().getFrameInfo();
7579   int FrameIdx = FrameInfo->CreateStackObject(16, 16, false);
7580   MachinePointerInfo PtrInfo =
7581       MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FrameIdx);
7582   EVT PtrVT = getPointerTy(DAG.getDataLayout());
7583   SDValue FIdx = DAG.getFrameIndex(FrameIdx, PtrVT);
7584
7585   SDValue StoreChain = DAG.getEntryNode();
7586   SmallVector<SDValue, 2> Ops;
7587   Ops.push_back(StoreChain);
7588   Ops.push_back(DAG.getConstant(Intrinsic::ppc_qpx_qvstfiw, dl, MVT::i32));
7589   Ops.push_back(Value);
7590   Ops.push_back(FIdx);
7591
7592   SmallVector<EVT, 2> ValueVTs;
7593   ValueVTs.push_back(MVT::Other); // chain
7594   SDVTList VTs = DAG.getVTList(ValueVTs);
7595
7596   StoreChain = DAG.getMemIntrinsicNode(ISD::INTRINSIC_VOID,
7597     dl, VTs, Ops, MVT::v4i32, PtrInfo);
7598
7599   // Extract the value requested.
7600   unsigned Offset = 4*cast<ConstantSDNode>(N->getOperand(1))->getZExtValue();
7601   SDValue Idx = DAG.getConstant(Offset, dl, FIdx.getValueType());
7602   Idx = DAG.getNode(ISD::ADD, dl, FIdx.getValueType(), FIdx, Idx);
7603
7604   SDValue IntVal = DAG.getLoad(MVT::i32, dl, StoreChain, Idx,
7605                                PtrInfo.getWithOffset(Offset),
7606                                false, false, false, 0);
7607
7608   if (!Subtarget.useCRBits())
7609     return IntVal;
7610
7611   return DAG.getNode(ISD::TRUNCATE, dl, MVT::i1, IntVal);
7612 }
7613
7614 /// Lowering for QPX v4i1 loads
7615 SDValue PPCTargetLowering::LowerVectorLoad(SDValue Op,
7616                                            SelectionDAG &DAG) const {
7617   SDLoc dl(Op);
7618   LoadSDNode *LN = cast<LoadSDNode>(Op.getNode());
7619   SDValue LoadChain = LN->getChain();
7620   SDValue BasePtr = LN->getBasePtr();
7621
7622   if (Op.getValueType() == MVT::v4f64 ||
7623       Op.getValueType() == MVT::v4f32) {
7624     EVT MemVT = LN->getMemoryVT();
7625     unsigned Alignment = LN->getAlignment();
7626
7627     // If this load is properly aligned, then it is legal.
7628     if (Alignment >= MemVT.getStoreSize())
7629       return Op;
7630
7631     EVT ScalarVT = Op.getValueType().getScalarType(),
7632         ScalarMemVT = MemVT.getScalarType();
7633     unsigned Stride = ScalarMemVT.getStoreSize();
7634
7635     SmallVector<SDValue, 8> Vals, LoadChains;
7636     for (unsigned Idx = 0; Idx < 4; ++Idx) {
7637       SDValue Load;
7638       if (ScalarVT != ScalarMemVT)
7639         Load =
7640           DAG.getExtLoad(LN->getExtensionType(), dl, ScalarVT, LoadChain,
7641                          BasePtr,
7642                          LN->getPointerInfo().getWithOffset(Idx*Stride),
7643                          ScalarMemVT, LN->isVolatile(), LN->isNonTemporal(),
7644                          LN->isInvariant(), MinAlign(Alignment, Idx*Stride),
7645                          LN->getAAInfo());
7646       else
7647         Load =
7648           DAG.getLoad(ScalarVT, dl, LoadChain, BasePtr,
7649                        LN->getPointerInfo().getWithOffset(Idx*Stride),
7650                        LN->isVolatile(), LN->isNonTemporal(),
7651                        LN->isInvariant(), MinAlign(Alignment, Idx*Stride),
7652                        LN->getAAInfo());
7653
7654       if (Idx == 0 && LN->isIndexed()) {
7655         assert(LN->getAddressingMode() == ISD::PRE_INC &&
7656                "Unknown addressing mode on vector load");
7657         Load = DAG.getIndexedLoad(Load, dl, BasePtr, LN->getOffset(),
7658                                   LN->getAddressingMode());
7659       }
7660
7661       Vals.push_back(Load);
7662       LoadChains.push_back(Load.getValue(1));
7663
7664       BasePtr = DAG.getNode(ISD::ADD, dl, BasePtr.getValueType(), BasePtr,
7665                             DAG.getConstant(Stride, dl,
7666                                             BasePtr.getValueType()));
7667     }
7668
7669     SDValue TF =  DAG.getNode(ISD::TokenFactor, dl, MVT::Other, LoadChains);
7670     SDValue Value = DAG.getNode(ISD::BUILD_VECTOR, dl,
7671                                 Op.getValueType(), Vals);
7672
7673     if (LN->isIndexed()) {
7674       SDValue RetOps[] = { Value, Vals[0].getValue(1), TF };
7675       return DAG.getMergeValues(RetOps, dl);
7676     }
7677
7678     SDValue RetOps[] = { Value, TF };
7679     return DAG.getMergeValues(RetOps, dl);
7680   }
7681
7682   assert(Op.getValueType() == MVT::v4i1 && "Unknown load to lower");
7683   assert(LN->isUnindexed() && "Indexed v4i1 loads are not supported");
7684
7685   // To lower v4i1 from a byte array, we load the byte elements of the
7686   // vector and then reuse the BUILD_VECTOR logic.
7687
7688   SmallVector<SDValue, 4> VectElmts, VectElmtChains;
7689   for (unsigned i = 0; i < 4; ++i) {
7690     SDValue Idx = DAG.getConstant(i, dl, BasePtr.getValueType());
7691     Idx = DAG.getNode(ISD::ADD, dl, BasePtr.getValueType(), BasePtr, Idx);
7692
7693     VectElmts.push_back(DAG.getExtLoad(ISD::EXTLOAD,
7694                         dl, MVT::i32, LoadChain, Idx,
7695                         LN->getPointerInfo().getWithOffset(i),
7696                         MVT::i8 /* memory type */,
7697                         LN->isVolatile(), LN->isNonTemporal(),
7698                         LN->isInvariant(),
7699                         1 /* alignment */, LN->getAAInfo()));
7700     VectElmtChains.push_back(VectElmts[i].getValue(1));
7701   }
7702
7703   LoadChain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, VectElmtChains);
7704   SDValue Value = DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v4i1, VectElmts);
7705
7706   SDValue RVals[] = { Value, LoadChain };
7707   return DAG.getMergeValues(RVals, dl);
7708 }
7709
7710 /// Lowering for QPX v4i1 stores
7711 SDValue PPCTargetLowering::LowerVectorStore(SDValue Op,
7712                                             SelectionDAG &DAG) const {
7713   SDLoc dl(Op);
7714   StoreSDNode *SN = cast<StoreSDNode>(Op.getNode());
7715   SDValue StoreChain = SN->getChain();
7716   SDValue BasePtr = SN->getBasePtr();
7717   SDValue Value = SN->getValue();
7718
7719   if (Value.getValueType() == MVT::v4f64 ||
7720       Value.getValueType() == MVT::v4f32) {
7721     EVT MemVT = SN->getMemoryVT();
7722     unsigned Alignment = SN->getAlignment();
7723
7724     // If this store is properly aligned, then it is legal.
7725     if (Alignment >= MemVT.getStoreSize())
7726       return Op;
7727
7728     EVT ScalarVT = Value.getValueType().getScalarType(),
7729         ScalarMemVT = MemVT.getScalarType();
7730     unsigned Stride = ScalarMemVT.getStoreSize();
7731
7732     SmallVector<SDValue, 8> Stores;
7733     for (unsigned Idx = 0; Idx < 4; ++Idx) {
7734       SDValue Ex = DAG.getNode(
7735           ISD::EXTRACT_VECTOR_ELT, dl, ScalarVT, Value,
7736           DAG.getConstant(Idx, dl, getVectorIdxTy(DAG.getDataLayout())));
7737       SDValue Store;
7738       if (ScalarVT != ScalarMemVT)
7739         Store =
7740           DAG.getTruncStore(StoreChain, dl, Ex, BasePtr,
7741                             SN->getPointerInfo().getWithOffset(Idx*Stride),
7742                             ScalarMemVT, SN->isVolatile(), SN->isNonTemporal(),
7743                             MinAlign(Alignment, Idx*Stride), SN->getAAInfo());
7744       else
7745         Store =
7746           DAG.getStore(StoreChain, dl, Ex, BasePtr,
7747                        SN->getPointerInfo().getWithOffset(Idx*Stride),
7748                        SN->isVolatile(), SN->isNonTemporal(),
7749                        MinAlign(Alignment, Idx*Stride), SN->getAAInfo());
7750
7751       if (Idx == 0 && SN->isIndexed()) {
7752         assert(SN->getAddressingMode() == ISD::PRE_INC &&
7753                "Unknown addressing mode on vector store");
7754         Store = DAG.getIndexedStore(Store, dl, BasePtr, SN->getOffset(),
7755                                     SN->getAddressingMode());
7756       }
7757
7758       BasePtr = DAG.getNode(ISD::ADD, dl, BasePtr.getValueType(), BasePtr,
7759                             DAG.getConstant(Stride, dl,
7760                                             BasePtr.getValueType()));
7761       Stores.push_back(Store);
7762     }
7763
7764     SDValue TF =  DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Stores);
7765
7766     if (SN->isIndexed()) {
7767       SDValue RetOps[] = { TF, Stores[0].getValue(1) };
7768       return DAG.getMergeValues(RetOps, dl);
7769     }
7770
7771     return TF;
7772   }
7773
7774   assert(SN->isUnindexed() && "Indexed v4i1 stores are not supported");
7775   assert(Value.getValueType() == MVT::v4i1 && "Unknown store to lower");
7776
7777   // The values are now known to be -1 (false) or 1 (true). To convert this
7778   // into 0 (false) and 1 (true), add 1 and then divide by 2 (multiply by 0.5).
7779   // This can be done with an fma and the 0.5 constant: (V+1.0)*0.5 = 0.5*V+0.5
7780   Value = DAG.getNode(PPCISD::QBFLT, dl, MVT::v4f64, Value);
7781
7782   // FIXME: We can make this an f32 vector, but the BUILD_VECTOR code needs to
7783   // understand how to form the extending load.
7784   SDValue FPHalfs = DAG.getConstantFP(0.5, dl, MVT::f64);
7785   FPHalfs = DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v4f64,
7786                         FPHalfs, FPHalfs, FPHalfs, FPHalfs);
7787
7788   Value = DAG.getNode(ISD::FMA, dl, MVT::v4f64, Value, FPHalfs, FPHalfs);
7789
7790   // Now convert to an integer and store.
7791   Value = DAG.getNode(ISD::INTRINSIC_WO_CHAIN, dl, MVT::v4f64,
7792     DAG.getConstant(Intrinsic::ppc_qpx_qvfctiwu, dl, MVT::i32),
7793     Value);
7794
7795   MachineFrameInfo *FrameInfo = DAG.getMachineFunction().getFrameInfo();
7796   int FrameIdx = FrameInfo->CreateStackObject(16, 16, false);
7797   MachinePointerInfo PtrInfo =
7798       MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FrameIdx);
7799   EVT PtrVT = getPointerTy(DAG.getDataLayout());
7800   SDValue FIdx = DAG.getFrameIndex(FrameIdx, PtrVT);
7801
7802   SmallVector<SDValue, 2> Ops;
7803   Ops.push_back(StoreChain);
7804   Ops.push_back(DAG.getConstant(Intrinsic::ppc_qpx_qvstfiw, dl, MVT::i32));
7805   Ops.push_back(Value);
7806   Ops.push_back(FIdx);
7807
7808   SmallVector<EVT, 2> ValueVTs;
7809   ValueVTs.push_back(MVT::Other); // chain
7810   SDVTList VTs = DAG.getVTList(ValueVTs);
7811
7812   StoreChain = DAG.getMemIntrinsicNode(ISD::INTRINSIC_VOID,
7813     dl, VTs, Ops, MVT::v4i32, PtrInfo);
7814
7815   // Move data into the byte array.
7816   SmallVector<SDValue, 4> Loads, LoadChains;
7817   for (unsigned i = 0; i < 4; ++i) {
7818     unsigned Offset = 4*i;
7819     SDValue Idx = DAG.getConstant(Offset, dl, FIdx.getValueType());
7820     Idx = DAG.getNode(ISD::ADD, dl, FIdx.getValueType(), FIdx, Idx);
7821
7822     Loads.push_back(DAG.getLoad(MVT::i32, dl, StoreChain, Idx,
7823                                    PtrInfo.getWithOffset(Offset),
7824                                    false, false, false, 0));
7825     LoadChains.push_back(Loads[i].getValue(1));
7826   }
7827
7828   StoreChain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, LoadChains);
7829
7830   SmallVector<SDValue, 4> Stores;
7831   for (unsigned i = 0; i < 4; ++i) {
7832     SDValue Idx = DAG.getConstant(i, dl, BasePtr.getValueType());
7833     Idx = DAG.getNode(ISD::ADD, dl, BasePtr.getValueType(), BasePtr, Idx);
7834
7835     Stores.push_back(DAG.getTruncStore(
7836         StoreChain, dl, Loads[i], Idx, SN->getPointerInfo().getWithOffset(i),
7837         MVT::i8 /* memory type */, SN->isNonTemporal(), SN->isVolatile(),
7838         1 /* alignment */, SN->getAAInfo()));
7839   }
7840
7841   StoreChain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Stores);
7842
7843   return StoreChain;
7844 }
7845
7846 SDValue PPCTargetLowering::LowerMUL(SDValue Op, SelectionDAG &DAG) const {
7847   SDLoc dl(Op);
7848   if (Op.getValueType() == MVT::v4i32) {
7849     SDValue LHS = Op.getOperand(0), RHS = Op.getOperand(1);
7850
7851     SDValue Zero  = BuildSplatI(  0, 1, MVT::v4i32, DAG, dl);
7852     SDValue Neg16 = BuildSplatI(-16, 4, MVT::v4i32, DAG, dl);//+16 as shift amt.
7853
7854     SDValue RHSSwap =   // = vrlw RHS, 16
7855       BuildIntrinsicOp(Intrinsic::ppc_altivec_vrlw, RHS, Neg16, DAG, dl);
7856
7857     // Shrinkify inputs to v8i16.
7858     LHS = DAG.getNode(ISD::BITCAST, dl, MVT::v8i16, LHS);
7859     RHS = DAG.getNode(ISD::BITCAST, dl, MVT::v8i16, RHS);
7860     RHSSwap = DAG.getNode(ISD::BITCAST, dl, MVT::v8i16, RHSSwap);
7861
7862     // Low parts multiplied together, generating 32-bit results (we ignore the
7863     // top parts).
7864     SDValue LoProd = BuildIntrinsicOp(Intrinsic::ppc_altivec_vmulouh,
7865                                         LHS, RHS, DAG, dl, MVT::v4i32);
7866
7867     SDValue HiProd = BuildIntrinsicOp(Intrinsic::ppc_altivec_vmsumuhm,
7868                                       LHS, RHSSwap, Zero, DAG, dl, MVT::v4i32);
7869     // Shift the high parts up 16 bits.
7870     HiProd = BuildIntrinsicOp(Intrinsic::ppc_altivec_vslw, HiProd,
7871                               Neg16, DAG, dl);
7872     return DAG.getNode(ISD::ADD, dl, MVT::v4i32, LoProd, HiProd);
7873   } else if (Op.getValueType() == MVT::v8i16) {
7874     SDValue LHS = Op.getOperand(0), RHS = Op.getOperand(1);
7875
7876     SDValue Zero = BuildSplatI(0, 1, MVT::v8i16, DAG, dl);
7877
7878     return BuildIntrinsicOp(Intrinsic::ppc_altivec_vmladduhm,
7879                             LHS, RHS, Zero, DAG, dl);
7880   } else if (Op.getValueType() == MVT::v16i8) {
7881     SDValue LHS = Op.getOperand(0), RHS = Op.getOperand(1);
7882     bool isLittleEndian = Subtarget.isLittleEndian();
7883
7884     // Multiply the even 8-bit parts, producing 16-bit sums.
7885     SDValue EvenParts = BuildIntrinsicOp(Intrinsic::ppc_altivec_vmuleub,
7886                                            LHS, RHS, DAG, dl, MVT::v8i16);
7887     EvenParts = DAG.getNode(ISD::BITCAST, dl, MVT::v16i8, EvenParts);
7888
7889     // Multiply the odd 8-bit parts, producing 16-bit sums.
7890     SDValue OddParts = BuildIntrinsicOp(Intrinsic::ppc_altivec_vmuloub,
7891                                           LHS, RHS, DAG, dl, MVT::v8i16);
7892     OddParts = DAG.getNode(ISD::BITCAST, dl, MVT::v16i8, OddParts);
7893
7894     // Merge the results together.  Because vmuleub and vmuloub are
7895     // instructions with a big-endian bias, we must reverse the
7896     // element numbering and reverse the meaning of "odd" and "even"
7897     // when generating little endian code.
7898     int Ops[16];
7899     for (unsigned i = 0; i != 8; ++i) {
7900       if (isLittleEndian) {
7901         Ops[i*2  ] = 2*i;
7902         Ops[i*2+1] = 2*i+16;
7903       } else {
7904         Ops[i*2  ] = 2*i+1;
7905         Ops[i*2+1] = 2*i+1+16;
7906       }
7907     }
7908     if (isLittleEndian)
7909       return DAG.getVectorShuffle(MVT::v16i8, dl, OddParts, EvenParts, Ops);
7910     else
7911       return DAG.getVectorShuffle(MVT::v16i8, dl, EvenParts, OddParts, Ops);
7912   } else {
7913     llvm_unreachable("Unknown mul to lower!");
7914   }
7915 }
7916
7917 /// LowerOperation - Provide custom lowering hooks for some operations.
7918 ///
7919 SDValue PPCTargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) const {
7920   switch (Op.getOpcode()) {
7921   default: llvm_unreachable("Wasn't expecting to be able to lower this!");
7922   case ISD::ConstantPool:       return LowerConstantPool(Op, DAG);
7923   case ISD::BlockAddress:       return LowerBlockAddress(Op, DAG);
7924   case ISD::GlobalAddress:      return LowerGlobalAddress(Op, DAG);
7925   case ISD::GlobalTLSAddress:   return LowerGlobalTLSAddress(Op, DAG);
7926   case ISD::JumpTable:          return LowerJumpTable(Op, DAG);
7927   case ISD::SETCC:              return LowerSETCC(Op, DAG);
7928   case ISD::INIT_TRAMPOLINE:    return LowerINIT_TRAMPOLINE(Op, DAG);
7929   case ISD::ADJUST_TRAMPOLINE:  return LowerADJUST_TRAMPOLINE(Op, DAG);
7930   case ISD::VASTART:
7931     return LowerVASTART(Op, DAG, Subtarget);
7932
7933   case ISD::VAARG:
7934     return LowerVAARG(Op, DAG, Subtarget);
7935
7936   case ISD::VACOPY:
7937     return LowerVACOPY(Op, DAG, Subtarget);
7938
7939   case ISD::STACKRESTORE:       return LowerSTACKRESTORE(Op, DAG, Subtarget);
7940   case ISD::DYNAMIC_STACKALLOC:
7941     return LowerDYNAMIC_STACKALLOC(Op, DAG, Subtarget);
7942
7943   case ISD::EH_SJLJ_SETJMP:     return lowerEH_SJLJ_SETJMP(Op, DAG);
7944   case ISD::EH_SJLJ_LONGJMP:    return lowerEH_SJLJ_LONGJMP(Op, DAG);
7945
7946   case ISD::LOAD:               return LowerLOAD(Op, DAG);
7947   case ISD::STORE:              return LowerSTORE(Op, DAG);
7948   case ISD::TRUNCATE:           return LowerTRUNCATE(Op, DAG);
7949   case ISD::SELECT_CC:          return LowerSELECT_CC(Op, DAG);
7950   case ISD::FP_TO_UINT:
7951   case ISD::FP_TO_SINT:         return LowerFP_TO_INT(Op, DAG,
7952                                                       SDLoc(Op));
7953   case ISD::UINT_TO_FP:
7954   case ISD::SINT_TO_FP:         return LowerINT_TO_FP(Op, DAG);
7955   case ISD::FLT_ROUNDS_:        return LowerFLT_ROUNDS_(Op, DAG);
7956
7957   // Lower 64-bit shifts.
7958   case ISD::SHL_PARTS:          return LowerSHL_PARTS(Op, DAG);
7959   case ISD::SRL_PARTS:          return LowerSRL_PARTS(Op, DAG);
7960   case ISD::SRA_PARTS:          return LowerSRA_PARTS(Op, DAG);
7961
7962   // Vector-related lowering.
7963   case ISD::BUILD_VECTOR:       return LowerBUILD_VECTOR(Op, DAG);
7964   case ISD::VECTOR_SHUFFLE:     return LowerVECTOR_SHUFFLE(Op, DAG);
7965   case ISD::INTRINSIC_WO_CHAIN: return LowerINTRINSIC_WO_CHAIN(Op, DAG);
7966   case ISD::SCALAR_TO_VECTOR:   return LowerSCALAR_TO_VECTOR(Op, DAG);
7967   case ISD::SIGN_EXTEND_INREG:  return LowerSIGN_EXTEND_INREG(Op, DAG);
7968   case ISD::EXTRACT_VECTOR_ELT: return LowerEXTRACT_VECTOR_ELT(Op, DAG);
7969   case ISD::MUL:                return LowerMUL(Op, DAG);
7970
7971   // For counter-based loop handling.
7972   case ISD::INTRINSIC_W_CHAIN:  return SDValue();
7973
7974   // Frame & Return address.
7975   case ISD::RETURNADDR:         return LowerRETURNADDR(Op, DAG);
7976   case ISD::FRAMEADDR:          return LowerFRAMEADDR(Op, DAG);
7977   }
7978 }
7979
7980 void PPCTargetLowering::ReplaceNodeResults(SDNode *N,
7981                                            SmallVectorImpl<SDValue>&Results,
7982                                            SelectionDAG &DAG) const {
7983   SDLoc dl(N);
7984   switch (N->getOpcode()) {
7985   default:
7986     llvm_unreachable("Do not know how to custom type legalize this operation!");
7987   case ISD::READCYCLECOUNTER: {
7988     SDVTList VTs = DAG.getVTList(MVT::i32, MVT::i32, MVT::Other);
7989     SDValue RTB = DAG.getNode(PPCISD::READ_TIME_BASE, dl, VTs, N->getOperand(0));
7990
7991     Results.push_back(RTB);
7992     Results.push_back(RTB.getValue(1));
7993     Results.push_back(RTB.getValue(2));
7994     break;
7995   }
7996   case ISD::INTRINSIC_W_CHAIN: {
7997     if (cast<ConstantSDNode>(N->getOperand(1))->getZExtValue() !=
7998         Intrinsic::ppc_is_decremented_ctr_nonzero)
7999       break;
8000
8001     assert(N->getValueType(0) == MVT::i1 &&
8002            "Unexpected result type for CTR decrement intrinsic");
8003     EVT SVT = getSetCCResultType(DAG.getDataLayout(), *DAG.getContext(),
8004                                  N->getValueType(0));
8005     SDVTList VTs = DAG.getVTList(SVT, MVT::Other);
8006     SDValue NewInt = DAG.getNode(N->getOpcode(), dl, VTs, N->getOperand(0),
8007                                  N->getOperand(1));
8008
8009     Results.push_back(NewInt);
8010     Results.push_back(NewInt.getValue(1));
8011     break;
8012   }
8013   case ISD::VAARG: {
8014     if (!Subtarget.isSVR4ABI() || Subtarget.isPPC64())
8015       return;
8016
8017     EVT VT = N->getValueType(0);
8018
8019     if (VT == MVT::i64) {
8020       SDValue NewNode = LowerVAARG(SDValue(N, 1), DAG, Subtarget);
8021
8022       Results.push_back(NewNode);
8023       Results.push_back(NewNode.getValue(1));
8024     }
8025     return;
8026   }
8027   case ISD::FP_ROUND_INREG: {
8028     assert(N->getValueType(0) == MVT::ppcf128);
8029     assert(N->getOperand(0).getValueType() == MVT::ppcf128);
8030     SDValue Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl,
8031                              MVT::f64, N->getOperand(0),
8032                              DAG.getIntPtrConstant(0, dl));
8033     SDValue Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl,
8034                              MVT::f64, N->getOperand(0),
8035                              DAG.getIntPtrConstant(1, dl));
8036
8037     // Add the two halves of the long double in round-to-zero mode.
8038     SDValue FPreg = DAG.getNode(PPCISD::FADDRTZ, dl, MVT::f64, Lo, Hi);
8039
8040     // We know the low half is about to be thrown away, so just use something
8041     // convenient.
8042     Results.push_back(DAG.getNode(ISD::BUILD_PAIR, dl, MVT::ppcf128,
8043                                 FPreg, FPreg));
8044     return;
8045   }
8046   case ISD::FP_TO_SINT:
8047   case ISD::FP_TO_UINT:
8048     // LowerFP_TO_INT() can only handle f32 and f64.
8049     if (N->getOperand(0).getValueType() == MVT::ppcf128)
8050       return;
8051     Results.push_back(LowerFP_TO_INT(SDValue(N, 0), DAG, dl));
8052     return;
8053   }
8054 }
8055
8056 //===----------------------------------------------------------------------===//
8057 //  Other Lowering Code
8058 //===----------------------------------------------------------------------===//
8059
8060 static Instruction* callIntrinsic(IRBuilder<> &Builder, Intrinsic::ID Id) {
8061   Module *M = Builder.GetInsertBlock()->getParent()->getParent();
8062   Function *Func = Intrinsic::getDeclaration(M, Id);
8063   return Builder.CreateCall(Func, {});
8064 }
8065
8066 // The mappings for emitLeading/TrailingFence is taken from
8067 // http://www.cl.cam.ac.uk/~pes20/cpp/cpp0xmappings.html
8068 Instruction* PPCTargetLowering::emitLeadingFence(IRBuilder<> &Builder,
8069                                          AtomicOrdering Ord, bool IsStore,
8070                                          bool IsLoad) const {
8071   if (Ord == SequentiallyConsistent)
8072     return callIntrinsic(Builder, Intrinsic::ppc_sync);
8073   if (isAtLeastRelease(Ord))
8074     return callIntrinsic(Builder, Intrinsic::ppc_lwsync);
8075   return nullptr;
8076 }
8077
8078 Instruction* PPCTargetLowering::emitTrailingFence(IRBuilder<> &Builder,
8079                                           AtomicOrdering Ord, bool IsStore,
8080                                           bool IsLoad) const {
8081   if (IsLoad && isAtLeastAcquire(Ord))
8082     return callIntrinsic(Builder, Intrinsic::ppc_lwsync);
8083   // FIXME: this is too conservative, a dependent branch + isync is enough.
8084   // See http://www.cl.cam.ac.uk/~pes20/cpp/cpp0xmappings.html and
8085   // http://www.rdrop.com/users/paulmck/scalability/paper/N2745r.2011.03.04a.html
8086   // and http://www.cl.cam.ac.uk/~pes20/cppppc/ for justification.
8087   return nullptr;
8088 }
8089
8090 MachineBasicBlock *
8091 PPCTargetLowering::EmitAtomicBinary(MachineInstr *MI, MachineBasicBlock *BB,
8092                                     unsigned AtomicSize,
8093                                     unsigned BinOpcode) const {
8094   // This also handles ATOMIC_SWAP, indicated by BinOpcode==0.
8095   const TargetInstrInfo *TII = Subtarget.getInstrInfo();
8096
8097   auto LoadMnemonic = PPC::LDARX;
8098   auto StoreMnemonic = PPC::STDCX;
8099   switch (AtomicSize) {
8100   default:
8101     llvm_unreachable("Unexpected size of atomic entity");
8102   case 1:
8103     LoadMnemonic = PPC::LBARX;
8104     StoreMnemonic = PPC::STBCX;
8105     assert(Subtarget.hasPartwordAtomics() && "Call this only with size >=4");
8106     break;
8107   case 2:
8108     LoadMnemonic = PPC::LHARX;
8109     StoreMnemonic = PPC::STHCX;
8110     assert(Subtarget.hasPartwordAtomics() && "Call this only with size >=4");
8111     break;
8112   case 4:
8113     LoadMnemonic = PPC::LWARX;
8114     StoreMnemonic = PPC::STWCX;
8115     break;
8116   case 8:
8117     LoadMnemonic = PPC::LDARX;
8118     StoreMnemonic = PPC::STDCX;
8119     break;
8120   }
8121
8122   const BasicBlock *LLVM_BB = BB->getBasicBlock();
8123   MachineFunction *F = BB->getParent();
8124   MachineFunction::iterator It = ++BB->getIterator();
8125
8126   unsigned dest = MI->getOperand(0).getReg();
8127   unsigned ptrA = MI->getOperand(1).getReg();
8128   unsigned ptrB = MI->getOperand(2).getReg();
8129   unsigned incr = MI->getOperand(3).getReg();
8130   DebugLoc dl = MI->getDebugLoc();
8131
8132   MachineBasicBlock *loopMBB = F->CreateMachineBasicBlock(LLVM_BB);
8133   MachineBasicBlock *exitMBB = F->CreateMachineBasicBlock(LLVM_BB);
8134   F->insert(It, loopMBB);
8135   F->insert(It, exitMBB);
8136   exitMBB->splice(exitMBB->begin(), BB,
8137                   std::next(MachineBasicBlock::iterator(MI)), BB->end());
8138   exitMBB->transferSuccessorsAndUpdatePHIs(BB);
8139
8140   MachineRegisterInfo &RegInfo = F->getRegInfo();
8141   unsigned TmpReg = (!BinOpcode) ? incr :
8142     RegInfo.createVirtualRegister( AtomicSize == 8 ? &PPC::G8RCRegClass
8143                                            : &PPC::GPRCRegClass);
8144
8145   //  thisMBB:
8146   //   ...
8147   //   fallthrough --> loopMBB
8148   BB->addSuccessor(loopMBB);
8149
8150   //  loopMBB:
8151   //   l[wd]arx dest, ptr
8152   //   add r0, dest, incr
8153   //   st[wd]cx. r0, ptr
8154   //   bne- loopMBB
8155   //   fallthrough --> exitMBB
8156   BB = loopMBB;
8157   BuildMI(BB, dl, TII->get(LoadMnemonic), dest)
8158     .addReg(ptrA).addReg(ptrB);
8159   if (BinOpcode)
8160     BuildMI(BB, dl, TII->get(BinOpcode), TmpReg).addReg(incr).addReg(dest);
8161   BuildMI(BB, dl, TII->get(StoreMnemonic))
8162     .addReg(TmpReg).addReg(ptrA).addReg(ptrB);
8163   BuildMI(BB, dl, TII->get(PPC::BCC))
8164     .addImm(PPC::PRED_NE).addReg(PPC::CR0).addMBB(loopMBB);
8165   BB->addSuccessor(loopMBB);
8166   BB->addSuccessor(exitMBB);
8167
8168   //  exitMBB:
8169   //   ...
8170   BB = exitMBB;
8171   return BB;
8172 }
8173
8174 MachineBasicBlock *
8175 PPCTargetLowering::EmitPartwordAtomicBinary(MachineInstr *MI,
8176                                             MachineBasicBlock *BB,
8177                                             bool is8bit,    // operation
8178                                             unsigned BinOpcode) const {
8179   // If we support part-word atomic mnemonics, just use them
8180   if (Subtarget.hasPartwordAtomics())
8181     return EmitAtomicBinary(MI, BB, is8bit ? 1 : 2, BinOpcode);
8182
8183   // This also handles ATOMIC_SWAP, indicated by BinOpcode==0.
8184   const TargetInstrInfo *TII = Subtarget.getInstrInfo();
8185   // In 64 bit mode we have to use 64 bits for addresses, even though the
8186   // lwarx/stwcx are 32 bits.  With the 32-bit atomics we can use address
8187   // registers without caring whether they're 32 or 64, but here we're
8188   // doing actual arithmetic on the addresses.
8189   bool is64bit = Subtarget.isPPC64();
8190   unsigned ZeroReg = is64bit ? PPC::ZERO8 : PPC::ZERO;
8191
8192   const BasicBlock *LLVM_BB = BB->getBasicBlock();
8193   MachineFunction *F = BB->getParent();
8194   MachineFunction::iterator It = ++BB->getIterator();
8195
8196   unsigned dest = MI->getOperand(0).getReg();
8197   unsigned ptrA = MI->getOperand(1).getReg();
8198   unsigned ptrB = MI->getOperand(2).getReg();
8199   unsigned incr = MI->getOperand(3).getReg();
8200   DebugLoc dl = MI->getDebugLoc();
8201
8202   MachineBasicBlock *loopMBB = F->CreateMachineBasicBlock(LLVM_BB);
8203   MachineBasicBlock *exitMBB = F->CreateMachineBasicBlock(LLVM_BB);
8204   F->insert(It, loopMBB);
8205   F->insert(It, exitMBB);
8206   exitMBB->splice(exitMBB->begin(), BB,
8207                   std::next(MachineBasicBlock::iterator(MI)), BB->end());
8208   exitMBB->transferSuccessorsAndUpdatePHIs(BB);
8209
8210   MachineRegisterInfo &RegInfo = F->getRegInfo();
8211   const TargetRegisterClass *RC = is64bit ? &PPC::G8RCRegClass
8212                                           : &PPC::GPRCRegClass;
8213   unsigned PtrReg = RegInfo.createVirtualRegister(RC);
8214   unsigned Shift1Reg = RegInfo.createVirtualRegister(RC);
8215   unsigned ShiftReg = RegInfo.createVirtualRegister(RC);
8216   unsigned Incr2Reg = RegInfo.createVirtualRegister(RC);
8217   unsigned MaskReg = RegInfo.createVirtualRegister(RC);
8218   unsigned Mask2Reg = RegInfo.createVirtualRegister(RC);
8219   unsigned Mask3Reg = RegInfo.createVirtualRegister(RC);
8220   unsigned Tmp2Reg = RegInfo.createVirtualRegister(RC);
8221   unsigned Tmp3Reg = RegInfo.createVirtualRegister(RC);
8222   unsigned Tmp4Reg = RegInfo.createVirtualRegister(RC);
8223   unsigned TmpDestReg = RegInfo.createVirtualRegister(RC);
8224   unsigned Ptr1Reg;
8225   unsigned TmpReg = (!BinOpcode) ? Incr2Reg : RegInfo.createVirtualRegister(RC);
8226
8227   //  thisMBB:
8228   //   ...
8229   //   fallthrough --> loopMBB
8230   BB->addSuccessor(loopMBB);
8231
8232   // The 4-byte load must be aligned, while a char or short may be
8233   // anywhere in the word.  Hence all this nasty bookkeeping code.
8234   //   add ptr1, ptrA, ptrB [copy if ptrA==0]
8235   //   rlwinm shift1, ptr1, 3, 27, 28 [3, 27, 27]
8236   //   xori shift, shift1, 24 [16]
8237   //   rlwinm ptr, ptr1, 0, 0, 29
8238   //   slw incr2, incr, shift
8239   //   li mask2, 255 [li mask3, 0; ori mask2, mask3, 65535]
8240   //   slw mask, mask2, shift
8241   //  loopMBB:
8242   //   lwarx tmpDest, ptr
8243   //   add tmp, tmpDest, incr2
8244   //   andc tmp2, tmpDest, mask
8245   //   and tmp3, tmp, mask
8246   //   or tmp4, tmp3, tmp2
8247   //   stwcx. tmp4, ptr
8248   //   bne- loopMBB
8249   //   fallthrough --> exitMBB
8250   //   srw dest, tmpDest, shift
8251   if (ptrA != ZeroReg) {
8252     Ptr1Reg = RegInfo.createVirtualRegister(RC);
8253     BuildMI(BB, dl, TII->get(is64bit ? PPC::ADD8 : PPC::ADD4), Ptr1Reg)
8254       .addReg(ptrA).addReg(ptrB);
8255   } else {
8256     Ptr1Reg = ptrB;
8257   }
8258   BuildMI(BB, dl, TII->get(PPC::RLWINM), Shift1Reg).addReg(Ptr1Reg)
8259       .addImm(3).addImm(27).addImm(is8bit ? 28 : 27);
8260   BuildMI(BB, dl, TII->get(is64bit ? PPC::XORI8 : PPC::XORI), ShiftReg)
8261       .addReg(Shift1Reg).addImm(is8bit ? 24 : 16);
8262   if (is64bit)
8263     BuildMI(BB, dl, TII->get(PPC::RLDICR), PtrReg)
8264       .addReg(Ptr1Reg).addImm(0).addImm(61);
8265   else
8266     BuildMI(BB, dl, TII->get(PPC::RLWINM), PtrReg)
8267       .addReg(Ptr1Reg).addImm(0).addImm(0).addImm(29);
8268   BuildMI(BB, dl, TII->get(PPC::SLW), Incr2Reg)
8269       .addReg(incr).addReg(ShiftReg);
8270   if (is8bit)
8271     BuildMI(BB, dl, TII->get(PPC::LI), Mask2Reg).addImm(255);
8272   else {
8273     BuildMI(BB, dl, TII->get(PPC::LI), Mask3Reg).addImm(0);
8274     BuildMI(BB, dl, TII->get(PPC::ORI),Mask2Reg).addReg(Mask3Reg).addImm(65535);
8275   }
8276   BuildMI(BB, dl, TII->get(PPC::SLW), MaskReg)
8277       .addReg(Mask2Reg).addReg(ShiftReg);
8278
8279   BB = loopMBB;
8280   BuildMI(BB, dl, TII->get(PPC::LWARX), TmpDestReg)
8281     .addReg(ZeroReg).addReg(PtrReg);
8282   if (BinOpcode)
8283     BuildMI(BB, dl, TII->get(BinOpcode), TmpReg)
8284       .addReg(Incr2Reg).addReg(TmpDestReg);
8285   BuildMI(BB, dl, TII->get(is64bit ? PPC::ANDC8 : PPC::ANDC), Tmp2Reg)
8286     .addReg(TmpDestReg).addReg(MaskReg);
8287   BuildMI(BB, dl, TII->get(is64bit ? PPC::AND8 : PPC::AND), Tmp3Reg)
8288     .addReg(TmpReg).addReg(MaskReg);
8289   BuildMI(BB, dl, TII->get(is64bit ? PPC::OR8 : PPC::OR), Tmp4Reg)
8290     .addReg(Tmp3Reg).addReg(Tmp2Reg);
8291   BuildMI(BB, dl, TII->get(PPC::STWCX))
8292     .addReg(Tmp4Reg).addReg(ZeroReg).addReg(PtrReg);
8293   BuildMI(BB, dl, TII->get(PPC::BCC))
8294     .addImm(PPC::PRED_NE).addReg(PPC::CR0).addMBB(loopMBB);
8295   BB->addSuccessor(loopMBB);
8296   BB->addSuccessor(exitMBB);
8297
8298   //  exitMBB:
8299   //   ...
8300   BB = exitMBB;
8301   BuildMI(*BB, BB->begin(), dl, TII->get(PPC::SRW), dest).addReg(TmpDestReg)
8302     .addReg(ShiftReg);
8303   return BB;
8304 }
8305
8306 llvm::MachineBasicBlock*
8307 PPCTargetLowering::emitEHSjLjSetJmp(MachineInstr *MI,
8308                                     MachineBasicBlock *MBB) const {
8309   DebugLoc DL = MI->getDebugLoc();
8310   const TargetInstrInfo *TII = Subtarget.getInstrInfo();
8311
8312   MachineFunction *MF = MBB->getParent();
8313   MachineRegisterInfo &MRI = MF->getRegInfo();
8314
8315   const BasicBlock *BB = MBB->getBasicBlock();
8316   MachineFunction::iterator I = ++MBB->getIterator();
8317
8318   // Memory Reference
8319   MachineInstr::mmo_iterator MMOBegin = MI->memoperands_begin();
8320   MachineInstr::mmo_iterator MMOEnd = MI->memoperands_end();
8321
8322   unsigned DstReg = MI->getOperand(0).getReg();
8323   const TargetRegisterClass *RC = MRI.getRegClass(DstReg);
8324   assert(RC->hasType(MVT::i32) && "Invalid destination!");
8325   unsigned mainDstReg = MRI.createVirtualRegister(RC);
8326   unsigned restoreDstReg = MRI.createVirtualRegister(RC);
8327
8328   MVT PVT = getPointerTy(MF->getDataLayout());
8329   assert((PVT == MVT::i64 || PVT == MVT::i32) &&
8330          "Invalid Pointer Size!");
8331   // For v = setjmp(buf), we generate
8332   //
8333   // thisMBB:
8334   //  SjLjSetup mainMBB
8335   //  bl mainMBB
8336   //  v_restore = 1
8337   //  b sinkMBB
8338   //
8339   // mainMBB:
8340   //  buf[LabelOffset] = LR
8341   //  v_main = 0
8342   //
8343   // sinkMBB:
8344   //  v = phi(main, restore)
8345   //
8346
8347   MachineBasicBlock *thisMBB = MBB;
8348   MachineBasicBlock *mainMBB = MF->CreateMachineBasicBlock(BB);
8349   MachineBasicBlock *sinkMBB = MF->CreateMachineBasicBlock(BB);
8350   MF->insert(I, mainMBB);
8351   MF->insert(I, sinkMBB);
8352
8353   MachineInstrBuilder MIB;
8354
8355   // Transfer the remainder of BB and its successor edges to sinkMBB.
8356   sinkMBB->splice(sinkMBB->begin(), MBB,
8357                   std::next(MachineBasicBlock::iterator(MI)), MBB->end());
8358   sinkMBB->transferSuccessorsAndUpdatePHIs(MBB);
8359
8360   // Note that the structure of the jmp_buf used here is not compatible
8361   // with that used by libc, and is not designed to be. Specifically, it
8362   // stores only those 'reserved' registers that LLVM does not otherwise
8363   // understand how to spill. Also, by convention, by the time this
8364   // intrinsic is called, Clang has already stored the frame address in the
8365   // first slot of the buffer and stack address in the third. Following the
8366   // X86 target code, we'll store the jump address in the second slot. We also
8367   // need to save the TOC pointer (R2) to handle jumps between shared
8368   // libraries, and that will be stored in the fourth slot. The thread
8369   // identifier (R13) is not affected.
8370
8371   // thisMBB:
8372   const int64_t LabelOffset = 1 * PVT.getStoreSize();
8373   const int64_t TOCOffset   = 3 * PVT.getStoreSize();
8374   const int64_t BPOffset    = 4 * PVT.getStoreSize();
8375
8376   // Prepare IP either in reg.
8377   const TargetRegisterClass *PtrRC = getRegClassFor(PVT);
8378   unsigned LabelReg = MRI.createVirtualRegister(PtrRC);
8379   unsigned BufReg = MI->getOperand(1).getReg();
8380
8381   if (Subtarget.isPPC64() && Subtarget.isSVR4ABI()) {
8382     setUsesTOCBasePtr(*MBB->getParent());
8383     MIB = BuildMI(*thisMBB, MI, DL, TII->get(PPC::STD))
8384             .addReg(PPC::X2)
8385             .addImm(TOCOffset)
8386             .addReg(BufReg);
8387     MIB.setMemRefs(MMOBegin, MMOEnd);
8388   }
8389
8390   // Naked functions never have a base pointer, and so we use r1. For all
8391   // other functions, this decision must be delayed until during PEI.
8392   unsigned BaseReg;
8393   if (MF->getFunction()->hasFnAttribute(Attribute::Naked))
8394     BaseReg = Subtarget.isPPC64() ? PPC::X1 : PPC::R1;
8395   else
8396     BaseReg = Subtarget.isPPC64() ? PPC::BP8 : PPC::BP;
8397
8398   MIB = BuildMI(*thisMBB, MI, DL,
8399                 TII->get(Subtarget.isPPC64() ? PPC::STD : PPC::STW))
8400             .addReg(BaseReg)
8401             .addImm(BPOffset)
8402             .addReg(BufReg);
8403   MIB.setMemRefs(MMOBegin, MMOEnd);
8404
8405   // Setup
8406   MIB = BuildMI(*thisMBB, MI, DL, TII->get(PPC::BCLalways)).addMBB(mainMBB);
8407   const PPCRegisterInfo *TRI = Subtarget.getRegisterInfo();
8408   MIB.addRegMask(TRI->getNoPreservedMask());
8409
8410   BuildMI(*thisMBB, MI, DL, TII->get(PPC::LI), restoreDstReg).addImm(1);
8411
8412   MIB = BuildMI(*thisMBB, MI, DL, TII->get(PPC::EH_SjLj_Setup))
8413           .addMBB(mainMBB);
8414   MIB = BuildMI(*thisMBB, MI, DL, TII->get(PPC::B)).addMBB(sinkMBB);
8415
8416   thisMBB->addSuccessor(mainMBB, BranchProbability::getZero());
8417   thisMBB->addSuccessor(sinkMBB, BranchProbability::getOne());
8418
8419   // mainMBB:
8420   //  mainDstReg = 0
8421   MIB =
8422       BuildMI(mainMBB, DL,
8423               TII->get(Subtarget.isPPC64() ? PPC::MFLR8 : PPC::MFLR), LabelReg);
8424
8425   // Store IP
8426   if (Subtarget.isPPC64()) {
8427     MIB = BuildMI(mainMBB, DL, TII->get(PPC::STD))
8428             .addReg(LabelReg)
8429             .addImm(LabelOffset)
8430             .addReg(BufReg);
8431   } else {
8432     MIB = BuildMI(mainMBB, DL, TII->get(PPC::STW))
8433             .addReg(LabelReg)
8434             .addImm(LabelOffset)
8435             .addReg(BufReg);
8436   }
8437
8438   MIB.setMemRefs(MMOBegin, MMOEnd);
8439
8440   BuildMI(mainMBB, DL, TII->get(PPC::LI), mainDstReg).addImm(0);
8441   mainMBB->addSuccessor(sinkMBB);
8442
8443   // sinkMBB:
8444   BuildMI(*sinkMBB, sinkMBB->begin(), DL,
8445           TII->get(PPC::PHI), DstReg)
8446     .addReg(mainDstReg).addMBB(mainMBB)
8447     .addReg(restoreDstReg).addMBB(thisMBB);
8448
8449   MI->eraseFromParent();
8450   return sinkMBB;
8451 }
8452
8453 MachineBasicBlock *
8454 PPCTargetLowering::emitEHSjLjLongJmp(MachineInstr *MI,
8455                                      MachineBasicBlock *MBB) const {
8456   DebugLoc DL = MI->getDebugLoc();
8457   const TargetInstrInfo *TII = Subtarget.getInstrInfo();
8458
8459   MachineFunction *MF = MBB->getParent();
8460   MachineRegisterInfo &MRI = MF->getRegInfo();
8461
8462   // Memory Reference
8463   MachineInstr::mmo_iterator MMOBegin = MI->memoperands_begin();
8464   MachineInstr::mmo_iterator MMOEnd = MI->memoperands_end();
8465
8466   MVT PVT = getPointerTy(MF->getDataLayout());
8467   assert((PVT == MVT::i64 || PVT == MVT::i32) &&
8468          "Invalid Pointer Size!");
8469
8470   const TargetRegisterClass *RC =
8471     (PVT == MVT::i64) ? &PPC::G8RCRegClass : &PPC::GPRCRegClass;
8472   unsigned Tmp = MRI.createVirtualRegister(RC);
8473   // Since FP is only updated here but NOT referenced, it's treated as GPR.
8474   unsigned FP  = (PVT == MVT::i64) ? PPC::X31 : PPC::R31;
8475   unsigned SP  = (PVT == MVT::i64) ? PPC::X1 : PPC::R1;
8476   unsigned BP =
8477       (PVT == MVT::i64)
8478           ? PPC::X30
8479           : (Subtarget.isSVR4ABI() &&
8480                      MF->getTarget().getRelocationModel() == Reloc::PIC_
8481                  ? PPC::R29
8482                  : PPC::R30);
8483
8484   MachineInstrBuilder MIB;
8485
8486   const int64_t LabelOffset = 1 * PVT.getStoreSize();
8487   const int64_t SPOffset    = 2 * PVT.getStoreSize();
8488   const int64_t TOCOffset   = 3 * PVT.getStoreSize();
8489   const int64_t BPOffset    = 4 * PVT.getStoreSize();
8490
8491   unsigned BufReg = MI->getOperand(0).getReg();
8492
8493   // Reload FP (the jumped-to function may not have had a
8494   // frame pointer, and if so, then its r31 will be restored
8495   // as necessary).
8496   if (PVT == MVT::i64) {
8497     MIB = BuildMI(*MBB, MI, DL, TII->get(PPC::LD), FP)
8498             .addImm(0)
8499             .addReg(BufReg);
8500   } else {
8501     MIB = BuildMI(*MBB, MI, DL, TII->get(PPC::LWZ), FP)
8502             .addImm(0)
8503             .addReg(BufReg);
8504   }
8505   MIB.setMemRefs(MMOBegin, MMOEnd);
8506
8507   // Reload IP
8508   if (PVT == MVT::i64) {
8509     MIB = BuildMI(*MBB, MI, DL, TII->get(PPC::LD), Tmp)
8510             .addImm(LabelOffset)
8511             .addReg(BufReg);
8512   } else {
8513     MIB = BuildMI(*MBB, MI, DL, TII->get(PPC::LWZ), Tmp)
8514             .addImm(LabelOffset)
8515             .addReg(BufReg);
8516   }
8517   MIB.setMemRefs(MMOBegin, MMOEnd);
8518
8519   // Reload SP
8520   if (PVT == MVT::i64) {
8521     MIB = BuildMI(*MBB, MI, DL, TII->get(PPC::LD), SP)
8522             .addImm(SPOffset)
8523             .addReg(BufReg);
8524   } else {
8525     MIB = BuildMI(*MBB, MI, DL, TII->get(PPC::LWZ), SP)
8526             .addImm(SPOffset)
8527             .addReg(BufReg);
8528   }
8529   MIB.setMemRefs(MMOBegin, MMOEnd);
8530
8531   // Reload BP
8532   if (PVT == MVT::i64) {
8533     MIB = BuildMI(*MBB, MI, DL, TII->get(PPC::LD), BP)
8534             .addImm(BPOffset)
8535             .addReg(BufReg);
8536   } else {
8537     MIB = BuildMI(*MBB, MI, DL, TII->get(PPC::LWZ), BP)
8538             .addImm(BPOffset)
8539             .addReg(BufReg);
8540   }
8541   MIB.setMemRefs(MMOBegin, MMOEnd);
8542
8543   // Reload TOC
8544   if (PVT == MVT::i64 && Subtarget.isSVR4ABI()) {
8545     setUsesTOCBasePtr(*MBB->getParent());
8546     MIB = BuildMI(*MBB, MI, DL, TII->get(PPC::LD), PPC::X2)
8547             .addImm(TOCOffset)
8548             .addReg(BufReg);
8549
8550     MIB.setMemRefs(MMOBegin, MMOEnd);
8551   }
8552
8553   // Jump
8554   BuildMI(*MBB, MI, DL,
8555           TII->get(PVT == MVT::i64 ? PPC::MTCTR8 : PPC::MTCTR)).addReg(Tmp);
8556   BuildMI(*MBB, MI, DL, TII->get(PVT == MVT::i64 ? PPC::BCTR8 : PPC::BCTR));
8557
8558   MI->eraseFromParent();
8559   return MBB;
8560 }
8561
8562 MachineBasicBlock *
8563 PPCTargetLowering::EmitInstrWithCustomInserter(MachineInstr *MI,
8564                                                MachineBasicBlock *BB) const {
8565   if (MI->getOpcode() == TargetOpcode::STACKMAP ||
8566       MI->getOpcode() == TargetOpcode::PATCHPOINT) {
8567     if (Subtarget.isPPC64() && Subtarget.isSVR4ABI() &&
8568         MI->getOpcode() == TargetOpcode::PATCHPOINT) {
8569       // Call lowering should have added an r2 operand to indicate a dependence
8570       // on the TOC base pointer value. It can't however, because there is no
8571       // way to mark the dependence as implicit there, and so the stackmap code
8572       // will confuse it with a regular operand. Instead, add the dependence
8573       // here.
8574       setUsesTOCBasePtr(*BB->getParent());
8575       MI->addOperand(MachineOperand::CreateReg(PPC::X2, false, true));
8576     }
8577
8578     return emitPatchPoint(MI, BB);
8579   }
8580
8581   if (MI->getOpcode() == PPC::EH_SjLj_SetJmp32 ||
8582       MI->getOpcode() == PPC::EH_SjLj_SetJmp64) {
8583     return emitEHSjLjSetJmp(MI, BB);
8584   } else if (MI->getOpcode() == PPC::EH_SjLj_LongJmp32 ||
8585              MI->getOpcode() == PPC::EH_SjLj_LongJmp64) {
8586     return emitEHSjLjLongJmp(MI, BB);
8587   }
8588
8589   const TargetInstrInfo *TII = Subtarget.getInstrInfo();
8590
8591   // To "insert" these instructions we actually have to insert their
8592   // control-flow patterns.
8593   const BasicBlock *LLVM_BB = BB->getBasicBlock();
8594   MachineFunction::iterator It = ++BB->getIterator();
8595
8596   MachineFunction *F = BB->getParent();
8597
8598   if (Subtarget.hasISEL() && (MI->getOpcode() == PPC::SELECT_CC_I4 ||
8599                               MI->getOpcode() == PPC::SELECT_CC_I8 ||
8600                               MI->getOpcode() == PPC::SELECT_I4 ||
8601                               MI->getOpcode() == PPC::SELECT_I8)) {
8602     SmallVector<MachineOperand, 2> Cond;
8603     if (MI->getOpcode() == PPC::SELECT_CC_I4 ||
8604         MI->getOpcode() == PPC::SELECT_CC_I8)
8605       Cond.push_back(MI->getOperand(4));
8606     else
8607       Cond.push_back(MachineOperand::CreateImm(PPC::PRED_BIT_SET));
8608     Cond.push_back(MI->getOperand(1));
8609
8610     DebugLoc dl = MI->getDebugLoc();
8611     TII->insertSelect(*BB, MI, dl, MI->getOperand(0).getReg(),
8612                       Cond, MI->getOperand(2).getReg(),
8613                       MI->getOperand(3).getReg());
8614   } else if (MI->getOpcode() == PPC::SELECT_CC_I4 ||
8615              MI->getOpcode() == PPC::SELECT_CC_I8 ||
8616              MI->getOpcode() == PPC::SELECT_CC_F4 ||
8617              MI->getOpcode() == PPC::SELECT_CC_F8 ||
8618              MI->getOpcode() == PPC::SELECT_CC_QFRC ||
8619              MI->getOpcode() == PPC::SELECT_CC_QSRC ||
8620              MI->getOpcode() == PPC::SELECT_CC_QBRC ||
8621              MI->getOpcode() == PPC::SELECT_CC_VRRC ||
8622              MI->getOpcode() == PPC::SELECT_CC_VSFRC ||
8623              MI->getOpcode() == PPC::SELECT_CC_VSSRC ||
8624              MI->getOpcode() == PPC::SELECT_CC_VSRC ||
8625              MI->getOpcode() == PPC::SELECT_I4 ||
8626              MI->getOpcode() == PPC::SELECT_I8 ||
8627              MI->getOpcode() == PPC::SELECT_F4 ||
8628              MI->getOpcode() == PPC::SELECT_F8 ||
8629              MI->getOpcode() == PPC::SELECT_QFRC ||
8630              MI->getOpcode() == PPC::SELECT_QSRC ||
8631              MI->getOpcode() == PPC::SELECT_QBRC ||
8632              MI->getOpcode() == PPC::SELECT_VRRC ||
8633              MI->getOpcode() == PPC::SELECT_VSFRC ||
8634              MI->getOpcode() == PPC::SELECT_VSSRC ||
8635              MI->getOpcode() == PPC::SELECT_VSRC) {
8636     // The incoming instruction knows the destination vreg to set, the
8637     // condition code register to branch on, the true/false values to
8638     // select between, and a branch opcode to use.
8639
8640     //  thisMBB:
8641     //  ...
8642     //   TrueVal = ...
8643     //   cmpTY ccX, r1, r2
8644     //   bCC copy1MBB
8645     //   fallthrough --> copy0MBB
8646     MachineBasicBlock *thisMBB = BB;
8647     MachineBasicBlock *copy0MBB = F->CreateMachineBasicBlock(LLVM_BB);
8648     MachineBasicBlock *sinkMBB = F->CreateMachineBasicBlock(LLVM_BB);
8649     DebugLoc dl = MI->getDebugLoc();
8650     F->insert(It, copy0MBB);
8651     F->insert(It, sinkMBB);
8652
8653     // Transfer the remainder of BB and its successor edges to sinkMBB.
8654     sinkMBB->splice(sinkMBB->begin(), BB,
8655                     std::next(MachineBasicBlock::iterator(MI)), BB->end());
8656     sinkMBB->transferSuccessorsAndUpdatePHIs(BB);
8657
8658     // Next, add the true and fallthrough blocks as its successors.
8659     BB->addSuccessor(copy0MBB);
8660     BB->addSuccessor(sinkMBB);
8661
8662     if (MI->getOpcode() == PPC::SELECT_I4 ||
8663         MI->getOpcode() == PPC::SELECT_I8 ||
8664         MI->getOpcode() == PPC::SELECT_F4 ||
8665         MI->getOpcode() == PPC::SELECT_F8 ||
8666         MI->getOpcode() == PPC::SELECT_QFRC ||
8667         MI->getOpcode() == PPC::SELECT_QSRC ||
8668         MI->getOpcode() == PPC::SELECT_QBRC ||
8669         MI->getOpcode() == PPC::SELECT_VRRC ||
8670         MI->getOpcode() == PPC::SELECT_VSFRC ||
8671         MI->getOpcode() == PPC::SELECT_VSSRC ||
8672         MI->getOpcode() == PPC::SELECT_VSRC) {
8673       BuildMI(BB, dl, TII->get(PPC::BC))
8674         .addReg(MI->getOperand(1).getReg()).addMBB(sinkMBB);
8675     } else {
8676       unsigned SelectPred = MI->getOperand(4).getImm();
8677       BuildMI(BB, dl, TII->get(PPC::BCC))
8678         .addImm(SelectPred).addReg(MI->getOperand(1).getReg()).addMBB(sinkMBB);
8679     }
8680
8681     //  copy0MBB:
8682     //   %FalseValue = ...
8683     //   # fallthrough to sinkMBB
8684     BB = copy0MBB;
8685
8686     // Update machine-CFG edges
8687     BB->addSuccessor(sinkMBB);
8688
8689     //  sinkMBB:
8690     //   %Result = phi [ %FalseValue, copy0MBB ], [ %TrueValue, thisMBB ]
8691     //  ...
8692     BB = sinkMBB;
8693     BuildMI(*BB, BB->begin(), dl,
8694             TII->get(PPC::PHI), MI->getOperand(0).getReg())
8695       .addReg(MI->getOperand(3).getReg()).addMBB(copy0MBB)
8696       .addReg(MI->getOperand(2).getReg()).addMBB(thisMBB);
8697   } else if (MI->getOpcode() == PPC::ReadTB) {
8698     // To read the 64-bit time-base register on a 32-bit target, we read the
8699     // two halves. Should the counter have wrapped while it was being read, we
8700     // need to try again.
8701     // ...
8702     // readLoop:
8703     // mfspr Rx,TBU # load from TBU
8704     // mfspr Ry,TB  # load from TB
8705     // mfspr Rz,TBU # load from TBU
8706     // cmpw crX,Rx,Rz # check if 'old'='new'
8707     // bne readLoop   # branch if they're not equal
8708     // ...
8709
8710     MachineBasicBlock *readMBB = F->CreateMachineBasicBlock(LLVM_BB);
8711     MachineBasicBlock *sinkMBB = F->CreateMachineBasicBlock(LLVM_BB);
8712     DebugLoc dl = MI->getDebugLoc();
8713     F->insert(It, readMBB);
8714     F->insert(It, sinkMBB);
8715
8716     // Transfer the remainder of BB and its successor edges to sinkMBB.
8717     sinkMBB->splice(sinkMBB->begin(), BB,
8718                     std::next(MachineBasicBlock::iterator(MI)), BB->end());
8719     sinkMBB->transferSuccessorsAndUpdatePHIs(BB);
8720
8721     BB->addSuccessor(readMBB);
8722     BB = readMBB;
8723
8724     MachineRegisterInfo &RegInfo = F->getRegInfo();
8725     unsigned ReadAgainReg = RegInfo.createVirtualRegister(&PPC::GPRCRegClass);
8726     unsigned LoReg = MI->getOperand(0).getReg();
8727     unsigned HiReg = MI->getOperand(1).getReg();
8728
8729     BuildMI(BB, dl, TII->get(PPC::MFSPR), HiReg).addImm(269);
8730     BuildMI(BB, dl, TII->get(PPC::MFSPR), LoReg).addImm(268);
8731     BuildMI(BB, dl, TII->get(PPC::MFSPR), ReadAgainReg).addImm(269);
8732
8733     unsigned CmpReg = RegInfo.createVirtualRegister(&PPC::CRRCRegClass);
8734
8735     BuildMI(BB, dl, TII->get(PPC::CMPW), CmpReg)
8736       .addReg(HiReg).addReg(ReadAgainReg);
8737     BuildMI(BB, dl, TII->get(PPC::BCC))
8738       .addImm(PPC::PRED_NE).addReg(CmpReg).addMBB(readMBB);
8739
8740     BB->addSuccessor(readMBB);
8741     BB->addSuccessor(sinkMBB);
8742   }
8743   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_ADD_I8)
8744     BB = EmitPartwordAtomicBinary(MI, BB, true, PPC::ADD4);
8745   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_ADD_I16)
8746     BB = EmitPartwordAtomicBinary(MI, BB, false, PPC::ADD4);
8747   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_ADD_I32)
8748     BB = EmitAtomicBinary(MI, BB, 4, PPC::ADD4);
8749   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_ADD_I64)
8750     BB = EmitAtomicBinary(MI, BB, 8, PPC::ADD8);
8751
8752   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_AND_I8)
8753     BB = EmitPartwordAtomicBinary(MI, BB, true, PPC::AND);
8754   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_AND_I16)
8755     BB = EmitPartwordAtomicBinary(MI, BB, false, PPC::AND);
8756   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_AND_I32)
8757     BB = EmitAtomicBinary(MI, BB, 4, PPC::AND);
8758   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_AND_I64)
8759     BB = EmitAtomicBinary(MI, BB, 8, PPC::AND8);
8760
8761   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_OR_I8)
8762     BB = EmitPartwordAtomicBinary(MI, BB, true, PPC::OR);
8763   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_OR_I16)
8764     BB = EmitPartwordAtomicBinary(MI, BB, false, PPC::OR);
8765   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_OR_I32)
8766     BB = EmitAtomicBinary(MI, BB, 4, PPC::OR);
8767   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_OR_I64)
8768     BB = EmitAtomicBinary(MI, BB, 8, PPC::OR8);
8769
8770   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_XOR_I8)
8771     BB = EmitPartwordAtomicBinary(MI, BB, true, PPC::XOR);
8772   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_XOR_I16)
8773     BB = EmitPartwordAtomicBinary(MI, BB, false, PPC::XOR);
8774   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_XOR_I32)
8775     BB = EmitAtomicBinary(MI, BB, 4, PPC::XOR);
8776   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_XOR_I64)
8777     BB = EmitAtomicBinary(MI, BB, 8, PPC::XOR8);
8778
8779   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_NAND_I8)
8780     BB = EmitPartwordAtomicBinary(MI, BB, true, PPC::NAND);
8781   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_NAND_I16)
8782     BB = EmitPartwordAtomicBinary(MI, BB, false, PPC::NAND);
8783   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_NAND_I32)
8784     BB = EmitAtomicBinary(MI, BB, 4, PPC::NAND);
8785   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_NAND_I64)
8786     BB = EmitAtomicBinary(MI, BB, 8, PPC::NAND8);
8787
8788   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_SUB_I8)
8789     BB = EmitPartwordAtomicBinary(MI, BB, true, PPC::SUBF);
8790   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_SUB_I16)
8791     BB = EmitPartwordAtomicBinary(MI, BB, false, PPC::SUBF);
8792   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_SUB_I32)
8793     BB = EmitAtomicBinary(MI, BB, 4, PPC::SUBF);
8794   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_SUB_I64)
8795     BB = EmitAtomicBinary(MI, BB, 8, PPC::SUBF8);
8796
8797   else if (MI->getOpcode() == PPC::ATOMIC_SWAP_I8)
8798     BB = EmitPartwordAtomicBinary(MI, BB, true, 0);
8799   else if (MI->getOpcode() == PPC::ATOMIC_SWAP_I16)
8800     BB = EmitPartwordAtomicBinary(MI, BB, false, 0);
8801   else if (MI->getOpcode() == PPC::ATOMIC_SWAP_I32)
8802     BB = EmitAtomicBinary(MI, BB, 4, 0);
8803   else if (MI->getOpcode() == PPC::ATOMIC_SWAP_I64)
8804     BB = EmitAtomicBinary(MI, BB, 8, 0);
8805
8806   else if (MI->getOpcode() == PPC::ATOMIC_CMP_SWAP_I32 ||
8807            MI->getOpcode() == PPC::ATOMIC_CMP_SWAP_I64 ||
8808            (Subtarget.hasPartwordAtomics() &&
8809             MI->getOpcode() == PPC::ATOMIC_CMP_SWAP_I8) ||
8810            (Subtarget.hasPartwordAtomics() &&
8811             MI->getOpcode() == PPC::ATOMIC_CMP_SWAP_I16)) {
8812     bool is64bit = MI->getOpcode() == PPC::ATOMIC_CMP_SWAP_I64;
8813
8814     auto LoadMnemonic = PPC::LDARX;
8815     auto StoreMnemonic = PPC::STDCX;
8816     switch(MI->getOpcode()) {
8817     default:
8818       llvm_unreachable("Compare and swap of unknown size");
8819     case PPC::ATOMIC_CMP_SWAP_I8:
8820       LoadMnemonic = PPC::LBARX;
8821       StoreMnemonic = PPC::STBCX;
8822       assert(Subtarget.hasPartwordAtomics() && "No support partword atomics.");
8823       break;
8824     case PPC::ATOMIC_CMP_SWAP_I16:
8825       LoadMnemonic = PPC::LHARX;
8826       StoreMnemonic = PPC::STHCX;
8827       assert(Subtarget.hasPartwordAtomics() && "No support partword atomics.");
8828       break;
8829     case PPC::ATOMIC_CMP_SWAP_I32:
8830       LoadMnemonic = PPC::LWARX;
8831       StoreMnemonic = PPC::STWCX;
8832       break;
8833     case PPC::ATOMIC_CMP_SWAP_I64:
8834       LoadMnemonic = PPC::LDARX;
8835       StoreMnemonic = PPC::STDCX;
8836       break;
8837     }
8838     unsigned dest   = MI->getOperand(0).getReg();
8839     unsigned ptrA   = MI->getOperand(1).getReg();
8840     unsigned ptrB   = MI->getOperand(2).getReg();
8841     unsigned oldval = MI->getOperand(3).getReg();
8842     unsigned newval = MI->getOperand(4).getReg();
8843     DebugLoc dl     = MI->getDebugLoc();
8844
8845     MachineBasicBlock *loop1MBB = F->CreateMachineBasicBlock(LLVM_BB);
8846     MachineBasicBlock *loop2MBB = F->CreateMachineBasicBlock(LLVM_BB);
8847     MachineBasicBlock *midMBB = F->CreateMachineBasicBlock(LLVM_BB);
8848     MachineBasicBlock *exitMBB = F->CreateMachineBasicBlock(LLVM_BB);
8849     F->insert(It, loop1MBB);
8850     F->insert(It, loop2MBB);
8851     F->insert(It, midMBB);
8852     F->insert(It, exitMBB);
8853     exitMBB->splice(exitMBB->begin(), BB,
8854                     std::next(MachineBasicBlock::iterator(MI)), BB->end());
8855     exitMBB->transferSuccessorsAndUpdatePHIs(BB);
8856
8857     //  thisMBB:
8858     //   ...
8859     //   fallthrough --> loopMBB
8860     BB->addSuccessor(loop1MBB);
8861
8862     // loop1MBB:
8863     //   l[bhwd]arx dest, ptr
8864     //   cmp[wd] dest, oldval
8865     //   bne- midMBB
8866     // loop2MBB:
8867     //   st[bhwd]cx. newval, ptr
8868     //   bne- loopMBB
8869     //   b exitBB
8870     // midMBB:
8871     //   st[bhwd]cx. dest, ptr
8872     // exitBB:
8873     BB = loop1MBB;
8874     BuildMI(BB, dl, TII->get(LoadMnemonic), dest)
8875       .addReg(ptrA).addReg(ptrB);
8876     BuildMI(BB, dl, TII->get(is64bit ? PPC::CMPD : PPC::CMPW), PPC::CR0)
8877       .addReg(oldval).addReg(dest);
8878     BuildMI(BB, dl, TII->get(PPC::BCC))
8879       .addImm(PPC::PRED_NE).addReg(PPC::CR0).addMBB(midMBB);
8880     BB->addSuccessor(loop2MBB);
8881     BB->addSuccessor(midMBB);
8882
8883     BB = loop2MBB;
8884     BuildMI(BB, dl, TII->get(StoreMnemonic))
8885       .addReg(newval).addReg(ptrA).addReg(ptrB);
8886     BuildMI(BB, dl, TII->get(PPC::BCC))
8887       .addImm(PPC::PRED_NE).addReg(PPC::CR0).addMBB(loop1MBB);
8888     BuildMI(BB, dl, TII->get(PPC::B)).addMBB(exitMBB);
8889     BB->addSuccessor(loop1MBB);
8890     BB->addSuccessor(exitMBB);
8891
8892     BB = midMBB;
8893     BuildMI(BB, dl, TII->get(StoreMnemonic))
8894       .addReg(dest).addReg(ptrA).addReg(ptrB);
8895     BB->addSuccessor(exitMBB);
8896
8897     //  exitMBB:
8898     //   ...
8899     BB = exitMBB;
8900   } else if (MI->getOpcode() == PPC::ATOMIC_CMP_SWAP_I8 ||
8901              MI->getOpcode() == PPC::ATOMIC_CMP_SWAP_I16) {
8902     // We must use 64-bit registers for addresses when targeting 64-bit,
8903     // since we're actually doing arithmetic on them.  Other registers
8904     // can be 32-bit.
8905     bool is64bit = Subtarget.isPPC64();
8906     bool is8bit = MI->getOpcode() == PPC::ATOMIC_CMP_SWAP_I8;
8907
8908     unsigned dest   = MI->getOperand(0).getReg();
8909     unsigned ptrA   = MI->getOperand(1).getReg();
8910     unsigned ptrB   = MI->getOperand(2).getReg();
8911     unsigned oldval = MI->getOperand(3).getReg();
8912     unsigned newval = MI->getOperand(4).getReg();
8913     DebugLoc dl     = MI->getDebugLoc();
8914
8915     MachineBasicBlock *loop1MBB = F->CreateMachineBasicBlock(LLVM_BB);
8916     MachineBasicBlock *loop2MBB = F->CreateMachineBasicBlock(LLVM_BB);
8917     MachineBasicBlock *midMBB = F->CreateMachineBasicBlock(LLVM_BB);
8918     MachineBasicBlock *exitMBB = F->CreateMachineBasicBlock(LLVM_BB);
8919     F->insert(It, loop1MBB);
8920     F->insert(It, loop2MBB);
8921     F->insert(It, midMBB);
8922     F->insert(It, exitMBB);
8923     exitMBB->splice(exitMBB->begin(), BB,
8924                     std::next(MachineBasicBlock::iterator(MI)), BB->end());
8925     exitMBB->transferSuccessorsAndUpdatePHIs(BB);
8926
8927     MachineRegisterInfo &RegInfo = F->getRegInfo();
8928     const TargetRegisterClass *RC = is64bit ? &PPC::G8RCRegClass
8929                                             : &PPC::GPRCRegClass;
8930     unsigned PtrReg = RegInfo.createVirtualRegister(RC);
8931     unsigned Shift1Reg = RegInfo.createVirtualRegister(RC);
8932     unsigned ShiftReg = RegInfo.createVirtualRegister(RC);
8933     unsigned NewVal2Reg = RegInfo.createVirtualRegister(RC);
8934     unsigned NewVal3Reg = RegInfo.createVirtualRegister(RC);
8935     unsigned OldVal2Reg = RegInfo.createVirtualRegister(RC);
8936     unsigned OldVal3Reg = RegInfo.createVirtualRegister(RC);
8937     unsigned MaskReg = RegInfo.createVirtualRegister(RC);
8938     unsigned Mask2Reg = RegInfo.createVirtualRegister(RC);
8939     unsigned Mask3Reg = RegInfo.createVirtualRegister(RC);
8940     unsigned Tmp2Reg = RegInfo.createVirtualRegister(RC);
8941     unsigned Tmp4Reg = RegInfo.createVirtualRegister(RC);
8942     unsigned TmpDestReg = RegInfo.createVirtualRegister(RC);
8943     unsigned Ptr1Reg;
8944     unsigned TmpReg = RegInfo.createVirtualRegister(RC);
8945     unsigned ZeroReg = is64bit ? PPC::ZERO8 : PPC::ZERO;
8946     //  thisMBB:
8947     //   ...
8948     //   fallthrough --> loopMBB
8949     BB->addSuccessor(loop1MBB);
8950
8951     // The 4-byte load must be aligned, while a char or short may be
8952     // anywhere in the word.  Hence all this nasty bookkeeping code.
8953     //   add ptr1, ptrA, ptrB [copy if ptrA==0]
8954     //   rlwinm shift1, ptr1, 3, 27, 28 [3, 27, 27]
8955     //   xori shift, shift1, 24 [16]
8956     //   rlwinm ptr, ptr1, 0, 0, 29
8957     //   slw newval2, newval, shift
8958     //   slw oldval2, oldval,shift
8959     //   li mask2, 255 [li mask3, 0; ori mask2, mask3, 65535]
8960     //   slw mask, mask2, shift
8961     //   and newval3, newval2, mask
8962     //   and oldval3, oldval2, mask
8963     // loop1MBB:
8964     //   lwarx tmpDest, ptr
8965     //   and tmp, tmpDest, mask
8966     //   cmpw tmp, oldval3
8967     //   bne- midMBB
8968     // loop2MBB:
8969     //   andc tmp2, tmpDest, mask
8970     //   or tmp4, tmp2, newval3
8971     //   stwcx. tmp4, ptr
8972     //   bne- loop1MBB
8973     //   b exitBB
8974     // midMBB:
8975     //   stwcx. tmpDest, ptr
8976     // exitBB:
8977     //   srw dest, tmpDest, shift
8978     if (ptrA != ZeroReg) {
8979       Ptr1Reg = RegInfo.createVirtualRegister(RC);
8980       BuildMI(BB, dl, TII->get(is64bit ? PPC::ADD8 : PPC::ADD4), Ptr1Reg)
8981         .addReg(ptrA).addReg(ptrB);
8982     } else {
8983       Ptr1Reg = ptrB;
8984     }
8985     BuildMI(BB, dl, TII->get(PPC::RLWINM), Shift1Reg).addReg(Ptr1Reg)
8986         .addImm(3).addImm(27).addImm(is8bit ? 28 : 27);
8987     BuildMI(BB, dl, TII->get(is64bit ? PPC::XORI8 : PPC::XORI), ShiftReg)
8988         .addReg(Shift1Reg).addImm(is8bit ? 24 : 16);
8989     if (is64bit)
8990       BuildMI(BB, dl, TII->get(PPC::RLDICR), PtrReg)
8991         .addReg(Ptr1Reg).addImm(0).addImm(61);
8992     else
8993       BuildMI(BB, dl, TII->get(PPC::RLWINM), PtrReg)
8994         .addReg(Ptr1Reg).addImm(0).addImm(0).addImm(29);
8995     BuildMI(BB, dl, TII->get(PPC::SLW), NewVal2Reg)
8996         .addReg(newval).addReg(ShiftReg);
8997     BuildMI(BB, dl, TII->get(PPC::SLW), OldVal2Reg)
8998         .addReg(oldval).addReg(ShiftReg);
8999     if (is8bit)
9000       BuildMI(BB, dl, TII->get(PPC::LI), Mask2Reg).addImm(255);
9001     else {
9002       BuildMI(BB, dl, TII->get(PPC::LI), Mask3Reg).addImm(0);
9003       BuildMI(BB, dl, TII->get(PPC::ORI), Mask2Reg)
9004         .addReg(Mask3Reg).addImm(65535);
9005     }
9006     BuildMI(BB, dl, TII->get(PPC::SLW), MaskReg)
9007         .addReg(Mask2Reg).addReg(ShiftReg);
9008     BuildMI(BB, dl, TII->get(PPC::AND), NewVal3Reg)
9009         .addReg(NewVal2Reg).addReg(MaskReg);
9010     BuildMI(BB, dl, TII->get(PPC::AND), OldVal3Reg)
9011         .addReg(OldVal2Reg).addReg(MaskReg);
9012
9013     BB = loop1MBB;
9014     BuildMI(BB, dl, TII->get(PPC::LWARX), TmpDestReg)
9015         .addReg(ZeroReg).addReg(PtrReg);
9016     BuildMI(BB, dl, TII->get(PPC::AND),TmpReg)
9017         .addReg(TmpDestReg).addReg(MaskReg);
9018     BuildMI(BB, dl, TII->get(PPC::CMPW), PPC::CR0)
9019         .addReg(TmpReg).addReg(OldVal3Reg);
9020     BuildMI(BB, dl, TII->get(PPC::BCC))
9021         .addImm(PPC::PRED_NE).addReg(PPC::CR0).addMBB(midMBB);
9022     BB->addSuccessor(loop2MBB);
9023     BB->addSuccessor(midMBB);
9024
9025     BB = loop2MBB;
9026     BuildMI(BB, dl, TII->get(PPC::ANDC),Tmp2Reg)
9027         .addReg(TmpDestReg).addReg(MaskReg);
9028     BuildMI(BB, dl, TII->get(PPC::OR),Tmp4Reg)
9029         .addReg(Tmp2Reg).addReg(NewVal3Reg);
9030     BuildMI(BB, dl, TII->get(PPC::STWCX)).addReg(Tmp4Reg)
9031         .addReg(ZeroReg).addReg(PtrReg);
9032     BuildMI(BB, dl, TII->get(PPC::BCC))
9033       .addImm(PPC::PRED_NE).addReg(PPC::CR0).addMBB(loop1MBB);
9034     BuildMI(BB, dl, TII->get(PPC::B)).addMBB(exitMBB);
9035     BB->addSuccessor(loop1MBB);
9036     BB->addSuccessor(exitMBB);
9037
9038     BB = midMBB;
9039     BuildMI(BB, dl, TII->get(PPC::STWCX)).addReg(TmpDestReg)
9040       .addReg(ZeroReg).addReg(PtrReg);
9041     BB->addSuccessor(exitMBB);
9042
9043     //  exitMBB:
9044     //   ...
9045     BB = exitMBB;
9046     BuildMI(*BB, BB->begin(), dl, TII->get(PPC::SRW),dest).addReg(TmpReg)
9047       .addReg(ShiftReg);
9048   } else if (MI->getOpcode() == PPC::FADDrtz) {
9049     // This pseudo performs an FADD with rounding mode temporarily forced
9050     // to round-to-zero.  We emit this via custom inserter since the FPSCR
9051     // is not modeled at the SelectionDAG level.
9052     unsigned Dest = MI->getOperand(0).getReg();
9053     unsigned Src1 = MI->getOperand(1).getReg();
9054     unsigned Src2 = MI->getOperand(2).getReg();
9055     DebugLoc dl   = MI->getDebugLoc();
9056
9057     MachineRegisterInfo &RegInfo = F->getRegInfo();
9058     unsigned MFFSReg = RegInfo.createVirtualRegister(&PPC::F8RCRegClass);
9059
9060     // Save FPSCR value.
9061     BuildMI(*BB, MI, dl, TII->get(PPC::MFFS), MFFSReg);
9062
9063     // Set rounding mode to round-to-zero.
9064     BuildMI(*BB, MI, dl, TII->get(PPC::MTFSB1)).addImm(31);
9065     BuildMI(*BB, MI, dl, TII->get(PPC::MTFSB0)).addImm(30);
9066
9067     // Perform addition.
9068     BuildMI(*BB, MI, dl, TII->get(PPC::FADD), Dest).addReg(Src1).addReg(Src2);
9069
9070     // Restore FPSCR value.
9071     BuildMI(*BB, MI, dl, TII->get(PPC::MTFSFb)).addImm(1).addReg(MFFSReg);
9072   } else if (MI->getOpcode() == PPC::ANDIo_1_EQ_BIT ||
9073              MI->getOpcode() == PPC::ANDIo_1_GT_BIT ||
9074              MI->getOpcode() == PPC::ANDIo_1_EQ_BIT8 ||
9075              MI->getOpcode() == PPC::ANDIo_1_GT_BIT8) {
9076     unsigned Opcode = (MI->getOpcode() == PPC::ANDIo_1_EQ_BIT8 ||
9077                        MI->getOpcode() == PPC::ANDIo_1_GT_BIT8) ?
9078                       PPC::ANDIo8 : PPC::ANDIo;
9079     bool isEQ = (MI->getOpcode() == PPC::ANDIo_1_EQ_BIT ||
9080                  MI->getOpcode() == PPC::ANDIo_1_EQ_BIT8);
9081
9082     MachineRegisterInfo &RegInfo = F->getRegInfo();
9083     unsigned Dest = RegInfo.createVirtualRegister(Opcode == PPC::ANDIo ?
9084                                                   &PPC::GPRCRegClass :
9085                                                   &PPC::G8RCRegClass);
9086
9087     DebugLoc dl   = MI->getDebugLoc();
9088     BuildMI(*BB, MI, dl, TII->get(Opcode), Dest)
9089       .addReg(MI->getOperand(1).getReg()).addImm(1);
9090     BuildMI(*BB, MI, dl, TII->get(TargetOpcode::COPY),
9091             MI->getOperand(0).getReg())
9092       .addReg(isEQ ? PPC::CR0EQ : PPC::CR0GT);
9093   } else if (MI->getOpcode() == PPC::TCHECK_RET) {
9094     DebugLoc Dl = MI->getDebugLoc();
9095     MachineRegisterInfo &RegInfo = F->getRegInfo();
9096     unsigned CRReg = RegInfo.createVirtualRegister(&PPC::CRRCRegClass);
9097     BuildMI(*BB, MI, Dl, TII->get(PPC::TCHECK), CRReg);
9098     return BB;
9099   } else {
9100     llvm_unreachable("Unexpected instr type to insert");
9101   }
9102
9103   MI->eraseFromParent();   // The pseudo instruction is gone now.
9104   return BB;
9105 }
9106
9107 //===----------------------------------------------------------------------===//
9108 // Target Optimization Hooks
9109 //===----------------------------------------------------------------------===//
9110
9111 static std::string getRecipOp(const char *Base, EVT VT) {
9112   std::string RecipOp(Base);
9113   if (VT.getScalarType() == MVT::f64)
9114     RecipOp += "d";
9115   else
9116     RecipOp += "f";
9117
9118   if (VT.isVector())
9119     RecipOp = "vec-" + RecipOp;
9120
9121   return RecipOp;
9122 }
9123
9124 SDValue PPCTargetLowering::getRsqrtEstimate(SDValue Operand,
9125                                             DAGCombinerInfo &DCI,
9126                                             unsigned &RefinementSteps,
9127                                             bool &UseOneConstNR) const {
9128   EVT VT = Operand.getValueType();
9129   if ((VT == MVT::f32 && Subtarget.hasFRSQRTES()) ||
9130       (VT == MVT::f64 && Subtarget.hasFRSQRTE()) ||
9131       (VT == MVT::v4f32 && Subtarget.hasAltivec()) ||
9132       (VT == MVT::v2f64 && Subtarget.hasVSX()) ||
9133       (VT == MVT::v4f32 && Subtarget.hasQPX()) ||
9134       (VT == MVT::v4f64 && Subtarget.hasQPX())) {
9135     TargetRecip Recips = DCI.DAG.getTarget().Options.Reciprocals;
9136     std::string RecipOp = getRecipOp("sqrt", VT);
9137     if (!Recips.isEnabled(RecipOp))
9138       return SDValue();
9139
9140     RefinementSteps = Recips.getRefinementSteps(RecipOp);
9141     UseOneConstNR = true;
9142     return DCI.DAG.getNode(PPCISD::FRSQRTE, SDLoc(Operand), VT, Operand);
9143   }
9144   return SDValue();
9145 }
9146
9147 SDValue PPCTargetLowering::getRecipEstimate(SDValue Operand,
9148                                             DAGCombinerInfo &DCI,
9149                                             unsigned &RefinementSteps) const {
9150   EVT VT = Operand.getValueType();
9151   if ((VT == MVT::f32 && Subtarget.hasFRES()) ||
9152       (VT == MVT::f64 && Subtarget.hasFRE()) ||
9153       (VT == MVT::v4f32 && Subtarget.hasAltivec()) ||
9154       (VT == MVT::v2f64 && Subtarget.hasVSX()) ||
9155       (VT == MVT::v4f32 && Subtarget.hasQPX()) ||
9156       (VT == MVT::v4f64 && Subtarget.hasQPX())) {
9157     TargetRecip Recips = DCI.DAG.getTarget().Options.Reciprocals;
9158     std::string RecipOp = getRecipOp("div", VT);
9159     if (!Recips.isEnabled(RecipOp))
9160       return SDValue();
9161
9162     RefinementSteps = Recips.getRefinementSteps(RecipOp);
9163     return DCI.DAG.getNode(PPCISD::FRE, SDLoc(Operand), VT, Operand);
9164   }
9165   return SDValue();
9166 }
9167
9168 unsigned PPCTargetLowering::combineRepeatedFPDivisors() const {
9169   // Note: This functionality is used only when unsafe-fp-math is enabled, and
9170   // on cores with reciprocal estimates (which are used when unsafe-fp-math is
9171   // enabled for division), this functionality is redundant with the default
9172   // combiner logic (once the division -> reciprocal/multiply transformation
9173   // has taken place). As a result, this matters more for older cores than for
9174   // newer ones.
9175
9176   // Combine multiple FDIVs with the same divisor into multiple FMULs by the
9177   // reciprocal if there are two or more FDIVs (for embedded cores with only
9178   // one FP pipeline) for three or more FDIVs (for generic OOO cores).
9179   switch (Subtarget.getDarwinDirective()) {
9180   default:
9181     return 3;
9182   case PPC::DIR_440:
9183   case PPC::DIR_A2:
9184   case PPC::DIR_E500mc:
9185   case PPC::DIR_E5500:
9186     return 2;
9187   }
9188 }
9189
9190 // isConsecutiveLSLoc needs to work even if all adds have not yet been
9191 // collapsed, and so we need to look through chains of them.
9192 static void getBaseWithConstantOffset(SDValue Loc, SDValue &Base,
9193                                      int64_t& Offset, SelectionDAG &DAG) {
9194   if (DAG.isBaseWithConstantOffset(Loc)) {
9195     Base = Loc.getOperand(0);
9196     Offset += cast<ConstantSDNode>(Loc.getOperand(1))->getSExtValue();
9197
9198     // The base might itself be a base plus an offset, and if so, accumulate
9199     // that as well.
9200     getBaseWithConstantOffset(Loc.getOperand(0), Base, Offset, DAG);
9201   }
9202 }
9203
9204 static bool isConsecutiveLSLoc(SDValue Loc, EVT VT, LSBaseSDNode *Base,
9205                             unsigned Bytes, int Dist,
9206                             SelectionDAG &DAG) {
9207   if (VT.getSizeInBits() / 8 != Bytes)
9208     return false;
9209
9210   SDValue BaseLoc = Base->getBasePtr();
9211   if (Loc.getOpcode() == ISD::FrameIndex) {
9212     if (BaseLoc.getOpcode() != ISD::FrameIndex)
9213       return false;
9214     const MachineFrameInfo *MFI = DAG.getMachineFunction().getFrameInfo();
9215     int FI  = cast<FrameIndexSDNode>(Loc)->getIndex();
9216     int BFI = cast<FrameIndexSDNode>(BaseLoc)->getIndex();
9217     int FS  = MFI->getObjectSize(FI);
9218     int BFS = MFI->getObjectSize(BFI);
9219     if (FS != BFS || FS != (int)Bytes) return false;
9220     return MFI->getObjectOffset(FI) == (MFI->getObjectOffset(BFI) + Dist*Bytes);
9221   }
9222
9223   SDValue Base1 = Loc, Base2 = BaseLoc;
9224   int64_t Offset1 = 0, Offset2 = 0;
9225   getBaseWithConstantOffset(Loc, Base1, Offset1, DAG);
9226   getBaseWithConstantOffset(BaseLoc, Base2, Offset2, DAG);
9227   if (Base1 == Base2 && Offset1 == (Offset2 + Dist * Bytes))
9228     return true;
9229
9230   const TargetLowering &TLI = DAG.getTargetLoweringInfo();
9231   const GlobalValue *GV1 = nullptr;
9232   const GlobalValue *GV2 = nullptr;
9233   Offset1 = 0;
9234   Offset2 = 0;
9235   bool isGA1 = TLI.isGAPlusOffset(Loc.getNode(), GV1, Offset1);
9236   bool isGA2 = TLI.isGAPlusOffset(BaseLoc.getNode(), GV2, Offset2);
9237   if (isGA1 && isGA2 && GV1 == GV2)
9238     return Offset1 == (Offset2 + Dist*Bytes);
9239   return false;
9240 }
9241
9242 // Like SelectionDAG::isConsecutiveLoad, but also works for stores, and does
9243 // not enforce equality of the chain operands.
9244 static bool isConsecutiveLS(SDNode *N, LSBaseSDNode *Base,
9245                             unsigned Bytes, int Dist,
9246                             SelectionDAG &DAG) {
9247   if (LSBaseSDNode *LS = dyn_cast<LSBaseSDNode>(N)) {
9248     EVT VT = LS->getMemoryVT();
9249     SDValue Loc = LS->getBasePtr();
9250     return isConsecutiveLSLoc(Loc, VT, Base, Bytes, Dist, DAG);
9251   }
9252
9253   if (N->getOpcode() == ISD::INTRINSIC_W_CHAIN) {
9254     EVT VT;
9255     switch (cast<ConstantSDNode>(N->getOperand(1))->getZExtValue()) {
9256     default: return false;
9257     case Intrinsic::ppc_qpx_qvlfd:
9258     case Intrinsic::ppc_qpx_qvlfda:
9259       VT = MVT::v4f64;
9260       break;
9261     case Intrinsic::ppc_qpx_qvlfs:
9262     case Intrinsic::ppc_qpx_qvlfsa:
9263       VT = MVT::v4f32;
9264       break;
9265     case Intrinsic::ppc_qpx_qvlfcd:
9266     case Intrinsic::ppc_qpx_qvlfcda:
9267       VT = MVT::v2f64;
9268       break;
9269     case Intrinsic::ppc_qpx_qvlfcs:
9270     case Intrinsic::ppc_qpx_qvlfcsa:
9271       VT = MVT::v2f32;
9272       break;
9273     case Intrinsic::ppc_qpx_qvlfiwa:
9274     case Intrinsic::ppc_qpx_qvlfiwz:
9275     case Intrinsic::ppc_altivec_lvx:
9276     case Intrinsic::ppc_altivec_lvxl:
9277     case Intrinsic::ppc_vsx_lxvw4x:
9278       VT = MVT::v4i32;
9279       break;
9280     case Intrinsic::ppc_vsx_lxvd2x:
9281       VT = MVT::v2f64;
9282       break;
9283     case Intrinsic::ppc_altivec_lvebx:
9284       VT = MVT::i8;
9285       break;
9286     case Intrinsic::ppc_altivec_lvehx:
9287       VT = MVT::i16;
9288       break;
9289     case Intrinsic::ppc_altivec_lvewx:
9290       VT = MVT::i32;
9291       break;
9292     }
9293
9294     return isConsecutiveLSLoc(N->getOperand(2), VT, Base, Bytes, Dist, DAG);
9295   }
9296
9297   if (N->getOpcode() == ISD::INTRINSIC_VOID) {
9298     EVT VT;
9299     switch (cast<ConstantSDNode>(N->getOperand(1))->getZExtValue()) {
9300     default: return false;
9301     case Intrinsic::ppc_qpx_qvstfd:
9302     case Intrinsic::ppc_qpx_qvstfda:
9303       VT = MVT::v4f64;
9304       break;
9305     case Intrinsic::ppc_qpx_qvstfs:
9306     case Intrinsic::ppc_qpx_qvstfsa:
9307       VT = MVT::v4f32;
9308       break;
9309     case Intrinsic::ppc_qpx_qvstfcd:
9310     case Intrinsic::ppc_qpx_qvstfcda:
9311       VT = MVT::v2f64;
9312       break;
9313     case Intrinsic::ppc_qpx_qvstfcs:
9314     case Intrinsic::ppc_qpx_qvstfcsa:
9315       VT = MVT::v2f32;
9316       break;
9317     case Intrinsic::ppc_qpx_qvstfiw:
9318     case Intrinsic::ppc_qpx_qvstfiwa:
9319     case Intrinsic::ppc_altivec_stvx:
9320     case Intrinsic::ppc_altivec_stvxl:
9321     case Intrinsic::ppc_vsx_stxvw4x:
9322       VT = MVT::v4i32;
9323       break;
9324     case Intrinsic::ppc_vsx_stxvd2x:
9325       VT = MVT::v2f64;
9326       break;
9327     case Intrinsic::ppc_altivec_stvebx:
9328       VT = MVT::i8;
9329       break;
9330     case Intrinsic::ppc_altivec_stvehx:
9331       VT = MVT::i16;
9332       break;
9333     case Intrinsic::ppc_altivec_stvewx:
9334       VT = MVT::i32;
9335       break;
9336     }
9337
9338     return isConsecutiveLSLoc(N->getOperand(3), VT, Base, Bytes, Dist, DAG);
9339   }
9340
9341   return false;
9342 }
9343
9344 // Return true is there is a nearyby consecutive load to the one provided
9345 // (regardless of alignment). We search up and down the chain, looking though
9346 // token factors and other loads (but nothing else). As a result, a true result
9347 // indicates that it is safe to create a new consecutive load adjacent to the
9348 // load provided.
9349 static bool findConsecutiveLoad(LoadSDNode *LD, SelectionDAG &DAG) {
9350   SDValue Chain = LD->getChain();
9351   EVT VT = LD->getMemoryVT();
9352
9353   SmallSet<SDNode *, 16> LoadRoots;
9354   SmallVector<SDNode *, 8> Queue(1, Chain.getNode());
9355   SmallSet<SDNode *, 16> Visited;
9356
9357   // First, search up the chain, branching to follow all token-factor operands.
9358   // If we find a consecutive load, then we're done, otherwise, record all
9359   // nodes just above the top-level loads and token factors.
9360   while (!Queue.empty()) {
9361     SDNode *ChainNext = Queue.pop_back_val();
9362     if (!Visited.insert(ChainNext).second)
9363       continue;
9364
9365     if (MemSDNode *ChainLD = dyn_cast<MemSDNode>(ChainNext)) {
9366       if (isConsecutiveLS(ChainLD, LD, VT.getStoreSize(), 1, DAG))
9367         return true;
9368
9369       if (!Visited.count(ChainLD->getChain().getNode()))
9370         Queue.push_back(ChainLD->getChain().getNode());
9371     } else if (ChainNext->getOpcode() == ISD::TokenFactor) {
9372       for (const SDUse &O : ChainNext->ops())
9373         if (!Visited.count(O.getNode()))
9374           Queue.push_back(O.getNode());
9375     } else
9376       LoadRoots.insert(ChainNext);
9377   }
9378
9379   // Second, search down the chain, starting from the top-level nodes recorded
9380   // in the first phase. These top-level nodes are the nodes just above all
9381   // loads and token factors. Starting with their uses, recursively look though
9382   // all loads (just the chain uses) and token factors to find a consecutive
9383   // load.
9384   Visited.clear();
9385   Queue.clear();
9386
9387   for (SmallSet<SDNode *, 16>::iterator I = LoadRoots.begin(),
9388        IE = LoadRoots.end(); I != IE; ++I) {
9389     Queue.push_back(*I);
9390
9391     while (!Queue.empty()) {
9392       SDNode *LoadRoot = Queue.pop_back_val();
9393       if (!Visited.insert(LoadRoot).second)
9394         continue;
9395
9396       if (MemSDNode *ChainLD = dyn_cast<MemSDNode>(LoadRoot))
9397         if (isConsecutiveLS(ChainLD, LD, VT.getStoreSize(), 1, DAG))
9398           return true;
9399
9400       for (SDNode::use_iterator UI = LoadRoot->use_begin(),
9401            UE = LoadRoot->use_end(); UI != UE; ++UI)
9402         if (((isa<MemSDNode>(*UI) &&
9403             cast<MemSDNode>(*UI)->getChain().getNode() == LoadRoot) ||
9404             UI->getOpcode() == ISD::TokenFactor) && !Visited.count(*UI))
9405           Queue.push_back(*UI);
9406     }
9407   }
9408
9409   return false;
9410 }
9411
9412 SDValue PPCTargetLowering::DAGCombineTruncBoolExt(SDNode *N,
9413                                                   DAGCombinerInfo &DCI) const {
9414   SelectionDAG &DAG = DCI.DAG;
9415   SDLoc dl(N);
9416
9417   assert(Subtarget.useCRBits() && "Expecting to be tracking CR bits");
9418   // If we're tracking CR bits, we need to be careful that we don't have:
9419   //   trunc(binary-ops(zext(x), zext(y)))
9420   // or
9421   //   trunc(binary-ops(binary-ops(zext(x), zext(y)), ...)
9422   // such that we're unnecessarily moving things into GPRs when it would be
9423   // better to keep them in CR bits.
9424
9425   // Note that trunc here can be an actual i1 trunc, or can be the effective
9426   // truncation that comes from a setcc or select_cc.
9427   if (N->getOpcode() == ISD::TRUNCATE &&
9428       N->getValueType(0) != MVT::i1)
9429     return SDValue();
9430
9431   if (N->getOperand(0).getValueType() != MVT::i32 &&
9432       N->getOperand(0).getValueType() != MVT::i64)
9433     return SDValue();
9434
9435   if (N->getOpcode() == ISD::SETCC ||
9436       N->getOpcode() == ISD::SELECT_CC) {
9437     // If we're looking at a comparison, then we need to make sure that the
9438     // high bits (all except for the first) don't matter the result.
9439     ISD::CondCode CC =
9440       cast<CondCodeSDNode>(N->getOperand(
9441         N->getOpcode() == ISD::SETCC ? 2 : 4))->get();
9442     unsigned OpBits = N->getOperand(0).getValueSizeInBits();
9443
9444     if (ISD::isSignedIntSetCC(CC)) {
9445       if (DAG.ComputeNumSignBits(N->getOperand(0)) != OpBits ||
9446           DAG.ComputeNumSignBits(N->getOperand(1)) != OpBits)
9447         return SDValue();
9448     } else if (ISD::isUnsignedIntSetCC(CC)) {
9449       if (!DAG.MaskedValueIsZero(N->getOperand(0),
9450                                  APInt::getHighBitsSet(OpBits, OpBits-1)) ||
9451           !DAG.MaskedValueIsZero(N->getOperand(1),
9452                                  APInt::getHighBitsSet(OpBits, OpBits-1)))
9453         return SDValue();
9454     } else {
9455       // This is neither a signed nor an unsigned comparison, just make sure
9456       // that the high bits are equal.
9457       APInt Op1Zero, Op1One;
9458       APInt Op2Zero, Op2One;
9459       DAG.computeKnownBits(N->getOperand(0), Op1Zero, Op1One);
9460       DAG.computeKnownBits(N->getOperand(1), Op2Zero, Op2One);
9461
9462       // We don't really care about what is known about the first bit (if
9463       // anything), so clear it in all masks prior to comparing them.
9464       Op1Zero.clearBit(0); Op1One.clearBit(0);
9465       Op2Zero.clearBit(0); Op2One.clearBit(0);
9466
9467       if (Op1Zero != Op2Zero || Op1One != Op2One)
9468         return SDValue();
9469     }
9470   }
9471
9472   // We now know that the higher-order bits are irrelevant, we just need to
9473   // make sure that all of the intermediate operations are bit operations, and
9474   // all inputs are extensions.
9475   if (N->getOperand(0).getOpcode() != ISD::AND &&
9476       N->getOperand(0).getOpcode() != ISD::OR  &&
9477       N->getOperand(0).getOpcode() != ISD::XOR &&
9478       N->getOperand(0).getOpcode() != ISD::SELECT &&
9479       N->getOperand(0).getOpcode() != ISD::SELECT_CC &&
9480       N->getOperand(0).getOpcode() != ISD::TRUNCATE &&
9481       N->getOperand(0).getOpcode() != ISD::SIGN_EXTEND &&
9482       N->getOperand(0).getOpcode() != ISD::ZERO_EXTEND &&
9483       N->getOperand(0).getOpcode() != ISD::ANY_EXTEND)
9484     return SDValue();
9485
9486   if ((N->getOpcode() == ISD::SETCC || N->getOpcode() == ISD::SELECT_CC) &&
9487       N->getOperand(1).getOpcode() != ISD::AND &&
9488       N->getOperand(1).getOpcode() != ISD::OR  &&
9489       N->getOperand(1).getOpcode() != ISD::XOR &&
9490       N->getOperand(1).getOpcode() != ISD::SELECT &&
9491       N->getOperand(1).getOpcode() != ISD::SELECT_CC &&
9492       N->getOperand(1).getOpcode() != ISD::TRUNCATE &&
9493       N->getOperand(1).getOpcode() != ISD::SIGN_EXTEND &&
9494       N->getOperand(1).getOpcode() != ISD::ZERO_EXTEND &&
9495       N->getOperand(1).getOpcode() != ISD::ANY_EXTEND)
9496     return SDValue();
9497
9498   SmallVector<SDValue, 4> Inputs;
9499   SmallVector<SDValue, 8> BinOps, PromOps;
9500   SmallPtrSet<SDNode *, 16> Visited;
9501
9502   for (unsigned i = 0; i < 2; ++i) {
9503     if (((N->getOperand(i).getOpcode() == ISD::SIGN_EXTEND ||
9504           N->getOperand(i).getOpcode() == ISD::ZERO_EXTEND ||
9505           N->getOperand(i).getOpcode() == ISD::ANY_EXTEND) &&
9506           N->getOperand(i).getOperand(0).getValueType() == MVT::i1) ||
9507         isa<ConstantSDNode>(N->getOperand(i)))
9508       Inputs.push_back(N->getOperand(i));
9509     else
9510       BinOps.push_back(N->getOperand(i));
9511
9512     if (N->getOpcode() == ISD::TRUNCATE)
9513       break;
9514   }
9515
9516   // Visit all inputs, collect all binary operations (and, or, xor and
9517   // select) that are all fed by extensions.
9518   while (!BinOps.empty()) {
9519     SDValue BinOp = BinOps.back();
9520     BinOps.pop_back();
9521
9522     if (!Visited.insert(BinOp.getNode()).second)
9523       continue;
9524
9525     PromOps.push_back(BinOp);
9526
9527     for (unsigned i = 0, ie = BinOp.getNumOperands(); i != ie; ++i) {
9528       // The condition of the select is not promoted.
9529       if (BinOp.getOpcode() == ISD::SELECT && i == 0)
9530         continue;
9531       if (BinOp.getOpcode() == ISD::SELECT_CC && i != 2 && i != 3)
9532         continue;
9533
9534       if (((BinOp.getOperand(i).getOpcode() == ISD::SIGN_EXTEND ||
9535             BinOp.getOperand(i).getOpcode() == ISD::ZERO_EXTEND ||
9536             BinOp.getOperand(i).getOpcode() == ISD::ANY_EXTEND) &&
9537            BinOp.getOperand(i).getOperand(0).getValueType() == MVT::i1) ||
9538           isa<ConstantSDNode>(BinOp.getOperand(i))) {
9539         Inputs.push_back(BinOp.getOperand(i));
9540       } else if (BinOp.getOperand(i).getOpcode() == ISD::AND ||
9541                  BinOp.getOperand(i).getOpcode() == ISD::OR  ||
9542                  BinOp.getOperand(i).getOpcode() == ISD::XOR ||
9543                  BinOp.getOperand(i).getOpcode() == ISD::SELECT ||
9544                  BinOp.getOperand(i).getOpcode() == ISD::SELECT_CC ||
9545                  BinOp.getOperand(i).getOpcode() == ISD::TRUNCATE ||
9546                  BinOp.getOperand(i).getOpcode() == ISD::SIGN_EXTEND ||
9547                  BinOp.getOperand(i).getOpcode() == ISD::ZERO_EXTEND ||
9548                  BinOp.getOperand(i).getOpcode() == ISD::ANY_EXTEND) {
9549         BinOps.push_back(BinOp.getOperand(i));
9550       } else {
9551         // We have an input that is not an extension or another binary
9552         // operation; we'll abort this transformation.
9553         return SDValue();
9554       }
9555     }
9556   }
9557
9558   // Make sure that this is a self-contained cluster of operations (which
9559   // is not quite the same thing as saying that everything has only one
9560   // use).
9561   for (unsigned i = 0, ie = Inputs.size(); i != ie; ++i) {
9562     if (isa<ConstantSDNode>(Inputs[i]))
9563       continue;
9564
9565     for (SDNode::use_iterator UI = Inputs[i].getNode()->use_begin(),
9566                               UE = Inputs[i].getNode()->use_end();
9567          UI != UE; ++UI) {
9568       SDNode *User = *UI;
9569       if (User != N && !Visited.count(User))
9570         return SDValue();
9571
9572       // Make sure that we're not going to promote the non-output-value
9573       // operand(s) or SELECT or SELECT_CC.
9574       // FIXME: Although we could sometimes handle this, and it does occur in
9575       // practice that one of the condition inputs to the select is also one of
9576       // the outputs, we currently can't deal with this.
9577       if (User->getOpcode() == ISD::SELECT) {
9578         if (User->getOperand(0) == Inputs[i])
9579           return SDValue();
9580       } else if (User->getOpcode() == ISD::SELECT_CC) {
9581         if (User->getOperand(0) == Inputs[i] ||
9582             User->getOperand(1) == Inputs[i])
9583           return SDValue();
9584       }
9585     }
9586   }
9587
9588   for (unsigned i = 0, ie = PromOps.size(); i != ie; ++i) {
9589     for (SDNode::use_iterator UI = PromOps[i].getNode()->use_begin(),
9590                               UE = PromOps[i].getNode()->use_end();
9591          UI != UE; ++UI) {
9592       SDNode *User = *UI;
9593       if (User != N && !Visited.count(User))
9594         return SDValue();
9595
9596       // Make sure that we're not going to promote the non-output-value
9597       // operand(s) or SELECT or SELECT_CC.
9598       // FIXME: Although we could sometimes handle this, and it does occur in
9599       // practice that one of the condition inputs to the select is also one of
9600       // the outputs, we currently can't deal with this.
9601       if (User->getOpcode() == ISD::SELECT) {
9602         if (User->getOperand(0) == PromOps[i])
9603           return SDValue();
9604       } else if (User->getOpcode() == ISD::SELECT_CC) {
9605         if (User->getOperand(0) == PromOps[i] ||
9606             User->getOperand(1) == PromOps[i])
9607           return SDValue();
9608       }
9609     }
9610   }
9611
9612   // Replace all inputs with the extension operand.
9613   for (unsigned i = 0, ie = Inputs.size(); i != ie; ++i) {
9614     // Constants may have users outside the cluster of to-be-promoted nodes,
9615     // and so we need to replace those as we do the promotions.
9616     if (isa<ConstantSDNode>(Inputs[i]))
9617       continue;
9618     else
9619       DAG.ReplaceAllUsesOfValueWith(Inputs[i], Inputs[i].getOperand(0));
9620   }
9621
9622   // Replace all operations (these are all the same, but have a different
9623   // (i1) return type). DAG.getNode will validate that the types of
9624   // a binary operator match, so go through the list in reverse so that
9625   // we've likely promoted both operands first. Any intermediate truncations or
9626   // extensions disappear.
9627   while (!PromOps.empty()) {
9628     SDValue PromOp = PromOps.back();
9629     PromOps.pop_back();
9630
9631     if (PromOp.getOpcode() == ISD::TRUNCATE ||
9632         PromOp.getOpcode() == ISD::SIGN_EXTEND ||
9633         PromOp.getOpcode() == ISD::ZERO_EXTEND ||
9634         PromOp.getOpcode() == ISD::ANY_EXTEND) {
9635       if (!isa<ConstantSDNode>(PromOp.getOperand(0)) &&
9636           PromOp.getOperand(0).getValueType() != MVT::i1) {
9637         // The operand is not yet ready (see comment below).
9638         PromOps.insert(PromOps.begin(), PromOp);
9639         continue;
9640       }
9641
9642       SDValue RepValue = PromOp.getOperand(0);
9643       if (isa<ConstantSDNode>(RepValue))
9644         RepValue = DAG.getNode(ISD::TRUNCATE, dl, MVT::i1, RepValue);
9645
9646       DAG.ReplaceAllUsesOfValueWith(PromOp, RepValue);
9647       continue;
9648     }
9649
9650     unsigned C;
9651     switch (PromOp.getOpcode()) {
9652     default:             C = 0; break;
9653     case ISD::SELECT:    C = 1; break;
9654     case ISD::SELECT_CC: C = 2; break;
9655     }
9656
9657     if ((!isa<ConstantSDNode>(PromOp.getOperand(C)) &&
9658          PromOp.getOperand(C).getValueType() != MVT::i1) ||
9659         (!isa<ConstantSDNode>(PromOp.getOperand(C+1)) &&
9660          PromOp.getOperand(C+1).getValueType() != MVT::i1)) {
9661       // The to-be-promoted operands of this node have not yet been
9662       // promoted (this should be rare because we're going through the
9663       // list backward, but if one of the operands has several users in
9664       // this cluster of to-be-promoted nodes, it is possible).
9665       PromOps.insert(PromOps.begin(), PromOp);
9666       continue;
9667     }
9668
9669     SmallVector<SDValue, 3> Ops(PromOp.getNode()->op_begin(),
9670                                 PromOp.getNode()->op_end());
9671
9672     // If there are any constant inputs, make sure they're replaced now.
9673     for (unsigned i = 0; i < 2; ++i)
9674       if (isa<ConstantSDNode>(Ops[C+i]))
9675         Ops[C+i] = DAG.getNode(ISD::TRUNCATE, dl, MVT::i1, Ops[C+i]);
9676
9677     DAG.ReplaceAllUsesOfValueWith(PromOp,
9678       DAG.getNode(PromOp.getOpcode(), dl, MVT::i1, Ops));
9679   }
9680
9681   // Now we're left with the initial truncation itself.
9682   if (N->getOpcode() == ISD::TRUNCATE)
9683     return N->getOperand(0);
9684
9685   // Otherwise, this is a comparison. The operands to be compared have just
9686   // changed type (to i1), but everything else is the same.
9687   return SDValue(N, 0);
9688 }
9689
9690 SDValue PPCTargetLowering::DAGCombineExtBoolTrunc(SDNode *N,
9691                                                   DAGCombinerInfo &DCI) const {
9692   SelectionDAG &DAG = DCI.DAG;
9693   SDLoc dl(N);
9694
9695   // If we're tracking CR bits, we need to be careful that we don't have:
9696   //   zext(binary-ops(trunc(x), trunc(y)))
9697   // or
9698   //   zext(binary-ops(binary-ops(trunc(x), trunc(y)), ...)
9699   // such that we're unnecessarily moving things into CR bits that can more
9700   // efficiently stay in GPRs. Note that if we're not certain that the high
9701   // bits are set as required by the final extension, we still may need to do
9702   // some masking to get the proper behavior.
9703
9704   // This same functionality is important on PPC64 when dealing with
9705   // 32-to-64-bit extensions; these occur often when 32-bit values are used as
9706   // the return values of functions. Because it is so similar, it is handled
9707   // here as well.
9708
9709   if (N->getValueType(0) != MVT::i32 &&
9710       N->getValueType(0) != MVT::i64)
9711     return SDValue();
9712
9713   if (!((N->getOperand(0).getValueType() == MVT::i1 && Subtarget.useCRBits()) ||
9714         (N->getOperand(0).getValueType() == MVT::i32 && Subtarget.isPPC64())))
9715     return SDValue();
9716
9717   if (N->getOperand(0).getOpcode() != ISD::AND &&
9718       N->getOperand(0).getOpcode() != ISD::OR  &&
9719       N->getOperand(0).getOpcode() != ISD::XOR &&
9720       N->getOperand(0).getOpcode() != ISD::SELECT &&
9721       N->getOperand(0).getOpcode() != ISD::SELECT_CC)
9722     return SDValue();
9723
9724   SmallVector<SDValue, 4> Inputs;
9725   SmallVector<SDValue, 8> BinOps(1, N->getOperand(0)), PromOps;
9726   SmallPtrSet<SDNode *, 16> Visited;
9727
9728   // Visit all inputs, collect all binary operations (and, or, xor and
9729   // select) that are all fed by truncations.
9730   while (!BinOps.empty()) {
9731     SDValue BinOp = BinOps.back();
9732     BinOps.pop_back();
9733
9734     if (!Visited.insert(BinOp.getNode()).second)
9735       continue;
9736
9737     PromOps.push_back(BinOp);
9738
9739     for (unsigned i = 0, ie = BinOp.getNumOperands(); i != ie; ++i) {
9740       // The condition of the select is not promoted.
9741       if (BinOp.getOpcode() == ISD::SELECT && i == 0)
9742         continue;
9743       if (BinOp.getOpcode() == ISD::SELECT_CC && i != 2 && i != 3)
9744         continue;
9745
9746       if (BinOp.getOperand(i).getOpcode() == ISD::TRUNCATE ||
9747           isa<ConstantSDNode>(BinOp.getOperand(i))) {
9748         Inputs.push_back(BinOp.getOperand(i));
9749       } else if (BinOp.getOperand(i).getOpcode() == ISD::AND ||
9750                  BinOp.getOperand(i).getOpcode() == ISD::OR  ||
9751                  BinOp.getOperand(i).getOpcode() == ISD::XOR ||
9752                  BinOp.getOperand(i).getOpcode() == ISD::SELECT ||
9753                  BinOp.getOperand(i).getOpcode() == ISD::SELECT_CC) {
9754         BinOps.push_back(BinOp.getOperand(i));
9755       } else {
9756         // We have an input that is not a truncation or another binary
9757         // operation; we'll abort this transformation.
9758         return SDValue();
9759       }
9760     }
9761   }
9762
9763   // The operands of a select that must be truncated when the select is
9764   // promoted because the operand is actually part of the to-be-promoted set.
9765   DenseMap<SDNode *, EVT> SelectTruncOp[2];
9766
9767   // Make sure that this is a self-contained cluster of operations (which
9768   // is not quite the same thing as saying that everything has only one
9769   // use).
9770   for (unsigned i = 0, ie = Inputs.size(); i != ie; ++i) {
9771     if (isa<ConstantSDNode>(Inputs[i]))
9772       continue;
9773
9774     for (SDNode::use_iterator UI = Inputs[i].getNode()->use_begin(),
9775                               UE = Inputs[i].getNode()->use_end();
9776          UI != UE; ++UI) {
9777       SDNode *User = *UI;
9778       if (User != N && !Visited.count(User))
9779         return SDValue();
9780
9781       // If we're going to promote the non-output-value operand(s) or SELECT or
9782       // SELECT_CC, record them for truncation.
9783       if (User->getOpcode() == ISD::SELECT) {
9784         if (User->getOperand(0) == Inputs[i])
9785           SelectTruncOp[0].insert(std::make_pair(User,
9786                                     User->getOperand(0).getValueType()));
9787       } else if (User->getOpcode() == ISD::SELECT_CC) {
9788         if (User->getOperand(0) == Inputs[i])
9789           SelectTruncOp[0].insert(std::make_pair(User,
9790                                     User->getOperand(0).getValueType()));
9791         if (User->getOperand(1) == Inputs[i])
9792           SelectTruncOp[1].insert(std::make_pair(User,
9793                                     User->getOperand(1).getValueType()));
9794       }
9795     }
9796   }
9797
9798   for (unsigned i = 0, ie = PromOps.size(); i != ie; ++i) {
9799     for (SDNode::use_iterator UI = PromOps[i].getNode()->use_begin(),
9800                               UE = PromOps[i].getNode()->use_end();
9801          UI != UE; ++UI) {
9802       SDNode *User = *UI;
9803       if (User != N && !Visited.count(User))
9804         return SDValue();
9805
9806       // If we're going to promote the non-output-value operand(s) or SELECT or
9807       // SELECT_CC, record them for truncation.
9808       if (User->getOpcode() == ISD::SELECT) {
9809         if (User->getOperand(0) == PromOps[i])
9810           SelectTruncOp[0].insert(std::make_pair(User,
9811                                     User->getOperand(0).getValueType()));
9812       } else if (User->getOpcode() == ISD::SELECT_CC) {
9813         if (User->getOperand(0) == PromOps[i])
9814           SelectTruncOp[0].insert(std::make_pair(User,
9815                                     User->getOperand(0).getValueType()));
9816         if (User->getOperand(1) == PromOps[i])
9817           SelectTruncOp[1].insert(std::make_pair(User,
9818                                     User->getOperand(1).getValueType()));
9819       }
9820     }
9821   }
9822
9823   unsigned PromBits = N->getOperand(0).getValueSizeInBits();
9824   bool ReallyNeedsExt = false;
9825   if (N->getOpcode() != ISD::ANY_EXTEND) {
9826     // If all of the inputs are not already sign/zero extended, then
9827     // we'll still need to do that at the end.
9828     for (unsigned i = 0, ie = Inputs.size(); i != ie; ++i) {
9829       if (isa<ConstantSDNode>(Inputs[i]))
9830         continue;
9831
9832       unsigned OpBits =
9833         Inputs[i].getOperand(0).getValueSizeInBits();
9834       assert(PromBits < OpBits && "Truncation not to a smaller bit count?");
9835
9836       if ((N->getOpcode() == ISD::ZERO_EXTEND &&
9837            !DAG.MaskedValueIsZero(Inputs[i].getOperand(0),
9838                                   APInt::getHighBitsSet(OpBits,
9839                                                         OpBits-PromBits))) ||
9840           (N->getOpcode() == ISD::SIGN_EXTEND &&
9841            DAG.ComputeNumSignBits(Inputs[i].getOperand(0)) <
9842              (OpBits-(PromBits-1)))) {
9843         ReallyNeedsExt = true;
9844         break;
9845       }
9846     }
9847   }
9848
9849   // Replace all inputs, either with the truncation operand, or a
9850   // truncation or extension to the final output type.
9851   for (unsigned i = 0, ie = Inputs.size(); i != ie; ++i) {
9852     // Constant inputs need to be replaced with the to-be-promoted nodes that
9853     // use them because they might have users outside of the cluster of
9854     // promoted nodes.
9855     if (isa<ConstantSDNode>(Inputs[i]))
9856       continue;
9857
9858     SDValue InSrc = Inputs[i].getOperand(0);
9859     if (Inputs[i].getValueType() == N->getValueType(0))
9860       DAG.ReplaceAllUsesOfValueWith(Inputs[i], InSrc);
9861     else if (N->getOpcode() == ISD::SIGN_EXTEND)
9862       DAG.ReplaceAllUsesOfValueWith(Inputs[i],
9863         DAG.getSExtOrTrunc(InSrc, dl, N->getValueType(0)));
9864     else if (N->getOpcode() == ISD::ZERO_EXTEND)
9865       DAG.ReplaceAllUsesOfValueWith(Inputs[i],
9866         DAG.getZExtOrTrunc(InSrc, dl, N->getValueType(0)));
9867     else
9868       DAG.ReplaceAllUsesOfValueWith(Inputs[i],
9869         DAG.getAnyExtOrTrunc(InSrc, dl, N->getValueType(0)));
9870   }
9871
9872   // Replace all operations (these are all the same, but have a different
9873   // (promoted) return type). DAG.getNode will validate that the types of
9874   // a binary operator match, so go through the list in reverse so that
9875   // we've likely promoted both operands first.
9876   while (!PromOps.empty()) {
9877     SDValue PromOp = PromOps.back();
9878     PromOps.pop_back();
9879
9880     unsigned C;
9881     switch (PromOp.getOpcode()) {
9882     default:             C = 0; break;
9883     case ISD::SELECT:    C = 1; break;
9884     case ISD::SELECT_CC: C = 2; break;
9885     }
9886
9887     if ((!isa<ConstantSDNode>(PromOp.getOperand(C)) &&
9888          PromOp.getOperand(C).getValueType() != N->getValueType(0)) ||
9889         (!isa<ConstantSDNode>(PromOp.getOperand(C+1)) &&
9890          PromOp.getOperand(C+1).getValueType() != N->getValueType(0))) {
9891       // The to-be-promoted operands of this node have not yet been
9892       // promoted (this should be rare because we're going through the
9893       // list backward, but if one of the operands has several users in
9894       // this cluster of to-be-promoted nodes, it is possible).
9895       PromOps.insert(PromOps.begin(), PromOp);
9896       continue;
9897     }
9898
9899     // For SELECT and SELECT_CC nodes, we do a similar check for any
9900     // to-be-promoted comparison inputs.
9901     if (PromOp.getOpcode() == ISD::SELECT ||
9902         PromOp.getOpcode() == ISD::SELECT_CC) {
9903       if ((SelectTruncOp[0].count(PromOp.getNode()) &&
9904            PromOp.getOperand(0).getValueType() != N->getValueType(0)) ||
9905           (SelectTruncOp[1].count(PromOp.getNode()) &&
9906            PromOp.getOperand(1).getValueType() != N->getValueType(0))) {
9907         PromOps.insert(PromOps.begin(), PromOp);
9908         continue;
9909       }
9910     }
9911
9912     SmallVector<SDValue, 3> Ops(PromOp.getNode()->op_begin(),
9913                                 PromOp.getNode()->op_end());
9914
9915     // If this node has constant inputs, then they'll need to be promoted here.
9916     for (unsigned i = 0; i < 2; ++i) {
9917       if (!isa<ConstantSDNode>(Ops[C+i]))
9918         continue;
9919       if (Ops[C+i].getValueType() == N->getValueType(0))
9920         continue;
9921
9922       if (N->getOpcode() == ISD::SIGN_EXTEND)
9923         Ops[C+i] = DAG.getSExtOrTrunc(Ops[C+i], dl, N->getValueType(0));
9924       else if (N->getOpcode() == ISD::ZERO_EXTEND)
9925         Ops[C+i] = DAG.getZExtOrTrunc(Ops[C+i], dl, N->getValueType(0));
9926       else
9927         Ops[C+i] = DAG.getAnyExtOrTrunc(Ops[C+i], dl, N->getValueType(0));
9928     }
9929
9930     // If we've promoted the comparison inputs of a SELECT or SELECT_CC,
9931     // truncate them again to the original value type.
9932     if (PromOp.getOpcode() == ISD::SELECT ||
9933         PromOp.getOpcode() == ISD::SELECT_CC) {
9934       auto SI0 = SelectTruncOp[0].find(PromOp.getNode());
9935       if (SI0 != SelectTruncOp[0].end())
9936         Ops[0] = DAG.getNode(ISD::TRUNCATE, dl, SI0->second, Ops[0]);
9937       auto SI1 = SelectTruncOp[1].find(PromOp.getNode());
9938       if (SI1 != SelectTruncOp[1].end())
9939         Ops[1] = DAG.getNode(ISD::TRUNCATE, dl, SI1->second, Ops[1]);
9940     }
9941
9942     DAG.ReplaceAllUsesOfValueWith(PromOp,
9943       DAG.getNode(PromOp.getOpcode(), dl, N->getValueType(0), Ops));
9944   }
9945
9946   // Now we're left with the initial extension itself.
9947   if (!ReallyNeedsExt)
9948     return N->getOperand(0);
9949
9950   // To zero extend, just mask off everything except for the first bit (in the
9951   // i1 case).
9952   if (N->getOpcode() == ISD::ZERO_EXTEND)
9953     return DAG.getNode(ISD::AND, dl, N->getValueType(0), N->getOperand(0),
9954                        DAG.getConstant(APInt::getLowBitsSet(
9955                                          N->getValueSizeInBits(0), PromBits),
9956                                        dl, N->getValueType(0)));
9957
9958   assert(N->getOpcode() == ISD::SIGN_EXTEND &&
9959          "Invalid extension type");
9960   EVT ShiftAmountTy = getShiftAmountTy(N->getValueType(0), DAG.getDataLayout());
9961   SDValue ShiftCst =
9962       DAG.getConstant(N->getValueSizeInBits(0) - PromBits, dl, ShiftAmountTy);
9963   return DAG.getNode(
9964       ISD::SRA, dl, N->getValueType(0),
9965       DAG.getNode(ISD::SHL, dl, N->getValueType(0), N->getOperand(0), ShiftCst),
9966       ShiftCst);
9967 }
9968
9969 SDValue PPCTargetLowering::combineFPToIntToFP(SDNode *N,
9970                                               DAGCombinerInfo &DCI) const {
9971   assert((N->getOpcode() == ISD::SINT_TO_FP ||
9972           N->getOpcode() == ISD::UINT_TO_FP) &&
9973          "Need an int -> FP conversion node here");
9974
9975   if (!Subtarget.has64BitSupport())
9976     return SDValue();
9977
9978   SelectionDAG &DAG = DCI.DAG;
9979   SDLoc dl(N);
9980   SDValue Op(N, 0);
9981
9982   // Don't handle ppc_fp128 here or i1 conversions.
9983   if (Op.getValueType() != MVT::f32 && Op.getValueType() != MVT::f64)
9984     return SDValue();
9985   if (Op.getOperand(0).getValueType() == MVT::i1)
9986     return SDValue();
9987
9988   // For i32 intermediate values, unfortunately, the conversion functions
9989   // leave the upper 32 bits of the value are undefined. Within the set of
9990   // scalar instructions, we have no method for zero- or sign-extending the
9991   // value. Thus, we cannot handle i32 intermediate values here.
9992   if (Op.getOperand(0).getValueType() == MVT::i32)
9993     return SDValue();
9994
9995   assert((Op.getOpcode() == ISD::SINT_TO_FP || Subtarget.hasFPCVT()) &&
9996          "UINT_TO_FP is supported only with FPCVT");
9997
9998   // If we have FCFIDS, then use it when converting to single-precision.
9999   // Otherwise, convert to double-precision and then round.
10000   unsigned FCFOp = (Subtarget.hasFPCVT() && Op.getValueType() == MVT::f32)
10001                        ? (Op.getOpcode() == ISD::UINT_TO_FP ? PPCISD::FCFIDUS
10002                                                             : PPCISD::FCFIDS)
10003                        : (Op.getOpcode() == ISD::UINT_TO_FP ? PPCISD::FCFIDU
10004                                                             : PPCISD::FCFID);
10005   MVT FCFTy = (Subtarget.hasFPCVT() && Op.getValueType() == MVT::f32)
10006                   ? MVT::f32
10007                   : MVT::f64;
10008
10009   // If we're converting from a float, to an int, and back to a float again,
10010   // then we don't need the store/load pair at all.
10011   if ((Op.getOperand(0).getOpcode() == ISD::FP_TO_UINT &&
10012        Subtarget.hasFPCVT()) ||
10013       (Op.getOperand(0).getOpcode() == ISD::FP_TO_SINT)) {
10014     SDValue Src = Op.getOperand(0).getOperand(0);
10015     if (Src.getValueType() == MVT::f32) {
10016       Src = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, Src);
10017       DCI.AddToWorklist(Src.getNode());
10018     } else if (Src.getValueType() != MVT::f64) {
10019       // Make sure that we don't pick up a ppc_fp128 source value.
10020       return SDValue();
10021     }
10022
10023     unsigned FCTOp =
10024       Op.getOperand(0).getOpcode() == ISD::FP_TO_SINT ? PPCISD::FCTIDZ :
10025                                                         PPCISD::FCTIDUZ;
10026
10027     SDValue Tmp = DAG.getNode(FCTOp, dl, MVT::f64, Src);
10028     SDValue FP = DAG.getNode(FCFOp, dl, FCFTy, Tmp);
10029
10030     if (Op.getValueType() == MVT::f32 && !Subtarget.hasFPCVT()) {
10031       FP = DAG.getNode(ISD::FP_ROUND, dl,
10032                        MVT::f32, FP, DAG.getIntPtrConstant(0, dl));
10033       DCI.AddToWorklist(FP.getNode());
10034     }
10035
10036     return FP;
10037   }
10038
10039   return SDValue();
10040 }
10041
10042 // expandVSXLoadForLE - Convert VSX loads (which may be intrinsics for
10043 // builtins) into loads with swaps.
10044 SDValue PPCTargetLowering::expandVSXLoadForLE(SDNode *N,
10045                                               DAGCombinerInfo &DCI) const {
10046   SelectionDAG &DAG = DCI.DAG;
10047   SDLoc dl(N);
10048   SDValue Chain;
10049   SDValue Base;
10050   MachineMemOperand *MMO;
10051
10052   switch (N->getOpcode()) {
10053   default:
10054     llvm_unreachable("Unexpected opcode for little endian VSX load");
10055   case ISD::LOAD: {
10056     LoadSDNode *LD = cast<LoadSDNode>(N);
10057     Chain = LD->getChain();
10058     Base = LD->getBasePtr();
10059     MMO = LD->getMemOperand();
10060     // If the MMO suggests this isn't a load of a full vector, leave
10061     // things alone.  For a built-in, we have to make the change for
10062     // correctness, so if there is a size problem that will be a bug.
10063     if (MMO->getSize() < 16)
10064       return SDValue();
10065     break;
10066   }
10067   case ISD::INTRINSIC_W_CHAIN: {
10068     MemIntrinsicSDNode *Intrin = cast<MemIntrinsicSDNode>(N);
10069     Chain = Intrin->getChain();
10070     // Similarly to the store case below, Intrin->getBasePtr() doesn't get
10071     // us what we want. Get operand 2 instead.
10072     Base = Intrin->getOperand(2);
10073     MMO = Intrin->getMemOperand();
10074     break;
10075   }
10076   }
10077
10078   MVT VecTy = N->getValueType(0).getSimpleVT();
10079   SDValue LoadOps[] = { Chain, Base };
10080   SDValue Load = DAG.getMemIntrinsicNode(PPCISD::LXVD2X, dl,
10081                                          DAG.getVTList(VecTy, MVT::Other),
10082                                          LoadOps, VecTy, MMO);
10083   DCI.AddToWorklist(Load.getNode());
10084   Chain = Load.getValue(1);
10085   SDValue Swap = DAG.getNode(PPCISD::XXSWAPD, dl,
10086                              DAG.getVTList(VecTy, MVT::Other), Chain, Load);
10087   DCI.AddToWorklist(Swap.getNode());
10088   return Swap;
10089 }
10090
10091 // expandVSXStoreForLE - Convert VSX stores (which may be intrinsics for
10092 // builtins) into stores with swaps.
10093 SDValue PPCTargetLowering::expandVSXStoreForLE(SDNode *N,
10094                                                DAGCombinerInfo &DCI) const {
10095   SelectionDAG &DAG = DCI.DAG;
10096   SDLoc dl(N);
10097   SDValue Chain;
10098   SDValue Base;
10099   unsigned SrcOpnd;
10100   MachineMemOperand *MMO;
10101
10102   switch (N->getOpcode()) {
10103   default:
10104     llvm_unreachable("Unexpected opcode for little endian VSX store");
10105   case ISD::STORE: {
10106     StoreSDNode *ST = cast<StoreSDNode>(N);
10107     Chain = ST->getChain();
10108     Base = ST->getBasePtr();
10109     MMO = ST->getMemOperand();
10110     SrcOpnd = 1;
10111     // If the MMO suggests this isn't a store of a full vector, leave
10112     // things alone.  For a built-in, we have to make the change for
10113     // correctness, so if there is a size problem that will be a bug.
10114     if (MMO->getSize() < 16)
10115       return SDValue();
10116     break;
10117   }
10118   case ISD::INTRINSIC_VOID: {
10119     MemIntrinsicSDNode *Intrin = cast<MemIntrinsicSDNode>(N);
10120     Chain = Intrin->getChain();
10121     // Intrin->getBasePtr() oddly does not get what we want.
10122     Base = Intrin->getOperand(3);
10123     MMO = Intrin->getMemOperand();
10124     SrcOpnd = 2;
10125     break;
10126   }
10127   }
10128
10129   SDValue Src = N->getOperand(SrcOpnd);
10130   MVT VecTy = Src.getValueType().getSimpleVT();
10131   SDValue Swap = DAG.getNode(PPCISD::XXSWAPD, dl,
10132                              DAG.getVTList(VecTy, MVT::Other), Chain, Src);
10133   DCI.AddToWorklist(Swap.getNode());
10134   Chain = Swap.getValue(1);
10135   SDValue StoreOps[] = { Chain, Swap, Base };
10136   SDValue Store = DAG.getMemIntrinsicNode(PPCISD::STXVD2X, dl,
10137                                           DAG.getVTList(MVT::Other),
10138                                           StoreOps, VecTy, MMO);
10139   DCI.AddToWorklist(Store.getNode());
10140   return Store;
10141 }
10142
10143 SDValue PPCTargetLowering::PerformDAGCombine(SDNode *N,
10144                                              DAGCombinerInfo &DCI) const {
10145   SelectionDAG &DAG = DCI.DAG;
10146   SDLoc dl(N);
10147   switch (N->getOpcode()) {
10148   default: break;
10149   case PPCISD::SHL:
10150     if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(N->getOperand(0))) {
10151       if (C->isNullValue())   // 0 << V -> 0.
10152         return N->getOperand(0);
10153     }
10154     break;
10155   case PPCISD::SRL:
10156     if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(N->getOperand(0))) {
10157       if (C->isNullValue())   // 0 >>u V -> 0.
10158         return N->getOperand(0);
10159     }
10160     break;
10161   case PPCISD::SRA:
10162     if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(N->getOperand(0))) {
10163       if (C->isNullValue() ||   //  0 >>s V -> 0.
10164           C->isAllOnesValue())    // -1 >>s V -> -1.
10165         return N->getOperand(0);
10166     }
10167     break;
10168   case ISD::SIGN_EXTEND:
10169   case ISD::ZERO_EXTEND:
10170   case ISD::ANY_EXTEND:
10171     return DAGCombineExtBoolTrunc(N, DCI);
10172   case ISD::TRUNCATE:
10173   case ISD::SETCC:
10174   case ISD::SELECT_CC:
10175     return DAGCombineTruncBoolExt(N, DCI);
10176   case ISD::SINT_TO_FP:
10177   case ISD::UINT_TO_FP:
10178     return combineFPToIntToFP(N, DCI);
10179   case ISD::STORE: {
10180     // Turn STORE (FP_TO_SINT F) -> STFIWX(FCTIWZ(F)).
10181     if (Subtarget.hasSTFIWX() && !cast<StoreSDNode>(N)->isTruncatingStore() &&
10182         N->getOperand(1).getOpcode() == ISD::FP_TO_SINT &&
10183         N->getOperand(1).getValueType() == MVT::i32 &&
10184         N->getOperand(1).getOperand(0).getValueType() != MVT::ppcf128) {
10185       SDValue Val = N->getOperand(1).getOperand(0);
10186       if (Val.getValueType() == MVT::f32) {
10187         Val = DAG.getNode(ISD::FP_EXTEND, dl, MVT::f64, Val);
10188         DCI.AddToWorklist(Val.getNode());
10189       }
10190       Val = DAG.getNode(PPCISD::FCTIWZ, dl, MVT::f64, Val);
10191       DCI.AddToWorklist(Val.getNode());
10192
10193       SDValue Ops[] = {
10194         N->getOperand(0), Val, N->getOperand(2),
10195         DAG.getValueType(N->getOperand(1).getValueType())
10196       };
10197
10198       Val = DAG.getMemIntrinsicNode(PPCISD::STFIWX, dl,
10199               DAG.getVTList(MVT::Other), Ops,
10200               cast<StoreSDNode>(N)->getMemoryVT(),
10201               cast<StoreSDNode>(N)->getMemOperand());
10202       DCI.AddToWorklist(Val.getNode());
10203       return Val;
10204     }
10205
10206     // Turn STORE (BSWAP) -> sthbrx/stwbrx.
10207     if (cast<StoreSDNode>(N)->isUnindexed() &&
10208         N->getOperand(1).getOpcode() == ISD::BSWAP &&
10209         N->getOperand(1).getNode()->hasOneUse() &&
10210         (N->getOperand(1).getValueType() == MVT::i32 ||
10211          N->getOperand(1).getValueType() == MVT::i16 ||
10212          (Subtarget.hasLDBRX() && Subtarget.isPPC64() &&
10213           N->getOperand(1).getValueType() == MVT::i64))) {
10214       SDValue BSwapOp = N->getOperand(1).getOperand(0);
10215       // Do an any-extend to 32-bits if this is a half-word input.
10216       if (BSwapOp.getValueType() == MVT::i16)
10217         BSwapOp = DAG.getNode(ISD::ANY_EXTEND, dl, MVT::i32, BSwapOp);
10218
10219       SDValue Ops[] = {
10220         N->getOperand(0), BSwapOp, N->getOperand(2),
10221         DAG.getValueType(N->getOperand(1).getValueType())
10222       };
10223       return
10224         DAG.getMemIntrinsicNode(PPCISD::STBRX, dl, DAG.getVTList(MVT::Other),
10225                                 Ops, cast<StoreSDNode>(N)->getMemoryVT(),
10226                                 cast<StoreSDNode>(N)->getMemOperand());
10227     }
10228
10229     // For little endian, VSX stores require generating xxswapd/lxvd2x.
10230     EVT VT = N->getOperand(1).getValueType();
10231     if (VT.isSimple()) {
10232       MVT StoreVT = VT.getSimpleVT();
10233       if (Subtarget.hasVSX() && Subtarget.isLittleEndian() &&
10234           (StoreVT == MVT::v2f64 || StoreVT == MVT::v2i64 ||
10235            StoreVT == MVT::v4f32 || StoreVT == MVT::v4i32))
10236         return expandVSXStoreForLE(N, DCI);
10237     }
10238     break;
10239   }
10240   case ISD::LOAD: {
10241     LoadSDNode *LD = cast<LoadSDNode>(N);
10242     EVT VT = LD->getValueType(0);
10243
10244     // For little endian, VSX loads require generating lxvd2x/xxswapd.
10245     if (VT.isSimple()) {
10246       MVT LoadVT = VT.getSimpleVT();
10247       if (Subtarget.hasVSX() && Subtarget.isLittleEndian() &&
10248           (LoadVT == MVT::v2f64 || LoadVT == MVT::v2i64 ||
10249            LoadVT == MVT::v4f32 || LoadVT == MVT::v4i32))
10250         return expandVSXLoadForLE(N, DCI);
10251     }
10252
10253     EVT MemVT = LD->getMemoryVT();
10254     Type *Ty = MemVT.getTypeForEVT(*DAG.getContext());
10255     unsigned ABIAlignment = DAG.getDataLayout().getABITypeAlignment(Ty);
10256     Type *STy = MemVT.getScalarType().getTypeForEVT(*DAG.getContext());
10257     unsigned ScalarABIAlignment = DAG.getDataLayout().getABITypeAlignment(STy);
10258     if (LD->isUnindexed() && VT.isVector() &&
10259         ((Subtarget.hasAltivec() && ISD::isNON_EXTLoad(N) &&
10260           // P8 and later hardware should just use LOAD.
10261           !Subtarget.hasP8Vector() && (VT == MVT::v16i8 || VT == MVT::v8i16 ||
10262                                        VT == MVT::v4i32 || VT == MVT::v4f32)) ||
10263          (Subtarget.hasQPX() && (VT == MVT::v4f64 || VT == MVT::v4f32) &&
10264           LD->getAlignment() >= ScalarABIAlignment)) &&
10265         LD->getAlignment() < ABIAlignment) {
10266       // This is a type-legal unaligned Altivec or QPX load.
10267       SDValue Chain = LD->getChain();
10268       SDValue Ptr = LD->getBasePtr();
10269       bool isLittleEndian = Subtarget.isLittleEndian();
10270
10271       // This implements the loading of unaligned vectors as described in
10272       // the venerable Apple Velocity Engine overview. Specifically:
10273       // https://developer.apple.com/hardwaredrivers/ve/alignment.html
10274       // https://developer.apple.com/hardwaredrivers/ve/code_optimization.html
10275       //
10276       // The general idea is to expand a sequence of one or more unaligned
10277       // loads into an alignment-based permutation-control instruction (lvsl
10278       // or lvsr), a series of regular vector loads (which always truncate
10279       // their input address to an aligned address), and a series of
10280       // permutations.  The results of these permutations are the requested
10281       // loaded values.  The trick is that the last "extra" load is not taken
10282       // from the address you might suspect (sizeof(vector) bytes after the
10283       // last requested load), but rather sizeof(vector) - 1 bytes after the
10284       // last requested vector. The point of this is to avoid a page fault if
10285       // the base address happened to be aligned. This works because if the
10286       // base address is aligned, then adding less than a full vector length
10287       // will cause the last vector in the sequence to be (re)loaded.
10288       // Otherwise, the next vector will be fetched as you might suspect was
10289       // necessary.
10290
10291       // We might be able to reuse the permutation generation from
10292       // a different base address offset from this one by an aligned amount.
10293       // The INTRINSIC_WO_CHAIN DAG combine will attempt to perform this
10294       // optimization later.
10295       Intrinsic::ID Intr, IntrLD, IntrPerm;
10296       MVT PermCntlTy, PermTy, LDTy;
10297       if (Subtarget.hasAltivec()) {
10298         Intr = isLittleEndian ?  Intrinsic::ppc_altivec_lvsr :
10299                                  Intrinsic::ppc_altivec_lvsl;
10300         IntrLD = Intrinsic::ppc_altivec_lvx;
10301         IntrPerm = Intrinsic::ppc_altivec_vperm;
10302         PermCntlTy = MVT::v16i8;
10303         PermTy = MVT::v4i32;
10304         LDTy = MVT::v4i32;
10305       } else {
10306         Intr =   MemVT == MVT::v4f64 ? Intrinsic::ppc_qpx_qvlpcld :
10307                                        Intrinsic::ppc_qpx_qvlpcls;
10308         IntrLD = MemVT == MVT::v4f64 ? Intrinsic::ppc_qpx_qvlfd :
10309                                        Intrinsic::ppc_qpx_qvlfs;
10310         IntrPerm = Intrinsic::ppc_qpx_qvfperm;
10311         PermCntlTy = MVT::v4f64;
10312         PermTy = MVT::v4f64;
10313         LDTy = MemVT.getSimpleVT();
10314       }
10315
10316       SDValue PermCntl = BuildIntrinsicOp(Intr, Ptr, DAG, dl, PermCntlTy);
10317
10318       // Create the new MMO for the new base load. It is like the original MMO,
10319       // but represents an area in memory almost twice the vector size centered
10320       // on the original address. If the address is unaligned, we might start
10321       // reading up to (sizeof(vector)-1) bytes below the address of the
10322       // original unaligned load.
10323       MachineFunction &MF = DAG.getMachineFunction();
10324       MachineMemOperand *BaseMMO =
10325         MF.getMachineMemOperand(LD->getMemOperand(),
10326                                 -(long)MemVT.getStoreSize()+1,
10327                                 2*MemVT.getStoreSize()-1);
10328
10329       // Create the new base load.
10330       SDValue LDXIntID =
10331           DAG.getTargetConstant(IntrLD, dl, getPointerTy(MF.getDataLayout()));
10332       SDValue BaseLoadOps[] = { Chain, LDXIntID, Ptr };
10333       SDValue BaseLoad =
10334         DAG.getMemIntrinsicNode(ISD::INTRINSIC_W_CHAIN, dl,
10335                                 DAG.getVTList(PermTy, MVT::Other),
10336                                 BaseLoadOps, LDTy, BaseMMO);
10337
10338       // Note that the value of IncOffset (which is provided to the next
10339       // load's pointer info offset value, and thus used to calculate the
10340       // alignment), and the value of IncValue (which is actually used to
10341       // increment the pointer value) are different! This is because we
10342       // require the next load to appear to be aligned, even though it
10343       // is actually offset from the base pointer by a lesser amount.
10344       int IncOffset = VT.getSizeInBits() / 8;
10345       int IncValue = IncOffset;
10346
10347       // Walk (both up and down) the chain looking for another load at the real
10348       // (aligned) offset (the alignment of the other load does not matter in
10349       // this case). If found, then do not use the offset reduction trick, as
10350       // that will prevent the loads from being later combined (as they would
10351       // otherwise be duplicates).
10352       if (!findConsecutiveLoad(LD, DAG))
10353         --IncValue;
10354
10355       SDValue Increment =
10356           DAG.getConstant(IncValue, dl, getPointerTy(MF.getDataLayout()));
10357       Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr, Increment);
10358
10359       MachineMemOperand *ExtraMMO =
10360         MF.getMachineMemOperand(LD->getMemOperand(),
10361                                 1, 2*MemVT.getStoreSize()-1);
10362       SDValue ExtraLoadOps[] = { Chain, LDXIntID, Ptr };
10363       SDValue ExtraLoad =
10364         DAG.getMemIntrinsicNode(ISD::INTRINSIC_W_CHAIN, dl,
10365                                 DAG.getVTList(PermTy, MVT::Other),
10366                                 ExtraLoadOps, LDTy, ExtraMMO);
10367
10368       SDValue TF = DAG.getNode(ISD::TokenFactor, dl, MVT::Other,
10369         BaseLoad.getValue(1), ExtraLoad.getValue(1));
10370
10371       // Because vperm has a big-endian bias, we must reverse the order
10372       // of the input vectors and complement the permute control vector
10373       // when generating little endian code.  We have already handled the
10374       // latter by using lvsr instead of lvsl, so just reverse BaseLoad
10375       // and ExtraLoad here.
10376       SDValue Perm;
10377       if (isLittleEndian)
10378         Perm = BuildIntrinsicOp(IntrPerm,
10379                                 ExtraLoad, BaseLoad, PermCntl, DAG, dl);
10380       else
10381         Perm = BuildIntrinsicOp(IntrPerm,
10382                                 BaseLoad, ExtraLoad, PermCntl, DAG, dl);
10383
10384       if (VT != PermTy)
10385         Perm = Subtarget.hasAltivec() ?
10386                  DAG.getNode(ISD::BITCAST, dl, VT, Perm) :
10387                  DAG.getNode(ISD::FP_ROUND, dl, VT, Perm, // QPX
10388                                DAG.getTargetConstant(1, dl, MVT::i64));
10389                                // second argument is 1 because this rounding
10390                                // is always exact.
10391
10392       // The output of the permutation is our loaded result, the TokenFactor is
10393       // our new chain.
10394       DCI.CombineTo(N, Perm, TF);
10395       return SDValue(N, 0);
10396     }
10397     }
10398     break;
10399     case ISD::INTRINSIC_WO_CHAIN: {
10400       bool isLittleEndian = Subtarget.isLittleEndian();
10401       unsigned IID = cast<ConstantSDNode>(N->getOperand(0))->getZExtValue();
10402       Intrinsic::ID Intr = (isLittleEndian ? Intrinsic::ppc_altivec_lvsr
10403                                            : Intrinsic::ppc_altivec_lvsl);
10404       if ((IID == Intr ||
10405            IID == Intrinsic::ppc_qpx_qvlpcld  ||
10406            IID == Intrinsic::ppc_qpx_qvlpcls) &&
10407         N->getOperand(1)->getOpcode() == ISD::ADD) {
10408         SDValue Add = N->getOperand(1);
10409
10410         int Bits = IID == Intrinsic::ppc_qpx_qvlpcld ?
10411                    5 /* 32 byte alignment */ : 4 /* 16 byte alignment */;
10412
10413         if (DAG.MaskedValueIsZero(
10414                 Add->getOperand(1),
10415                 APInt::getAllOnesValue(Bits /* alignment */)
10416                     .zext(
10417                         Add.getValueType().getScalarType().getSizeInBits()))) {
10418           SDNode *BasePtr = Add->getOperand(0).getNode();
10419           for (SDNode::use_iterator UI = BasePtr->use_begin(),
10420                                     UE = BasePtr->use_end();
10421                UI != UE; ++UI) {
10422             if (UI->getOpcode() == ISD::INTRINSIC_WO_CHAIN &&
10423                 cast<ConstantSDNode>(UI->getOperand(0))->getZExtValue() == IID) {
10424               // We've found another LVSL/LVSR, and this address is an aligned
10425               // multiple of that one. The results will be the same, so use the
10426               // one we've just found instead.
10427
10428               return SDValue(*UI, 0);
10429             }
10430           }
10431         }
10432
10433         if (isa<ConstantSDNode>(Add->getOperand(1))) {
10434           SDNode *BasePtr = Add->getOperand(0).getNode();
10435           for (SDNode::use_iterator UI = BasePtr->use_begin(),
10436                UE = BasePtr->use_end(); UI != UE; ++UI) {
10437             if (UI->getOpcode() == ISD::ADD &&
10438                 isa<ConstantSDNode>(UI->getOperand(1)) &&
10439                 (cast<ConstantSDNode>(Add->getOperand(1))->getZExtValue() -
10440                  cast<ConstantSDNode>(UI->getOperand(1))->getZExtValue()) %
10441                 (1ULL << Bits) == 0) {
10442               SDNode *OtherAdd = *UI;
10443               for (SDNode::use_iterator VI = OtherAdd->use_begin(),
10444                    VE = OtherAdd->use_end(); VI != VE; ++VI) {
10445                 if (VI->getOpcode() == ISD::INTRINSIC_WO_CHAIN &&
10446                     cast<ConstantSDNode>(VI->getOperand(0))->getZExtValue() == IID) {
10447                   return SDValue(*VI, 0);
10448                 }
10449               }
10450             }
10451           }
10452         }
10453       }
10454     }
10455
10456     break;
10457   case ISD::INTRINSIC_W_CHAIN: {
10458     // For little endian, VSX loads require generating lxvd2x/xxswapd.
10459     if (Subtarget.hasVSX() && Subtarget.isLittleEndian()) {
10460       switch (cast<ConstantSDNode>(N->getOperand(1))->getZExtValue()) {
10461       default:
10462         break;
10463       case Intrinsic::ppc_vsx_lxvw4x:
10464       case Intrinsic::ppc_vsx_lxvd2x:
10465         return expandVSXLoadForLE(N, DCI);
10466       }
10467     }
10468     break;
10469   }
10470   case ISD::INTRINSIC_VOID: {
10471     // For little endian, VSX stores require generating xxswapd/stxvd2x.
10472     if (Subtarget.hasVSX() && Subtarget.isLittleEndian()) {
10473       switch (cast<ConstantSDNode>(N->getOperand(1))->getZExtValue()) {
10474       default:
10475         break;
10476       case Intrinsic::ppc_vsx_stxvw4x:
10477       case Intrinsic::ppc_vsx_stxvd2x:
10478         return expandVSXStoreForLE(N, DCI);
10479       }
10480     }
10481     break;
10482   }
10483   case ISD::BSWAP:
10484     // Turn BSWAP (LOAD) -> lhbrx/lwbrx.
10485     if (ISD::isNON_EXTLoad(N->getOperand(0).getNode()) &&
10486         N->getOperand(0).hasOneUse() &&
10487         (N->getValueType(0) == MVT::i32 || N->getValueType(0) == MVT::i16 ||
10488          (Subtarget.hasLDBRX() && Subtarget.isPPC64() &&
10489           N->getValueType(0) == MVT::i64))) {
10490       SDValue Load = N->getOperand(0);
10491       LoadSDNode *LD = cast<LoadSDNode>(Load);
10492       // Create the byte-swapping load.
10493       SDValue Ops[] = {
10494         LD->getChain(),    // Chain
10495         LD->getBasePtr(),  // Ptr
10496         DAG.getValueType(N->getValueType(0)) // VT
10497       };
10498       SDValue BSLoad =
10499         DAG.getMemIntrinsicNode(PPCISD::LBRX, dl,
10500                                 DAG.getVTList(N->getValueType(0) == MVT::i64 ?
10501                                               MVT::i64 : MVT::i32, MVT::Other),
10502                                 Ops, LD->getMemoryVT(), LD->getMemOperand());
10503
10504       // If this is an i16 load, insert the truncate.
10505       SDValue ResVal = BSLoad;
10506       if (N->getValueType(0) == MVT::i16)
10507         ResVal = DAG.getNode(ISD::TRUNCATE, dl, MVT::i16, BSLoad);
10508
10509       // First, combine the bswap away.  This makes the value produced by the
10510       // load dead.
10511       DCI.CombineTo(N, ResVal);
10512
10513       // Next, combine the load away, we give it a bogus result value but a real
10514       // chain result.  The result value is dead because the bswap is dead.
10515       DCI.CombineTo(Load.getNode(), ResVal, BSLoad.getValue(1));
10516
10517       // Return N so it doesn't get rechecked!
10518       return SDValue(N, 0);
10519     }
10520
10521     break;
10522   case PPCISD::VCMP: {
10523     // If a VCMPo node already exists with exactly the same operands as this
10524     // node, use its result instead of this node (VCMPo computes both a CR6 and
10525     // a normal output).
10526     //
10527     if (!N->getOperand(0).hasOneUse() &&
10528         !N->getOperand(1).hasOneUse() &&
10529         !N->getOperand(2).hasOneUse()) {
10530
10531       // Scan all of the users of the LHS, looking for VCMPo's that match.
10532       SDNode *VCMPoNode = nullptr;
10533
10534       SDNode *LHSN = N->getOperand(0).getNode();
10535       for (SDNode::use_iterator UI = LHSN->use_begin(), E = LHSN->use_end();
10536            UI != E; ++UI)
10537         if (UI->getOpcode() == PPCISD::VCMPo &&
10538             UI->getOperand(1) == N->getOperand(1) &&
10539             UI->getOperand(2) == N->getOperand(2) &&
10540             UI->getOperand(0) == N->getOperand(0)) {
10541           VCMPoNode = *UI;
10542           break;
10543         }
10544
10545       // If there is no VCMPo node, or if the flag value has a single use, don't
10546       // transform this.
10547       if (!VCMPoNode || VCMPoNode->hasNUsesOfValue(0, 1))
10548         break;
10549
10550       // Look at the (necessarily single) use of the flag value.  If it has a
10551       // chain, this transformation is more complex.  Note that multiple things
10552       // could use the value result, which we should ignore.
10553       SDNode *FlagUser = nullptr;
10554       for (SDNode::use_iterator UI = VCMPoNode->use_begin();
10555            FlagUser == nullptr; ++UI) {
10556         assert(UI != VCMPoNode->use_end() && "Didn't find user!");
10557         SDNode *User = *UI;
10558         for (unsigned i = 0, e = User->getNumOperands(); i != e; ++i) {
10559           if (User->getOperand(i) == SDValue(VCMPoNode, 1)) {
10560             FlagUser = User;
10561             break;
10562           }
10563         }
10564       }
10565
10566       // If the user is a MFOCRF instruction, we know this is safe.
10567       // Otherwise we give up for right now.
10568       if (FlagUser->getOpcode() == PPCISD::MFOCRF)
10569         return SDValue(VCMPoNode, 0);
10570     }
10571     break;
10572   }
10573   case ISD::BRCOND: {
10574     SDValue Cond = N->getOperand(1);
10575     SDValue Target = N->getOperand(2);
10576
10577     if (Cond.getOpcode() == ISD::INTRINSIC_W_CHAIN &&
10578         cast<ConstantSDNode>(Cond.getOperand(1))->getZExtValue() ==
10579           Intrinsic::ppc_is_decremented_ctr_nonzero) {
10580
10581       // We now need to make the intrinsic dead (it cannot be instruction
10582       // selected).
10583       DAG.ReplaceAllUsesOfValueWith(Cond.getValue(1), Cond.getOperand(0));
10584       assert(Cond.getNode()->hasOneUse() &&
10585              "Counter decrement has more than one use");
10586
10587       return DAG.getNode(PPCISD::BDNZ, dl, MVT::Other,
10588                          N->getOperand(0), Target);
10589     }
10590   }
10591   break;
10592   case ISD::BR_CC: {
10593     // If this is a branch on an altivec predicate comparison, lower this so
10594     // that we don't have to do a MFOCRF: instead, branch directly on CR6.  This
10595     // lowering is done pre-legalize, because the legalizer lowers the predicate
10596     // compare down to code that is difficult to reassemble.
10597     ISD::CondCode CC = cast<CondCodeSDNode>(N->getOperand(1))->get();
10598     SDValue LHS = N->getOperand(2), RHS = N->getOperand(3);
10599
10600     // Sometimes the promoted value of the intrinsic is ANDed by some non-zero
10601     // value. If so, pass-through the AND to get to the intrinsic.
10602     if (LHS.getOpcode() == ISD::AND &&
10603         LHS.getOperand(0).getOpcode() == ISD::INTRINSIC_W_CHAIN &&
10604         cast<ConstantSDNode>(LHS.getOperand(0).getOperand(1))->getZExtValue() ==
10605           Intrinsic::ppc_is_decremented_ctr_nonzero &&
10606         isa<ConstantSDNode>(LHS.getOperand(1)) &&
10607         !cast<ConstantSDNode>(LHS.getOperand(1))->getConstantIntValue()->
10608           isZero())
10609       LHS = LHS.getOperand(0);
10610
10611     if (LHS.getOpcode() == ISD::INTRINSIC_W_CHAIN &&
10612         cast<ConstantSDNode>(LHS.getOperand(1))->getZExtValue() ==
10613           Intrinsic::ppc_is_decremented_ctr_nonzero &&
10614         isa<ConstantSDNode>(RHS)) {
10615       assert((CC == ISD::SETEQ || CC == ISD::SETNE) &&
10616              "Counter decrement comparison is not EQ or NE");
10617
10618       unsigned Val = cast<ConstantSDNode>(RHS)->getZExtValue();
10619       bool isBDNZ = (CC == ISD::SETEQ && Val) ||
10620                     (CC == ISD::SETNE && !Val);
10621
10622       // We now need to make the intrinsic dead (it cannot be instruction
10623       // selected).
10624       DAG.ReplaceAllUsesOfValueWith(LHS.getValue(1), LHS.getOperand(0));
10625       assert(LHS.getNode()->hasOneUse() &&
10626              "Counter decrement has more than one use");
10627
10628       return DAG.getNode(isBDNZ ? PPCISD::BDNZ : PPCISD::BDZ, dl, MVT::Other,
10629                          N->getOperand(0), N->getOperand(4));
10630     }
10631
10632     int CompareOpc;
10633     bool isDot;
10634
10635     if (LHS.getOpcode() == ISD::INTRINSIC_WO_CHAIN &&
10636         isa<ConstantSDNode>(RHS) && (CC == ISD::SETEQ || CC == ISD::SETNE) &&
10637         getVectorCompareInfo(LHS, CompareOpc, isDot, Subtarget)) {
10638       assert(isDot && "Can't compare against a vector result!");
10639
10640       // If this is a comparison against something other than 0/1, then we know
10641       // that the condition is never/always true.
10642       unsigned Val = cast<ConstantSDNode>(RHS)->getZExtValue();
10643       if (Val != 0 && Val != 1) {
10644         if (CC == ISD::SETEQ)      // Cond never true, remove branch.
10645           return N->getOperand(0);
10646         // Always !=, turn it into an unconditional branch.
10647         return DAG.getNode(ISD::BR, dl, MVT::Other,
10648                            N->getOperand(0), N->getOperand(4));
10649       }
10650
10651       bool BranchOnWhenPredTrue = (CC == ISD::SETEQ) ^ (Val == 0);
10652
10653       // Create the PPCISD altivec 'dot' comparison node.
10654       SDValue Ops[] = {
10655         LHS.getOperand(2),  // LHS of compare
10656         LHS.getOperand(3),  // RHS of compare
10657         DAG.getConstant(CompareOpc, dl, MVT::i32)
10658       };
10659       EVT VTs[] = { LHS.getOperand(2).getValueType(), MVT::Glue };
10660       SDValue CompNode = DAG.getNode(PPCISD::VCMPo, dl, VTs, Ops);
10661
10662       // Unpack the result based on how the target uses it.
10663       PPC::Predicate CompOpc;
10664       switch (cast<ConstantSDNode>(LHS.getOperand(1))->getZExtValue()) {
10665       default:  // Can't happen, don't crash on invalid number though.
10666       case 0:   // Branch on the value of the EQ bit of CR6.
10667         CompOpc = BranchOnWhenPredTrue ? PPC::PRED_EQ : PPC::PRED_NE;
10668         break;
10669       case 1:   // Branch on the inverted value of the EQ bit of CR6.
10670         CompOpc = BranchOnWhenPredTrue ? PPC::PRED_NE : PPC::PRED_EQ;
10671         break;
10672       case 2:   // Branch on the value of the LT bit of CR6.
10673         CompOpc = BranchOnWhenPredTrue ? PPC::PRED_LT : PPC::PRED_GE;
10674         break;
10675       case 3:   // Branch on the inverted value of the LT bit of CR6.
10676         CompOpc = BranchOnWhenPredTrue ? PPC::PRED_GE : PPC::PRED_LT;
10677         break;
10678       }
10679
10680       return DAG.getNode(PPCISD::COND_BRANCH, dl, MVT::Other, N->getOperand(0),
10681                          DAG.getConstant(CompOpc, dl, MVT::i32),
10682                          DAG.getRegister(PPC::CR6, MVT::i32),
10683                          N->getOperand(4), CompNode.getValue(1));
10684     }
10685     break;
10686   }
10687   }
10688
10689   return SDValue();
10690 }
10691
10692 SDValue
10693 PPCTargetLowering::BuildSDIVPow2(SDNode *N, const APInt &Divisor,
10694                                   SelectionDAG &DAG,
10695                                   std::vector<SDNode *> *Created) const {
10696   // fold (sdiv X, pow2)
10697   EVT VT = N->getValueType(0);
10698   if (VT == MVT::i64 && !Subtarget.isPPC64())
10699     return SDValue();
10700   if ((VT != MVT::i32 && VT != MVT::i64) ||
10701       !(Divisor.isPowerOf2() || (-Divisor).isPowerOf2()))
10702     return SDValue();
10703
10704   SDLoc DL(N);
10705   SDValue N0 = N->getOperand(0);
10706
10707   bool IsNegPow2 = (-Divisor).isPowerOf2();
10708   unsigned Lg2 = (IsNegPow2 ? -Divisor : Divisor).countTrailingZeros();
10709   SDValue ShiftAmt = DAG.getConstant(Lg2, DL, VT);
10710
10711   SDValue Op = DAG.getNode(PPCISD::SRA_ADDZE, DL, VT, N0, ShiftAmt);
10712   if (Created)
10713     Created->push_back(Op.getNode());
10714
10715   if (IsNegPow2) {
10716     Op = DAG.getNode(ISD::SUB, DL, VT, DAG.getConstant(0, DL, VT), Op);
10717     if (Created)
10718       Created->push_back(Op.getNode());
10719   }
10720
10721   return Op;
10722 }
10723
10724 //===----------------------------------------------------------------------===//
10725 // Inline Assembly Support
10726 //===----------------------------------------------------------------------===//
10727
10728 void PPCTargetLowering::computeKnownBitsForTargetNode(const SDValue Op,
10729                                                       APInt &KnownZero,
10730                                                       APInt &KnownOne,
10731                                                       const SelectionDAG &DAG,
10732                                                       unsigned Depth) const {
10733   KnownZero = KnownOne = APInt(KnownZero.getBitWidth(), 0);
10734   switch (Op.getOpcode()) {
10735   default: break;
10736   case PPCISD::LBRX: {
10737     // lhbrx is known to have the top bits cleared out.
10738     if (cast<VTSDNode>(Op.getOperand(2))->getVT() == MVT::i16)
10739       KnownZero = 0xFFFF0000;
10740     break;
10741   }
10742   case ISD::INTRINSIC_WO_CHAIN: {
10743     switch (cast<ConstantSDNode>(Op.getOperand(0))->getZExtValue()) {
10744     default: break;
10745     case Intrinsic::ppc_altivec_vcmpbfp_p:
10746     case Intrinsic::ppc_altivec_vcmpeqfp_p:
10747     case Intrinsic::ppc_altivec_vcmpequb_p:
10748     case Intrinsic::ppc_altivec_vcmpequh_p:
10749     case Intrinsic::ppc_altivec_vcmpequw_p:
10750     case Intrinsic::ppc_altivec_vcmpequd_p:
10751     case Intrinsic::ppc_altivec_vcmpgefp_p:
10752     case Intrinsic::ppc_altivec_vcmpgtfp_p:
10753     case Intrinsic::ppc_altivec_vcmpgtsb_p:
10754     case Intrinsic::ppc_altivec_vcmpgtsh_p:
10755     case Intrinsic::ppc_altivec_vcmpgtsw_p:
10756     case Intrinsic::ppc_altivec_vcmpgtsd_p:
10757     case Intrinsic::ppc_altivec_vcmpgtub_p:
10758     case Intrinsic::ppc_altivec_vcmpgtuh_p:
10759     case Intrinsic::ppc_altivec_vcmpgtuw_p:
10760     case Intrinsic::ppc_altivec_vcmpgtud_p:
10761       KnownZero = ~1U;  // All bits but the low one are known to be zero.
10762       break;
10763     }
10764   }
10765   }
10766 }
10767
10768 unsigned PPCTargetLowering::getPrefLoopAlignment(MachineLoop *ML) const {
10769   switch (Subtarget.getDarwinDirective()) {
10770   default: break;
10771   case PPC::DIR_970:
10772   case PPC::DIR_PWR4:
10773   case PPC::DIR_PWR5:
10774   case PPC::DIR_PWR5X:
10775   case PPC::DIR_PWR6:
10776   case PPC::DIR_PWR6X:
10777   case PPC::DIR_PWR7:
10778   case PPC::DIR_PWR8: {
10779     if (!ML)
10780       break;
10781
10782     const PPCInstrInfo *TII = Subtarget.getInstrInfo();
10783
10784     // For small loops (between 5 and 8 instructions), align to a 32-byte
10785     // boundary so that the entire loop fits in one instruction-cache line.
10786     uint64_t LoopSize = 0;
10787     for (auto I = ML->block_begin(), IE = ML->block_end(); I != IE; ++I)
10788       for (auto J = (*I)->begin(), JE = (*I)->end(); J != JE; ++J)
10789         LoopSize += TII->GetInstSizeInBytes(J);
10790
10791     if (LoopSize > 16 && LoopSize <= 32)
10792       return 5;
10793
10794     break;
10795   }
10796   }
10797
10798   return TargetLowering::getPrefLoopAlignment(ML);
10799 }
10800
10801 /// getConstraintType - Given a constraint, return the type of
10802 /// constraint it is for this target.
10803 PPCTargetLowering::ConstraintType
10804 PPCTargetLowering::getConstraintType(StringRef Constraint) const {
10805   if (Constraint.size() == 1) {
10806     switch (Constraint[0]) {
10807     default: break;
10808     case 'b':
10809     case 'r':
10810     case 'f':
10811     case 'v':
10812     case 'y':
10813       return C_RegisterClass;
10814     case 'Z':
10815       // FIXME: While Z does indicate a memory constraint, it specifically
10816       // indicates an r+r address (used in conjunction with the 'y' modifier
10817       // in the replacement string). Currently, we're forcing the base
10818       // register to be r0 in the asm printer (which is interpreted as zero)
10819       // and forming the complete address in the second register. This is
10820       // suboptimal.
10821       return C_Memory;
10822     }
10823   } else if (Constraint == "wc") { // individual CR bits.
10824     return C_RegisterClass;
10825   } else if (Constraint == "wa" || Constraint == "wd" ||
10826              Constraint == "wf" || Constraint == "ws") {
10827     return C_RegisterClass; // VSX registers.
10828   }
10829   return TargetLowering::getConstraintType(Constraint);
10830 }
10831
10832 /// Examine constraint type and operand type and determine a weight value.
10833 /// This object must already have been set up with the operand type
10834 /// and the current alternative constraint selected.
10835 TargetLowering::ConstraintWeight
10836 PPCTargetLowering::getSingleConstraintMatchWeight(
10837     AsmOperandInfo &info, const char *constraint) const {
10838   ConstraintWeight weight = CW_Invalid;
10839   Value *CallOperandVal = info.CallOperandVal;
10840     // If we don't have a value, we can't do a match,
10841     // but allow it at the lowest weight.
10842   if (!CallOperandVal)
10843     return CW_Default;
10844   Type *type = CallOperandVal->getType();
10845
10846   // Look at the constraint type.
10847   if (StringRef(constraint) == "wc" && type->isIntegerTy(1))
10848     return CW_Register; // an individual CR bit.
10849   else if ((StringRef(constraint) == "wa" ||
10850             StringRef(constraint) == "wd" ||
10851             StringRef(constraint) == "wf") &&
10852            type->isVectorTy())
10853     return CW_Register;
10854   else if (StringRef(constraint) == "ws" && type->isDoubleTy())
10855     return CW_Register;
10856
10857   switch (*constraint) {
10858   default:
10859     weight = TargetLowering::getSingleConstraintMatchWeight(info, constraint);
10860     break;
10861   case 'b':
10862     if (type->isIntegerTy())
10863       weight = CW_Register;
10864     break;
10865   case 'f':
10866     if (type->isFloatTy())
10867       weight = CW_Register;
10868     break;
10869   case 'd':
10870     if (type->isDoubleTy())
10871       weight = CW_Register;
10872     break;
10873   case 'v':
10874     if (type->isVectorTy())
10875       weight = CW_Register;
10876     break;
10877   case 'y':
10878     weight = CW_Register;
10879     break;
10880   case 'Z':
10881     weight = CW_Memory;
10882     break;
10883   }
10884   return weight;
10885 }
10886
10887 std::pair<unsigned, const TargetRegisterClass *>
10888 PPCTargetLowering::getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
10889                                                 StringRef Constraint,
10890                                                 MVT VT) const {
10891   if (Constraint.size() == 1) {
10892     // GCC RS6000 Constraint Letters
10893     switch (Constraint[0]) {
10894     case 'b':   // R1-R31
10895       if (VT == MVT::i64 && Subtarget.isPPC64())
10896         return std::make_pair(0U, &PPC::G8RC_NOX0RegClass);
10897       return std::make_pair(0U, &PPC::GPRC_NOR0RegClass);
10898     case 'r':   // R0-R31
10899       if (VT == MVT::i64 && Subtarget.isPPC64())
10900         return std::make_pair(0U, &PPC::G8RCRegClass);
10901       return std::make_pair(0U, &PPC::GPRCRegClass);
10902     case 'f':
10903       if (VT == MVT::f32 || VT == MVT::i32)
10904         return std::make_pair(0U, &PPC::F4RCRegClass);
10905       if (VT == MVT::f64 || VT == MVT::i64)
10906         return std::make_pair(0U, &PPC::F8RCRegClass);
10907       if (VT == MVT::v4f64 && Subtarget.hasQPX())
10908         return std::make_pair(0U, &PPC::QFRCRegClass);
10909       if (VT == MVT::v4f32 && Subtarget.hasQPX())
10910         return std::make_pair(0U, &PPC::QSRCRegClass);
10911       break;
10912     case 'v':
10913       if (VT == MVT::v4f64 && Subtarget.hasQPX())
10914         return std::make_pair(0U, &PPC::QFRCRegClass);
10915       if (VT == MVT::v4f32 && Subtarget.hasQPX())
10916         return std::make_pair(0U, &PPC::QSRCRegClass);
10917       if (Subtarget.hasAltivec())
10918         return std::make_pair(0U, &PPC::VRRCRegClass);
10919     case 'y':   // crrc
10920       return std::make_pair(0U, &PPC::CRRCRegClass);
10921     }
10922   } else if (Constraint == "wc" && Subtarget.useCRBits()) {
10923     // An individual CR bit.
10924     return std::make_pair(0U, &PPC::CRBITRCRegClass);
10925   } else if ((Constraint == "wa" || Constraint == "wd" ||
10926              Constraint == "wf") && Subtarget.hasVSX()) {
10927     return std::make_pair(0U, &PPC::VSRCRegClass);
10928   } else if (Constraint == "ws" && Subtarget.hasVSX()) {
10929     if (VT == MVT::f32 && Subtarget.hasP8Vector())
10930       return std::make_pair(0U, &PPC::VSSRCRegClass);
10931     else
10932       return std::make_pair(0U, &PPC::VSFRCRegClass);
10933   }
10934
10935   std::pair<unsigned, const TargetRegisterClass *> R =
10936       TargetLowering::getRegForInlineAsmConstraint(TRI, Constraint, VT);
10937
10938   // r[0-9]+ are used, on PPC64, to refer to the corresponding 64-bit registers
10939   // (which we call X[0-9]+). If a 64-bit value has been requested, and a
10940   // 32-bit GPR has been selected, then 'upgrade' it to the 64-bit parent
10941   // register.
10942   // FIXME: If TargetLowering::getRegForInlineAsmConstraint could somehow use
10943   // the AsmName field from *RegisterInfo.td, then this would not be necessary.
10944   if (R.first && VT == MVT::i64 && Subtarget.isPPC64() &&
10945       PPC::GPRCRegClass.contains(R.first))
10946     return std::make_pair(TRI->getMatchingSuperReg(R.first,
10947                             PPC::sub_32, &PPC::G8RCRegClass),
10948                           &PPC::G8RCRegClass);
10949
10950   // GCC accepts 'cc' as an alias for 'cr0', and we need to do the same.
10951   if (!R.second && StringRef("{cc}").equals_lower(Constraint)) {
10952     R.first = PPC::CR0;
10953     R.second = &PPC::CRRCRegClass;
10954   }
10955
10956   return R;
10957 }
10958
10959 /// LowerAsmOperandForConstraint - Lower the specified operand into the Ops
10960 /// vector.  If it is invalid, don't add anything to Ops.
10961 void PPCTargetLowering::LowerAsmOperandForConstraint(SDValue Op,
10962                                                      std::string &Constraint,
10963                                                      std::vector<SDValue>&Ops,
10964                                                      SelectionDAG &DAG) const {
10965   SDValue Result;
10966
10967   // Only support length 1 constraints.
10968   if (Constraint.length() > 1) return;
10969
10970   char Letter = Constraint[0];
10971   switch (Letter) {
10972   default: break;
10973   case 'I':
10974   case 'J':
10975   case 'K':
10976   case 'L':
10977   case 'M':
10978   case 'N':
10979   case 'O':
10980   case 'P': {
10981     ConstantSDNode *CST = dyn_cast<ConstantSDNode>(Op);
10982     if (!CST) return; // Must be an immediate to match.
10983     SDLoc dl(Op);
10984     int64_t Value = CST->getSExtValue();
10985     EVT TCVT = MVT::i64; // All constants taken to be 64 bits so that negative
10986                          // numbers are printed as such.
10987     switch (Letter) {
10988     default: llvm_unreachable("Unknown constraint letter!");
10989     case 'I':  // "I" is a signed 16-bit constant.
10990       if (isInt<16>(Value))
10991         Result = DAG.getTargetConstant(Value, dl, TCVT);
10992       break;
10993     case 'J':  // "J" is a constant with only the high-order 16 bits nonzero.
10994       if (isShiftedUInt<16, 16>(Value))
10995         Result = DAG.getTargetConstant(Value, dl, TCVT);
10996       break;
10997     case 'L':  // "L" is a signed 16-bit constant shifted left 16 bits.
10998       if (isShiftedInt<16, 16>(Value))
10999         Result = DAG.getTargetConstant(Value, dl, TCVT);
11000       break;
11001     case 'K':  // "K" is a constant with only the low-order 16 bits nonzero.
11002       if (isUInt<16>(Value))
11003         Result = DAG.getTargetConstant(Value, dl, TCVT);
11004       break;
11005     case 'M':  // "M" is a constant that is greater than 31.
11006       if (Value > 31)
11007         Result = DAG.getTargetConstant(Value, dl, TCVT);
11008       break;
11009     case 'N':  // "N" is a positive constant that is an exact power of two.
11010       if (Value > 0 && isPowerOf2_64(Value))
11011         Result = DAG.getTargetConstant(Value, dl, TCVT);
11012       break;
11013     case 'O':  // "O" is the constant zero.
11014       if (Value == 0)
11015         Result = DAG.getTargetConstant(Value, dl, TCVT);
11016       break;
11017     case 'P':  // "P" is a constant whose negation is a signed 16-bit constant.
11018       if (isInt<16>(-Value))
11019         Result = DAG.getTargetConstant(Value, dl, TCVT);
11020       break;
11021     }
11022     break;
11023   }
11024   }
11025
11026   if (Result.getNode()) {
11027     Ops.push_back(Result);
11028     return;
11029   }
11030
11031   // Handle standard constraint letters.
11032   TargetLowering::LowerAsmOperandForConstraint(Op, Constraint, Ops, DAG);
11033 }
11034
11035 // isLegalAddressingMode - Return true if the addressing mode represented
11036 // by AM is legal for this target, for a load/store of the specified type.
11037 bool PPCTargetLowering::isLegalAddressingMode(const DataLayout &DL,
11038                                               const AddrMode &AM, Type *Ty,
11039                                               unsigned AS) const {
11040   // PPC does not allow r+i addressing modes for vectors!
11041   if (Ty->isVectorTy() && AM.BaseOffs != 0)
11042     return false;
11043
11044   // PPC allows a sign-extended 16-bit immediate field.
11045   if (AM.BaseOffs <= -(1LL << 16) || AM.BaseOffs >= (1LL << 16)-1)
11046     return false;
11047
11048   // No global is ever allowed as a base.
11049   if (AM.BaseGV)
11050     return false;
11051
11052   // PPC only support r+r,
11053   switch (AM.Scale) {
11054   case 0:  // "r+i" or just "i", depending on HasBaseReg.
11055     break;
11056   case 1:
11057     if (AM.HasBaseReg && AM.BaseOffs)  // "r+r+i" is not allowed.
11058       return false;
11059     // Otherwise we have r+r or r+i.
11060     break;
11061   case 2:
11062     if (AM.HasBaseReg || AM.BaseOffs)  // 2*r+r  or  2*r+i is not allowed.
11063       return false;
11064     // Allow 2*r as r+r.
11065     break;
11066   default:
11067     // No other scales are supported.
11068     return false;
11069   }
11070
11071   return true;
11072 }
11073
11074 SDValue PPCTargetLowering::LowerRETURNADDR(SDValue Op,
11075                                            SelectionDAG &DAG) const {
11076   MachineFunction &MF = DAG.getMachineFunction();
11077   MachineFrameInfo *MFI = MF.getFrameInfo();
11078   MFI->setReturnAddressIsTaken(true);
11079
11080   if (verifyReturnAddressArgumentIsConstant(Op, DAG))
11081     return SDValue();
11082
11083   SDLoc dl(Op);
11084   unsigned Depth = cast<ConstantSDNode>(Op.getOperand(0))->getZExtValue();
11085
11086   // Make sure the function does not optimize away the store of the RA to
11087   // the stack.
11088   PPCFunctionInfo *FuncInfo = MF.getInfo<PPCFunctionInfo>();
11089   FuncInfo->setLRStoreRequired();
11090   bool isPPC64 = Subtarget.isPPC64();
11091   auto PtrVT = getPointerTy(MF.getDataLayout());
11092
11093   if (Depth > 0) {
11094     SDValue FrameAddr = LowerFRAMEADDR(Op, DAG);
11095     SDValue Offset =
11096         DAG.getConstant(Subtarget.getFrameLowering()->getReturnSaveOffset(), dl,
11097                         isPPC64 ? MVT::i64 : MVT::i32);
11098     return DAG.getLoad(PtrVT, dl, DAG.getEntryNode(),
11099                        DAG.getNode(ISD::ADD, dl, PtrVT, FrameAddr, Offset),
11100                        MachinePointerInfo(), false, false, false, 0);
11101   }
11102
11103   // Just load the return address off the stack.
11104   SDValue RetAddrFI = getReturnAddrFrameIndex(DAG);
11105   return DAG.getLoad(PtrVT, dl, DAG.getEntryNode(), RetAddrFI,
11106                      MachinePointerInfo(), false, false, false, 0);
11107 }
11108
11109 SDValue PPCTargetLowering::LowerFRAMEADDR(SDValue Op,
11110                                           SelectionDAG &DAG) const {
11111   SDLoc dl(Op);
11112   unsigned Depth = cast<ConstantSDNode>(Op.getOperand(0))->getZExtValue();
11113
11114   MachineFunction &MF = DAG.getMachineFunction();
11115   MachineFrameInfo *MFI = MF.getFrameInfo();
11116   MFI->setFrameAddressIsTaken(true);
11117
11118   EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(MF.getDataLayout());
11119   bool isPPC64 = PtrVT == MVT::i64;
11120
11121   // Naked functions never have a frame pointer, and so we use r1. For all
11122   // other functions, this decision must be delayed until during PEI.
11123   unsigned FrameReg;
11124   if (MF.getFunction()->hasFnAttribute(Attribute::Naked))
11125     FrameReg = isPPC64 ? PPC::X1 : PPC::R1;
11126   else
11127     FrameReg = isPPC64 ? PPC::FP8 : PPC::FP;
11128
11129   SDValue FrameAddr = DAG.getCopyFromReg(DAG.getEntryNode(), dl, FrameReg,
11130                                          PtrVT);
11131   while (Depth--)
11132     FrameAddr = DAG.getLoad(Op.getValueType(), dl, DAG.getEntryNode(),
11133                             FrameAddr, MachinePointerInfo(), false, false,
11134                             false, 0);
11135   return FrameAddr;
11136 }
11137
11138 // FIXME? Maybe this could be a TableGen attribute on some registers and
11139 // this table could be generated automatically from RegInfo.
11140 unsigned PPCTargetLowering::getRegisterByName(const char* RegName, EVT VT,
11141                                               SelectionDAG &DAG) const {
11142   bool isPPC64 = Subtarget.isPPC64();
11143   bool isDarwinABI = Subtarget.isDarwinABI();
11144
11145   if ((isPPC64 && VT != MVT::i64 && VT != MVT::i32) ||
11146       (!isPPC64 && VT != MVT::i32))
11147     report_fatal_error("Invalid register global variable type");
11148
11149   bool is64Bit = isPPC64 && VT == MVT::i64;
11150   unsigned Reg = StringSwitch<unsigned>(RegName)
11151                    .Case("r1", is64Bit ? PPC::X1 : PPC::R1)
11152                    .Case("r2", (isDarwinABI || isPPC64) ? 0 : PPC::R2)
11153                    .Case("r13", (!isPPC64 && isDarwinABI) ? 0 :
11154                                   (is64Bit ? PPC::X13 : PPC::R13))
11155                    .Default(0);
11156
11157   if (Reg)
11158     return Reg;
11159   report_fatal_error("Invalid register name global variable");
11160 }
11161
11162 bool
11163 PPCTargetLowering::isOffsetFoldingLegal(const GlobalAddressSDNode *GA) const {
11164   // The PowerPC target isn't yet aware of offsets.
11165   return false;
11166 }
11167
11168 bool PPCTargetLowering::getTgtMemIntrinsic(IntrinsicInfo &Info,
11169                                            const CallInst &I,
11170                                            unsigned Intrinsic) const {
11171
11172   switch (Intrinsic) {
11173   case Intrinsic::ppc_qpx_qvlfd:
11174   case Intrinsic::ppc_qpx_qvlfs:
11175   case Intrinsic::ppc_qpx_qvlfcd:
11176   case Intrinsic::ppc_qpx_qvlfcs:
11177   case Intrinsic::ppc_qpx_qvlfiwa:
11178   case Intrinsic::ppc_qpx_qvlfiwz:
11179   case Intrinsic::ppc_altivec_lvx:
11180   case Intrinsic::ppc_altivec_lvxl:
11181   case Intrinsic::ppc_altivec_lvebx:
11182   case Intrinsic::ppc_altivec_lvehx:
11183   case Intrinsic::ppc_altivec_lvewx:
11184   case Intrinsic::ppc_vsx_lxvd2x:
11185   case Intrinsic::ppc_vsx_lxvw4x: {
11186     EVT VT;
11187     switch (Intrinsic) {
11188     case Intrinsic::ppc_altivec_lvebx:
11189       VT = MVT::i8;
11190       break;
11191     case Intrinsic::ppc_altivec_lvehx:
11192       VT = MVT::i16;
11193       break;
11194     case Intrinsic::ppc_altivec_lvewx:
11195       VT = MVT::i32;
11196       break;
11197     case Intrinsic::ppc_vsx_lxvd2x:
11198       VT = MVT::v2f64;
11199       break;
11200     case Intrinsic::ppc_qpx_qvlfd:
11201       VT = MVT::v4f64;
11202       break;
11203     case Intrinsic::ppc_qpx_qvlfs:
11204       VT = MVT::v4f32;
11205       break;
11206     case Intrinsic::ppc_qpx_qvlfcd:
11207       VT = MVT::v2f64;
11208       break;
11209     case Intrinsic::ppc_qpx_qvlfcs:
11210       VT = MVT::v2f32;
11211       break;
11212     default:
11213       VT = MVT::v4i32;
11214       break;
11215     }
11216
11217     Info.opc = ISD::INTRINSIC_W_CHAIN;
11218     Info.memVT = VT;
11219     Info.ptrVal = I.getArgOperand(0);
11220     Info.offset = -VT.getStoreSize()+1;
11221     Info.size = 2*VT.getStoreSize()-1;
11222     Info.align = 1;
11223     Info.vol = false;
11224     Info.readMem = true;
11225     Info.writeMem = false;
11226     return true;
11227   }
11228   case Intrinsic::ppc_qpx_qvlfda:
11229   case Intrinsic::ppc_qpx_qvlfsa:
11230   case Intrinsic::ppc_qpx_qvlfcda:
11231   case Intrinsic::ppc_qpx_qvlfcsa:
11232   case Intrinsic::ppc_qpx_qvlfiwaa:
11233   case Intrinsic::ppc_qpx_qvlfiwza: {
11234     EVT VT;
11235     switch (Intrinsic) {
11236     case Intrinsic::ppc_qpx_qvlfda:
11237       VT = MVT::v4f64;
11238       break;
11239     case Intrinsic::ppc_qpx_qvlfsa:
11240       VT = MVT::v4f32;
11241       break;
11242     case Intrinsic::ppc_qpx_qvlfcda:
11243       VT = MVT::v2f64;
11244       break;
11245     case Intrinsic::ppc_qpx_qvlfcsa:
11246       VT = MVT::v2f32;
11247       break;
11248     default:
11249       VT = MVT::v4i32;
11250       break;
11251     }
11252
11253     Info.opc = ISD::INTRINSIC_W_CHAIN;
11254     Info.memVT = VT;
11255     Info.ptrVal = I.getArgOperand(0);
11256     Info.offset = 0;
11257     Info.size = VT.getStoreSize();
11258     Info.align = 1;
11259     Info.vol = false;
11260     Info.readMem = true;
11261     Info.writeMem = false;
11262     return true;
11263   }
11264   case Intrinsic::ppc_qpx_qvstfd:
11265   case Intrinsic::ppc_qpx_qvstfs:
11266   case Intrinsic::ppc_qpx_qvstfcd:
11267   case Intrinsic::ppc_qpx_qvstfcs:
11268   case Intrinsic::ppc_qpx_qvstfiw:
11269   case Intrinsic::ppc_altivec_stvx:
11270   case Intrinsic::ppc_altivec_stvxl:
11271   case Intrinsic::ppc_altivec_stvebx:
11272   case Intrinsic::ppc_altivec_stvehx:
11273   case Intrinsic::ppc_altivec_stvewx:
11274   case Intrinsic::ppc_vsx_stxvd2x:
11275   case Intrinsic::ppc_vsx_stxvw4x: {
11276     EVT VT;
11277     switch (Intrinsic) {
11278     case Intrinsic::ppc_altivec_stvebx:
11279       VT = MVT::i8;
11280       break;
11281     case Intrinsic::ppc_altivec_stvehx:
11282       VT = MVT::i16;
11283       break;
11284     case Intrinsic::ppc_altivec_stvewx:
11285       VT = MVT::i32;
11286       break;
11287     case Intrinsic::ppc_vsx_stxvd2x:
11288       VT = MVT::v2f64;
11289       break;
11290     case Intrinsic::ppc_qpx_qvstfd:
11291       VT = MVT::v4f64;
11292       break;
11293     case Intrinsic::ppc_qpx_qvstfs:
11294       VT = MVT::v4f32;
11295       break;
11296     case Intrinsic::ppc_qpx_qvstfcd:
11297       VT = MVT::v2f64;
11298       break;
11299     case Intrinsic::ppc_qpx_qvstfcs:
11300       VT = MVT::v2f32;
11301       break;
11302     default:
11303       VT = MVT::v4i32;
11304       break;
11305     }
11306
11307     Info.opc = ISD::INTRINSIC_VOID;
11308     Info.memVT = VT;
11309     Info.ptrVal = I.getArgOperand(1);
11310     Info.offset = -VT.getStoreSize()+1;
11311     Info.size = 2*VT.getStoreSize()-1;
11312     Info.align = 1;
11313     Info.vol = false;
11314     Info.readMem = false;
11315     Info.writeMem = true;
11316     return true;
11317   }
11318   case Intrinsic::ppc_qpx_qvstfda:
11319   case Intrinsic::ppc_qpx_qvstfsa:
11320   case Intrinsic::ppc_qpx_qvstfcda:
11321   case Intrinsic::ppc_qpx_qvstfcsa:
11322   case Intrinsic::ppc_qpx_qvstfiwa: {
11323     EVT VT;
11324     switch (Intrinsic) {
11325     case Intrinsic::ppc_qpx_qvstfda:
11326       VT = MVT::v4f64;
11327       break;
11328     case Intrinsic::ppc_qpx_qvstfsa:
11329       VT = MVT::v4f32;
11330       break;
11331     case Intrinsic::ppc_qpx_qvstfcda:
11332       VT = MVT::v2f64;
11333       break;
11334     case Intrinsic::ppc_qpx_qvstfcsa:
11335       VT = MVT::v2f32;
11336       break;
11337     default:
11338       VT = MVT::v4i32;
11339       break;
11340     }
11341
11342     Info.opc = ISD::INTRINSIC_VOID;
11343     Info.memVT = VT;
11344     Info.ptrVal = I.getArgOperand(1);
11345     Info.offset = 0;
11346     Info.size = VT.getStoreSize();
11347     Info.align = 1;
11348     Info.vol = false;
11349     Info.readMem = false;
11350     Info.writeMem = true;
11351     return true;
11352   }
11353   default:
11354     break;
11355   }
11356
11357   return false;
11358 }
11359
11360 /// getOptimalMemOpType - Returns the target specific optimal type for load
11361 /// and store operations as a result of memset, memcpy, and memmove
11362 /// lowering. If DstAlign is zero that means it's safe to destination
11363 /// alignment can satisfy any constraint. Similarly if SrcAlign is zero it
11364 /// means there isn't a need to check it against alignment requirement,
11365 /// probably because the source does not need to be loaded. If 'IsMemset' is
11366 /// true, that means it's expanding a memset. If 'ZeroMemset' is true, that
11367 /// means it's a memset of zero. 'MemcpyStrSrc' indicates whether the memcpy
11368 /// source is constant so it does not need to be loaded.
11369 /// It returns EVT::Other if the type should be determined using generic
11370 /// target-independent logic.
11371 EVT PPCTargetLowering::getOptimalMemOpType(uint64_t Size,
11372                                            unsigned DstAlign, unsigned SrcAlign,
11373                                            bool IsMemset, bool ZeroMemset,
11374                                            bool MemcpyStrSrc,
11375                                            MachineFunction &MF) const {
11376   if (getTargetMachine().getOptLevel() != CodeGenOpt::None) {
11377     const Function *F = MF.getFunction();
11378     // When expanding a memset, require at least two QPX instructions to cover
11379     // the cost of loading the value to be stored from the constant pool.
11380     if (Subtarget.hasQPX() && Size >= 32 && (!IsMemset || Size >= 64) &&
11381        (!SrcAlign || SrcAlign >= 32) && (!DstAlign || DstAlign >= 32) &&
11382         !F->hasFnAttribute(Attribute::NoImplicitFloat)) {
11383       return MVT::v4f64;
11384     }
11385
11386     // We should use Altivec/VSX loads and stores when available. For unaligned
11387     // addresses, unaligned VSX loads are only fast starting with the P8.
11388     if (Subtarget.hasAltivec() && Size >= 16 &&
11389         (((!SrcAlign || SrcAlign >= 16) && (!DstAlign || DstAlign >= 16)) ||
11390          ((IsMemset && Subtarget.hasVSX()) || Subtarget.hasP8Vector())))
11391       return MVT::v4i32;
11392   }
11393
11394   if (Subtarget.isPPC64()) {
11395     return MVT::i64;
11396   }
11397
11398   return MVT::i32;
11399 }
11400
11401 /// \brief Returns true if it is beneficial to convert a load of a constant
11402 /// to just the constant itself.
11403 bool PPCTargetLowering::shouldConvertConstantLoadToIntImm(const APInt &Imm,
11404                                                           Type *Ty) const {
11405   assert(Ty->isIntegerTy());
11406
11407   unsigned BitSize = Ty->getPrimitiveSizeInBits();
11408   if (BitSize == 0 || BitSize > 64)
11409     return false;
11410   return true;
11411 }
11412
11413 bool PPCTargetLowering::isTruncateFree(Type *Ty1, Type *Ty2) const {
11414   if (!Ty1->isIntegerTy() || !Ty2->isIntegerTy())
11415     return false;
11416   unsigned NumBits1 = Ty1->getPrimitiveSizeInBits();
11417   unsigned NumBits2 = Ty2->getPrimitiveSizeInBits();
11418   return NumBits1 == 64 && NumBits2 == 32;
11419 }
11420
11421 bool PPCTargetLowering::isTruncateFree(EVT VT1, EVT VT2) const {
11422   if (!VT1.isInteger() || !VT2.isInteger())
11423     return false;
11424   unsigned NumBits1 = VT1.getSizeInBits();
11425   unsigned NumBits2 = VT2.getSizeInBits();
11426   return NumBits1 == 64 && NumBits2 == 32;
11427 }
11428
11429 bool PPCTargetLowering::isZExtFree(SDValue Val, EVT VT2) const {
11430   // Generally speaking, zexts are not free, but they are free when they can be
11431   // folded with other operations.
11432   if (LoadSDNode *LD = dyn_cast<LoadSDNode>(Val)) {
11433     EVT MemVT = LD->getMemoryVT();
11434     if ((MemVT == MVT::i1 || MemVT == MVT::i8 || MemVT == MVT::i16 ||
11435          (Subtarget.isPPC64() && MemVT == MVT::i32)) &&
11436         (LD->getExtensionType() == ISD::NON_EXTLOAD ||
11437          LD->getExtensionType() == ISD::ZEXTLOAD))
11438       return true;
11439   }
11440
11441   // FIXME: Add other cases...
11442   //  - 32-bit shifts with a zext to i64
11443   //  - zext after ctlz, bswap, etc.
11444   //  - zext after and by a constant mask
11445
11446   return TargetLowering::isZExtFree(Val, VT2);
11447 }
11448
11449 bool PPCTargetLowering::isFPExtFree(EVT VT) const {
11450   assert(VT.isFloatingPoint());
11451   return true;
11452 }
11453
11454 bool PPCTargetLowering::isLegalICmpImmediate(int64_t Imm) const {
11455   return isInt<16>(Imm) || isUInt<16>(Imm);
11456 }
11457
11458 bool PPCTargetLowering::isLegalAddImmediate(int64_t Imm) const {
11459   return isInt<16>(Imm) || isUInt<16>(Imm);
11460 }
11461
11462 bool PPCTargetLowering::allowsMisalignedMemoryAccesses(EVT VT,
11463                                                        unsigned,
11464                                                        unsigned,
11465                                                        bool *Fast) const {
11466   if (DisablePPCUnaligned)
11467     return false;
11468
11469   // PowerPC supports unaligned memory access for simple non-vector types.
11470   // Although accessing unaligned addresses is not as efficient as accessing
11471   // aligned addresses, it is generally more efficient than manual expansion,
11472   // and generally only traps for software emulation when crossing page
11473   // boundaries.
11474
11475   if (!VT.isSimple())
11476     return false;
11477
11478   if (VT.getSimpleVT().isVector()) {
11479     if (Subtarget.hasVSX()) {
11480       if (VT != MVT::v2f64 && VT != MVT::v2i64 &&
11481           VT != MVT::v4f32 && VT != MVT::v4i32)
11482         return false;
11483     } else {
11484       return false;
11485     }
11486   }
11487
11488   if (VT == MVT::ppcf128)
11489     return false;
11490
11491   if (Fast)
11492     *Fast = true;
11493
11494   return true;
11495 }
11496
11497 bool PPCTargetLowering::isFMAFasterThanFMulAndFAdd(EVT VT) const {
11498   VT = VT.getScalarType();
11499
11500   if (!VT.isSimple())
11501     return false;
11502
11503   switch (VT.getSimpleVT().SimpleTy) {
11504   case MVT::f32:
11505   case MVT::f64:
11506     return true;
11507   default:
11508     break;
11509   }
11510
11511   return false;
11512 }
11513
11514 const MCPhysReg *
11515 PPCTargetLowering::getScratchRegisters(CallingConv::ID) const {
11516   // LR is a callee-save register, but we must treat it as clobbered by any call
11517   // site. Hence we include LR in the scratch registers, which are in turn added
11518   // as implicit-defs for stackmaps and patchpoints. The same reasoning applies
11519   // to CTR, which is used by any indirect call.
11520   static const MCPhysReg ScratchRegs[] = {
11521     PPC::X12, PPC::LR8, PPC::CTR8, 0
11522   };
11523
11524   return ScratchRegs;
11525 }
11526
11527 unsigned PPCTargetLowering::getExceptionPointerRegister(
11528     const Constant *PersonalityFn) const {
11529   return Subtarget.isPPC64() ? PPC::X3 : PPC::R3;
11530 }
11531
11532 unsigned PPCTargetLowering::getExceptionSelectorRegister(
11533     const Constant *PersonalityFn) const {
11534   return Subtarget.isPPC64() ? PPC::X4 : PPC::R4;
11535 }
11536
11537 bool
11538 PPCTargetLowering::shouldExpandBuildVectorWithShuffles(
11539                      EVT VT , unsigned DefinedValues) const {
11540   if (VT == MVT::v2i64)
11541     return Subtarget.hasDirectMove(); // Don't need stack ops with direct moves
11542
11543   if (Subtarget.hasQPX()) {
11544     if (VT == MVT::v4f32 || VT == MVT::v4f64 || VT == MVT::v4i1)
11545       return true;
11546   }
11547
11548   return TargetLowering::shouldExpandBuildVectorWithShuffles(VT, DefinedValues);
11549 }
11550
11551 Sched::Preference PPCTargetLowering::getSchedulingPreference(SDNode *N) const {
11552   if (DisableILPPref || Subtarget.enableMachineScheduler())
11553     return TargetLowering::getSchedulingPreference(N);
11554
11555   return Sched::ILP;
11556 }
11557
11558 // Create a fast isel object.
11559 FastISel *
11560 PPCTargetLowering::createFastISel(FunctionLoweringInfo &FuncInfo,
11561                                   const TargetLibraryInfo *LibInfo) const {
11562   return PPC::createFastISel(FuncInfo, LibInfo);
11563 }