cc700eb99fa63a9d5d3b37f3555127f6dc2df88e
[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 "PPCMachineFunctionInfo.h"
16 #include "PPCPredicates.h"
17 #include "PPCTargetMachine.h"
18 #include "PPCPerfectShuffle.h"
19 #include "llvm/ADT/STLExtras.h"
20 #include "llvm/ADT/VectorExtras.h"
21 #include "llvm/CodeGen/CallingConvLower.h"
22 #include "llvm/CodeGen/MachineFrameInfo.h"
23 #include "llvm/CodeGen/MachineFunction.h"
24 #include "llvm/CodeGen/MachineInstrBuilder.h"
25 #include "llvm/CodeGen/MachineRegisterInfo.h"
26 #include "llvm/CodeGen/PseudoSourceValue.h"
27 #include "llvm/CodeGen/SelectionDAG.h"
28 #include "llvm/CallingConv.h"
29 #include "llvm/Constants.h"
30 #include "llvm/Function.h"
31 #include "llvm/Intrinsics.h"
32 #include "llvm/ParameterAttributes.h"
33 #include "llvm/Support/MathExtras.h"
34 #include "llvm/Target/TargetOptions.h"
35 #include "llvm/Support/CommandLine.h"
36 using namespace llvm;
37
38 static cl::opt<bool> EnablePPCPreinc("enable-ppc-preinc", 
39 cl::desc("enable preincrement load/store generation on PPC (experimental)"),
40                                      cl::Hidden);
41
42 PPCTargetLowering::PPCTargetLowering(PPCTargetMachine &TM)
43   : TargetLowering(TM), PPCSubTarget(*TM.getSubtargetImpl()) {
44     
45   setPow2DivIsCheap();
46
47   // Use _setjmp/_longjmp instead of setjmp/longjmp.
48   setUseUnderscoreSetJmp(true);
49   setUseUnderscoreLongJmp(true);
50     
51   // Set up the register classes.
52   addRegisterClass(MVT::i32, PPC::GPRCRegisterClass);
53   addRegisterClass(MVT::f32, PPC::F4RCRegisterClass);
54   addRegisterClass(MVT::f64, PPC::F8RCRegisterClass);
55   
56   // PowerPC has an i16 but no i8 (or i1) SEXTLOAD
57   setLoadXAction(ISD::SEXTLOAD, MVT::i1, Promote);
58   setLoadXAction(ISD::SEXTLOAD, MVT::i8, Expand);
59
60   setTruncStoreAction(MVT::f64, MVT::f32, Expand);
61     
62   // PowerPC has pre-inc load and store's.
63   setIndexedLoadAction(ISD::PRE_INC, MVT::i1, Legal);
64   setIndexedLoadAction(ISD::PRE_INC, MVT::i8, Legal);
65   setIndexedLoadAction(ISD::PRE_INC, MVT::i16, Legal);
66   setIndexedLoadAction(ISD::PRE_INC, MVT::i32, Legal);
67   setIndexedLoadAction(ISD::PRE_INC, MVT::i64, Legal);
68   setIndexedStoreAction(ISD::PRE_INC, MVT::i1, Legal);
69   setIndexedStoreAction(ISD::PRE_INC, MVT::i8, Legal);
70   setIndexedStoreAction(ISD::PRE_INC, MVT::i16, Legal);
71   setIndexedStoreAction(ISD::PRE_INC, MVT::i32, Legal);
72   setIndexedStoreAction(ISD::PRE_INC, MVT::i64, Legal);
73
74   // Shortening conversions involving ppcf128 get expanded (2 regs -> 1 reg)
75   setConvertAction(MVT::ppcf128, MVT::f64, Expand);
76   setConvertAction(MVT::ppcf128, MVT::f32, Expand);
77   // This is used in the ppcf128->int sequence.  Note it has different semantics
78   // from FP_ROUND:  that rounds to nearest, this rounds to zero.
79   setOperationAction(ISD::FP_ROUND_INREG, MVT::ppcf128, Custom);
80
81   // PowerPC has no SREM/UREM instructions
82   setOperationAction(ISD::SREM, MVT::i32, Expand);
83   setOperationAction(ISD::UREM, MVT::i32, Expand);
84   setOperationAction(ISD::SREM, MVT::i64, Expand);
85   setOperationAction(ISD::UREM, MVT::i64, Expand);
86
87   // Don't use SMUL_LOHI/UMUL_LOHI or SDIVREM/UDIVREM to lower SREM/UREM.
88   setOperationAction(ISD::UMUL_LOHI, MVT::i32, Expand);
89   setOperationAction(ISD::SMUL_LOHI, MVT::i32, Expand);
90   setOperationAction(ISD::UMUL_LOHI, MVT::i64, Expand);
91   setOperationAction(ISD::SMUL_LOHI, MVT::i64, Expand);
92   setOperationAction(ISD::UDIVREM, MVT::i32, Expand);
93   setOperationAction(ISD::SDIVREM, MVT::i32, Expand);
94   setOperationAction(ISD::UDIVREM, MVT::i64, Expand);
95   setOperationAction(ISD::SDIVREM, MVT::i64, Expand);
96   
97   // We don't support sin/cos/sqrt/fmod/pow
98   setOperationAction(ISD::FSIN , MVT::f64, Expand);
99   setOperationAction(ISD::FCOS , MVT::f64, Expand);
100   setOperationAction(ISD::FREM , MVT::f64, Expand);
101   setOperationAction(ISD::FPOW , MVT::f64, Expand);
102   setOperationAction(ISD::FSIN , MVT::f32, Expand);
103   setOperationAction(ISD::FCOS , MVT::f32, Expand);
104   setOperationAction(ISD::FREM , MVT::f32, Expand);
105   setOperationAction(ISD::FPOW , MVT::f32, Expand);
106
107   setOperationAction(ISD::FLT_ROUNDS_, MVT::i32, Custom);
108   
109   // If we're enabling GP optimizations, use hardware square root
110   if (!TM.getSubtarget<PPCSubtarget>().hasFSQRT()) {
111     setOperationAction(ISD::FSQRT, MVT::f64, Expand);
112     setOperationAction(ISD::FSQRT, MVT::f32, Expand);
113   }
114   
115   setOperationAction(ISD::FCOPYSIGN, MVT::f64, Expand);
116   setOperationAction(ISD::FCOPYSIGN, MVT::f32, Expand);
117   
118   // PowerPC does not have BSWAP, CTPOP or CTTZ
119   setOperationAction(ISD::BSWAP, MVT::i32  , Expand);
120   setOperationAction(ISD::CTPOP, MVT::i32  , Expand);
121   setOperationAction(ISD::CTTZ , MVT::i32  , Expand);
122   setOperationAction(ISD::BSWAP, MVT::i64  , Expand);
123   setOperationAction(ISD::CTPOP, MVT::i64  , Expand);
124   setOperationAction(ISD::CTTZ , MVT::i64  , Expand);
125   
126   // PowerPC does not have ROTR
127   setOperationAction(ISD::ROTR, MVT::i32   , Expand);
128   setOperationAction(ISD::ROTR, MVT::i64   , Expand);
129   
130   // PowerPC does not have Select
131   setOperationAction(ISD::SELECT, MVT::i32, Expand);
132   setOperationAction(ISD::SELECT, MVT::i64, Expand);
133   setOperationAction(ISD::SELECT, MVT::f32, Expand);
134   setOperationAction(ISD::SELECT, MVT::f64, Expand);
135   
136   // PowerPC wants to turn select_cc of FP into fsel when possible.
137   setOperationAction(ISD::SELECT_CC, MVT::f32, Custom);
138   setOperationAction(ISD::SELECT_CC, MVT::f64, Custom);
139
140   // PowerPC wants to optimize integer setcc a bit
141   setOperationAction(ISD::SETCC, MVT::i32, Custom);
142   
143   // PowerPC does not have BRCOND which requires SetCC
144   setOperationAction(ISD::BRCOND, MVT::Other, Expand);
145
146   setOperationAction(ISD::BR_JT,  MVT::Other, Expand);
147   
148   // PowerPC turns FP_TO_SINT into FCTIWZ and some load/stores.
149   setOperationAction(ISD::FP_TO_SINT, MVT::i32, Custom);
150
151   // PowerPC does not have [U|S]INT_TO_FP
152   setOperationAction(ISD::SINT_TO_FP, MVT::i32, Expand);
153   setOperationAction(ISD::UINT_TO_FP, MVT::i32, Expand);
154
155   setOperationAction(ISD::BIT_CONVERT, MVT::f32, Expand);
156   setOperationAction(ISD::BIT_CONVERT, MVT::i32, Expand);
157   setOperationAction(ISD::BIT_CONVERT, MVT::i64, Expand);
158   setOperationAction(ISD::BIT_CONVERT, MVT::f64, Expand);
159
160   // We cannot sextinreg(i1).  Expand to shifts.
161   setOperationAction(ISD::SIGN_EXTEND_INREG, MVT::i1, Expand);
162
163   // Support label based line numbers.
164   setOperationAction(ISD::DBG_STOPPOINT, MVT::Other, Expand);
165   setOperationAction(ISD::DEBUG_LOC, MVT::Other, Expand);
166   
167   setOperationAction(ISD::EXCEPTIONADDR, MVT::i64, Expand);
168   setOperationAction(ISD::EHSELECTION,   MVT::i64, Expand);
169   setOperationAction(ISD::EXCEPTIONADDR, MVT::i32, Expand);
170   setOperationAction(ISD::EHSELECTION,   MVT::i32, Expand);
171   
172   
173   // We want to legalize GlobalAddress and ConstantPool nodes into the 
174   // appropriate instructions to materialize the address.
175   setOperationAction(ISD::GlobalAddress, MVT::i32, Custom);
176   setOperationAction(ISD::GlobalTLSAddress, MVT::i32, Custom);
177   setOperationAction(ISD::ConstantPool,  MVT::i32, Custom);
178   setOperationAction(ISD::JumpTable,     MVT::i32, Custom);
179   setOperationAction(ISD::GlobalAddress, MVT::i64, Custom);
180   setOperationAction(ISD::GlobalTLSAddress, MVT::i64, Custom);
181   setOperationAction(ISD::ConstantPool,  MVT::i64, Custom);
182   setOperationAction(ISD::JumpTable,     MVT::i64, Custom);
183   
184   // RET must be custom lowered, to meet ABI requirements.
185   setOperationAction(ISD::RET               , MVT::Other, Custom);
186
187   // TRAP is legal.
188   setOperationAction(ISD::TRAP, MVT::Other, Legal);
189
190   // TRAMPOLINE is custom lowered.
191   setOperationAction(ISD::TRAMPOLINE, MVT::Other, Custom);
192
193   // VASTART needs to be custom lowered to use the VarArgsFrameIndex
194   setOperationAction(ISD::VASTART           , MVT::Other, Custom);
195   
196   // VAARG is custom lowered with ELF 32 ABI
197   if (TM.getSubtarget<PPCSubtarget>().isELF32_ABI())
198     setOperationAction(ISD::VAARG, MVT::Other, Custom);
199   else
200     setOperationAction(ISD::VAARG, MVT::Other, Expand);
201   
202   // Use the default implementation.
203   setOperationAction(ISD::VACOPY            , MVT::Other, Expand);
204   setOperationAction(ISD::VAEND             , MVT::Other, Expand);
205   setOperationAction(ISD::STACKSAVE         , MVT::Other, Expand); 
206   setOperationAction(ISD::STACKRESTORE      , MVT::Other, Custom);
207   setOperationAction(ISD::DYNAMIC_STACKALLOC, MVT::i32  , Custom);
208   setOperationAction(ISD::DYNAMIC_STACKALLOC, MVT::i64  , Custom);
209
210   // We want to custom lower some of our intrinsics.
211   setOperationAction(ISD::INTRINSIC_WO_CHAIN, MVT::Other, Custom);
212   
213   if (TM.getSubtarget<PPCSubtarget>().has64BitSupport()) {
214     // They also have instructions for converting between i64 and fp.
215     setOperationAction(ISD::FP_TO_SINT, MVT::i64, Custom);
216     setOperationAction(ISD::FP_TO_UINT, MVT::i64, Expand);
217     setOperationAction(ISD::SINT_TO_FP, MVT::i64, Custom);
218     setOperationAction(ISD::UINT_TO_FP, MVT::i64, Expand);
219     setOperationAction(ISD::FP_TO_UINT, MVT::i32, Expand);
220  
221     // FIXME: disable this lowered code.  This generates 64-bit register values,
222     // and we don't model the fact that the top part is clobbered by calls.  We
223     // need to flag these together so that the value isn't live across a call.
224     //setOperationAction(ISD::SINT_TO_FP, MVT::i32, Custom);
225     
226     // To take advantage of the above i64 FP_TO_SINT, promote i32 FP_TO_UINT
227     setOperationAction(ISD::FP_TO_UINT, MVT::i32, Promote);
228   } else {
229     // PowerPC does not have FP_TO_UINT on 32-bit implementations.
230     setOperationAction(ISD::FP_TO_UINT, MVT::i32, Expand);
231   }
232
233   if (TM.getSubtarget<PPCSubtarget>().use64BitRegs()) {
234     // 64-bit PowerPC implementations can support i64 types directly
235     addRegisterClass(MVT::i64, PPC::G8RCRegisterClass);
236     // BUILD_PAIR can't be handled natively, and should be expanded to shl/or
237     setOperationAction(ISD::BUILD_PAIR, MVT::i64, Expand);
238     // 64-bit PowerPC wants to expand i128 shifts itself.
239     setOperationAction(ISD::SHL_PARTS, MVT::i64, Custom);
240     setOperationAction(ISD::SRA_PARTS, MVT::i64, Custom);
241     setOperationAction(ISD::SRL_PARTS, MVT::i64, Custom);
242   } else {
243     // 32-bit PowerPC wants to expand i64 shifts itself.
244     setOperationAction(ISD::SHL_PARTS, MVT::i32, Custom);
245     setOperationAction(ISD::SRA_PARTS, MVT::i32, Custom);
246     setOperationAction(ISD::SRL_PARTS, MVT::i32, Custom);
247   }
248
249   if (TM.getSubtarget<PPCSubtarget>().hasAltivec()) {
250     // First set operation action for all vector types to expand. Then we
251     // will selectively turn on ones that can be effectively codegen'd.
252     for (unsigned i = (unsigned)MVT::FIRST_VECTOR_VALUETYPE;
253          i <= (unsigned)MVT::LAST_VECTOR_VALUETYPE; ++i) {
254       MVT VT = (MVT::SimpleValueType)i;
255
256       // add/sub are legal for all supported vector VT's.
257       setOperationAction(ISD::ADD , VT, Legal);
258       setOperationAction(ISD::SUB , VT, Legal);
259       
260       // We promote all shuffles to v16i8.
261       setOperationAction(ISD::VECTOR_SHUFFLE, VT, Promote);
262       AddPromotedToType (ISD::VECTOR_SHUFFLE, VT, MVT::v16i8);
263
264       // We promote all non-typed operations to v4i32.
265       setOperationAction(ISD::AND   , VT, Promote);
266       AddPromotedToType (ISD::AND   , VT, MVT::v4i32);
267       setOperationAction(ISD::OR    , VT, Promote);
268       AddPromotedToType (ISD::OR    , VT, MVT::v4i32);
269       setOperationAction(ISD::XOR   , VT, Promote);
270       AddPromotedToType (ISD::XOR   , VT, MVT::v4i32);
271       setOperationAction(ISD::LOAD  , VT, Promote);
272       AddPromotedToType (ISD::LOAD  , VT, MVT::v4i32);
273       setOperationAction(ISD::SELECT, VT, Promote);
274       AddPromotedToType (ISD::SELECT, VT, MVT::v4i32);
275       setOperationAction(ISD::STORE, VT, Promote);
276       AddPromotedToType (ISD::STORE, VT, MVT::v4i32);
277       
278       // No other operations are legal.
279       setOperationAction(ISD::MUL , VT, Expand);
280       setOperationAction(ISD::SDIV, VT, Expand);
281       setOperationAction(ISD::SREM, VT, Expand);
282       setOperationAction(ISD::UDIV, VT, Expand);
283       setOperationAction(ISD::UREM, VT, Expand);
284       setOperationAction(ISD::FDIV, VT, Expand);
285       setOperationAction(ISD::FNEG, VT, Expand);
286       setOperationAction(ISD::EXTRACT_VECTOR_ELT, VT, Expand);
287       setOperationAction(ISD::INSERT_VECTOR_ELT, VT, Expand);
288       setOperationAction(ISD::BUILD_VECTOR, VT, Expand);
289       setOperationAction(ISD::UMUL_LOHI, VT, Expand);
290       setOperationAction(ISD::SMUL_LOHI, VT, Expand);
291       setOperationAction(ISD::UDIVREM, VT, Expand);
292       setOperationAction(ISD::SDIVREM, VT, Expand);
293       setOperationAction(ISD::SCALAR_TO_VECTOR, VT, Expand);
294       setOperationAction(ISD::FPOW, VT, Expand);
295       setOperationAction(ISD::CTPOP, VT, Expand);
296       setOperationAction(ISD::CTLZ, VT, Expand);
297       setOperationAction(ISD::CTTZ, VT, Expand);
298     }
299
300     // We can custom expand all VECTOR_SHUFFLEs to VPERM, others we can handle
301     // with merges, splats, etc.
302     setOperationAction(ISD::VECTOR_SHUFFLE, MVT::v16i8, Custom);
303
304     setOperationAction(ISD::AND   , MVT::v4i32, Legal);
305     setOperationAction(ISD::OR    , MVT::v4i32, Legal);
306     setOperationAction(ISD::XOR   , MVT::v4i32, Legal);
307     setOperationAction(ISD::LOAD  , MVT::v4i32, Legal);
308     setOperationAction(ISD::SELECT, MVT::v4i32, Expand);
309     setOperationAction(ISD::STORE , MVT::v4i32, Legal);
310     
311     addRegisterClass(MVT::v4f32, PPC::VRRCRegisterClass);
312     addRegisterClass(MVT::v4i32, PPC::VRRCRegisterClass);
313     addRegisterClass(MVT::v8i16, PPC::VRRCRegisterClass);
314     addRegisterClass(MVT::v16i8, PPC::VRRCRegisterClass);
315     
316     setOperationAction(ISD::MUL, MVT::v4f32, Legal);
317     setOperationAction(ISD::MUL, MVT::v4i32, Custom);
318     setOperationAction(ISD::MUL, MVT::v8i16, Custom);
319     setOperationAction(ISD::MUL, MVT::v16i8, Custom);
320
321     setOperationAction(ISD::SCALAR_TO_VECTOR, MVT::v4f32, Custom);
322     setOperationAction(ISD::SCALAR_TO_VECTOR, MVT::v4i32, Custom);
323     
324     setOperationAction(ISD::BUILD_VECTOR, MVT::v16i8, Custom);
325     setOperationAction(ISD::BUILD_VECTOR, MVT::v8i16, Custom);
326     setOperationAction(ISD::BUILD_VECTOR, MVT::v4i32, Custom);
327     setOperationAction(ISD::BUILD_VECTOR, MVT::v4f32, Custom);
328   }
329   
330   setShiftAmountType(MVT::i32);
331   setSetCCResultContents(ZeroOrOneSetCCResult);
332   
333   if (TM.getSubtarget<PPCSubtarget>().isPPC64()) {
334     setStackPointerRegisterToSaveRestore(PPC::X1);
335     setExceptionPointerRegister(PPC::X3);
336     setExceptionSelectorRegister(PPC::X4);
337   } else {
338     setStackPointerRegisterToSaveRestore(PPC::R1);
339     setExceptionPointerRegister(PPC::R3);
340     setExceptionSelectorRegister(PPC::R4);
341   }
342   
343   // We have target-specific dag combine patterns for the following nodes:
344   setTargetDAGCombine(ISD::SINT_TO_FP);
345   setTargetDAGCombine(ISD::STORE);
346   setTargetDAGCombine(ISD::BR_CC);
347   setTargetDAGCombine(ISD::BSWAP);
348   
349   // Darwin long double math library functions have $LDBL128 appended.
350   if (TM.getSubtarget<PPCSubtarget>().isDarwin()) {
351     setLibcallName(RTLIB::COS_PPCF128, "cosl$LDBL128");
352     setLibcallName(RTLIB::POW_PPCF128, "powl$LDBL128");
353     setLibcallName(RTLIB::REM_PPCF128, "fmodl$LDBL128");
354     setLibcallName(RTLIB::SIN_PPCF128, "sinl$LDBL128");
355     setLibcallName(RTLIB::SQRT_PPCF128, "sqrtl$LDBL128");
356     setLibcallName(RTLIB::LOG_PPCF128, "logl$LDBL128");
357     setLibcallName(RTLIB::LOG2_PPCF128, "log2l$LDBL128");
358     setLibcallName(RTLIB::LOG10_PPCF128, "log10l$LDBL128");
359     setLibcallName(RTLIB::EXP_PPCF128, "expl$LDBL128");
360     setLibcallName(RTLIB::EXP2_PPCF128, "exp2l$LDBL128");
361   }
362
363   computeRegisterProperties();
364 }
365
366 /// getByValTypeAlignment - Return the desired alignment for ByVal aggregate
367 /// function arguments in the caller parameter area.
368 unsigned PPCTargetLowering::getByValTypeAlignment(const Type *Ty) const {
369   TargetMachine &TM = getTargetMachine();
370   // Darwin passes everything on 4 byte boundary.
371   if (TM.getSubtarget<PPCSubtarget>().isDarwin())
372     return 4;
373   // FIXME Elf TBD
374   return 4;
375 }
376
377 const char *PPCTargetLowering::getTargetNodeName(unsigned Opcode) const {
378   switch (Opcode) {
379   default: return 0;
380   case PPCISD::FSEL:            return "PPCISD::FSEL";
381   case PPCISD::FCFID:           return "PPCISD::FCFID";
382   case PPCISD::FCTIDZ:          return "PPCISD::FCTIDZ";
383   case PPCISD::FCTIWZ:          return "PPCISD::FCTIWZ";
384   case PPCISD::STFIWX:          return "PPCISD::STFIWX";
385   case PPCISD::VMADDFP:         return "PPCISD::VMADDFP";
386   case PPCISD::VNMSUBFP:        return "PPCISD::VNMSUBFP";
387   case PPCISD::VPERM:           return "PPCISD::VPERM";
388   case PPCISD::Hi:              return "PPCISD::Hi";
389   case PPCISD::Lo:              return "PPCISD::Lo";
390   case PPCISD::DYNALLOC:        return "PPCISD::DYNALLOC";
391   case PPCISD::GlobalBaseReg:   return "PPCISD::GlobalBaseReg";
392   case PPCISD::SRL:             return "PPCISD::SRL";
393   case PPCISD::SRA:             return "PPCISD::SRA";
394   case PPCISD::SHL:             return "PPCISD::SHL";
395   case PPCISD::EXTSW_32:        return "PPCISD::EXTSW_32";
396   case PPCISD::STD_32:          return "PPCISD::STD_32";
397   case PPCISD::CALL_ELF:        return "PPCISD::CALL_ELF";
398   case PPCISD::CALL_Macho:      return "PPCISD::CALL_Macho";
399   case PPCISD::MTCTR:           return "PPCISD::MTCTR";
400   case PPCISD::BCTRL_Macho:     return "PPCISD::BCTRL_Macho";
401   case PPCISD::BCTRL_ELF:       return "PPCISD::BCTRL_ELF";
402   case PPCISD::RET_FLAG:        return "PPCISD::RET_FLAG";
403   case PPCISD::MFCR:            return "PPCISD::MFCR";
404   case PPCISD::VCMP:            return "PPCISD::VCMP";
405   case PPCISD::VCMPo:           return "PPCISD::VCMPo";
406   case PPCISD::LBRX:            return "PPCISD::LBRX";
407   case PPCISD::STBRX:           return "PPCISD::STBRX";
408   case PPCISD::LARX:            return "PPCISD::LARX";
409   case PPCISD::STCX:            return "PPCISD::STCX";
410   case PPCISD::COND_BRANCH:     return "PPCISD::COND_BRANCH";
411   case PPCISD::MFFS:            return "PPCISD::MFFS";
412   case PPCISD::MTFSB0:          return "PPCISD::MTFSB0";
413   case PPCISD::MTFSB1:          return "PPCISD::MTFSB1";
414   case PPCISD::FADDRTZ:         return "PPCISD::FADDRTZ";
415   case PPCISD::MTFSF:           return "PPCISD::MTFSF";
416   case PPCISD::TAILCALL:        return "PPCISD::TAILCALL";
417   case PPCISD::TC_RETURN:       return "PPCISD::TC_RETURN";
418   }
419 }
420
421
422 MVT PPCTargetLowering::getSetCCResultType(const SDValue &) const {
423   return MVT::i32;
424 }
425
426
427 //===----------------------------------------------------------------------===//
428 // Node matching predicates, for use by the tblgen matching code.
429 //===----------------------------------------------------------------------===//
430
431 /// isFloatingPointZero - Return true if this is 0.0 or -0.0.
432 static bool isFloatingPointZero(SDValue Op) {
433   if (ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(Op))
434     return CFP->getValueAPF().isZero();
435   else if (ISD::isEXTLoad(Op.getNode()) || ISD::isNON_EXTLoad(Op.getNode())) {
436     // Maybe this has already been legalized into the constant pool?
437     if (ConstantPoolSDNode *CP = dyn_cast<ConstantPoolSDNode>(Op.getOperand(1)))
438       if (ConstantFP *CFP = dyn_cast<ConstantFP>(CP->getConstVal()))
439         return CFP->getValueAPF().isZero();
440   }
441   return false;
442 }
443
444 /// isConstantOrUndef - Op is either an undef node or a ConstantSDNode.  Return
445 /// true if Op is undef or if it matches the specified value.
446 static bool isConstantOrUndef(SDValue Op, unsigned Val) {
447   return Op.getOpcode() == ISD::UNDEF || 
448          cast<ConstantSDNode>(Op)->getZExtValue() == Val;
449 }
450
451 /// isVPKUHUMShuffleMask - Return true if this is the shuffle mask for a
452 /// VPKUHUM instruction.
453 bool PPC::isVPKUHUMShuffleMask(SDNode *N, bool isUnary) {
454   if (!isUnary) {
455     for (unsigned i = 0; i != 16; ++i)
456       if (!isConstantOrUndef(N->getOperand(i),  i*2+1))
457         return false;
458   } else {
459     for (unsigned i = 0; i != 8; ++i)
460       if (!isConstantOrUndef(N->getOperand(i),  i*2+1) ||
461           !isConstantOrUndef(N->getOperand(i+8),  i*2+1))
462         return false;
463   }
464   return true;
465 }
466
467 /// isVPKUWUMShuffleMask - Return true if this is the shuffle mask for a
468 /// VPKUWUM instruction.
469 bool PPC::isVPKUWUMShuffleMask(SDNode *N, bool isUnary) {
470   if (!isUnary) {
471     for (unsigned i = 0; i != 16; i += 2)
472       if (!isConstantOrUndef(N->getOperand(i  ),  i*2+2) ||
473           !isConstantOrUndef(N->getOperand(i+1),  i*2+3))
474         return false;
475   } else {
476     for (unsigned i = 0; i != 8; i += 2)
477       if (!isConstantOrUndef(N->getOperand(i  ),  i*2+2) ||
478           !isConstantOrUndef(N->getOperand(i+1),  i*2+3) ||
479           !isConstantOrUndef(N->getOperand(i+8),  i*2+2) ||
480           !isConstantOrUndef(N->getOperand(i+9),  i*2+3))
481         return false;
482   }
483   return true;
484 }
485
486 /// isVMerge - Common function, used to match vmrg* shuffles.
487 ///
488 static bool isVMerge(SDNode *N, unsigned UnitSize, 
489                      unsigned LHSStart, unsigned RHSStart) {
490   assert(N->getOpcode() == ISD::BUILD_VECTOR &&
491          N->getNumOperands() == 16 && "PPC only supports shuffles by bytes!");
492   assert((UnitSize == 1 || UnitSize == 2 || UnitSize == 4) &&
493          "Unsupported merge size!");
494   
495   for (unsigned i = 0; i != 8/UnitSize; ++i)     // Step over units
496     for (unsigned j = 0; j != UnitSize; ++j) {   // Step over bytes within unit
497       if (!isConstantOrUndef(N->getOperand(i*UnitSize*2+j),
498                              LHSStart+j+i*UnitSize) ||
499           !isConstantOrUndef(N->getOperand(i*UnitSize*2+UnitSize+j),
500                              RHSStart+j+i*UnitSize))
501         return false;
502     }
503       return true;
504 }
505
506 /// isVMRGLShuffleMask - Return true if this is a shuffle mask suitable for
507 /// a VRGL* instruction with the specified unit size (1,2 or 4 bytes).
508 bool PPC::isVMRGLShuffleMask(SDNode *N, unsigned UnitSize, bool isUnary) {
509   if (!isUnary)
510     return isVMerge(N, UnitSize, 8, 24);
511   return isVMerge(N, UnitSize, 8, 8);
512 }
513
514 /// isVMRGHShuffleMask - Return true if this is a shuffle mask suitable for
515 /// a VRGH* instruction with the specified unit size (1,2 or 4 bytes).
516 bool PPC::isVMRGHShuffleMask(SDNode *N, unsigned UnitSize, bool isUnary) {
517   if (!isUnary)
518     return isVMerge(N, UnitSize, 0, 16);
519   return isVMerge(N, UnitSize, 0, 0);
520 }
521
522
523 /// isVSLDOIShuffleMask - If this is a vsldoi shuffle mask, return the shift
524 /// amount, otherwise return -1.
525 int PPC::isVSLDOIShuffleMask(SDNode *N, bool isUnary) {
526   assert(N->getOpcode() == ISD::BUILD_VECTOR &&
527          N->getNumOperands() == 16 && "PPC only supports shuffles by bytes!");
528   // Find the first non-undef value in the shuffle mask.
529   unsigned i;
530   for (i = 0; i != 16 && N->getOperand(i).getOpcode() == ISD::UNDEF; ++i)
531     /*search*/;
532   
533   if (i == 16) return -1;  // all undef.
534   
535   // Otherwise, check to see if the rest of the elements are consequtively
536   // numbered from this value.
537   unsigned ShiftAmt = cast<ConstantSDNode>(N->getOperand(i))->getZExtValue();
538   if (ShiftAmt < i) return -1;
539   ShiftAmt -= i;
540
541   if (!isUnary) {
542     // Check the rest of the elements to see if they are consequtive.
543     for (++i; i != 16; ++i)
544       if (!isConstantOrUndef(N->getOperand(i), ShiftAmt+i))
545         return -1;
546   } else {
547     // Check the rest of the elements to see if they are consequtive.
548     for (++i; i != 16; ++i)
549       if (!isConstantOrUndef(N->getOperand(i), (ShiftAmt+i) & 15))
550         return -1;
551   }
552   
553   return ShiftAmt;
554 }
555
556 /// isSplatShuffleMask - Return true if the specified VECTOR_SHUFFLE operand
557 /// specifies a splat of a single element that is suitable for input to
558 /// VSPLTB/VSPLTH/VSPLTW.
559 bool PPC::isSplatShuffleMask(SDNode *N, unsigned EltSize) {
560   assert(N->getOpcode() == ISD::BUILD_VECTOR &&
561          N->getNumOperands() == 16 &&
562          (EltSize == 1 || EltSize == 2 || EltSize == 4));
563   
564   // This is a splat operation if each element of the permute is the same, and
565   // if the value doesn't reference the second vector.
566   unsigned ElementBase = 0;
567   SDValue Elt = N->getOperand(0);
568   if (ConstantSDNode *EltV = dyn_cast<ConstantSDNode>(Elt))
569     ElementBase = EltV->getZExtValue();
570   else
571     return false;   // FIXME: Handle UNDEF elements too!
572
573   if (cast<ConstantSDNode>(Elt)->getZExtValue() >= 16)
574     return false;
575   
576   // Check that they are consequtive.
577   for (unsigned i = 1; i != EltSize; ++i) {
578     if (!isa<ConstantSDNode>(N->getOperand(i)) ||
579         cast<ConstantSDNode>(N->getOperand(i))->getZExtValue() != i+ElementBase)
580       return false;
581   }
582   
583   assert(isa<ConstantSDNode>(Elt) && "Invalid VECTOR_SHUFFLE mask!");
584   for (unsigned i = EltSize, e = 16; i != e; i += EltSize) {
585     if (N->getOperand(i).getOpcode() == ISD::UNDEF) continue;
586     assert(isa<ConstantSDNode>(N->getOperand(i)) &&
587            "Invalid VECTOR_SHUFFLE mask!");
588     for (unsigned j = 0; j != EltSize; ++j)
589       if (N->getOperand(i+j) != N->getOperand(j))
590         return false;
591   }
592
593   return true;
594 }
595
596 /// isAllNegativeZeroVector - Returns true if all elements of build_vector
597 /// are -0.0.
598 bool PPC::isAllNegativeZeroVector(SDNode *N) {
599   assert(N->getOpcode() == ISD::BUILD_VECTOR);
600   if (PPC::isSplatShuffleMask(N, N->getNumOperands()))
601     if (ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(N))
602       return CFP->getValueAPF().isNegZero();
603   return false;
604 }
605
606 /// getVSPLTImmediate - Return the appropriate VSPLT* immediate to splat the
607 /// specified isSplatShuffleMask VECTOR_SHUFFLE mask.
608 unsigned PPC::getVSPLTImmediate(SDNode *N, unsigned EltSize) {
609   assert(isSplatShuffleMask(N, EltSize));
610   return cast<ConstantSDNode>(N->getOperand(0))->getZExtValue() / EltSize;
611 }
612
613 /// get_VSPLTI_elt - If this is a build_vector of constants which can be formed
614 /// by using a vspltis[bhw] instruction of the specified element size, return
615 /// the constant being splatted.  The ByteSize field indicates the number of
616 /// bytes of each element [124] -> [bhw].
617 SDValue PPC::get_VSPLTI_elt(SDNode *N, unsigned ByteSize, SelectionDAG &DAG) {
618   SDValue OpVal(0, 0);
619
620   // If ByteSize of the splat is bigger than the element size of the
621   // build_vector, then we have a case where we are checking for a splat where
622   // multiple elements of the buildvector are folded together into a single
623   // logical element of the splat (e.g. "vsplish 1" to splat {0,1}*8).
624   unsigned EltSize = 16/N->getNumOperands();
625   if (EltSize < ByteSize) {
626     unsigned Multiple = ByteSize/EltSize;   // Number of BV entries per spltval.
627     SDValue UniquedVals[4];
628     assert(Multiple > 1 && Multiple <= 4 && "How can this happen?");
629     
630     // See if all of the elements in the buildvector agree across.
631     for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) {
632       if (N->getOperand(i).getOpcode() == ISD::UNDEF) continue;
633       // If the element isn't a constant, bail fully out.
634       if (!isa<ConstantSDNode>(N->getOperand(i))) return SDValue();
635
636           
637       if (UniquedVals[i&(Multiple-1)].getNode() == 0)
638         UniquedVals[i&(Multiple-1)] = N->getOperand(i);
639       else if (UniquedVals[i&(Multiple-1)] != N->getOperand(i))
640         return SDValue();  // no match.
641     }
642     
643     // Okay, if we reached this point, UniquedVals[0..Multiple-1] contains
644     // either constant or undef values that are identical for each chunk.  See
645     // if these chunks can form into a larger vspltis*.
646     
647     // Check to see if all of the leading entries are either 0 or -1.  If
648     // neither, then this won't fit into the immediate field.
649     bool LeadingZero = true;
650     bool LeadingOnes = true;
651     for (unsigned i = 0; i != Multiple-1; ++i) {
652       if (UniquedVals[i].getNode() == 0) continue;  // Must have been undefs.
653       
654       LeadingZero &= cast<ConstantSDNode>(UniquedVals[i])->isNullValue();
655       LeadingOnes &= cast<ConstantSDNode>(UniquedVals[i])->isAllOnesValue();
656     }
657     // Finally, check the least significant entry.
658     if (LeadingZero) {
659       if (UniquedVals[Multiple-1].getNode() == 0)
660         return DAG.getTargetConstant(0, MVT::i32);  // 0,0,0,undef
661       int Val = cast<ConstantSDNode>(UniquedVals[Multiple-1])->getZExtValue();
662       if (Val < 16)
663         return DAG.getTargetConstant(Val, MVT::i32);  // 0,0,0,4 -> vspltisw(4)
664     }
665     if (LeadingOnes) {
666       if (UniquedVals[Multiple-1].getNode() == 0)
667         return DAG.getTargetConstant(~0U, MVT::i32);  // -1,-1,-1,undef
668       int Val =cast<ConstantSDNode>(UniquedVals[Multiple-1])->getSignExtended();
669       if (Val >= -16)                            // -1,-1,-1,-2 -> vspltisw(-2)
670         return DAG.getTargetConstant(Val, MVT::i32);
671     }
672     
673     return SDValue();
674   }
675   
676   // Check to see if this buildvec has a single non-undef value in its elements.
677   for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) {
678     if (N->getOperand(i).getOpcode() == ISD::UNDEF) continue;
679     if (OpVal.getNode() == 0)
680       OpVal = N->getOperand(i);
681     else if (OpVal != N->getOperand(i))
682       return SDValue();
683   }
684   
685   if (OpVal.getNode() == 0) return SDValue();  // All UNDEF: use implicit def.
686   
687   unsigned ValSizeInBytes = 0;
688   uint64_t Value = 0;
689   if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(OpVal)) {
690     Value = CN->getZExtValue();
691     ValSizeInBytes = CN->getValueType(0).getSizeInBits()/8;
692   } else if (ConstantFPSDNode *CN = dyn_cast<ConstantFPSDNode>(OpVal)) {
693     assert(CN->getValueType(0) == MVT::f32 && "Only one legal FP vector type!");
694     Value = FloatToBits(CN->getValueAPF().convertToFloat());
695     ValSizeInBytes = 4;
696   }
697
698   // If the splat value is larger than the element value, then we can never do
699   // this splat.  The only case that we could fit the replicated bits into our
700   // immediate field for would be zero, and we prefer to use vxor for it.
701   if (ValSizeInBytes < ByteSize) return SDValue();
702   
703   // If the element value is larger than the splat value, cut it in half and
704   // check to see if the two halves are equal.  Continue doing this until we
705   // get to ByteSize.  This allows us to handle 0x01010101 as 0x01.
706   while (ValSizeInBytes > ByteSize) {
707     ValSizeInBytes >>= 1;
708     
709     // If the top half equals the bottom half, we're still ok.
710     if (((Value >> (ValSizeInBytes*8)) & ((1 << (8*ValSizeInBytes))-1)) !=
711          (Value                        & ((1 << (8*ValSizeInBytes))-1)))
712       return SDValue();
713   }
714
715   // Properly sign extend the value.
716   int ShAmt = (4-ByteSize)*8;
717   int MaskVal = ((int)Value << ShAmt) >> ShAmt;
718   
719   // If this is zero, don't match, zero matches ISD::isBuildVectorAllZeros.
720   if (MaskVal == 0) return SDValue();
721
722   // Finally, if this value fits in a 5 bit sext field, return it
723   if (((MaskVal << (32-5)) >> (32-5)) == MaskVal)
724     return DAG.getTargetConstant(MaskVal, MVT::i32);
725   return SDValue();
726 }
727
728 //===----------------------------------------------------------------------===//
729 //  Addressing Mode Selection
730 //===----------------------------------------------------------------------===//
731
732 /// isIntS16Immediate - This method tests to see if the node is either a 32-bit
733 /// or 64-bit immediate, and if the value can be accurately represented as a
734 /// sign extension from a 16-bit value.  If so, this returns true and the
735 /// immediate.
736 static bool isIntS16Immediate(SDNode *N, short &Imm) {
737   if (N->getOpcode() != ISD::Constant)
738     return false;
739   
740   Imm = (short)cast<ConstantSDNode>(N)->getZExtValue();
741   if (N->getValueType(0) == MVT::i32)
742     return Imm == (int32_t)cast<ConstantSDNode>(N)->getZExtValue();
743   else
744     return Imm == (int64_t)cast<ConstantSDNode>(N)->getZExtValue();
745 }
746 static bool isIntS16Immediate(SDValue Op, short &Imm) {
747   return isIntS16Immediate(Op.getNode(), Imm);
748 }
749
750
751 /// SelectAddressRegReg - Given the specified addressed, check to see if it
752 /// can be represented as an indexed [r+r] operation.  Returns false if it
753 /// can be more efficiently represented with [r+imm].
754 bool PPCTargetLowering::SelectAddressRegReg(SDValue N, SDValue &Base,
755                                             SDValue &Index,
756                                             SelectionDAG &DAG) {
757   short imm = 0;
758   if (N.getOpcode() == ISD::ADD) {
759     if (isIntS16Immediate(N.getOperand(1), imm))
760       return false;    // r+i
761     if (N.getOperand(1).getOpcode() == PPCISD::Lo)
762       return false;    // r+i
763     
764     Base = N.getOperand(0);
765     Index = N.getOperand(1);
766     return true;
767   } else if (N.getOpcode() == ISD::OR) {
768     if (isIntS16Immediate(N.getOperand(1), imm))
769       return false;    // r+i can fold it if we can.
770     
771     // If this is an or of disjoint bitfields, we can codegen this as an add
772     // (for better address arithmetic) if the LHS and RHS of the OR are provably
773     // disjoint.
774     APInt LHSKnownZero, LHSKnownOne;
775     APInt RHSKnownZero, RHSKnownOne;
776     DAG.ComputeMaskedBits(N.getOperand(0),
777                           APInt::getAllOnesValue(N.getOperand(0)
778                             .getValueSizeInBits()),
779                           LHSKnownZero, LHSKnownOne);
780     
781     if (LHSKnownZero.getBoolValue()) {
782       DAG.ComputeMaskedBits(N.getOperand(1),
783                             APInt::getAllOnesValue(N.getOperand(1)
784                               .getValueSizeInBits()),
785                             RHSKnownZero, RHSKnownOne);
786       // If all of the bits are known zero on the LHS or RHS, the add won't
787       // carry.
788       if (~(LHSKnownZero | RHSKnownZero) == 0) {
789         Base = N.getOperand(0);
790         Index = N.getOperand(1);
791         return true;
792       }
793     }
794   }
795   
796   return false;
797 }
798
799 /// Returns true if the address N can be represented by a base register plus
800 /// a signed 16-bit displacement [r+imm], and if it is not better
801 /// represented as reg+reg.
802 bool PPCTargetLowering::SelectAddressRegImm(SDValue N, SDValue &Disp,
803                                             SDValue &Base, SelectionDAG &DAG){
804   // If this can be more profitably realized as r+r, fail.
805   if (SelectAddressRegReg(N, Disp, Base, DAG))
806     return false;
807   
808   if (N.getOpcode() == ISD::ADD) {
809     short imm = 0;
810     if (isIntS16Immediate(N.getOperand(1), imm)) {
811       Disp = DAG.getTargetConstant((int)imm & 0xFFFF, MVT::i32);
812       if (FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(N.getOperand(0))) {
813         Base = DAG.getTargetFrameIndex(FI->getIndex(), N.getValueType());
814       } else {
815         Base = N.getOperand(0);
816       }
817       return true; // [r+i]
818     } else if (N.getOperand(1).getOpcode() == PPCISD::Lo) {
819       // Match LOAD (ADD (X, Lo(G))).
820      assert(!cast<ConstantSDNode>(N.getOperand(1).getOperand(1))->getZExtValue()
821              && "Cannot handle constant offsets yet!");
822       Disp = N.getOperand(1).getOperand(0);  // The global address.
823       assert(Disp.getOpcode() == ISD::TargetGlobalAddress ||
824              Disp.getOpcode() == ISD::TargetConstantPool ||
825              Disp.getOpcode() == ISD::TargetJumpTable);
826       Base = N.getOperand(0);
827       return true;  // [&g+r]
828     }
829   } else if (N.getOpcode() == ISD::OR) {
830     short imm = 0;
831     if (isIntS16Immediate(N.getOperand(1), imm)) {
832       // If this is an or of disjoint bitfields, we can codegen this as an add
833       // (for better address arithmetic) if the LHS and RHS of the OR are
834       // provably disjoint.
835       APInt LHSKnownZero, LHSKnownOne;
836       DAG.ComputeMaskedBits(N.getOperand(0),
837                             APInt::getAllOnesValue(N.getOperand(0)
838                                                    .getValueSizeInBits()),
839                             LHSKnownZero, LHSKnownOne);
840
841       if ((LHSKnownZero.getZExtValue()|~(uint64_t)imm) == ~0ULL) {
842         // If all of the bits are known zero on the LHS or RHS, the add won't
843         // carry.
844         Base = N.getOperand(0);
845         Disp = DAG.getTargetConstant((int)imm & 0xFFFF, MVT::i32);
846         return true;
847       }
848     }
849   } else if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(N)) {
850     // Loading from a constant address.
851     
852     // If this address fits entirely in a 16-bit sext immediate field, codegen
853     // this as "d, 0"
854     short Imm;
855     if (isIntS16Immediate(CN, Imm)) {
856       Disp = DAG.getTargetConstant(Imm, CN->getValueType(0));
857       Base = DAG.getRegister(PPC::R0, CN->getValueType(0));
858       return true;
859     }
860
861     // Handle 32-bit sext immediates with LIS + addr mode.
862     if (CN->getValueType(0) == MVT::i32 ||
863         (int64_t)CN->getZExtValue() == (int)CN->getZExtValue()) {
864       int Addr = (int)CN->getZExtValue();
865       
866       // Otherwise, break this down into an LIS + disp.
867       Disp = DAG.getTargetConstant((short)Addr, MVT::i32);
868       
869       Base = DAG.getTargetConstant((Addr - (signed short)Addr) >> 16, MVT::i32);
870       unsigned Opc = CN->getValueType(0) == MVT::i32 ? PPC::LIS : PPC::LIS8;
871       Base = SDValue(DAG.getTargetNode(Opc, CN->getValueType(0), Base), 0);
872       return true;
873     }
874   }
875   
876   Disp = DAG.getTargetConstant(0, getPointerTy());
877   if (FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(N))
878     Base = DAG.getTargetFrameIndex(FI->getIndex(), N.getValueType());
879   else
880     Base = N;
881   return true;      // [r+0]
882 }
883
884 /// SelectAddressRegRegOnly - Given the specified addressed, force it to be
885 /// represented as an indexed [r+r] operation.
886 bool PPCTargetLowering::SelectAddressRegRegOnly(SDValue N, SDValue &Base,
887                                                 SDValue &Index,
888                                                 SelectionDAG &DAG) {
889   // Check to see if we can easily represent this as an [r+r] address.  This
890   // will fail if it thinks that the address is more profitably represented as
891   // reg+imm, e.g. where imm = 0.
892   if (SelectAddressRegReg(N, Base, Index, DAG))
893     return true;
894   
895   // If the operand is an addition, always emit this as [r+r], since this is
896   // better (for code size, and execution, as the memop does the add for free)
897   // than emitting an explicit add.
898   if (N.getOpcode() == ISD::ADD) {
899     Base = N.getOperand(0);
900     Index = N.getOperand(1);
901     return true;
902   }
903   
904   // Otherwise, do it the hard way, using R0 as the base register.
905   Base = DAG.getRegister(PPC::R0, N.getValueType());
906   Index = N;
907   return true;
908 }
909
910 /// SelectAddressRegImmShift - Returns true if the address N can be
911 /// represented by a base register plus a signed 14-bit displacement
912 /// [r+imm*4].  Suitable for use by STD and friends.
913 bool PPCTargetLowering::SelectAddressRegImmShift(SDValue N, SDValue &Disp,
914                                                  SDValue &Base,
915                                                  SelectionDAG &DAG) {
916   // If this can be more profitably realized as r+r, fail.
917   if (SelectAddressRegReg(N, Disp, Base, DAG))
918     return false;
919   
920   if (N.getOpcode() == ISD::ADD) {
921     short imm = 0;
922     if (isIntS16Immediate(N.getOperand(1), imm) && (imm & 3) == 0) {
923       Disp =  DAG.getTargetConstant(((int)imm & 0xFFFF) >> 2, MVT::i32);
924       if (FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(N.getOperand(0))) {
925         Base = DAG.getTargetFrameIndex(FI->getIndex(), N.getValueType());
926       } else {
927         Base = N.getOperand(0);
928       }
929       return true; // [r+i]
930     } else if (N.getOperand(1).getOpcode() == PPCISD::Lo) {
931       // Match LOAD (ADD (X, Lo(G))).
932      assert(!cast<ConstantSDNode>(N.getOperand(1).getOperand(1))->getZExtValue()
933              && "Cannot handle constant offsets yet!");
934       Disp = N.getOperand(1).getOperand(0);  // The global address.
935       assert(Disp.getOpcode() == ISD::TargetGlobalAddress ||
936              Disp.getOpcode() == ISD::TargetConstantPool ||
937              Disp.getOpcode() == ISD::TargetJumpTable);
938       Base = N.getOperand(0);
939       return true;  // [&g+r]
940     }
941   } else if (N.getOpcode() == ISD::OR) {
942     short imm = 0;
943     if (isIntS16Immediate(N.getOperand(1), imm) && (imm & 3) == 0) {
944       // If this is an or of disjoint bitfields, we can codegen this as an add
945       // (for better address arithmetic) if the LHS and RHS of the OR are
946       // provably disjoint.
947       APInt LHSKnownZero, LHSKnownOne;
948       DAG.ComputeMaskedBits(N.getOperand(0),
949                             APInt::getAllOnesValue(N.getOperand(0)
950                                                    .getValueSizeInBits()),
951                             LHSKnownZero, LHSKnownOne);
952       if ((LHSKnownZero.getZExtValue()|~(uint64_t)imm) == ~0ULL) {
953         // If all of the bits are known zero on the LHS or RHS, the add won't
954         // carry.
955         Base = N.getOperand(0);
956         Disp = DAG.getTargetConstant(((int)imm & 0xFFFF) >> 2, MVT::i32);
957         return true;
958       }
959     }
960   } else if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(N)) {
961     // Loading from a constant address.  Verify low two bits are clear.
962     if ((CN->getZExtValue() & 3) == 0) {
963       // If this address fits entirely in a 14-bit sext immediate field, codegen
964       // this as "d, 0"
965       short Imm;
966       if (isIntS16Immediate(CN, Imm)) {
967         Disp = DAG.getTargetConstant((unsigned short)Imm >> 2, getPointerTy());
968         Base = DAG.getRegister(PPC::R0, CN->getValueType(0));
969         return true;
970       }
971     
972       // Fold the low-part of 32-bit absolute addresses into addr mode.
973       if (CN->getValueType(0) == MVT::i32 ||
974           (int64_t)CN->getZExtValue() == (int)CN->getZExtValue()) {
975         int Addr = (int)CN->getZExtValue();
976       
977         // Otherwise, break this down into an LIS + disp.
978         Disp = DAG.getTargetConstant((short)Addr >> 2, MVT::i32);
979         
980         Base = DAG.getTargetConstant((Addr-(signed short)Addr) >> 16, MVT::i32);
981         unsigned Opc = CN->getValueType(0) == MVT::i32 ? PPC::LIS : PPC::LIS8;
982         Base = SDValue(DAG.getTargetNode(Opc, CN->getValueType(0), Base), 0);
983         return true;
984       }
985     }
986   }
987   
988   Disp = DAG.getTargetConstant(0, getPointerTy());
989   if (FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(N))
990     Base = DAG.getTargetFrameIndex(FI->getIndex(), N.getValueType());
991   else
992     Base = N;
993   return true;      // [r+0]
994 }
995
996
997 /// getPreIndexedAddressParts - returns true by value, base pointer and
998 /// offset pointer and addressing mode by reference if the node's address
999 /// can be legally represented as pre-indexed load / store address.
1000 bool PPCTargetLowering::getPreIndexedAddressParts(SDNode *N, SDValue &Base,
1001                                                   SDValue &Offset,
1002                                                   ISD::MemIndexedMode &AM,
1003                                                   SelectionDAG &DAG) {
1004   // Disabled by default for now.
1005   if (!EnablePPCPreinc) return false;
1006   
1007   SDValue Ptr;
1008   MVT VT;
1009   if (LoadSDNode *LD = dyn_cast<LoadSDNode>(N)) {
1010     Ptr = LD->getBasePtr();
1011     VT = LD->getMemoryVT();
1012     
1013   } else if (StoreSDNode *ST = dyn_cast<StoreSDNode>(N)) {
1014     ST = ST;
1015     Ptr = ST->getBasePtr();
1016     VT  = ST->getMemoryVT();
1017   } else
1018     return false;
1019
1020   // PowerPC doesn't have preinc load/store instructions for vectors.
1021   if (VT.isVector())
1022     return false;
1023   
1024   // TODO: Check reg+reg first.
1025   
1026   // LDU/STU use reg+imm*4, others use reg+imm.
1027   if (VT != MVT::i64) {
1028     // reg + imm
1029     if (!SelectAddressRegImm(Ptr, Offset, Base, DAG))
1030       return false;
1031   } else {
1032     // reg + imm * 4.
1033     if (!SelectAddressRegImmShift(Ptr, Offset, Base, DAG))
1034       return false;
1035   }
1036
1037   if (LoadSDNode *LD = dyn_cast<LoadSDNode>(N)) {
1038     // PPC64 doesn't have lwau, but it does have lwaux.  Reject preinc load of
1039     // sext i32 to i64 when addr mode is r+i.
1040     if (LD->getValueType(0) == MVT::i64 && LD->getMemoryVT() == MVT::i32 &&
1041         LD->getExtensionType() == ISD::SEXTLOAD &&
1042         isa<ConstantSDNode>(Offset))
1043       return false;
1044   }    
1045   
1046   AM = ISD::PRE_INC;
1047   return true;
1048 }
1049
1050 //===----------------------------------------------------------------------===//
1051 //  LowerOperation implementation
1052 //===----------------------------------------------------------------------===//
1053
1054 SDValue PPCTargetLowering::LowerConstantPool(SDValue Op, 
1055                                              SelectionDAG &DAG) {
1056   MVT PtrVT = Op.getValueType();
1057   ConstantPoolSDNode *CP = cast<ConstantPoolSDNode>(Op);
1058   Constant *C = CP->getConstVal();
1059   SDValue CPI = DAG.getTargetConstantPool(C, PtrVT, CP->getAlignment());
1060   SDValue Zero = DAG.getConstant(0, PtrVT);
1061
1062   const TargetMachine &TM = DAG.getTarget();
1063   
1064   SDValue Hi = DAG.getNode(PPCISD::Hi, PtrVT, CPI, Zero);
1065   SDValue Lo = DAG.getNode(PPCISD::Lo, PtrVT, CPI, Zero);
1066
1067   // If this is a non-darwin platform, we don't support non-static relo models
1068   // yet.
1069   if (TM.getRelocationModel() == Reloc::Static ||
1070       !TM.getSubtarget<PPCSubtarget>().isDarwin()) {
1071     // Generate non-pic code that has direct accesses to the constant pool.
1072     // The address of the global is just (hi(&g)+lo(&g)).
1073     return DAG.getNode(ISD::ADD, PtrVT, Hi, Lo);
1074   }
1075   
1076   if (TM.getRelocationModel() == Reloc::PIC_) {
1077     // With PIC, the first instruction is actually "GR+hi(&G)".
1078     Hi = DAG.getNode(ISD::ADD, PtrVT,
1079                      DAG.getNode(PPCISD::GlobalBaseReg, PtrVT), Hi);
1080   }
1081   
1082   Lo = DAG.getNode(ISD::ADD, PtrVT, Hi, Lo);
1083   return Lo;
1084 }
1085
1086 SDValue PPCTargetLowering::LowerJumpTable(SDValue Op, SelectionDAG &DAG) {
1087   MVT PtrVT = Op.getValueType();
1088   JumpTableSDNode *JT = cast<JumpTableSDNode>(Op);
1089   SDValue JTI = DAG.getTargetJumpTable(JT->getIndex(), PtrVT);
1090   SDValue Zero = DAG.getConstant(0, PtrVT);
1091   
1092   const TargetMachine &TM = DAG.getTarget();
1093
1094   SDValue Hi = DAG.getNode(PPCISD::Hi, PtrVT, JTI, Zero);
1095   SDValue Lo = DAG.getNode(PPCISD::Lo, PtrVT, JTI, Zero);
1096
1097   // If this is a non-darwin platform, we don't support non-static relo models
1098   // yet.
1099   if (TM.getRelocationModel() == Reloc::Static ||
1100       !TM.getSubtarget<PPCSubtarget>().isDarwin()) {
1101     // Generate non-pic code that has direct accesses to the constant pool.
1102     // The address of the global is just (hi(&g)+lo(&g)).
1103     return DAG.getNode(ISD::ADD, PtrVT, Hi, Lo);
1104   }
1105   
1106   if (TM.getRelocationModel() == Reloc::PIC_) {
1107     // With PIC, the first instruction is actually "GR+hi(&G)".
1108     Hi = DAG.getNode(ISD::ADD, PtrVT,
1109                      DAG.getNode(PPCISD::GlobalBaseReg, PtrVT), Hi);
1110   }
1111   
1112   Lo = DAG.getNode(ISD::ADD, PtrVT, Hi, Lo);
1113   return Lo;
1114 }
1115
1116 SDValue PPCTargetLowering::LowerGlobalTLSAddress(SDValue Op, 
1117                                                    SelectionDAG &DAG) {
1118   assert(0 && "TLS not implemented for PPC.");
1119   return SDValue(); // Not reached
1120 }
1121
1122 SDValue PPCTargetLowering::LowerGlobalAddress(SDValue Op, 
1123                                                 SelectionDAG &DAG) {
1124   MVT PtrVT = Op.getValueType();
1125   GlobalAddressSDNode *GSDN = cast<GlobalAddressSDNode>(Op);
1126   GlobalValue *GV = GSDN->getGlobal();
1127   SDValue GA = DAG.getTargetGlobalAddress(GV, PtrVT, GSDN->getOffset());
1128   // If it's a debug information descriptor, don't mess with it.
1129   if (DAG.isVerifiedDebugInfoDesc(Op))
1130     return GA;
1131   SDValue Zero = DAG.getConstant(0, PtrVT);
1132   
1133   const TargetMachine &TM = DAG.getTarget();
1134
1135   SDValue Hi = DAG.getNode(PPCISD::Hi, PtrVT, GA, Zero);
1136   SDValue Lo = DAG.getNode(PPCISD::Lo, PtrVT, GA, Zero);
1137
1138   // If this is a non-darwin platform, we don't support non-static relo models
1139   // yet.
1140   if (TM.getRelocationModel() == Reloc::Static ||
1141       !TM.getSubtarget<PPCSubtarget>().isDarwin()) {
1142     // Generate non-pic code that has direct accesses to globals.
1143     // The address of the global is just (hi(&g)+lo(&g)).
1144     return DAG.getNode(ISD::ADD, PtrVT, Hi, Lo);
1145   }
1146   
1147   if (TM.getRelocationModel() == Reloc::PIC_) {
1148     // With PIC, the first instruction is actually "GR+hi(&G)".
1149     Hi = DAG.getNode(ISD::ADD, PtrVT,
1150                      DAG.getNode(PPCISD::GlobalBaseReg, PtrVT), Hi);
1151   }
1152   
1153   Lo = DAG.getNode(ISD::ADD, PtrVT, Hi, Lo);
1154   
1155   if (!TM.getSubtarget<PPCSubtarget>().hasLazyResolverStub(GV))
1156     return Lo;
1157   
1158   // If the global is weak or external, we have to go through the lazy
1159   // resolution stub.
1160   return DAG.getLoad(PtrVT, DAG.getEntryNode(), Lo, NULL, 0);
1161 }
1162
1163 SDValue PPCTargetLowering::LowerSETCC(SDValue Op, SelectionDAG &DAG) {
1164   ISD::CondCode CC = cast<CondCodeSDNode>(Op.getOperand(2))->get();
1165   
1166   // If we're comparing for equality to zero, expose the fact that this is
1167   // implented as a ctlz/srl pair on ppc, so that the dag combiner can
1168   // fold the new nodes.
1169   if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op.getOperand(1))) {
1170     if (C->isNullValue() && CC == ISD::SETEQ) {
1171       MVT VT = Op.getOperand(0).getValueType();
1172       SDValue Zext = Op.getOperand(0);
1173       if (VT.bitsLT(MVT::i32)) {
1174         VT = MVT::i32;
1175         Zext = DAG.getNode(ISD::ZERO_EXTEND, VT, Op.getOperand(0));
1176       } 
1177       unsigned Log2b = Log2_32(VT.getSizeInBits());
1178       SDValue Clz = DAG.getNode(ISD::CTLZ, VT, Zext);
1179       SDValue Scc = DAG.getNode(ISD::SRL, VT, Clz,
1180                                   DAG.getConstant(Log2b, MVT::i32));
1181       return DAG.getNode(ISD::TRUNCATE, MVT::i32, Scc);
1182     }
1183     // Leave comparisons against 0 and -1 alone for now, since they're usually 
1184     // optimized.  FIXME: revisit this when we can custom lower all setcc
1185     // optimizations.
1186     if (C->isAllOnesValue() || C->isNullValue())
1187       return SDValue();
1188   }
1189   
1190   // If we have an integer seteq/setne, turn it into a compare against zero
1191   // by xor'ing the rhs with the lhs, which is faster than setting a
1192   // condition register, reading it back out, and masking the correct bit.  The
1193   // normal approach here uses sub to do this instead of xor.  Using xor exposes
1194   // the result to other bit-twiddling opportunities.
1195   MVT LHSVT = Op.getOperand(0).getValueType();
1196   if (LHSVT.isInteger() && (CC == ISD::SETEQ || CC == ISD::SETNE)) {
1197     MVT VT = Op.getValueType();
1198     SDValue Sub = DAG.getNode(ISD::XOR, LHSVT, Op.getOperand(0), 
1199                                 Op.getOperand(1));
1200     return DAG.getSetCC(VT, Sub, DAG.getConstant(0, LHSVT), CC);
1201   }
1202   return SDValue();
1203 }
1204
1205 SDValue PPCTargetLowering::LowerVAARG(SDValue Op, SelectionDAG &DAG,
1206                               int VarArgsFrameIndex,
1207                               int VarArgsStackOffset,
1208                               unsigned VarArgsNumGPR,
1209                               unsigned VarArgsNumFPR,
1210                               const PPCSubtarget &Subtarget) {
1211   
1212   assert(0 && "VAARG in ELF32 ABI not implemented yet!");
1213   return SDValue(); // Not reached
1214 }
1215
1216 SDValue PPCTargetLowering::LowerTRAMPOLINE(SDValue Op, SelectionDAG &DAG) {
1217   SDValue Chain = Op.getOperand(0);
1218   SDValue Trmp = Op.getOperand(1); // trampoline
1219   SDValue FPtr = Op.getOperand(2); // nested function
1220   SDValue Nest = Op.getOperand(3); // 'nest' parameter value
1221
1222   MVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy();
1223   bool isPPC64 = (PtrVT == MVT::i64);
1224   const Type *IntPtrTy =
1225     DAG.getTargetLoweringInfo().getTargetData()->getIntPtrType();
1226
1227   TargetLowering::ArgListTy Args; 
1228   TargetLowering::ArgListEntry Entry;
1229
1230   Entry.Ty = IntPtrTy;
1231   Entry.Node = Trmp; Args.push_back(Entry);
1232
1233   // TrampSize == (isPPC64 ? 48 : 40);
1234   Entry.Node = DAG.getConstant(isPPC64 ? 48 : 40,
1235                                isPPC64 ? MVT::i64 : MVT::i32);
1236   Args.push_back(Entry);
1237
1238   Entry.Node = FPtr; Args.push_back(Entry);
1239   Entry.Node = Nest; Args.push_back(Entry);
1240   
1241   // Lower to a call to __trampoline_setup(Trmp, TrampSize, FPtr, ctx_reg)
1242   std::pair<SDValue, SDValue> CallResult =
1243     LowerCallTo(Chain, Op.getValueType().getTypeForMVT(), false, false,
1244                 false, CallingConv::C, false,
1245                 DAG.getExternalSymbol("__trampoline_setup", PtrVT),
1246                 Args, DAG);
1247
1248   SDValue Ops[] =
1249     { CallResult.first, CallResult.second };
1250
1251   return DAG.getMergeValues(Ops, 2, false);
1252 }
1253
1254 SDValue PPCTargetLowering::LowerVASTART(SDValue Op, SelectionDAG &DAG,
1255                                         int VarArgsFrameIndex,
1256                                         int VarArgsStackOffset,
1257                                         unsigned VarArgsNumGPR,
1258                                         unsigned VarArgsNumFPR,
1259                                         const PPCSubtarget &Subtarget) {
1260
1261   if (Subtarget.isMachoABI()) {
1262     // vastart just stores the address of the VarArgsFrameIndex slot into the
1263     // memory location argument.
1264     MVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy();
1265     SDValue FR = DAG.getFrameIndex(VarArgsFrameIndex, PtrVT);
1266     const Value *SV = cast<SrcValueSDNode>(Op.getOperand(2))->getValue();
1267     return DAG.getStore(Op.getOperand(0), FR, Op.getOperand(1), SV, 0);
1268   }
1269
1270   // For ELF 32 ABI we follow the layout of the va_list struct.
1271   // We suppose the given va_list is already allocated.
1272   //
1273   // typedef struct {
1274   //  char gpr;     /* index into the array of 8 GPRs
1275   //                 * stored in the register save area
1276   //                 * gpr=0 corresponds to r3,
1277   //                 * gpr=1 to r4, etc.
1278   //                 */
1279   //  char fpr;     /* index into the array of 8 FPRs
1280   //                 * stored in the register save area
1281   //                 * fpr=0 corresponds to f1,
1282   //                 * fpr=1 to f2, etc.
1283   //                 */
1284   //  char *overflow_arg_area;
1285   //                /* location on stack that holds
1286   //                 * the next overflow argument
1287   //                 */
1288   //  char *reg_save_area;
1289   //               /* where r3:r10 and f1:f8 (if saved)
1290   //                * are stored
1291   //                */
1292   // } va_list[1];
1293
1294
1295   SDValue ArgGPR = DAG.getConstant(VarArgsNumGPR, MVT::i8);
1296   SDValue ArgFPR = DAG.getConstant(VarArgsNumFPR, MVT::i8);
1297   
1298
1299   MVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy();
1300   
1301   SDValue StackOffsetFI = DAG.getFrameIndex(VarArgsStackOffset, PtrVT);
1302   SDValue FR = DAG.getFrameIndex(VarArgsFrameIndex, PtrVT);
1303   
1304   uint64_t FrameOffset = PtrVT.getSizeInBits()/8;
1305   SDValue ConstFrameOffset = DAG.getConstant(FrameOffset, PtrVT);
1306
1307   uint64_t StackOffset = PtrVT.getSizeInBits()/8 - 1;
1308   SDValue ConstStackOffset = DAG.getConstant(StackOffset, PtrVT);
1309
1310   uint64_t FPROffset = 1;
1311   SDValue ConstFPROffset = DAG.getConstant(FPROffset, PtrVT);
1312   
1313   const Value *SV = cast<SrcValueSDNode>(Op.getOperand(2))->getValue();
1314   
1315   // Store first byte : number of int regs
1316   SDValue firstStore = DAG.getStore(Op.getOperand(0), ArgGPR,
1317                                       Op.getOperand(1), SV, 0);
1318   uint64_t nextOffset = FPROffset;
1319   SDValue nextPtr = DAG.getNode(ISD::ADD, PtrVT, Op.getOperand(1),
1320                                   ConstFPROffset);
1321   
1322   // Store second byte : number of float regs
1323   SDValue secondStore =
1324     DAG.getStore(firstStore, ArgFPR, nextPtr, SV, nextOffset);
1325   nextOffset += StackOffset;
1326   nextPtr = DAG.getNode(ISD::ADD, PtrVT, nextPtr, ConstStackOffset);
1327   
1328   // Store second word : arguments given on stack
1329   SDValue thirdStore =
1330     DAG.getStore(secondStore, StackOffsetFI, nextPtr, SV, nextOffset);
1331   nextOffset += FrameOffset;
1332   nextPtr = DAG.getNode(ISD::ADD, PtrVT, nextPtr, ConstFrameOffset);
1333
1334   // Store third word : arguments given in registers
1335   return DAG.getStore(thirdStore, FR, nextPtr, SV, nextOffset);
1336
1337 }
1338
1339 #include "PPCGenCallingConv.inc"
1340
1341 /// GetFPR - Get the set of FP registers that should be allocated for arguments,
1342 /// depending on which subtarget is selected.
1343 static const unsigned *GetFPR(const PPCSubtarget &Subtarget) {
1344   if (Subtarget.isMachoABI()) {
1345     static const unsigned FPR[] = {
1346       PPC::F1, PPC::F2, PPC::F3, PPC::F4, PPC::F5, PPC::F6, PPC::F7,
1347       PPC::F8, PPC::F9, PPC::F10, PPC::F11, PPC::F12, PPC::F13
1348     };
1349     return FPR;
1350   }
1351   
1352   
1353   static const unsigned FPR[] = {
1354     PPC::F1, PPC::F2, PPC::F3, PPC::F4, PPC::F5, PPC::F6, PPC::F7,
1355     PPC::F8
1356   };
1357   return FPR;
1358 }
1359
1360 /// CalculateStackSlotSize - Calculates the size reserved for this argument on
1361 /// the stack.
1362 static unsigned CalculateStackSlotSize(SDValue Arg, ISD::ArgFlagsTy Flags,
1363                                        bool isVarArg, unsigned PtrByteSize) {
1364   MVT ArgVT = Arg.getValueType();
1365   unsigned ArgSize =ArgVT.getSizeInBits()/8;
1366   if (Flags.isByVal())
1367     ArgSize = Flags.getByValSize();
1368   ArgSize = ((ArgSize + PtrByteSize - 1)/PtrByteSize) * PtrByteSize;
1369
1370   return ArgSize;
1371 }
1372
1373 SDValue
1374 PPCTargetLowering::LowerFORMAL_ARGUMENTS(SDValue Op, 
1375                                          SelectionDAG &DAG,
1376                                          int &VarArgsFrameIndex,
1377                                          int &VarArgsStackOffset,
1378                                          unsigned &VarArgsNumGPR,
1379                                          unsigned &VarArgsNumFPR,
1380                                          const PPCSubtarget &Subtarget) {
1381   // TODO: add description of PPC stack frame format, or at least some docs.
1382   //
1383   MachineFunction &MF = DAG.getMachineFunction();
1384   MachineFrameInfo *MFI = MF.getFrameInfo();
1385   MachineRegisterInfo &RegInfo = MF.getRegInfo();
1386   SmallVector<SDValue, 8> ArgValues;
1387   SDValue Root = Op.getOperand(0);
1388   bool isVarArg = cast<ConstantSDNode>(Op.getOperand(2))->getZExtValue() != 0;
1389   
1390   MVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy();
1391   bool isPPC64 = PtrVT == MVT::i64;
1392   bool isMachoABI = Subtarget.isMachoABI();
1393   bool isELF32_ABI = Subtarget.isELF32_ABI();
1394   // Potential tail calls could cause overwriting of argument stack slots.
1395   unsigned CC = MF.getFunction()->getCallingConv();
1396   bool isImmutable = !(PerformTailCallOpt && (CC==CallingConv::Fast));
1397   unsigned PtrByteSize = isPPC64 ? 8 : 4;
1398
1399   unsigned ArgOffset = PPCFrameInfo::getLinkageSize(isPPC64, isMachoABI);
1400   // Area that is at least reserved in caller of this function.
1401   unsigned MinReservedArea = ArgOffset;
1402
1403   static const unsigned GPR_32[] = {           // 32-bit registers.
1404     PPC::R3, PPC::R4, PPC::R5, PPC::R6,
1405     PPC::R7, PPC::R8, PPC::R9, PPC::R10,
1406   };
1407   static const unsigned GPR_64[] = {           // 64-bit registers.
1408     PPC::X3, PPC::X4, PPC::X5, PPC::X6,
1409     PPC::X7, PPC::X8, PPC::X9, PPC::X10,
1410   };
1411   
1412   static const unsigned *FPR = GetFPR(Subtarget);
1413   
1414   static const unsigned VR[] = {
1415     PPC::V2, PPC::V3, PPC::V4, PPC::V5, PPC::V6, PPC::V7, PPC::V8,
1416     PPC::V9, PPC::V10, PPC::V11, PPC::V12, PPC::V13
1417   };
1418
1419   const unsigned Num_GPR_Regs = array_lengthof(GPR_32);
1420   const unsigned Num_FPR_Regs = isMachoABI ? 13 : 8;
1421   const unsigned Num_VR_Regs  = array_lengthof( VR);
1422
1423   unsigned GPR_idx = 0, FPR_idx = 0, VR_idx = 0;
1424   
1425   const unsigned *GPR = isPPC64 ? GPR_64 : GPR_32;
1426   
1427   // In 32-bit non-varargs functions, the stack space for vectors is after the
1428   // stack space for non-vectors.  We do not use this space unless we have
1429   // too many vectors to fit in registers, something that only occurs in
1430   // constructed examples:), but we have to walk the arglist to figure 
1431   // that out...for the pathological case, compute VecArgOffset as the
1432   // start of the vector parameter area.  Computing VecArgOffset is the
1433   // entire point of the following loop.
1434   // Altivec is not mentioned in the ppc32 Elf Supplement, so I'm not trying
1435   // to handle Elf here.
1436   unsigned VecArgOffset = ArgOffset;
1437   if (!isVarArg && !isPPC64) {
1438     for (unsigned ArgNo = 0, e = Op.getNode()->getNumValues()-1; ArgNo != e; 
1439          ++ArgNo) {
1440       MVT ObjectVT = Op.getValue(ArgNo).getValueType();
1441       unsigned ObjSize = ObjectVT.getSizeInBits()/8;
1442       ISD::ArgFlagsTy Flags =
1443         cast<ARG_FLAGSSDNode>(Op.getOperand(ArgNo+3))->getArgFlags();
1444
1445       if (Flags.isByVal()) {
1446         // ObjSize is the true size, ArgSize rounded up to multiple of regs.
1447         ObjSize = Flags.getByValSize();
1448         unsigned ArgSize = 
1449                 ((ObjSize + PtrByteSize - 1)/PtrByteSize) * PtrByteSize;
1450         VecArgOffset += ArgSize;
1451         continue;
1452       }
1453
1454       switch(ObjectVT.getSimpleVT()) {
1455       default: assert(0 && "Unhandled argument type!");
1456       case MVT::i32:
1457       case MVT::f32:
1458         VecArgOffset += isPPC64 ? 8 : 4;
1459         break;
1460       case MVT::i64:  // PPC64
1461       case MVT::f64:
1462         VecArgOffset += 8;
1463         break;
1464       case MVT::v4f32:
1465       case MVT::v4i32:
1466       case MVT::v8i16:
1467       case MVT::v16i8:
1468         // Nothing to do, we're only looking at Nonvector args here.
1469         break;
1470       }
1471     }
1472   }
1473   // We've found where the vector parameter area in memory is.  Skip the
1474   // first 12 parameters; these don't use that memory.
1475   VecArgOffset = ((VecArgOffset+15)/16)*16;
1476   VecArgOffset += 12*16;
1477
1478   // Add DAG nodes to load the arguments or copy them out of registers.  On
1479   // entry to a function on PPC, the arguments start after the linkage area,
1480   // although the first ones are often in registers.
1481   // 
1482   // In the ELF 32 ABI, GPRs and stack are double word align: an argument
1483   // represented with two words (long long or double) must be copied to an
1484   // even GPR_idx value or to an even ArgOffset value.
1485
1486   SmallVector<SDValue, 8> MemOps;
1487   unsigned nAltivecParamsAtEnd = 0;
1488   for (unsigned ArgNo = 0, e = Op.getNode()->getNumValues() - 1;
1489        ArgNo != e; ++ArgNo) {
1490     SDValue ArgVal;
1491     bool needsLoad = false;
1492     MVT ObjectVT = Op.getValue(ArgNo).getValueType();
1493     unsigned ObjSize = ObjectVT.getSizeInBits()/8;
1494     unsigned ArgSize = ObjSize;
1495     ISD::ArgFlagsTy Flags =
1496       cast<ARG_FLAGSSDNode>(Op.getOperand(ArgNo+3))->getArgFlags();
1497     // See if next argument requires stack alignment in ELF
1498     bool Align = Flags.isSplit(); 
1499
1500     unsigned CurArgOffset = ArgOffset;
1501
1502     // Varargs or 64 bit Altivec parameters are padded to a 16 byte boundary.
1503     if (ObjectVT==MVT::v4f32 || ObjectVT==MVT::v4i32 ||
1504         ObjectVT==MVT::v8i16 || ObjectVT==MVT::v16i8) {
1505       if (isVarArg || isPPC64) {
1506         MinReservedArea = ((MinReservedArea+15)/16)*16;
1507         MinReservedArea += CalculateStackSlotSize(Op.getValue(ArgNo),
1508                                                   Flags,
1509                                                   isVarArg,
1510                                                   PtrByteSize);
1511       } else  nAltivecParamsAtEnd++;
1512     } else
1513       // Calculate min reserved area.
1514       MinReservedArea += CalculateStackSlotSize(Op.getValue(ArgNo),
1515                                                 Flags,
1516                                                 isVarArg,
1517                                                 PtrByteSize);
1518
1519     // FIXME alignment for ELF may not be right
1520     // FIXME the codegen can be much improved in some cases.
1521     // We do not have to keep everything in memory.
1522     if (Flags.isByVal()) {
1523       // ObjSize is the true size, ArgSize rounded up to multiple of registers.
1524       ObjSize = Flags.getByValSize();
1525       ArgSize = ((ObjSize + PtrByteSize - 1)/PtrByteSize) * PtrByteSize;
1526       // Double word align in ELF
1527       if (Align && isELF32_ABI) GPR_idx += (GPR_idx % 2);
1528       // Objects of size 1 and 2 are right justified, everything else is
1529       // left justified.  This means the memory address is adjusted forwards.
1530       if (ObjSize==1 || ObjSize==2) {
1531         CurArgOffset = CurArgOffset + (4 - ObjSize);
1532       }
1533       // The value of the object is its address.
1534       int FI = MFI->CreateFixedObject(ObjSize, CurArgOffset);
1535       SDValue FIN = DAG.getFrameIndex(FI, PtrVT);
1536       ArgValues.push_back(FIN);
1537       if (ObjSize==1 || ObjSize==2) {
1538         if (GPR_idx != Num_GPR_Regs) {
1539           unsigned VReg = RegInfo.createVirtualRegister(&PPC::GPRCRegClass);
1540           RegInfo.addLiveIn(GPR[GPR_idx], VReg);
1541           SDValue Val = DAG.getCopyFromReg(Root, VReg, PtrVT);
1542           SDValue Store = DAG.getTruncStore(Val.getValue(1), Val, FIN, 
1543                                NULL, 0, ObjSize==1 ? MVT::i8 : MVT::i16 );
1544           MemOps.push_back(Store);
1545           ++GPR_idx;
1546           if (isMachoABI) ArgOffset += PtrByteSize;
1547         } else {
1548           ArgOffset += PtrByteSize;
1549         }
1550         continue;
1551       }
1552       for (unsigned j = 0; j < ArgSize; j += PtrByteSize) {
1553         // Store whatever pieces of the object are in registers
1554         // to memory.  ArgVal will be address of the beginning of
1555         // the object.
1556         if (GPR_idx != Num_GPR_Regs) {
1557           unsigned VReg = RegInfo.createVirtualRegister(&PPC::GPRCRegClass);
1558           RegInfo.addLiveIn(GPR[GPR_idx], VReg);
1559           int FI = MFI->CreateFixedObject(PtrByteSize, ArgOffset);
1560           SDValue FIN = DAG.getFrameIndex(FI, PtrVT);
1561           SDValue Val = DAG.getCopyFromReg(Root, VReg, PtrVT);
1562           SDValue Store = DAG.getStore(Val.getValue(1), Val, FIN, NULL, 0);
1563           MemOps.push_back(Store);
1564           ++GPR_idx;
1565           if (isMachoABI) ArgOffset += PtrByteSize;
1566         } else {
1567           ArgOffset += ArgSize - (ArgOffset-CurArgOffset);
1568           break;
1569         }
1570       }
1571       continue;
1572     }
1573
1574     switch (ObjectVT.getSimpleVT()) {
1575     default: assert(0 && "Unhandled argument type!");
1576     case MVT::i32:
1577       if (!isPPC64) {
1578         // Double word align in ELF
1579         if (Align && isELF32_ABI) GPR_idx += (GPR_idx % 2);
1580
1581         if (GPR_idx != Num_GPR_Regs) {
1582           unsigned VReg = RegInfo.createVirtualRegister(&PPC::GPRCRegClass);
1583           RegInfo.addLiveIn(GPR[GPR_idx], VReg);
1584           ArgVal = DAG.getCopyFromReg(Root, VReg, MVT::i32);
1585           ++GPR_idx;
1586         } else {
1587           needsLoad = true;
1588           ArgSize = PtrByteSize;
1589         }
1590         // Stack align in ELF
1591         if (needsLoad && Align && isELF32_ABI) 
1592           ArgOffset += ((ArgOffset/4) % 2) * PtrByteSize;
1593         // All int arguments reserve stack space in Macho ABI.
1594         if (isMachoABI || needsLoad) ArgOffset += PtrByteSize;
1595         break;
1596       }
1597       // FALLTHROUGH
1598     case MVT::i64:  // PPC64
1599       if (GPR_idx != Num_GPR_Regs) {
1600         unsigned VReg = RegInfo.createVirtualRegister(&PPC::G8RCRegClass);
1601         RegInfo.addLiveIn(GPR[GPR_idx], VReg);
1602         ArgVal = DAG.getCopyFromReg(Root, VReg, MVT::i64);
1603
1604         if (ObjectVT == MVT::i32) {
1605           // PPC64 passes i8, i16, and i32 values in i64 registers. Promote
1606           // value to MVT::i64 and then truncate to the correct register size.
1607           if (Flags.isSExt())
1608             ArgVal = DAG.getNode(ISD::AssertSext, MVT::i64, ArgVal,
1609                                  DAG.getValueType(ObjectVT));
1610           else if (Flags.isZExt())
1611             ArgVal = DAG.getNode(ISD::AssertZext, MVT::i64, ArgVal,
1612                                  DAG.getValueType(ObjectVT));
1613
1614           ArgVal = DAG.getNode(ISD::TRUNCATE, MVT::i32, ArgVal);
1615         }
1616
1617         ++GPR_idx;
1618       } else {
1619         needsLoad = true;
1620         ArgSize = PtrByteSize;
1621       }
1622       // All int arguments reserve stack space in Macho ABI.
1623       if (isMachoABI || needsLoad) ArgOffset += 8;
1624       break;
1625       
1626     case MVT::f32:
1627     case MVT::f64:
1628       // Every 4 bytes of argument space consumes one of the GPRs available for
1629       // argument passing.
1630       if (GPR_idx != Num_GPR_Regs && isMachoABI) {
1631         ++GPR_idx;
1632         if (ObjSize == 8 && GPR_idx != Num_GPR_Regs && !isPPC64)
1633           ++GPR_idx;
1634       }
1635       if (FPR_idx != Num_FPR_Regs) {
1636         unsigned VReg;
1637         if (ObjectVT == MVT::f32)
1638           VReg = RegInfo.createVirtualRegister(&PPC::F4RCRegClass);
1639         else
1640           VReg = RegInfo.createVirtualRegister(&PPC::F8RCRegClass);
1641         RegInfo.addLiveIn(FPR[FPR_idx], VReg);
1642         ArgVal = DAG.getCopyFromReg(Root, VReg, ObjectVT);
1643         ++FPR_idx;
1644       } else {
1645         needsLoad = true;
1646       }
1647       
1648       // Stack align in ELF
1649       if (needsLoad && Align && isELF32_ABI)
1650         ArgOffset += ((ArgOffset/4) % 2) * PtrByteSize;
1651       // All FP arguments reserve stack space in Macho ABI.
1652       if (isMachoABI || needsLoad) ArgOffset += isPPC64 ? 8 : ObjSize;
1653       break;
1654     case MVT::v4f32:
1655     case MVT::v4i32:
1656     case MVT::v8i16:
1657     case MVT::v16i8:
1658       // Note that vector arguments in registers don't reserve stack space,
1659       // except in varargs functions.
1660       if (VR_idx != Num_VR_Regs) {
1661         unsigned VReg = RegInfo.createVirtualRegister(&PPC::VRRCRegClass);
1662         RegInfo.addLiveIn(VR[VR_idx], VReg);
1663         ArgVal = DAG.getCopyFromReg(Root, VReg, ObjectVT);
1664         if (isVarArg) {
1665           while ((ArgOffset % 16) != 0) {
1666             ArgOffset += PtrByteSize;
1667             if (GPR_idx != Num_GPR_Regs)
1668               GPR_idx++;
1669           }
1670           ArgOffset += 16;
1671           GPR_idx = std::min(GPR_idx+4, Num_GPR_Regs);
1672         }
1673         ++VR_idx;
1674       } else {
1675         if (!isVarArg && !isPPC64) {
1676           // Vectors go after all the nonvectors.
1677           CurArgOffset = VecArgOffset;
1678           VecArgOffset += 16;
1679         } else {
1680           // Vectors are aligned.
1681           ArgOffset = ((ArgOffset+15)/16)*16;
1682           CurArgOffset = ArgOffset;
1683           ArgOffset += 16;
1684         }
1685         needsLoad = true;
1686       }
1687       break;
1688     }
1689     
1690     // We need to load the argument to a virtual register if we determined above
1691     // that we ran out of physical registers of the appropriate type.
1692     if (needsLoad) {
1693       int FI = MFI->CreateFixedObject(ObjSize,
1694                                       CurArgOffset + (ArgSize - ObjSize),
1695                                       isImmutable);
1696       SDValue FIN = DAG.getFrameIndex(FI, PtrVT);
1697       ArgVal = DAG.getLoad(ObjectVT, Root, FIN, NULL, 0);
1698     }
1699     
1700     ArgValues.push_back(ArgVal);
1701   }
1702
1703   // Set the size that is at least reserved in caller of this function.  Tail
1704   // call optimized function's reserved stack space needs to be aligned so that
1705   // taking the difference between two stack areas will result in an aligned
1706   // stack.
1707   PPCFunctionInfo *FI = MF.getInfo<PPCFunctionInfo>();
1708   // Add the Altivec parameters at the end, if needed.
1709   if (nAltivecParamsAtEnd) {
1710     MinReservedArea = ((MinReservedArea+15)/16)*16;
1711     MinReservedArea += 16*nAltivecParamsAtEnd;
1712   }
1713   MinReservedArea =
1714     std::max(MinReservedArea,
1715              PPCFrameInfo::getMinCallFrameSize(isPPC64, isMachoABI));
1716   unsigned TargetAlign = DAG.getMachineFunction().getTarget().getFrameInfo()->
1717     getStackAlignment();
1718   unsigned AlignMask = TargetAlign-1;
1719   MinReservedArea = (MinReservedArea + AlignMask) & ~AlignMask;
1720   FI->setMinReservedArea(MinReservedArea);
1721
1722   // If the function takes variable number of arguments, make a frame index for
1723   // the start of the first vararg value... for expansion of llvm.va_start.
1724   if (isVarArg) {
1725     
1726     int depth;
1727     if (isELF32_ABI) {
1728       VarArgsNumGPR = GPR_idx;
1729       VarArgsNumFPR = FPR_idx;
1730    
1731       // Make room for Num_GPR_Regs, Num_FPR_Regs and for a possible frame
1732       // pointer.
1733       depth = -(Num_GPR_Regs * PtrVT.getSizeInBits()/8 +
1734                 Num_FPR_Regs * MVT(MVT::f64).getSizeInBits()/8 +
1735                 PtrVT.getSizeInBits()/8);
1736       
1737       VarArgsStackOffset = MFI->CreateFixedObject(PtrVT.getSizeInBits()/8,
1738                                                   ArgOffset);
1739
1740     }
1741     else
1742       depth = ArgOffset;
1743     
1744     VarArgsFrameIndex = MFI->CreateFixedObject(PtrVT.getSizeInBits()/8,
1745                                                depth);
1746     SDValue FIN = DAG.getFrameIndex(VarArgsFrameIndex, PtrVT);
1747     
1748     // In ELF 32 ABI, the fixed integer arguments of a variadic function are
1749     // stored to the VarArgsFrameIndex on the stack.
1750     if (isELF32_ABI) {
1751       for (GPR_idx = 0; GPR_idx != VarArgsNumGPR; ++GPR_idx) {
1752         SDValue Val = DAG.getRegister(GPR[GPR_idx], PtrVT);
1753         SDValue Store = DAG.getStore(Root, Val, FIN, NULL, 0);
1754         MemOps.push_back(Store);
1755         // Increment the address by four for the next argument to store
1756         SDValue PtrOff = DAG.getConstant(PtrVT.getSizeInBits()/8, PtrVT);
1757         FIN = DAG.getNode(ISD::ADD, PtrOff.getValueType(), FIN, PtrOff);
1758       }
1759     }
1760
1761     // If this function is vararg, store any remaining integer argument regs
1762     // to their spots on the stack so that they may be loaded by deferencing the
1763     // result of va_next.
1764     for (; GPR_idx != Num_GPR_Regs; ++GPR_idx) {
1765       unsigned VReg;
1766       if (isPPC64)
1767         VReg = RegInfo.createVirtualRegister(&PPC::G8RCRegClass);
1768       else
1769         VReg = RegInfo.createVirtualRegister(&PPC::GPRCRegClass);
1770
1771       RegInfo.addLiveIn(GPR[GPR_idx], VReg);
1772       SDValue Val = DAG.getCopyFromReg(Root, VReg, PtrVT);
1773       SDValue Store = DAG.getStore(Val.getValue(1), Val, FIN, NULL, 0);
1774       MemOps.push_back(Store);
1775       // Increment the address by four for the next argument to store
1776       SDValue PtrOff = DAG.getConstant(PtrVT.getSizeInBits()/8, PtrVT);
1777       FIN = DAG.getNode(ISD::ADD, PtrOff.getValueType(), FIN, PtrOff);
1778     }
1779
1780     // In ELF 32 ABI, the double arguments are stored to the VarArgsFrameIndex
1781     // on the stack.
1782     if (isELF32_ABI) {
1783       for (FPR_idx = 0; FPR_idx != VarArgsNumFPR; ++FPR_idx) {
1784         SDValue Val = DAG.getRegister(FPR[FPR_idx], MVT::f64);
1785         SDValue Store = DAG.getStore(Root, Val, FIN, NULL, 0);
1786         MemOps.push_back(Store);
1787         // Increment the address by eight for the next argument to store
1788         SDValue PtrOff = DAG.getConstant(MVT(MVT::f64).getSizeInBits()/8,
1789                                            PtrVT);
1790         FIN = DAG.getNode(ISD::ADD, PtrOff.getValueType(), FIN, PtrOff);
1791       }
1792
1793       for (; FPR_idx != Num_FPR_Regs; ++FPR_idx) {
1794         unsigned VReg;
1795         VReg = RegInfo.createVirtualRegister(&PPC::F8RCRegClass);
1796
1797         RegInfo.addLiveIn(FPR[FPR_idx], VReg);
1798         SDValue Val = DAG.getCopyFromReg(Root, VReg, MVT::f64);
1799         SDValue Store = DAG.getStore(Val.getValue(1), Val, FIN, NULL, 0);
1800         MemOps.push_back(Store);
1801         // Increment the address by eight for the next argument to store
1802         SDValue PtrOff = DAG.getConstant(MVT(MVT::f64).getSizeInBits()/8,
1803                                            PtrVT);
1804         FIN = DAG.getNode(ISD::ADD, PtrOff.getValueType(), FIN, PtrOff);
1805       }
1806     }
1807   }
1808   
1809   if (!MemOps.empty())
1810     Root = DAG.getNode(ISD::TokenFactor, MVT::Other,&MemOps[0],MemOps.size());
1811
1812   ArgValues.push_back(Root);
1813  
1814   // Return the new list of results.
1815   return DAG.getMergeValues(Op.getNode()->getVTList(), &ArgValues[0],
1816                             ArgValues.size());
1817 }
1818
1819 /// CalculateParameterAndLinkageAreaSize - Get the size of the paramter plus
1820 /// linkage area.
1821 static unsigned
1822 CalculateParameterAndLinkageAreaSize(SelectionDAG &DAG,
1823                                      bool isPPC64,
1824                                      bool isMachoABI,
1825                                      bool isVarArg,
1826                                      unsigned CC,
1827                                      CallSDNode *TheCall,
1828                                      unsigned &nAltivecParamsAtEnd) {
1829   // Count how many bytes are to be pushed on the stack, including the linkage
1830   // area, and parameter passing area.  We start with 24/48 bytes, which is
1831   // prereserved space for [SP][CR][LR][3 x unused].
1832   unsigned NumBytes = PPCFrameInfo::getLinkageSize(isPPC64, isMachoABI);
1833   unsigned NumOps = TheCall->getNumArgs();
1834   unsigned PtrByteSize = isPPC64 ? 8 : 4;
1835
1836   // Add up all the space actually used.
1837   // In 32-bit non-varargs calls, Altivec parameters all go at the end; usually
1838   // they all go in registers, but we must reserve stack space for them for
1839   // possible use by the caller.  In varargs or 64-bit calls, parameters are
1840   // assigned stack space in order, with padding so Altivec parameters are
1841   // 16-byte aligned.
1842   nAltivecParamsAtEnd = 0;
1843   for (unsigned i = 0; i != NumOps; ++i) {
1844     SDValue Arg = TheCall->getArg(i);
1845     ISD::ArgFlagsTy Flags = TheCall->getArgFlags(i);
1846     MVT ArgVT = Arg.getValueType();
1847     // Varargs Altivec parameters are padded to a 16 byte boundary.
1848     if (ArgVT==MVT::v4f32 || ArgVT==MVT::v4i32 ||
1849         ArgVT==MVT::v8i16 || ArgVT==MVT::v16i8) {
1850       if (!isVarArg && !isPPC64) {
1851         // Non-varargs Altivec parameters go after all the non-Altivec
1852         // parameters; handle those later so we know how much padding we need.
1853         nAltivecParamsAtEnd++;
1854         continue;
1855       }
1856       // Varargs and 64-bit Altivec parameters are padded to 16 byte boundary.
1857       NumBytes = ((NumBytes+15)/16)*16;
1858     }
1859     NumBytes += CalculateStackSlotSize(Arg, Flags, isVarArg, PtrByteSize);
1860   }
1861
1862    // Allow for Altivec parameters at the end, if needed.
1863   if (nAltivecParamsAtEnd) {
1864     NumBytes = ((NumBytes+15)/16)*16;
1865     NumBytes += 16*nAltivecParamsAtEnd;
1866   }
1867
1868   // The prolog code of the callee may store up to 8 GPR argument registers to
1869   // the stack, allowing va_start to index over them in memory if its varargs.
1870   // Because we cannot tell if this is needed on the caller side, we have to
1871   // conservatively assume that it is needed.  As such, make sure we have at
1872   // least enough stack space for the caller to store the 8 GPRs.
1873   NumBytes = std::max(NumBytes,
1874                       PPCFrameInfo::getMinCallFrameSize(isPPC64, isMachoABI));
1875
1876   // Tail call needs the stack to be aligned.
1877   if (CC==CallingConv::Fast && PerformTailCallOpt) {
1878     unsigned TargetAlign = DAG.getMachineFunction().getTarget().getFrameInfo()->
1879       getStackAlignment();
1880     unsigned AlignMask = TargetAlign-1;
1881     NumBytes = (NumBytes + AlignMask) & ~AlignMask;
1882   }
1883
1884   return NumBytes;
1885 }
1886
1887 /// CalculateTailCallSPDiff - Get the amount the stack pointer has to be
1888 /// adjusted to accomodate the arguments for the tailcall.
1889 static int CalculateTailCallSPDiff(SelectionDAG& DAG, bool IsTailCall,
1890                                    unsigned ParamSize) {
1891
1892   if (!IsTailCall) return 0;
1893
1894   PPCFunctionInfo *FI = DAG.getMachineFunction().getInfo<PPCFunctionInfo>();
1895   unsigned CallerMinReservedArea = FI->getMinReservedArea();
1896   int SPDiff = (int)CallerMinReservedArea - (int)ParamSize;
1897   // Remember only if the new adjustement is bigger.
1898   if (SPDiff < FI->getTailCallSPDelta())
1899     FI->setTailCallSPDelta(SPDiff);
1900
1901   return SPDiff;
1902 }
1903
1904 /// IsEligibleForTailCallElimination - Check to see whether the next instruction
1905 /// following the call is a return. A function is eligible if caller/callee
1906 /// calling conventions match, currently only fastcc supports tail calls, and
1907 /// the function CALL is immediatly followed by a RET.
1908 bool
1909 PPCTargetLowering::IsEligibleForTailCallOptimization(CallSDNode *TheCall,
1910                                                      SDValue Ret,
1911                                                      SelectionDAG& DAG) const {
1912   // Variable argument functions are not supported.
1913   if (!PerformTailCallOpt || TheCall->isVarArg())
1914     return false;
1915
1916   if (CheckTailCallReturnConstraints(TheCall, Ret)) {
1917     MachineFunction &MF = DAG.getMachineFunction();
1918     unsigned CallerCC = MF.getFunction()->getCallingConv();
1919     unsigned CalleeCC = TheCall->getCallingConv();
1920     if (CalleeCC == CallingConv::Fast && CallerCC == CalleeCC) {
1921       // Functions containing by val parameters are not supported.
1922       for (unsigned i = 0; i != TheCall->getNumArgs(); i++) {
1923          ISD::ArgFlagsTy Flags = TheCall->getArgFlags(i);
1924          if (Flags.isByVal()) return false;
1925       }
1926
1927       SDValue Callee = TheCall->getCallee();
1928       // Non PIC/GOT  tail calls are supported.
1929       if (getTargetMachine().getRelocationModel() != Reloc::PIC_)
1930         return true;
1931
1932       // At the moment we can only do local tail calls (in same module, hidden
1933       // or protected) if we are generating PIC.
1934       if (GlobalAddressSDNode *G = dyn_cast<GlobalAddressSDNode>(Callee))
1935         return G->getGlobal()->hasHiddenVisibility()
1936             || G->getGlobal()->hasProtectedVisibility();
1937     }
1938   }
1939
1940   return false;
1941 }
1942
1943 /// isCallCompatibleAddress - Return the immediate to use if the specified
1944 /// 32-bit value is representable in the immediate field of a BxA instruction.
1945 static SDNode *isBLACompatibleAddress(SDValue Op, SelectionDAG &DAG) {
1946   ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op);
1947   if (!C) return 0;
1948   
1949   int Addr = C->getZExtValue();
1950   if ((Addr & 3) != 0 ||  // Low 2 bits are implicitly zero.
1951       (Addr << 6 >> 6) != Addr)
1952     return 0;  // Top 6 bits have to be sext of immediate.
1953   
1954   return DAG.getConstant((int)C->getZExtValue() >> 2,
1955                          DAG.getTargetLoweringInfo().getPointerTy()).getNode();
1956 }
1957
1958 namespace {
1959
1960 struct TailCallArgumentInfo {
1961   SDValue Arg;
1962   SDValue FrameIdxOp;
1963   int       FrameIdx;
1964
1965   TailCallArgumentInfo() : FrameIdx(0) {}
1966 };
1967
1968 }
1969
1970 /// StoreTailCallArgumentsToStackSlot - Stores arguments to their stack slot.
1971 static void
1972 StoreTailCallArgumentsToStackSlot(SelectionDAG &DAG,
1973                                            SDValue Chain,
1974                    const SmallVector<TailCallArgumentInfo, 8> &TailCallArgs,
1975                    SmallVector<SDValue, 8> &MemOpChains) {
1976   for (unsigned i = 0, e = TailCallArgs.size(); i != e; ++i) {
1977     SDValue Arg = TailCallArgs[i].Arg;
1978     SDValue FIN = TailCallArgs[i].FrameIdxOp;
1979     int FI = TailCallArgs[i].FrameIdx;
1980     // Store relative to framepointer.
1981     MemOpChains.push_back(DAG.getStore(Chain, Arg, FIN,
1982                                        PseudoSourceValue::getFixedStack(FI),
1983                                        0));
1984   }
1985 }
1986
1987 /// EmitTailCallStoreFPAndRetAddr - Move the frame pointer and return address to
1988 /// the appropriate stack slot for the tail call optimized function call.
1989 static SDValue EmitTailCallStoreFPAndRetAddr(SelectionDAG &DAG,
1990                                                MachineFunction &MF,
1991                                                SDValue Chain,
1992                                                SDValue OldRetAddr,
1993                                                SDValue OldFP,
1994                                                int SPDiff,
1995                                                bool isPPC64,
1996                                                bool isMachoABI) {
1997   if (SPDiff) {
1998     // Calculate the new stack slot for the return address.
1999     int SlotSize = isPPC64 ? 8 : 4;
2000     int NewRetAddrLoc = SPDiff + PPCFrameInfo::getReturnSaveOffset(isPPC64,
2001                                                                    isMachoABI);
2002     int NewRetAddr = MF.getFrameInfo()->CreateFixedObject(SlotSize,
2003                                                           NewRetAddrLoc);
2004     int NewFPLoc = SPDiff + PPCFrameInfo::getFramePointerSaveOffset(isPPC64,
2005                                                                     isMachoABI);
2006     int NewFPIdx = MF.getFrameInfo()->CreateFixedObject(SlotSize, NewFPLoc);
2007
2008     MVT VT = isPPC64 ? MVT::i64 : MVT::i32;
2009     SDValue NewRetAddrFrIdx = DAG.getFrameIndex(NewRetAddr, VT);
2010     Chain = DAG.getStore(Chain, OldRetAddr, NewRetAddrFrIdx,
2011                          PseudoSourceValue::getFixedStack(NewRetAddr), 0);
2012     SDValue NewFramePtrIdx = DAG.getFrameIndex(NewFPIdx, VT);
2013     Chain = DAG.getStore(Chain, OldFP, NewFramePtrIdx,
2014                          PseudoSourceValue::getFixedStack(NewFPIdx), 0);
2015   }
2016   return Chain;
2017 }
2018
2019 /// CalculateTailCallArgDest - Remember Argument for later processing. Calculate
2020 /// the position of the argument.
2021 static void
2022 CalculateTailCallArgDest(SelectionDAG &DAG, MachineFunction &MF, bool isPPC64,
2023                          SDValue Arg, int SPDiff, unsigned ArgOffset,
2024                       SmallVector<TailCallArgumentInfo, 8>& TailCallArguments) {
2025   int Offset = ArgOffset + SPDiff;
2026   uint32_t OpSize = (Arg.getValueType().getSizeInBits()+7)/8;
2027   int FI = MF.getFrameInfo()->CreateFixedObject(OpSize, Offset);
2028   MVT VT = isPPC64 ? MVT::i64 : MVT::i32;
2029   SDValue FIN = DAG.getFrameIndex(FI, VT);
2030   TailCallArgumentInfo Info;
2031   Info.Arg = Arg;
2032   Info.FrameIdxOp = FIN;
2033   Info.FrameIdx = FI;
2034   TailCallArguments.push_back(Info);
2035 }
2036
2037 /// EmitTCFPAndRetAddrLoad - Emit load from frame pointer and return address
2038 /// stack slot. Returns the chain as result and the loaded frame pointers in
2039 /// LROpOut/FPOpout. Used when tail calling.
2040 SDValue PPCTargetLowering::EmitTailCallLoadFPAndRetAddr(SelectionDAG & DAG,
2041                                                           int SPDiff,
2042                                                           SDValue Chain,
2043                                                           SDValue &LROpOut,
2044                                                           SDValue &FPOpOut) {
2045   if (SPDiff) {
2046     // Load the LR and FP stack slot for later adjusting.
2047     MVT VT = PPCSubTarget.isPPC64() ? MVT::i64 : MVT::i32;
2048     LROpOut = getReturnAddrFrameIndex(DAG);
2049     LROpOut = DAG.getLoad(VT, Chain, LROpOut, NULL, 0);
2050     Chain = SDValue(LROpOut.getNode(), 1);
2051     FPOpOut = getFramePointerFrameIndex(DAG);
2052     FPOpOut = DAG.getLoad(VT, Chain, FPOpOut, NULL, 0);
2053     Chain = SDValue(FPOpOut.getNode(), 1);
2054   }
2055   return Chain;
2056 }
2057
2058 /// CreateCopyOfByValArgument - Make a copy of an aggregate at address specified
2059 /// by "Src" to address "Dst" of size "Size".  Alignment information is 
2060 /// specified by the specific parameter attribute. The copy will be passed as
2061 /// a byval function parameter.
2062 /// Sometimes what we are copying is the end of a larger object, the part that
2063 /// does not fit in registers.
2064 static SDValue 
2065 CreateCopyOfByValArgument(SDValue Src, SDValue Dst, SDValue Chain,
2066                           ISD::ArgFlagsTy Flags, SelectionDAG &DAG,
2067                           unsigned Size) {
2068   SDValue SizeNode = DAG.getConstant(Size, MVT::i32);
2069   return DAG.getMemcpy(Chain, Dst, Src, SizeNode, Flags.getByValAlign(), false,
2070                        NULL, 0, NULL, 0);
2071 }
2072
2073 /// LowerMemOpCallTo - Store the argument to the stack or remember it in case of
2074 /// tail calls.
2075 static void
2076 LowerMemOpCallTo(SelectionDAG &DAG, MachineFunction &MF, SDValue Chain,
2077                  SDValue Arg, SDValue PtrOff, int SPDiff,
2078                  unsigned ArgOffset, bool isPPC64, bool isTailCall,
2079                  bool isVector, SmallVector<SDValue, 8> &MemOpChains,
2080                  SmallVector<TailCallArgumentInfo, 8>& TailCallArguments) {
2081   MVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy();
2082   if (!isTailCall) {
2083     if (isVector) {
2084       SDValue StackPtr;
2085       if (isPPC64)
2086         StackPtr = DAG.getRegister(PPC::X1, MVT::i64);
2087       else
2088         StackPtr = DAG.getRegister(PPC::R1, MVT::i32);
2089       PtrOff = DAG.getNode(ISD::ADD, PtrVT, StackPtr,
2090                            DAG.getConstant(ArgOffset, PtrVT));
2091     }
2092     MemOpChains.push_back(DAG.getStore(Chain, Arg, PtrOff, NULL, 0));
2093   // Calculate and remember argument location.
2094   } else CalculateTailCallArgDest(DAG, MF, isPPC64, Arg, SPDiff, ArgOffset,
2095                                   TailCallArguments);
2096 }
2097
2098 SDValue PPCTargetLowering::LowerCALL(SDValue Op, SelectionDAG &DAG,
2099                                        const PPCSubtarget &Subtarget,
2100                                        TargetMachine &TM) {
2101   CallSDNode *TheCall = cast<CallSDNode>(Op.getNode());
2102   SDValue Chain  = TheCall->getChain();
2103   bool isVarArg   = TheCall->isVarArg();
2104   unsigned CC     = TheCall->getCallingConv();
2105   bool isTailCall = TheCall->isTailCall()
2106                  && CC == CallingConv::Fast && PerformTailCallOpt;
2107   SDValue Callee = TheCall->getCallee();
2108   unsigned NumOps  = TheCall->getNumArgs();
2109   
2110   bool isMachoABI = Subtarget.isMachoABI();
2111   bool isELF32_ABI  = Subtarget.isELF32_ABI();
2112
2113   MVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy();
2114   bool isPPC64 = PtrVT == MVT::i64;
2115   unsigned PtrByteSize = isPPC64 ? 8 : 4;
2116   
2117   MachineFunction &MF = DAG.getMachineFunction();
2118
2119   // args_to_use will accumulate outgoing args for the PPCISD::CALL case in
2120   // SelectExpr to use to put the arguments in the appropriate registers.
2121   std::vector<SDValue> args_to_use;
2122   
2123   // Mark this function as potentially containing a function that contains a
2124   // tail call. As a consequence the frame pointer will be used for dynamicalloc
2125   // and restoring the callers stack pointer in this functions epilog. This is
2126   // done because by tail calling the called function might overwrite the value
2127   // in this function's (MF) stack pointer stack slot 0(SP).
2128   if (PerformTailCallOpt && CC==CallingConv::Fast)
2129     MF.getInfo<PPCFunctionInfo>()->setHasFastCall();
2130
2131   unsigned nAltivecParamsAtEnd = 0;
2132
2133   // Count how many bytes are to be pushed on the stack, including the linkage
2134   // area, and parameter passing area.  We start with 24/48 bytes, which is
2135   // prereserved space for [SP][CR][LR][3 x unused].
2136   unsigned NumBytes =
2137     CalculateParameterAndLinkageAreaSize(DAG, isPPC64, isMachoABI, isVarArg, CC,
2138                                          TheCall, nAltivecParamsAtEnd);
2139
2140   // Calculate by how many bytes the stack has to be adjusted in case of tail
2141   // call optimization.
2142   int SPDiff = CalculateTailCallSPDiff(DAG, isTailCall, NumBytes);
2143   
2144   // Adjust the stack pointer for the new arguments...
2145   // These operations are automatically eliminated by the prolog/epilog pass
2146   Chain = DAG.getCALLSEQ_START(Chain,
2147                                DAG.getConstant(NumBytes, PtrVT));
2148   SDValue CallSeqStart = Chain;
2149   
2150   // Load the return address and frame pointer so it can be move somewhere else
2151   // later.
2152   SDValue LROp, FPOp;
2153   Chain = EmitTailCallLoadFPAndRetAddr(DAG, SPDiff, Chain, LROp, FPOp);
2154
2155   // Set up a copy of the stack pointer for use loading and storing any
2156   // arguments that may not fit in the registers available for argument
2157   // passing.
2158   SDValue StackPtr;
2159   if (isPPC64)
2160     StackPtr = DAG.getRegister(PPC::X1, MVT::i64);
2161   else
2162     StackPtr = DAG.getRegister(PPC::R1, MVT::i32);
2163   
2164   // Figure out which arguments are going to go in registers, and which in
2165   // memory.  Also, if this is a vararg function, floating point operations
2166   // must be stored to our stack, and loaded into integer regs as well, if
2167   // any integer regs are available for argument passing.
2168   unsigned ArgOffset = PPCFrameInfo::getLinkageSize(isPPC64, isMachoABI);
2169   unsigned GPR_idx = 0, FPR_idx = 0, VR_idx = 0;
2170   
2171   static const unsigned GPR_32[] = {           // 32-bit registers.
2172     PPC::R3, PPC::R4, PPC::R5, PPC::R6,
2173     PPC::R7, PPC::R8, PPC::R9, PPC::R10,
2174   };
2175   static const unsigned GPR_64[] = {           // 64-bit registers.
2176     PPC::X3, PPC::X4, PPC::X5, PPC::X6,
2177     PPC::X7, PPC::X8, PPC::X9, PPC::X10,
2178   };
2179   static const unsigned *FPR = GetFPR(Subtarget);
2180   
2181   static const unsigned VR[] = {
2182     PPC::V2, PPC::V3, PPC::V4, PPC::V5, PPC::V6, PPC::V7, PPC::V8,
2183     PPC::V9, PPC::V10, PPC::V11, PPC::V12, PPC::V13
2184   };
2185   const unsigned NumGPRs = array_lengthof(GPR_32);
2186   const unsigned NumFPRs = isMachoABI ? 13 : 8;
2187   const unsigned NumVRs  = array_lengthof( VR);
2188   
2189   const unsigned *GPR = isPPC64 ? GPR_64 : GPR_32;
2190
2191   std::vector<std::pair<unsigned, SDValue> > RegsToPass;
2192   SmallVector<TailCallArgumentInfo, 8> TailCallArguments;
2193
2194   SmallVector<SDValue, 8> MemOpChains;
2195   for (unsigned i = 0; i != NumOps; ++i) {
2196     bool inMem = false;
2197     SDValue Arg = TheCall->getArg(i);
2198     ISD::ArgFlagsTy Flags = TheCall->getArgFlags(i);
2199     // See if next argument requires stack alignment in ELF
2200     bool Align = Flags.isSplit();
2201
2202     // PtrOff will be used to store the current argument to the stack if a
2203     // register cannot be found for it.
2204     SDValue PtrOff;
2205     
2206     // Stack align in ELF 32
2207     if (isELF32_ABI && Align)
2208       PtrOff = DAG.getConstant(ArgOffset + ((ArgOffset/4) % 2) * PtrByteSize,
2209                                StackPtr.getValueType());
2210     else
2211       PtrOff = DAG.getConstant(ArgOffset, StackPtr.getValueType());
2212
2213     PtrOff = DAG.getNode(ISD::ADD, PtrVT, StackPtr, PtrOff);
2214
2215     // On PPC64, promote integers to 64-bit values.
2216     if (isPPC64 && Arg.getValueType() == MVT::i32) {
2217       // FIXME: Should this use ANY_EXTEND if neither sext nor zext?
2218       unsigned ExtOp = Flags.isSExt() ? ISD::SIGN_EXTEND : ISD::ZERO_EXTEND;
2219       Arg = DAG.getNode(ExtOp, MVT::i64, Arg);
2220     }
2221
2222     // FIXME Elf untested, what are alignment rules?
2223     // FIXME memcpy is used way more than necessary.  Correctness first.
2224     if (Flags.isByVal()) {
2225       unsigned Size = Flags.getByValSize();
2226       if (isELF32_ABI && Align) GPR_idx += (GPR_idx % 2);
2227       if (Size==1 || Size==2) {
2228         // Very small objects are passed right-justified.
2229         // Everything else is passed left-justified.
2230         MVT VT = (Size==1) ? MVT::i8 : MVT::i16;
2231         if (GPR_idx != NumGPRs) {
2232           SDValue Load = DAG.getExtLoad(ISD::EXTLOAD, PtrVT, Chain, Arg, 
2233                                           NULL, 0, VT);
2234           MemOpChains.push_back(Load.getValue(1));
2235           RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load));
2236           if (isMachoABI)
2237             ArgOffset += PtrByteSize;
2238         } else {
2239           SDValue Const = DAG.getConstant(4 - Size, PtrOff.getValueType());
2240           SDValue AddPtr = DAG.getNode(ISD::ADD, PtrVT, PtrOff, Const);
2241           SDValue MemcpyCall = CreateCopyOfByValArgument(Arg, AddPtr,
2242                                 CallSeqStart.getNode()->getOperand(0), 
2243                                 Flags, DAG, Size);
2244           // This must go outside the CALLSEQ_START..END.
2245           SDValue NewCallSeqStart = DAG.getCALLSEQ_START(MemcpyCall,
2246                                CallSeqStart.getNode()->getOperand(1));
2247           DAG.ReplaceAllUsesWith(CallSeqStart.getNode(),
2248                                  NewCallSeqStart.getNode());
2249           Chain = CallSeqStart = NewCallSeqStart;
2250           ArgOffset += PtrByteSize;
2251         }
2252         continue;
2253       }
2254       // Copy entire object into memory.  There are cases where gcc-generated
2255       // code assumes it is there, even if it could be put entirely into
2256       // registers.  (This is not what the doc says.)
2257       SDValue MemcpyCall = CreateCopyOfByValArgument(Arg, PtrOff,
2258                             CallSeqStart.getNode()->getOperand(0), 
2259                             Flags, DAG, Size);
2260       // This must go outside the CALLSEQ_START..END.
2261       SDValue NewCallSeqStart = DAG.getCALLSEQ_START(MemcpyCall,
2262                            CallSeqStart.getNode()->getOperand(1));
2263       DAG.ReplaceAllUsesWith(CallSeqStart.getNode(), NewCallSeqStart.getNode());
2264       Chain = CallSeqStart = NewCallSeqStart;
2265       // And copy the pieces of it that fit into registers.
2266       for (unsigned j=0; j<Size; j+=PtrByteSize) {
2267         SDValue Const = DAG.getConstant(j, PtrOff.getValueType());
2268         SDValue AddArg = DAG.getNode(ISD::ADD, PtrVT, Arg, Const);
2269         if (GPR_idx != NumGPRs) {
2270           SDValue Load = DAG.getLoad(PtrVT, Chain, AddArg, NULL, 0);
2271           MemOpChains.push_back(Load.getValue(1));
2272           RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load));
2273           if (isMachoABI)
2274             ArgOffset += PtrByteSize;
2275         } else {
2276           ArgOffset += ((Size - j + PtrByteSize-1)/PtrByteSize)*PtrByteSize;
2277           break;
2278         }
2279       }
2280       continue;
2281     }
2282
2283     switch (Arg.getValueType().getSimpleVT()) {
2284     default: assert(0 && "Unexpected ValueType for argument!");
2285     case MVT::i32:
2286     case MVT::i64:
2287       // Double word align in ELF
2288       if (isELF32_ABI && Align) GPR_idx += (GPR_idx % 2);
2289       if (GPR_idx != NumGPRs) {
2290         RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Arg));
2291       } else {
2292         LowerMemOpCallTo(DAG, MF, Chain, Arg, PtrOff, SPDiff, ArgOffset,
2293                          isPPC64, isTailCall, false, MemOpChains,
2294                          TailCallArguments);
2295         inMem = true;
2296       }
2297       if (inMem || isMachoABI) {
2298         // Stack align in ELF
2299         if (isELF32_ABI && Align)
2300           ArgOffset += ((ArgOffset/4) % 2) * PtrByteSize;
2301
2302         ArgOffset += PtrByteSize;
2303       }
2304       break;
2305     case MVT::f32:
2306     case MVT::f64:
2307       if (FPR_idx != NumFPRs) {
2308         RegsToPass.push_back(std::make_pair(FPR[FPR_idx++], Arg));
2309
2310         if (isVarArg) {
2311           SDValue Store = DAG.getStore(Chain, Arg, PtrOff, NULL, 0);
2312           MemOpChains.push_back(Store);
2313
2314           // Float varargs are always shadowed in available integer registers
2315           if (GPR_idx != NumGPRs) {
2316             SDValue Load = DAG.getLoad(PtrVT, Store, PtrOff, NULL, 0);
2317             MemOpChains.push_back(Load.getValue(1));
2318             if (isMachoABI) RegsToPass.push_back(std::make_pair(GPR[GPR_idx++],
2319                                                                 Load));
2320           }
2321           if (GPR_idx != NumGPRs && Arg.getValueType() == MVT::f64 && !isPPC64){
2322             SDValue ConstFour = DAG.getConstant(4, PtrOff.getValueType());
2323             PtrOff = DAG.getNode(ISD::ADD, PtrVT, PtrOff, ConstFour);
2324             SDValue Load = DAG.getLoad(PtrVT, Store, PtrOff, NULL, 0);
2325             MemOpChains.push_back(Load.getValue(1));
2326             if (isMachoABI) RegsToPass.push_back(std::make_pair(GPR[GPR_idx++],
2327                                                                 Load));
2328           }
2329         } else {
2330           // If we have any FPRs remaining, we may also have GPRs remaining.
2331           // Args passed in FPRs consume either 1 (f32) or 2 (f64) available
2332           // GPRs.
2333           if (isMachoABI) {
2334             if (GPR_idx != NumGPRs)
2335               ++GPR_idx;
2336             if (GPR_idx != NumGPRs && Arg.getValueType() == MVT::f64 &&
2337                 !isPPC64)  // PPC64 has 64-bit GPR's obviously :)
2338               ++GPR_idx;
2339           }
2340         }
2341       } else {
2342         LowerMemOpCallTo(DAG, MF, Chain, Arg, PtrOff, SPDiff, ArgOffset,
2343                          isPPC64, isTailCall, false, MemOpChains,
2344                          TailCallArguments);
2345         inMem = true;
2346       }
2347       if (inMem || isMachoABI) {
2348         // Stack align in ELF
2349         if (isELF32_ABI && Align)
2350           ArgOffset += ((ArgOffset/4) % 2) * PtrByteSize;
2351         if (isPPC64)
2352           ArgOffset += 8;
2353         else
2354           ArgOffset += Arg.getValueType() == MVT::f32 ? 4 : 8;
2355       }
2356       break;
2357     case MVT::v4f32:
2358     case MVT::v4i32:
2359     case MVT::v8i16:
2360     case MVT::v16i8:
2361       if (isVarArg) {
2362         // These go aligned on the stack, or in the corresponding R registers
2363         // when within range.  The Darwin PPC ABI doc claims they also go in 
2364         // V registers; in fact gcc does this only for arguments that are
2365         // prototyped, not for those that match the ...  We do it for all
2366         // arguments, seems to work.
2367         while (ArgOffset % 16 !=0) {
2368           ArgOffset += PtrByteSize;
2369           if (GPR_idx != NumGPRs)
2370             GPR_idx++;
2371         }
2372         // We could elide this store in the case where the object fits
2373         // entirely in R registers.  Maybe later.
2374         PtrOff = DAG.getNode(ISD::ADD, PtrVT, StackPtr, 
2375                             DAG.getConstant(ArgOffset, PtrVT));
2376         SDValue Store = DAG.getStore(Chain, Arg, PtrOff, NULL, 0);
2377         MemOpChains.push_back(Store);
2378         if (VR_idx != NumVRs) {
2379           SDValue Load = DAG.getLoad(MVT::v4f32, Store, PtrOff, NULL, 0);
2380           MemOpChains.push_back(Load.getValue(1));
2381           RegsToPass.push_back(std::make_pair(VR[VR_idx++], Load));
2382         }
2383         ArgOffset += 16;
2384         for (unsigned i=0; i<16; i+=PtrByteSize) {
2385           if (GPR_idx == NumGPRs)
2386             break;
2387           SDValue Ix = DAG.getNode(ISD::ADD, PtrVT, PtrOff,
2388                                   DAG.getConstant(i, PtrVT));
2389           SDValue Load = DAG.getLoad(PtrVT, Store, Ix, NULL, 0);
2390           MemOpChains.push_back(Load.getValue(1));
2391           RegsToPass.push_back(std::make_pair(GPR[GPR_idx++], Load));
2392         }
2393         break;
2394       }
2395
2396       // Non-varargs Altivec params generally go in registers, but have
2397       // stack space allocated at the end.
2398       if (VR_idx != NumVRs) {
2399         // Doesn't have GPR space allocated.
2400         RegsToPass.push_back(std::make_pair(VR[VR_idx++], Arg));
2401       } else if (nAltivecParamsAtEnd==0) {
2402         // We are emitting Altivec params in order.
2403         LowerMemOpCallTo(DAG, MF, Chain, Arg, PtrOff, SPDiff, ArgOffset,
2404                          isPPC64, isTailCall, true, MemOpChains,
2405                          TailCallArguments);
2406         ArgOffset += 16;
2407       }
2408       break;
2409     }
2410   }
2411   // If all Altivec parameters fit in registers, as they usually do,
2412   // they get stack space following the non-Altivec parameters.  We
2413   // don't track this here because nobody below needs it.
2414   // If there are more Altivec parameters than fit in registers emit
2415   // the stores here.
2416   if (!isVarArg && nAltivecParamsAtEnd > NumVRs) {
2417     unsigned j = 0;
2418     // Offset is aligned; skip 1st 12 params which go in V registers.
2419     ArgOffset = ((ArgOffset+15)/16)*16;
2420     ArgOffset += 12*16;
2421     for (unsigned i = 0; i != NumOps; ++i) {
2422       SDValue Arg = TheCall->getArg(i);
2423       MVT ArgType = Arg.getValueType();
2424       if (ArgType==MVT::v4f32 || ArgType==MVT::v4i32 ||
2425           ArgType==MVT::v8i16 || ArgType==MVT::v16i8) {
2426         if (++j > NumVRs) {
2427           SDValue PtrOff;
2428           // We are emitting Altivec params in order.
2429           LowerMemOpCallTo(DAG, MF, Chain, Arg, PtrOff, SPDiff, ArgOffset,
2430                            isPPC64, isTailCall, true, MemOpChains,
2431                            TailCallArguments);
2432           ArgOffset += 16;
2433         }
2434       }
2435     }
2436   }
2437
2438   if (!MemOpChains.empty())
2439     Chain = DAG.getNode(ISD::TokenFactor, MVT::Other,
2440                         &MemOpChains[0], MemOpChains.size());
2441   
2442   // Build a sequence of copy-to-reg nodes chained together with token chain
2443   // and flag operands which copy the outgoing args into the appropriate regs.
2444   SDValue InFlag;
2445   for (unsigned i = 0, e = RegsToPass.size(); i != e; ++i) {
2446     Chain = DAG.getCopyToReg(Chain, RegsToPass[i].first, RegsToPass[i].second,
2447                              InFlag);
2448     InFlag = Chain.getValue(1);
2449   }
2450  
2451   // With the ELF 32 ABI, set CR6 to true if this is a vararg call.
2452   if (isVarArg && isELF32_ABI) {
2453     SDValue SetCR(DAG.getTargetNode(PPC::CRSET, MVT::i32), 0);
2454     Chain = DAG.getCopyToReg(Chain, PPC::CR1EQ, SetCR, InFlag);
2455     InFlag = Chain.getValue(1);
2456   }
2457
2458   // Emit a sequence of copyto/copyfrom virtual registers for arguments that
2459   // might overwrite each other in case of tail call optimization.
2460   if (isTailCall) {
2461     SmallVector<SDValue, 8> MemOpChains2;
2462     // Do not flag preceeding copytoreg stuff together with the following stuff.
2463     InFlag = SDValue();
2464     StoreTailCallArgumentsToStackSlot(DAG, Chain, TailCallArguments,
2465                                       MemOpChains2);
2466     if (!MemOpChains2.empty())
2467       Chain = DAG.getNode(ISD::TokenFactor, MVT::Other,
2468                           &MemOpChains2[0], MemOpChains2.size());
2469
2470     // Store the return address to the appropriate stack slot.
2471     Chain = EmitTailCallStoreFPAndRetAddr(DAG, MF, Chain, LROp, FPOp, SPDiff,
2472                                           isPPC64, isMachoABI);
2473   }
2474
2475   // Emit callseq_end just before tailcall node.
2476   if (isTailCall) {
2477     SmallVector<SDValue, 8> CallSeqOps;
2478     SDVTList CallSeqNodeTys = DAG.getVTList(MVT::Other, MVT::Flag);
2479     CallSeqOps.push_back(Chain);
2480     CallSeqOps.push_back(DAG.getIntPtrConstant(NumBytes));
2481     CallSeqOps.push_back(DAG.getIntPtrConstant(0));
2482     if (InFlag.getNode())
2483       CallSeqOps.push_back(InFlag);
2484     Chain = DAG.getNode(ISD::CALLSEQ_END, CallSeqNodeTys, &CallSeqOps[0],
2485                         CallSeqOps.size());
2486     InFlag = Chain.getValue(1);
2487   }
2488
2489   std::vector<MVT> NodeTys;
2490   NodeTys.push_back(MVT::Other);   // Returns a chain
2491   NodeTys.push_back(MVT::Flag);    // Returns a flag for retval copy to use.
2492
2493   SmallVector<SDValue, 8> Ops;
2494   unsigned CallOpc = isMachoABI? PPCISD::CALL_Macho : PPCISD::CALL_ELF;
2495   
2496   // If the callee is a GlobalAddress/ExternalSymbol node (quite common, every
2497   // direct call is) turn it into a TargetGlobalAddress/TargetExternalSymbol
2498   // node so that legalize doesn't hack it.
2499   if (GlobalAddressSDNode *G = dyn_cast<GlobalAddressSDNode>(Callee))
2500     Callee = DAG.getTargetGlobalAddress(G->getGlobal(), Callee.getValueType());
2501   else if (ExternalSymbolSDNode *S = dyn_cast<ExternalSymbolSDNode>(Callee))
2502     Callee = DAG.getTargetExternalSymbol(S->getSymbol(), Callee.getValueType());
2503   else if (SDNode *Dest = isBLACompatibleAddress(Callee, DAG))
2504     // If this is an absolute destination address, use the munged value.
2505     Callee = SDValue(Dest, 0);
2506   else {
2507     // Otherwise, this is an indirect call.  We have to use a MTCTR/BCTRL pair
2508     // to do the call, we can't use PPCISD::CALL.
2509     SDValue MTCTROps[] = {Chain, Callee, InFlag};
2510     Chain = DAG.getNode(PPCISD::MTCTR, NodeTys, MTCTROps,
2511                         2 + (InFlag.getNode() != 0));
2512     InFlag = Chain.getValue(1);
2513     
2514     // Copy the callee address into R12/X12 on darwin.
2515     if (isMachoABI) {
2516       unsigned Reg = Callee.getValueType() == MVT::i32 ? PPC::R12 : PPC::X12;
2517       Chain = DAG.getCopyToReg(Chain, Reg, Callee, InFlag);
2518       InFlag = Chain.getValue(1);
2519     }
2520
2521     NodeTys.clear();
2522     NodeTys.push_back(MVT::Other);
2523     NodeTys.push_back(MVT::Flag);
2524     Ops.push_back(Chain);
2525     CallOpc = isMachoABI ? PPCISD::BCTRL_Macho : PPCISD::BCTRL_ELF;
2526     Callee.setNode(0);
2527     // Add CTR register as callee so a bctr can be emitted later.
2528     if (isTailCall)
2529       Ops.push_back(DAG.getRegister(PPC::CTR, getPointerTy()));
2530   }
2531
2532   // If this is a direct call, pass the chain and the callee.
2533   if (Callee.getNode()) {
2534     Ops.push_back(Chain);
2535     Ops.push_back(Callee);
2536   }
2537   // If this is a tail call add stack pointer delta.
2538   if (isTailCall)
2539     Ops.push_back(DAG.getConstant(SPDiff, MVT::i32));
2540
2541   // Add argument registers to the end of the list so that they are known live
2542   // into the call.
2543   for (unsigned i = 0, e = RegsToPass.size(); i != e; ++i)
2544     Ops.push_back(DAG.getRegister(RegsToPass[i].first, 
2545                                   RegsToPass[i].second.getValueType()));
2546
2547   // When performing tail call optimization the callee pops its arguments off
2548   // the stack. Account for this here so these bytes can be pushed back on in
2549   // PPCRegisterInfo::eliminateCallFramePseudoInstr.
2550   int BytesCalleePops =
2551     (CC==CallingConv::Fast && PerformTailCallOpt) ? NumBytes : 0;
2552
2553   if (InFlag.getNode())
2554     Ops.push_back(InFlag);
2555
2556   // Emit tail call.
2557   if (isTailCall) {
2558     assert(InFlag.getNode() &&
2559            "Flag must be set. Depend on flag being set in LowerRET");
2560     Chain = DAG.getNode(PPCISD::TAILCALL,
2561                         TheCall->getVTList(), &Ops[0], Ops.size());
2562     return SDValue(Chain.getNode(), Op.getResNo());
2563   }
2564
2565   Chain = DAG.getNode(CallOpc, NodeTys, &Ops[0], Ops.size());
2566   InFlag = Chain.getValue(1);
2567
2568   Chain = DAG.getCALLSEQ_END(Chain,
2569                              DAG.getConstant(NumBytes, PtrVT),
2570                              DAG.getConstant(BytesCalleePops, PtrVT),
2571                              InFlag);
2572   if (TheCall->getValueType(0) != MVT::Other)
2573     InFlag = Chain.getValue(1);
2574
2575   SmallVector<SDValue, 16> ResultVals;
2576   SmallVector<CCValAssign, 16> RVLocs;
2577   unsigned CallerCC = DAG.getMachineFunction().getFunction()->getCallingConv();
2578   CCState CCInfo(CallerCC, isVarArg, TM, RVLocs);
2579   CCInfo.AnalyzeCallResult(TheCall, RetCC_PPC);
2580   
2581   // Copy all of the result registers out of their specified physreg.
2582   for (unsigned i = 0, e = RVLocs.size(); i != e; ++i) {
2583     CCValAssign &VA = RVLocs[i];
2584     MVT VT = VA.getValVT();
2585     assert(VA.isRegLoc() && "Can only return in registers!");
2586     Chain = DAG.getCopyFromReg(Chain, VA.getLocReg(), VT, InFlag).getValue(1);
2587     ResultVals.push_back(Chain.getValue(0));
2588     InFlag = Chain.getValue(2);
2589   }
2590
2591   // If the function returns void, just return the chain.
2592   if (RVLocs.empty())
2593     return Chain;
2594   
2595   // Otherwise, merge everything together with a MERGE_VALUES node.
2596   ResultVals.push_back(Chain);
2597   SDValue Res = DAG.getMergeValues(TheCall->getVTList(), &ResultVals[0],
2598                                      ResultVals.size());
2599   return Res.getValue(Op.getResNo());
2600 }
2601
2602 SDValue PPCTargetLowering::LowerRET(SDValue Op, SelectionDAG &DAG, 
2603                                       TargetMachine &TM) {
2604   SmallVector<CCValAssign, 16> RVLocs;
2605   unsigned CC = DAG.getMachineFunction().getFunction()->getCallingConv();
2606   bool isVarArg = DAG.getMachineFunction().getFunction()->isVarArg();
2607   CCState CCInfo(CC, isVarArg, TM, RVLocs);
2608   CCInfo.AnalyzeReturn(Op.getNode(), RetCC_PPC);
2609   
2610   // If this is the first return lowered for this function, add the regs to the
2611   // liveout set for the function.
2612   if (DAG.getMachineFunction().getRegInfo().liveout_empty()) {
2613     for (unsigned i = 0; i != RVLocs.size(); ++i)
2614       DAG.getMachineFunction().getRegInfo().addLiveOut(RVLocs[i].getLocReg());
2615   }
2616
2617   SDValue Chain = Op.getOperand(0);
2618
2619   Chain = GetPossiblePreceedingTailCall(Chain, PPCISD::TAILCALL);
2620   if (Chain.getOpcode() == PPCISD::TAILCALL) {
2621     SDValue TailCall = Chain;
2622     SDValue TargetAddress = TailCall.getOperand(1);
2623     SDValue StackAdjustment = TailCall.getOperand(2);
2624
2625     assert(((TargetAddress.getOpcode() == ISD::Register &&
2626              cast<RegisterSDNode>(TargetAddress)->getReg() == PPC::CTR) ||
2627             TargetAddress.getOpcode() == ISD::TargetExternalSymbol ||
2628             TargetAddress.getOpcode() == ISD::TargetGlobalAddress ||
2629             isa<ConstantSDNode>(TargetAddress)) &&
2630     "Expecting an global address, external symbol, absolute value or register");
2631
2632     assert(StackAdjustment.getOpcode() == ISD::Constant &&
2633            "Expecting a const value");
2634
2635     SmallVector<SDValue,8> Operands;
2636     Operands.push_back(Chain.getOperand(0));
2637     Operands.push_back(TargetAddress);
2638     Operands.push_back(StackAdjustment);
2639     // Copy registers used by the call. Last operand is a flag so it is not
2640     // copied.
2641     for (unsigned i=3; i < TailCall.getNumOperands()-1; i++) {
2642       Operands.push_back(Chain.getOperand(i));
2643     }
2644     return DAG.getNode(PPCISD::TC_RETURN, MVT::Other, &Operands[0],
2645                        Operands.size());
2646   }
2647
2648   SDValue Flag;
2649   
2650   // Copy the result values into the output registers.
2651   for (unsigned i = 0; i != RVLocs.size(); ++i) {
2652     CCValAssign &VA = RVLocs[i];
2653     assert(VA.isRegLoc() && "Can only return in registers!");
2654     Chain = DAG.getCopyToReg(Chain, VA.getLocReg(), Op.getOperand(i*2+1), Flag);
2655     Flag = Chain.getValue(1);
2656   }
2657
2658   if (Flag.getNode())
2659     return DAG.getNode(PPCISD::RET_FLAG, MVT::Other, Chain, Flag);
2660   else
2661     return DAG.getNode(PPCISD::RET_FLAG, MVT::Other, Chain);
2662 }
2663
2664 SDValue PPCTargetLowering::LowerSTACKRESTORE(SDValue Op, SelectionDAG &DAG,
2665                                    const PPCSubtarget &Subtarget) {
2666   // When we pop the dynamic allocation we need to restore the SP link.
2667   
2668   // Get the corect type for pointers.
2669   MVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy();
2670
2671   // Construct the stack pointer operand.
2672   bool IsPPC64 = Subtarget.isPPC64();
2673   unsigned SP = IsPPC64 ? PPC::X1 : PPC::R1;
2674   SDValue StackPtr = DAG.getRegister(SP, PtrVT);
2675
2676   // Get the operands for the STACKRESTORE.
2677   SDValue Chain = Op.getOperand(0);
2678   SDValue SaveSP = Op.getOperand(1);
2679   
2680   // Load the old link SP.
2681   SDValue LoadLinkSP = DAG.getLoad(PtrVT, Chain, StackPtr, NULL, 0);
2682   
2683   // Restore the stack pointer.
2684   Chain = DAG.getCopyToReg(LoadLinkSP.getValue(1), SP, SaveSP);
2685   
2686   // Store the old link SP.
2687   return DAG.getStore(Chain, LoadLinkSP, StackPtr, NULL, 0);
2688 }
2689
2690
2691
2692 SDValue
2693 PPCTargetLowering::getReturnAddrFrameIndex(SelectionDAG & DAG) const {
2694   MachineFunction &MF = DAG.getMachineFunction();
2695   bool IsPPC64 = PPCSubTarget.isPPC64();
2696   bool isMachoABI = PPCSubTarget.isMachoABI();
2697   MVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy();
2698
2699   // Get current frame pointer save index.  The users of this index will be
2700   // primarily DYNALLOC instructions.
2701   PPCFunctionInfo *FI = MF.getInfo<PPCFunctionInfo>();
2702   int RASI = FI->getReturnAddrSaveIndex();
2703
2704   // If the frame pointer save index hasn't been defined yet.
2705   if (!RASI) {
2706     // Find out what the fix offset of the frame pointer save area.
2707     int LROffset = PPCFrameInfo::getReturnSaveOffset(IsPPC64, isMachoABI);
2708     // Allocate the frame index for frame pointer save area.
2709     RASI = MF.getFrameInfo()->CreateFixedObject(IsPPC64? 8 : 4, LROffset);
2710     // Save the result.
2711     FI->setReturnAddrSaveIndex(RASI);
2712   }
2713   return DAG.getFrameIndex(RASI, PtrVT);
2714 }
2715
2716 SDValue
2717 PPCTargetLowering::getFramePointerFrameIndex(SelectionDAG & DAG) const {
2718   MachineFunction &MF = DAG.getMachineFunction();
2719   bool IsPPC64 = PPCSubTarget.isPPC64();
2720   bool isMachoABI = PPCSubTarget.isMachoABI();
2721   MVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy();
2722
2723   // Get current frame pointer save index.  The users of this index will be
2724   // primarily DYNALLOC instructions.
2725   PPCFunctionInfo *FI = MF.getInfo<PPCFunctionInfo>();
2726   int FPSI = FI->getFramePointerSaveIndex();
2727
2728   // If the frame pointer save index hasn't been defined yet.
2729   if (!FPSI) {
2730     // Find out what the fix offset of the frame pointer save area.
2731     int FPOffset = PPCFrameInfo::getFramePointerSaveOffset(IsPPC64, isMachoABI);
2732     
2733     // Allocate the frame index for frame pointer save area.
2734     FPSI = MF.getFrameInfo()->CreateFixedObject(IsPPC64? 8 : 4, FPOffset); 
2735     // Save the result.
2736     FI->setFramePointerSaveIndex(FPSI);                      
2737   }
2738   return DAG.getFrameIndex(FPSI, PtrVT);
2739 }
2740
2741 SDValue PPCTargetLowering::LowerDYNAMIC_STACKALLOC(SDValue Op,
2742                                          SelectionDAG &DAG,
2743                                          const PPCSubtarget &Subtarget) {
2744   // Get the inputs.
2745   SDValue Chain = Op.getOperand(0);
2746   SDValue Size  = Op.getOperand(1);
2747   
2748   // Get the corect type for pointers.
2749   MVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy();
2750   // Negate the size.
2751   SDValue NegSize = DAG.getNode(ISD::SUB, PtrVT,
2752                                   DAG.getConstant(0, PtrVT), Size);
2753   // Construct a node for the frame pointer save index.
2754   SDValue FPSIdx = getFramePointerFrameIndex(DAG);
2755   // Build a DYNALLOC node.
2756   SDValue Ops[3] = { Chain, NegSize, FPSIdx };
2757   SDVTList VTs = DAG.getVTList(PtrVT, MVT::Other);
2758   return DAG.getNode(PPCISD::DYNALLOC, VTs, Ops, 3);
2759 }
2760
2761 /// LowerSELECT_CC - Lower floating point select_cc's into fsel instruction when
2762 /// possible.
2763 SDValue PPCTargetLowering::LowerSELECT_CC(SDValue Op, SelectionDAG &DAG) {
2764   // Not FP? Not a fsel.
2765   if (!Op.getOperand(0).getValueType().isFloatingPoint() ||
2766       !Op.getOperand(2).getValueType().isFloatingPoint())
2767     return SDValue();
2768   
2769   ISD::CondCode CC = cast<CondCodeSDNode>(Op.getOperand(4))->get();
2770   
2771   // Cannot handle SETEQ/SETNE.
2772   if (CC == ISD::SETEQ || CC == ISD::SETNE) return SDValue();
2773   
2774   MVT ResVT = Op.getValueType();
2775   MVT CmpVT = Op.getOperand(0).getValueType();
2776   SDValue LHS = Op.getOperand(0), RHS = Op.getOperand(1);
2777   SDValue TV  = Op.getOperand(2), FV  = Op.getOperand(3);
2778   
2779   // If the RHS of the comparison is a 0.0, we don't need to do the
2780   // subtraction at all.
2781   if (isFloatingPointZero(RHS))
2782     switch (CC) {
2783     default: break;       // SETUO etc aren't handled by fsel.
2784     case ISD::SETULT:
2785     case ISD::SETLT:
2786       std::swap(TV, FV);  // fsel is natively setge, swap operands for setlt
2787     case ISD::SETOGE:
2788     case ISD::SETGE:
2789       if (LHS.getValueType() == MVT::f32)   // Comparison is always 64-bits
2790         LHS = DAG.getNode(ISD::FP_EXTEND, MVT::f64, LHS);
2791       return DAG.getNode(PPCISD::FSEL, ResVT, LHS, TV, FV);
2792     case ISD::SETUGT:
2793     case ISD::SETGT:
2794       std::swap(TV, FV);  // fsel is natively setge, swap operands for setlt
2795     case ISD::SETOLE:
2796     case ISD::SETLE:
2797       if (LHS.getValueType() == MVT::f32)   // Comparison is always 64-bits
2798         LHS = DAG.getNode(ISD::FP_EXTEND, MVT::f64, LHS);
2799       return DAG.getNode(PPCISD::FSEL, ResVT,
2800                          DAG.getNode(ISD::FNEG, MVT::f64, LHS), TV, FV);
2801     }
2802       
2803   SDValue Cmp;
2804   switch (CC) {
2805   default: break;       // SETUO etc aren't handled by fsel.
2806   case ISD::SETULT:
2807   case ISD::SETLT:
2808     Cmp = DAG.getNode(ISD::FSUB, CmpVT, LHS, RHS);
2809     if (Cmp.getValueType() == MVT::f32)   // Comparison is always 64-bits
2810       Cmp = DAG.getNode(ISD::FP_EXTEND, MVT::f64, Cmp);
2811       return DAG.getNode(PPCISD::FSEL, ResVT, Cmp, FV, TV);
2812   case ISD::SETOGE:
2813   case ISD::SETGE:
2814     Cmp = DAG.getNode(ISD::FSUB, CmpVT, LHS, RHS);
2815     if (Cmp.getValueType() == MVT::f32)   // Comparison is always 64-bits
2816       Cmp = DAG.getNode(ISD::FP_EXTEND, MVT::f64, Cmp);
2817       return DAG.getNode(PPCISD::FSEL, ResVT, Cmp, TV, FV);
2818   case ISD::SETUGT:
2819   case ISD::SETGT:
2820     Cmp = DAG.getNode(ISD::FSUB, CmpVT, RHS, LHS);
2821     if (Cmp.getValueType() == MVT::f32)   // Comparison is always 64-bits
2822       Cmp = DAG.getNode(ISD::FP_EXTEND, MVT::f64, Cmp);
2823       return DAG.getNode(PPCISD::FSEL, ResVT, Cmp, FV, TV);
2824   case ISD::SETOLE:
2825   case ISD::SETLE:
2826     Cmp = DAG.getNode(ISD::FSUB, CmpVT, RHS, LHS);
2827     if (Cmp.getValueType() == MVT::f32)   // Comparison is always 64-bits
2828       Cmp = DAG.getNode(ISD::FP_EXTEND, MVT::f64, Cmp);
2829       return DAG.getNode(PPCISD::FSEL, ResVT, Cmp, TV, FV);
2830   }
2831   return SDValue();
2832 }
2833
2834 // FIXME: Split this code up when LegalizeDAGTypes lands.
2835 SDValue PPCTargetLowering::LowerFP_TO_SINT(SDValue Op, SelectionDAG &DAG) {
2836   assert(Op.getOperand(0).getValueType().isFloatingPoint());
2837   SDValue Src = Op.getOperand(0);
2838   if (Src.getValueType() == MVT::f32)
2839     Src = DAG.getNode(ISD::FP_EXTEND, MVT::f64, Src);
2840
2841   SDValue Tmp;
2842   switch (Op.getValueType().getSimpleVT()) {
2843   default: assert(0 && "Unhandled FP_TO_SINT type in custom expander!");
2844   case MVT::i32:
2845     Tmp = DAG.getNode(PPCISD::FCTIWZ, MVT::f64, Src);
2846     break;
2847   case MVT::i64:
2848     Tmp = DAG.getNode(PPCISD::FCTIDZ, MVT::f64, Src);
2849     break;
2850   }
2851
2852   // Convert the FP value to an int value through memory.
2853   SDValue FIPtr = DAG.CreateStackTemporary(MVT::f64);
2854
2855   // Emit a store to the stack slot.
2856   SDValue Chain = DAG.getStore(DAG.getEntryNode(), Tmp, FIPtr, NULL, 0);
2857
2858   // Result is a load from the stack slot.  If loading 4 bytes, make sure to
2859   // add in a bias.
2860   if (Op.getValueType() == MVT::i32)
2861     FIPtr = DAG.getNode(ISD::ADD, FIPtr.getValueType(), FIPtr,
2862                         DAG.getConstant(4, FIPtr.getValueType()));
2863   return DAG.getLoad(Op.getValueType(), Chain, FIPtr, NULL, 0);
2864 }
2865
2866 SDValue PPCTargetLowering::LowerFP_ROUND_INREG(SDValue Op, 
2867                                                  SelectionDAG &DAG) {
2868   assert(Op.getValueType() == MVT::ppcf128);
2869   SDNode *Node = Op.getNode();
2870   assert(Node->getOperand(0).getValueType() == MVT::ppcf128);
2871   assert(Node->getOperand(0).getNode()->getOpcode() == ISD::BUILD_PAIR);
2872   SDValue Lo = Node->getOperand(0).getNode()->getOperand(0);
2873   SDValue Hi = Node->getOperand(0).getNode()->getOperand(1);
2874
2875   // This sequence changes FPSCR to do round-to-zero, adds the two halves
2876   // of the long double, and puts FPSCR back the way it was.  We do not
2877   // actually model FPSCR.
2878   std::vector<MVT> NodeTys;
2879   SDValue Ops[4], Result, MFFSreg, InFlag, FPreg;
2880
2881   NodeTys.push_back(MVT::f64);   // Return register
2882   NodeTys.push_back(MVT::Flag);    // Returns a flag for later insns
2883   Result = DAG.getNode(PPCISD::MFFS, NodeTys, &InFlag, 0);
2884   MFFSreg = Result.getValue(0);
2885   InFlag = Result.getValue(1);
2886
2887   NodeTys.clear();
2888   NodeTys.push_back(MVT::Flag);   // Returns a flag
2889   Ops[0] = DAG.getConstant(31, MVT::i32);
2890   Ops[1] = InFlag;
2891   Result = DAG.getNode(PPCISD::MTFSB1, NodeTys, Ops, 2);
2892   InFlag = Result.getValue(0);
2893
2894   NodeTys.clear();
2895   NodeTys.push_back(MVT::Flag);   // Returns a flag
2896   Ops[0] = DAG.getConstant(30, MVT::i32);
2897   Ops[1] = InFlag;
2898   Result = DAG.getNode(PPCISD::MTFSB0, NodeTys, Ops, 2);
2899   InFlag = Result.getValue(0);
2900
2901   NodeTys.clear();
2902   NodeTys.push_back(MVT::f64);    // result of add
2903   NodeTys.push_back(MVT::Flag);   // Returns a flag
2904   Ops[0] = Lo;
2905   Ops[1] = Hi;
2906   Ops[2] = InFlag;
2907   Result = DAG.getNode(PPCISD::FADDRTZ, NodeTys, Ops, 3);
2908   FPreg = Result.getValue(0);
2909   InFlag = Result.getValue(1);
2910
2911   NodeTys.clear();
2912   NodeTys.push_back(MVT::f64);
2913   Ops[0] = DAG.getConstant(1, MVT::i32);
2914   Ops[1] = MFFSreg;
2915   Ops[2] = FPreg;
2916   Ops[3] = InFlag;
2917   Result = DAG.getNode(PPCISD::MTFSF, NodeTys, Ops, 4);
2918   FPreg = Result.getValue(0);
2919
2920   // We know the low half is about to be thrown away, so just use something
2921   // convenient.
2922   return DAG.getNode(ISD::BUILD_PAIR, Lo.getValueType(), FPreg, FPreg);
2923 }
2924
2925 SDValue PPCTargetLowering::LowerSINT_TO_FP(SDValue Op, SelectionDAG &DAG) {
2926   // Don't handle ppc_fp128 here; let it be lowered to a libcall.
2927   if (Op.getValueType() != MVT::f32 && Op.getValueType() != MVT::f64)
2928     return SDValue();
2929
2930   if (Op.getOperand(0).getValueType() == MVT::i64) {
2931     SDValue Bits = DAG.getNode(ISD::BIT_CONVERT, MVT::f64, Op.getOperand(0));
2932     SDValue FP = DAG.getNode(PPCISD::FCFID, MVT::f64, Bits);
2933     if (Op.getValueType() == MVT::f32)
2934       FP = DAG.getNode(ISD::FP_ROUND, MVT::f32, FP, DAG.getIntPtrConstant(0));
2935     return FP;
2936   }
2937   
2938   assert(Op.getOperand(0).getValueType() == MVT::i32 &&
2939          "Unhandled SINT_TO_FP type in custom expander!");
2940   // Since we only generate this in 64-bit mode, we can take advantage of
2941   // 64-bit registers.  In particular, sign extend the input value into the
2942   // 64-bit register with extsw, store the WHOLE 64-bit value into the stack
2943   // then lfd it and fcfid it.
2944   MachineFrameInfo *FrameInfo = DAG.getMachineFunction().getFrameInfo();
2945   int FrameIdx = FrameInfo->CreateStackObject(8, 8);
2946   MVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy();
2947   SDValue FIdx = DAG.getFrameIndex(FrameIdx, PtrVT);
2948   
2949   SDValue Ext64 = DAG.getNode(PPCISD::EXTSW_32, MVT::i32,
2950                                 Op.getOperand(0));
2951   
2952   // STD the extended value into the stack slot.
2953   MachineMemOperand MO(PseudoSourceValue::getFixedStack(FrameIdx),
2954                        MachineMemOperand::MOStore, 0, 8, 8);
2955   SDValue Store = DAG.getNode(PPCISD::STD_32, MVT::Other,
2956                                 DAG.getEntryNode(), Ext64, FIdx,
2957                                 DAG.getMemOperand(MO));
2958   // Load the value as a double.
2959   SDValue Ld = DAG.getLoad(MVT::f64, Store, FIdx, NULL, 0);
2960   
2961   // FCFID it and return it.
2962   SDValue FP = DAG.getNode(PPCISD::FCFID, MVT::f64, Ld);
2963   if (Op.getValueType() == MVT::f32)
2964     FP = DAG.getNode(ISD::FP_ROUND, MVT::f32, FP, DAG.getIntPtrConstant(0));
2965   return FP;
2966 }
2967
2968 SDValue PPCTargetLowering::LowerFLT_ROUNDS_(SDValue Op, SelectionDAG &DAG) {
2969   /*
2970    The rounding mode is in bits 30:31 of FPSR, and has the following
2971    settings:
2972      00 Round to nearest
2973      01 Round to 0
2974      10 Round to +inf
2975      11 Round to -inf
2976
2977   FLT_ROUNDS, on the other hand, expects the following:
2978     -1 Undefined
2979      0 Round to 0
2980      1 Round to nearest
2981      2 Round to +inf
2982      3 Round to -inf
2983
2984   To perform the conversion, we do:
2985     ((FPSCR & 0x3) ^ ((~FPSCR & 0x3) >> 1))
2986   */
2987
2988   MachineFunction &MF = DAG.getMachineFunction();
2989   MVT VT = Op.getValueType();
2990   MVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy();
2991   std::vector<MVT> NodeTys;
2992   SDValue MFFSreg, InFlag;
2993
2994   // Save FP Control Word to register
2995   NodeTys.push_back(MVT::f64);    // return register
2996   NodeTys.push_back(MVT::Flag);   // unused in this context
2997   SDValue Chain = DAG.getNode(PPCISD::MFFS, NodeTys, &InFlag, 0);
2998
2999   // Save FP register to stack slot
3000   int SSFI = MF.getFrameInfo()->CreateStackObject(8, 8);
3001   SDValue StackSlot = DAG.getFrameIndex(SSFI, PtrVT);
3002   SDValue Store = DAG.getStore(DAG.getEntryNode(), Chain,
3003                                  StackSlot, NULL, 0);
3004
3005   // Load FP Control Word from low 32 bits of stack slot.
3006   SDValue Four = DAG.getConstant(4, PtrVT);
3007   SDValue Addr = DAG.getNode(ISD::ADD, PtrVT, StackSlot, Four);
3008   SDValue CWD = DAG.getLoad(MVT::i32, Store, Addr, NULL, 0);
3009
3010   // Transform as necessary
3011   SDValue CWD1 =
3012     DAG.getNode(ISD::AND, MVT::i32,
3013                 CWD, DAG.getConstant(3, MVT::i32));
3014   SDValue CWD2 =
3015     DAG.getNode(ISD::SRL, MVT::i32,
3016                 DAG.getNode(ISD::AND, MVT::i32,
3017                             DAG.getNode(ISD::XOR, MVT::i32,
3018                                         CWD, DAG.getConstant(3, MVT::i32)),
3019                             DAG.getConstant(3, MVT::i32)),
3020                 DAG.getConstant(1, MVT::i8));
3021
3022   SDValue RetVal =
3023     DAG.getNode(ISD::XOR, MVT::i32, CWD1, CWD2);
3024
3025   return DAG.getNode((VT.getSizeInBits() < 16 ?
3026                       ISD::TRUNCATE : ISD::ZERO_EXTEND), VT, RetVal);
3027 }
3028
3029 SDValue PPCTargetLowering::LowerSHL_PARTS(SDValue Op, SelectionDAG &DAG) {
3030   MVT VT = Op.getValueType();
3031   unsigned BitWidth = VT.getSizeInBits();
3032   assert(Op.getNumOperands() == 3 &&
3033          VT == Op.getOperand(1).getValueType() &&
3034          "Unexpected SHL!");
3035   
3036   // Expand into a bunch of logical ops.  Note that these ops
3037   // depend on the PPC behavior for oversized shift amounts.
3038   SDValue Lo = Op.getOperand(0);
3039   SDValue Hi = Op.getOperand(1);
3040   SDValue Amt = Op.getOperand(2);
3041   MVT AmtVT = Amt.getValueType();
3042   
3043   SDValue Tmp1 = DAG.getNode(ISD::SUB, AmtVT,
3044                                DAG.getConstant(BitWidth, AmtVT), Amt);
3045   SDValue Tmp2 = DAG.getNode(PPCISD::SHL, VT, Hi, Amt);
3046   SDValue Tmp3 = DAG.getNode(PPCISD::SRL, VT, Lo, Tmp1);
3047   SDValue Tmp4 = DAG.getNode(ISD::OR , VT, Tmp2, Tmp3);
3048   SDValue Tmp5 = DAG.getNode(ISD::ADD, AmtVT, Amt,
3049                                DAG.getConstant(-BitWidth, AmtVT));
3050   SDValue Tmp6 = DAG.getNode(PPCISD::SHL, VT, Lo, Tmp5);
3051   SDValue OutHi = DAG.getNode(ISD::OR, VT, Tmp4, Tmp6);
3052   SDValue OutLo = DAG.getNode(PPCISD::SHL, VT, Lo, Amt);
3053   SDValue OutOps[] = { OutLo, OutHi };
3054   return DAG.getMergeValues(OutOps, 2);
3055 }
3056
3057 SDValue PPCTargetLowering::LowerSRL_PARTS(SDValue Op, SelectionDAG &DAG) {
3058   MVT VT = Op.getValueType();
3059   unsigned BitWidth = VT.getSizeInBits();
3060   assert(Op.getNumOperands() == 3 &&
3061          VT == Op.getOperand(1).getValueType() &&
3062          "Unexpected SRL!");
3063   
3064   // Expand into a bunch of logical ops.  Note that these ops
3065   // depend on the PPC behavior for oversized shift amounts.
3066   SDValue Lo = Op.getOperand(0);
3067   SDValue Hi = Op.getOperand(1);
3068   SDValue Amt = Op.getOperand(2);
3069   MVT AmtVT = Amt.getValueType();
3070   
3071   SDValue Tmp1 = DAG.getNode(ISD::SUB, AmtVT,
3072                                DAG.getConstant(BitWidth, AmtVT), Amt);
3073   SDValue Tmp2 = DAG.getNode(PPCISD::SRL, VT, Lo, Amt);
3074   SDValue Tmp3 = DAG.getNode(PPCISD::SHL, VT, Hi, Tmp1);
3075   SDValue Tmp4 = DAG.getNode(ISD::OR , VT, Tmp2, Tmp3);
3076   SDValue Tmp5 = DAG.getNode(ISD::ADD, AmtVT, Amt,
3077                                DAG.getConstant(-BitWidth, AmtVT));
3078   SDValue Tmp6 = DAG.getNode(PPCISD::SRL, VT, Hi, Tmp5);
3079   SDValue OutLo = DAG.getNode(ISD::OR, VT, Tmp4, Tmp6);
3080   SDValue OutHi = DAG.getNode(PPCISD::SRL, VT, Hi, Amt);
3081   SDValue OutOps[] = { OutLo, OutHi };
3082   return DAG.getMergeValues(OutOps, 2);
3083 }
3084
3085 SDValue PPCTargetLowering::LowerSRA_PARTS(SDValue Op, SelectionDAG &DAG) {
3086   MVT VT = Op.getValueType();
3087   unsigned BitWidth = VT.getSizeInBits();
3088   assert(Op.getNumOperands() == 3 &&
3089          VT == Op.getOperand(1).getValueType() &&
3090          "Unexpected SRA!");
3091   
3092   // Expand into a bunch of logical ops, followed by a select_cc.
3093   SDValue Lo = Op.getOperand(0);
3094   SDValue Hi = Op.getOperand(1);
3095   SDValue Amt = Op.getOperand(2);
3096   MVT AmtVT = Amt.getValueType();
3097   
3098   SDValue Tmp1 = DAG.getNode(ISD::SUB, AmtVT,
3099                                DAG.getConstant(BitWidth, AmtVT), Amt);
3100   SDValue Tmp2 = DAG.getNode(PPCISD::SRL, VT, Lo, Amt);
3101   SDValue Tmp3 = DAG.getNode(PPCISD::SHL, VT, Hi, Tmp1);
3102   SDValue Tmp4 = DAG.getNode(ISD::OR , VT, Tmp2, Tmp3);
3103   SDValue Tmp5 = DAG.getNode(ISD::ADD, AmtVT, Amt,
3104                                DAG.getConstant(-BitWidth, AmtVT));
3105   SDValue Tmp6 = DAG.getNode(PPCISD::SRA, VT, Hi, Tmp5);
3106   SDValue OutHi = DAG.getNode(PPCISD::SRA, VT, Hi, Amt);
3107   SDValue OutLo = DAG.getSelectCC(Tmp5, DAG.getConstant(0, AmtVT),
3108                                     Tmp4, Tmp6, ISD::SETLE);
3109   SDValue OutOps[] = { OutLo, OutHi };
3110   return DAG.getMergeValues(OutOps, 2);
3111 }
3112
3113 //===----------------------------------------------------------------------===//
3114 // Vector related lowering.
3115 //
3116
3117 // If this is a vector of constants or undefs, get the bits.  A bit in
3118 // UndefBits is set if the corresponding element of the vector is an 
3119 // ISD::UNDEF value.  For undefs, the corresponding VectorBits values are
3120 // zero.   Return true if this is not an array of constants, false if it is.
3121 //
3122 static bool GetConstantBuildVectorBits(SDNode *BV, uint64_t VectorBits[2],
3123                                        uint64_t UndefBits[2]) {
3124   // Start with zero'd results.
3125   VectorBits[0] = VectorBits[1] = UndefBits[0] = UndefBits[1] = 0;
3126   
3127   unsigned EltBitSize = BV->getOperand(0).getValueType().getSizeInBits();
3128   for (unsigned i = 0, e = BV->getNumOperands(); i != e; ++i) {
3129     SDValue OpVal = BV->getOperand(i);
3130     
3131     unsigned PartNo = i >= e/2;     // In the upper 128 bits?
3132     unsigned SlotNo = e/2 - (i & (e/2-1))-1;  // Which subpiece of the uint64_t.
3133
3134     uint64_t EltBits = 0;
3135     if (OpVal.getOpcode() == ISD::UNDEF) {
3136       uint64_t EltUndefBits = ~0U >> (32-EltBitSize);
3137       UndefBits[PartNo] |= EltUndefBits << (SlotNo*EltBitSize);
3138       continue;
3139     } else if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(OpVal)) {
3140       EltBits = CN->getZExtValue() & (~0U >> (32-EltBitSize));
3141     } else if (ConstantFPSDNode *CN = dyn_cast<ConstantFPSDNode>(OpVal)) {
3142       assert(CN->getValueType(0) == MVT::f32 &&
3143              "Only one legal FP vector type!");
3144       EltBits = FloatToBits(CN->getValueAPF().convertToFloat());
3145     } else {
3146       // Nonconstant element.
3147       return true;
3148     }
3149     
3150     VectorBits[PartNo] |= EltBits << (SlotNo*EltBitSize);
3151   }
3152   
3153   //printf("%llx %llx  %llx %llx\n", 
3154   //       VectorBits[0], VectorBits[1], UndefBits[0], UndefBits[1]);
3155   return false;
3156 }
3157
3158 // If this is a splat (repetition) of a value across the whole vector, return
3159 // the smallest size that splats it.  For example, "0x01010101010101..." is a
3160 // splat of 0x01, 0x0101, and 0x01010101.  We return SplatBits = 0x01 and 
3161 // SplatSize = 1 byte.
3162 static bool isConstantSplat(const uint64_t Bits128[2], 
3163                             const uint64_t Undef128[2],
3164                             unsigned &SplatBits, unsigned &SplatUndef,
3165                             unsigned &SplatSize) {
3166   
3167   // Don't let undefs prevent splats from matching.  See if the top 64-bits are
3168   // the same as the lower 64-bits, ignoring undefs.
3169   if ((Bits128[0] & ~Undef128[1]) != (Bits128[1] & ~Undef128[0]))
3170     return false;  // Can't be a splat if two pieces don't match.
3171   
3172   uint64_t Bits64  = Bits128[0] | Bits128[1];
3173   uint64_t Undef64 = Undef128[0] & Undef128[1];
3174   
3175   // Check that the top 32-bits are the same as the lower 32-bits, ignoring
3176   // undefs.
3177   if ((Bits64 & (~Undef64 >> 32)) != ((Bits64 >> 32) & ~Undef64))
3178     return false;  // Can't be a splat if two pieces don't match.
3179
3180   uint32_t Bits32  = uint32_t(Bits64) | uint32_t(Bits64 >> 32);
3181   uint32_t Undef32 = uint32_t(Undef64) & uint32_t(Undef64 >> 32);
3182
3183   // If the top 16-bits are different than the lower 16-bits, ignoring
3184   // undefs, we have an i32 splat.
3185   if ((Bits32 & (~Undef32 >> 16)) != ((Bits32 >> 16) & ~Undef32)) {
3186     SplatBits = Bits32;
3187     SplatUndef = Undef32;
3188     SplatSize = 4;
3189     return true;
3190   }
3191   
3192   uint16_t Bits16  = uint16_t(Bits32)  | uint16_t(Bits32 >> 16);
3193   uint16_t Undef16 = uint16_t(Undef32) & uint16_t(Undef32 >> 16);
3194
3195   // If the top 8-bits are different than the lower 8-bits, ignoring
3196   // undefs, we have an i16 splat.
3197   if ((Bits16 & (uint16_t(~Undef16) >> 8)) != ((Bits16 >> 8) & ~Undef16)) {
3198     SplatBits = Bits16;
3199     SplatUndef = Undef16;
3200     SplatSize = 2;
3201     return true;
3202   }
3203   
3204   // Otherwise, we have an 8-bit splat.
3205   SplatBits  = uint8_t(Bits16)  | uint8_t(Bits16 >> 8);
3206   SplatUndef = uint8_t(Undef16) & uint8_t(Undef16 >> 8);
3207   SplatSize = 1;
3208   return true;
3209 }
3210
3211 /// BuildSplatI - Build a canonical splati of Val with an element size of
3212 /// SplatSize.  Cast the result to VT.
3213 static SDValue BuildSplatI(int Val, unsigned SplatSize, MVT VT,
3214                              SelectionDAG &DAG) {
3215   assert(Val >= -16 && Val <= 15 && "vsplti is out of range!");
3216
3217   static const MVT VTys[] = { // canonical VT to use for each size.
3218     MVT::v16i8, MVT::v8i16, MVT::Other, MVT::v4i32
3219   };
3220
3221   MVT ReqVT = VT != MVT::Other ? VT : VTys[SplatSize-1];
3222   
3223   // Force vspltis[hw] -1 to vspltisb -1 to canonicalize.
3224   if (Val == -1)
3225     SplatSize = 1;
3226   
3227   MVT CanonicalVT = VTys[SplatSize-1];
3228   
3229   // Build a canonical splat for this value.
3230   SDValue Elt = DAG.getConstant(Val, CanonicalVT.getVectorElementType());
3231   SmallVector<SDValue, 8> Ops;
3232   Ops.assign(CanonicalVT.getVectorNumElements(), Elt);
3233   SDValue Res = DAG.getNode(ISD::BUILD_VECTOR, CanonicalVT,
3234                               &Ops[0], Ops.size());
3235   return DAG.getNode(ISD::BIT_CONVERT, ReqVT, Res);
3236 }
3237
3238 /// BuildIntrinsicOp - Return a binary operator intrinsic node with the
3239 /// specified intrinsic ID.
3240 static SDValue BuildIntrinsicOp(unsigned IID, SDValue LHS, SDValue RHS,
3241                                   SelectionDAG &DAG, 
3242                                   MVT DestVT = MVT::Other) {
3243   if (DestVT == MVT::Other) DestVT = LHS.getValueType();
3244   return DAG.getNode(ISD::INTRINSIC_WO_CHAIN, DestVT,
3245                      DAG.getConstant(IID, MVT::i32), LHS, RHS);
3246 }
3247
3248 /// BuildIntrinsicOp - Return a ternary operator intrinsic node with the
3249 /// specified intrinsic ID.
3250 static SDValue BuildIntrinsicOp(unsigned IID, SDValue Op0, SDValue Op1,
3251                                   SDValue Op2, SelectionDAG &DAG, 
3252                                   MVT DestVT = MVT::Other) {
3253   if (DestVT == MVT::Other) DestVT = Op0.getValueType();
3254   return DAG.getNode(ISD::INTRINSIC_WO_CHAIN, DestVT,
3255                      DAG.getConstant(IID, MVT::i32), Op0, Op1, Op2);
3256 }
3257
3258
3259 /// BuildVSLDOI - Return a VECTOR_SHUFFLE that is a vsldoi of the specified
3260 /// amount.  The result has the specified value type.
3261 static SDValue BuildVSLDOI(SDValue LHS, SDValue RHS, unsigned Amt,
3262                              MVT VT, SelectionDAG &DAG) {
3263   // Force LHS/RHS to be the right type.
3264   LHS = DAG.getNode(ISD::BIT_CONVERT, MVT::v16i8, LHS);
3265   RHS = DAG.getNode(ISD::BIT_CONVERT, MVT::v16i8, RHS);
3266
3267   SDValue Ops[16];
3268   for (unsigned i = 0; i != 16; ++i)
3269     Ops[i] = DAG.getConstant(i+Amt, MVT::i8);
3270   SDValue T = DAG.getNode(ISD::VECTOR_SHUFFLE, MVT::v16i8, LHS, RHS,
3271                             DAG.getNode(ISD::BUILD_VECTOR, MVT::v16i8, Ops,16));
3272   return DAG.getNode(ISD::BIT_CONVERT, VT, T);
3273 }
3274
3275 // If this is a case we can't handle, return null and let the default
3276 // expansion code take care of it.  If we CAN select this case, and if it
3277 // selects to a single instruction, return Op.  Otherwise, if we can codegen
3278 // this case more efficiently than a constant pool load, lower it to the
3279 // sequence of ops that should be used.
3280 SDValue PPCTargetLowering::LowerBUILD_VECTOR(SDValue Op, 
3281                                                SelectionDAG &DAG) {
3282   // If this is a vector of constants or undefs, get the bits.  A bit in
3283   // UndefBits is set if the corresponding element of the vector is an 
3284   // ISD::UNDEF value.  For undefs, the corresponding VectorBits values are
3285   // zero. 
3286   uint64_t VectorBits[2];
3287   uint64_t UndefBits[2];
3288   if (GetConstantBuildVectorBits(Op.getNode(), VectorBits, UndefBits))
3289     return SDValue();   // Not a constant vector.
3290   
3291   // If this is a splat (repetition) of a value across the whole vector, return
3292   // the smallest size that splats it.  For example, "0x01010101010101..." is a
3293   // splat of 0x01, 0x0101, and 0x01010101.  We return SplatBits = 0x01 and 
3294   // SplatSize = 1 byte.
3295   unsigned SplatBits, SplatUndef, SplatSize;
3296   if (isConstantSplat(VectorBits, UndefBits, SplatBits, SplatUndef, SplatSize)){
3297     bool HasAnyUndefs = (UndefBits[0] | UndefBits[1]) != 0;
3298     
3299     // First, handle single instruction cases.
3300     
3301     // All zeros?
3302     if (SplatBits == 0) {
3303       // Canonicalize all zero vectors to be v4i32.
3304       if (Op.getValueType() != MVT::v4i32 || HasAnyUndefs) {
3305         SDValue Z = DAG.getConstant(0, MVT::i32);
3306         Z = DAG.getNode(ISD::BUILD_VECTOR, MVT::v4i32, Z, Z, Z, Z);
3307         Op = DAG.getNode(ISD::BIT_CONVERT, Op.getValueType(), Z);
3308       }
3309       return Op;
3310     }
3311
3312     // If the sign extended value is in the range [-16,15], use VSPLTI[bhw].
3313     int32_t SextVal= int32_t(SplatBits << (32-8*SplatSize)) >> (32-8*SplatSize);
3314     if (SextVal >= -16 && SextVal <= 15)
3315       return BuildSplatI(SextVal, SplatSize, Op.getValueType(), DAG);
3316     
3317     
3318     // Two instruction sequences.
3319     
3320     // If this value is in the range [-32,30] and is even, use:
3321     //    tmp = VSPLTI[bhw], result = add tmp, tmp
3322     if (SextVal >= -32 && SextVal <= 30 && (SextVal & 1) == 0) {
3323       SDValue Res = BuildSplatI(SextVal >> 1, SplatSize, MVT::Other, DAG);
3324       Res = DAG.getNode(ISD::ADD, Res.getValueType(), Res, Res);
3325       return DAG.getNode(ISD::BIT_CONVERT, Op.getValueType(), Res);
3326     }
3327     
3328     // If this is 0x8000_0000 x 4, turn into vspltisw + vslw.  If it is 
3329     // 0x7FFF_FFFF x 4, turn it into not(0x8000_0000).  This is important
3330     // for fneg/fabs.
3331     if (SplatSize == 4 && SplatBits == (0x7FFFFFFF&~SplatUndef)) {
3332       // Make -1 and vspltisw -1:
3333       SDValue OnesV = BuildSplatI(-1, 4, MVT::v4i32, DAG);
3334       
3335       // Make the VSLW intrinsic, computing 0x8000_0000.
3336       SDValue Res = BuildIntrinsicOp(Intrinsic::ppc_altivec_vslw, OnesV, 
3337                                        OnesV, DAG);
3338       
3339       // xor by OnesV to invert it.
3340       Res = DAG.getNode(ISD::XOR, MVT::v4i32, Res, OnesV);
3341       return DAG.getNode(ISD::BIT_CONVERT, Op.getValueType(), Res);
3342     }
3343
3344     // Check to see if this is a wide variety of vsplti*, binop self cases.
3345     unsigned SplatBitSize = SplatSize*8;
3346     static const signed char SplatCsts[] = {
3347       -1, 1, -2, 2, -3, 3, -4, 4, -5, 5, -6, 6, -7, 7,
3348       -8, 8, -9, 9, -10, 10, -11, 11, -12, 12, -13, 13, 14, -14, 15, -15, -16
3349     };
3350     
3351     for (unsigned idx = 0; idx < array_lengthof(SplatCsts); ++idx) {
3352       // Indirect through the SplatCsts array so that we favor 'vsplti -1' for
3353       // cases which are ambiguous (e.g. formation of 0x8000_0000).  'vsplti -1'
3354       int i = SplatCsts[idx];
3355       
3356       // Figure out what shift amount will be used by altivec if shifted by i in
3357       // this splat size.
3358       unsigned TypeShiftAmt = i & (SplatBitSize-1);
3359       
3360       // vsplti + shl self.
3361       if (SextVal == (i << (int)TypeShiftAmt)) {
3362         SDValue Res = BuildSplatI(i, SplatSize, MVT::Other, DAG);
3363         static const unsigned IIDs[] = { // Intrinsic to use for each size.
3364           Intrinsic::ppc_altivec_vslb, Intrinsic::ppc_altivec_vslh, 0,
3365           Intrinsic::ppc_altivec_vslw
3366         };
3367         Res = BuildIntrinsicOp(IIDs[SplatSize-1], Res, Res, DAG);
3368         return DAG.getNode(ISD::BIT_CONVERT, Op.getValueType(), Res);
3369       }
3370       
3371       // vsplti + srl self.
3372       if (SextVal == (int)((unsigned)i >> TypeShiftAmt)) {
3373         SDValue Res = BuildSplatI(i, SplatSize, MVT::Other, DAG);
3374         static const unsigned IIDs[] = { // Intrinsic to use for each size.
3375           Intrinsic::ppc_altivec_vsrb, Intrinsic::ppc_altivec_vsrh, 0,
3376           Intrinsic::ppc_altivec_vsrw
3377         };
3378         Res = BuildIntrinsicOp(IIDs[SplatSize-1], Res, Res, DAG);
3379         return DAG.getNode(ISD::BIT_CONVERT, Op.getValueType(), Res);
3380       }
3381       
3382       // vsplti + sra self.
3383       if (SextVal == (int)((unsigned)i >> TypeShiftAmt)) {
3384         SDValue Res = BuildSplatI(i, SplatSize, MVT::Other, DAG);
3385         static const unsigned IIDs[] = { // Intrinsic to use for each size.
3386           Intrinsic::ppc_altivec_vsrab, Intrinsic::ppc_altivec_vsrah, 0,
3387           Intrinsic::ppc_altivec_vsraw
3388         };
3389         Res = BuildIntrinsicOp(IIDs[SplatSize-1], Res, Res, DAG);
3390         return DAG.getNode(ISD::BIT_CONVERT, Op.getValueType(), Res);
3391       }
3392       
3393       // vsplti + rol self.
3394       if (SextVal == (int)(((unsigned)i << TypeShiftAmt) |
3395                            ((unsigned)i >> (SplatBitSize-TypeShiftAmt)))) {
3396         SDValue Res = BuildSplatI(i, SplatSize, MVT::Other, DAG);
3397         static const unsigned IIDs[] = { // Intrinsic to use for each size.
3398           Intrinsic::ppc_altivec_vrlb, Intrinsic::ppc_altivec_vrlh, 0,
3399           Intrinsic::ppc_altivec_vrlw
3400         };
3401         Res = BuildIntrinsicOp(IIDs[SplatSize-1], Res, Res, DAG);
3402         return DAG.getNode(ISD::BIT_CONVERT, Op.getValueType(), Res);
3403       }
3404
3405       // t = vsplti c, result = vsldoi t, t, 1
3406       if (SextVal == ((i << 8) | (i >> (TypeShiftAmt-8)))) {
3407         SDValue T = BuildSplatI(i, SplatSize, MVT::v16i8, DAG);
3408         return BuildVSLDOI(T, T, 1, Op.getValueType(), DAG);
3409       }
3410       // t = vsplti c, result = vsldoi t, t, 2
3411       if (SextVal == ((i << 16) | (i >> (TypeShiftAmt-16)))) {
3412         SDValue T = BuildSplatI(i, SplatSize, MVT::v16i8, DAG);
3413         return BuildVSLDOI(T, T, 2, Op.getValueType(), DAG);
3414       }
3415       // t = vsplti c, result = vsldoi t, t, 3
3416       if (SextVal == ((i << 24) | (i >> (TypeShiftAmt-24)))) {
3417         SDValue T = BuildSplatI(i, SplatSize, MVT::v16i8, DAG);
3418         return BuildVSLDOI(T, T, 3, Op.getValueType(), DAG);
3419       }
3420     }
3421     
3422     // Three instruction sequences.
3423     
3424     // Odd, in range [17,31]:  (vsplti C)-(vsplti -16).
3425     if (SextVal >= 0 && SextVal <= 31) {
3426       SDValue LHS = BuildSplatI(SextVal-16, SplatSize, MVT::Other, DAG);
3427       SDValue RHS = BuildSplatI(-16, SplatSize, MVT::Other, DAG);
3428       LHS = DAG.getNode(ISD::SUB, LHS.getValueType(), LHS, RHS);
3429       return DAG.getNode(ISD::BIT_CONVERT, Op.getValueType(), LHS);
3430     }
3431     // Odd, in range [-31,-17]:  (vsplti C)+(vsplti -16).
3432     if (SextVal >= -31 && SextVal <= 0) {
3433       SDValue LHS = BuildSplatI(SextVal+16, SplatSize, MVT::Other, DAG);
3434       SDValue RHS = BuildSplatI(-16, SplatSize, MVT::Other, DAG);
3435       LHS = DAG.getNode(ISD::ADD, LHS.getValueType(), LHS, RHS);
3436       return DAG.getNode(ISD::BIT_CONVERT, Op.getValueType(), LHS);
3437     }
3438   }
3439     
3440   return SDValue();
3441 }
3442
3443 /// GeneratePerfectShuffle - Given an entry in the perfect-shuffle table, emit
3444 /// the specified operations to build the shuffle.
3445 static SDValue GeneratePerfectShuffle(unsigned PFEntry, SDValue LHS,
3446                                         SDValue RHS, SelectionDAG &DAG) {
3447   unsigned OpNum = (PFEntry >> 26) & 0x0F;
3448   unsigned LHSID = (PFEntry >> 13) & ((1 << 13)-1);
3449   unsigned RHSID = (PFEntry >>  0) & ((1 << 13)-1);
3450   
3451   enum {
3452     OP_COPY = 0,  // Copy, used for things like <u,u,u,3> to say it is <0,1,2,3>
3453     OP_VMRGHW,
3454     OP_VMRGLW,
3455     OP_VSPLTISW0,
3456     OP_VSPLTISW1,
3457     OP_VSPLTISW2,
3458     OP_VSPLTISW3,
3459     OP_VSLDOI4,
3460     OP_VSLDOI8,
3461     OP_VSLDOI12
3462   };
3463   
3464   if (OpNum == OP_COPY) {
3465     if (LHSID == (1*9+2)*9+3) return LHS;
3466     assert(LHSID == ((4*9+5)*9+6)*9+7 && "Illegal OP_COPY!");
3467     return RHS;
3468   }
3469   
3470   SDValue OpLHS, OpRHS;
3471   OpLHS = GeneratePerfectShuffle(PerfectShuffleTable[LHSID], LHS, RHS, DAG);
3472   OpRHS = GeneratePerfectShuffle(PerfectShuffleTable[RHSID], LHS, RHS, DAG);
3473   
3474   unsigned ShufIdxs[16];
3475   switch (OpNum) {
3476   default: assert(0 && "Unknown i32 permute!");
3477   case OP_VMRGHW:
3478     ShufIdxs[ 0] =  0; ShufIdxs[ 1] =  1; ShufIdxs[ 2] =  2; ShufIdxs[ 3] =  3;
3479     ShufIdxs[ 4] = 16; ShufIdxs[ 5] = 17; ShufIdxs[ 6] = 18; ShufIdxs[ 7] = 19;
3480     ShufIdxs[ 8] =  4; ShufIdxs[ 9] =  5; ShufIdxs[10] =  6; ShufIdxs[11] =  7;
3481     ShufIdxs[12] = 20; ShufIdxs[13] = 21; ShufIdxs[14] = 22; ShufIdxs[15] = 23;
3482     break;
3483   case OP_VMRGLW:
3484     ShufIdxs[ 0] =  8; ShufIdxs[ 1] =  9; ShufIdxs[ 2] = 10; ShufIdxs[ 3] = 11;
3485     ShufIdxs[ 4] = 24; ShufIdxs[ 5] = 25; ShufIdxs[ 6] = 26; ShufIdxs[ 7] = 27;
3486     ShufIdxs[ 8] = 12; ShufIdxs[ 9] = 13; ShufIdxs[10] = 14; ShufIdxs[11] = 15;
3487     ShufIdxs[12] = 28; ShufIdxs[13] = 29; ShufIdxs[14] = 30; ShufIdxs[15] = 31;
3488     break;
3489   case OP_VSPLTISW0:
3490     for (unsigned i = 0; i != 16; ++i)
3491       ShufIdxs[i] = (i&3)+0;
3492     break;
3493   case OP_VSPLTISW1:
3494     for (unsigned i = 0; i != 16; ++i)
3495       ShufIdxs[i] = (i&3)+4;
3496     break;
3497   case OP_VSPLTISW2:
3498     for (unsigned i = 0; i != 16; ++i)
3499       ShufIdxs[i] = (i&3)+8;
3500     break;
3501   case OP_VSPLTISW3:
3502     for (unsigned i = 0; i != 16; ++i)
3503       ShufIdxs[i] = (i&3)+12;
3504     break;
3505   case OP_VSLDOI4:
3506     return BuildVSLDOI(OpLHS, OpRHS, 4, OpLHS.getValueType(), DAG);
3507   case OP_VSLDOI8:
3508     return BuildVSLDOI(OpLHS, OpRHS, 8, OpLHS.getValueType(), DAG);
3509   case OP_VSLDOI12:
3510     return BuildVSLDOI(OpLHS, OpRHS, 12, OpLHS.getValueType(), DAG);
3511   }
3512   SDValue Ops[16];
3513   for (unsigned i = 0; i != 16; ++i)
3514     Ops[i] = DAG.getConstant(ShufIdxs[i], MVT::i8);
3515   
3516   return DAG.getNode(ISD::VECTOR_SHUFFLE, OpLHS.getValueType(), OpLHS, OpRHS,
3517                      DAG.getNode(ISD::BUILD_VECTOR, MVT::v16i8, Ops, 16));
3518 }
3519
3520 /// LowerVECTOR_SHUFFLE - Return the code we lower for VECTOR_SHUFFLE.  If this
3521 /// is a shuffle we can handle in a single instruction, return it.  Otherwise,
3522 /// return the code it can be lowered into.  Worst case, it can always be
3523 /// lowered into a vperm.
3524 SDValue PPCTargetLowering::LowerVECTOR_SHUFFLE(SDValue Op, 
3525                                                  SelectionDAG &DAG) {
3526   SDValue V1 = Op.getOperand(0);
3527   SDValue V2 = Op.getOperand(1);
3528   SDValue PermMask = Op.getOperand(2);
3529   
3530   // Cases that are handled by instructions that take permute immediates
3531   // (such as vsplt*) should be left as VECTOR_SHUFFLE nodes so they can be
3532   // selected by the instruction selector.
3533   if (V2.getOpcode() == ISD::UNDEF) {
3534     if (PPC::isSplatShuffleMask(PermMask.getNode(), 1) ||
3535         PPC::isSplatShuffleMask(PermMask.getNode(), 2) ||
3536         PPC::isSplatShuffleMask(PermMask.getNode(), 4) ||
3537         PPC::isVPKUWUMShuffleMask(PermMask.getNode(), true) ||
3538         PPC::isVPKUHUMShuffleMask(PermMask.getNode(), true) ||
3539         PPC::isVSLDOIShuffleMask(PermMask.getNode(), true) != -1 ||
3540         PPC::isVMRGLShuffleMask(PermMask.getNode(), 1, true) ||
3541         PPC::isVMRGLShuffleMask(PermMask.getNode(), 2, true) ||
3542         PPC::isVMRGLShuffleMask(PermMask.getNode(), 4, true) ||
3543         PPC::isVMRGHShuffleMask(PermMask.getNode(), 1, true) ||
3544         PPC::isVMRGHShuffleMask(PermMask.getNode(), 2, true) ||
3545         PPC::isVMRGHShuffleMask(PermMask.getNode(), 4, true)) {
3546       return Op;
3547     }
3548   }
3549   
3550   // Altivec has a variety of "shuffle immediates" that take two vector inputs
3551   // and produce a fixed permutation.  If any of these match, do not lower to
3552   // VPERM.
3553   if (PPC::isVPKUWUMShuffleMask(PermMask.getNode(), false) ||
3554       PPC::isVPKUHUMShuffleMask(PermMask.getNode(), false) ||
3555       PPC::isVSLDOIShuffleMask(PermMask.getNode(), false) != -1 ||
3556       PPC::isVMRGLShuffleMask(PermMask.getNode(), 1, false) ||
3557       PPC::isVMRGLShuffleMask(PermMask.getNode(), 2, false) ||
3558       PPC::isVMRGLShuffleMask(PermMask.getNode(), 4, false) ||
3559       PPC::isVMRGHShuffleMask(PermMask.getNode(), 1, false) ||
3560       PPC::isVMRGHShuffleMask(PermMask.getNode(), 2, false) ||
3561       PPC::isVMRGHShuffleMask(PermMask.getNode(), 4, false))
3562     return Op;
3563   
3564   // Check to see if this is a shuffle of 4-byte values.  If so, we can use our
3565   // perfect shuffle table to emit an optimal matching sequence.
3566   unsigned PFIndexes[4];
3567   bool isFourElementShuffle = true;
3568   for (unsigned i = 0; i != 4 && isFourElementShuffle; ++i) { // Element number
3569     unsigned EltNo = 8;   // Start out undef.
3570     for (unsigned j = 0; j != 4; ++j) {  // Intra-element byte.
3571       if (PermMask.getOperand(i*4+j).getOpcode() == ISD::UNDEF)
3572         continue;   // Undef, ignore it.
3573       
3574       unsigned ByteSource = 
3575         cast<ConstantSDNode>(PermMask.getOperand(i*4+j))->getZExtValue();
3576       if ((ByteSource & 3) != j) {
3577         isFourElementShuffle = false;
3578         break;
3579       }
3580       
3581       if (EltNo == 8) {
3582         EltNo = ByteSource/4;
3583       } else if (EltNo != ByteSource/4) {
3584         isFourElementShuffle = false;
3585         break;
3586       }
3587     }
3588     PFIndexes[i] = EltNo;
3589   }
3590     
3591   // If this shuffle can be expressed as a shuffle of 4-byte elements, use the 
3592   // perfect shuffle vector to determine if it is cost effective to do this as
3593   // discrete instructions, or whether we should use a vperm.
3594   if (isFourElementShuffle) {
3595     // Compute the index in the perfect shuffle table.
3596     unsigned PFTableIndex = 
3597       PFIndexes[0]*9*9*9+PFIndexes[1]*9*9+PFIndexes[2]*9+PFIndexes[3];
3598     
3599     unsigned PFEntry = PerfectShuffleTable[PFTableIndex];
3600     unsigned Cost  = (PFEntry >> 30);
3601     
3602     // Determining when to avoid vperm is tricky.  Many things affect the cost
3603     // of vperm, particularly how many times the perm mask needs to be computed.
3604     // For example, if the perm mask can be hoisted out of a loop or is already
3605     // used (perhaps because there are multiple permutes with the same shuffle
3606     // mask?) the vperm has a cost of 1.  OTOH, hoisting the permute mask out of
3607     // the loop requires an extra register.
3608     //
3609     // As a compromise, we only emit discrete instructions if the shuffle can be
3610     // generated in 3 or fewer operations.  When we have loop information 
3611     // available, if this block is within a loop, we should avoid using vperm
3612     // for 3-operation perms and use a constant pool load instead.
3613     if (Cost < 3) 
3614       return GeneratePerfectShuffle(PFEntry, V1, V2, DAG);
3615   }
3616   
3617   // Lower this to a VPERM(V1, V2, V3) expression, where V3 is a constant
3618   // vector that will get spilled to the constant pool.
3619   if (V2.getOpcode() == ISD::UNDEF) V2 = V1;
3620   
3621   // The SHUFFLE_VECTOR mask is almost exactly what we want for vperm, except
3622   // that it is in input element units, not in bytes.  Convert now.
3623   MVT EltVT = V1.getValueType().getVectorElementType();
3624   unsigned BytesPerElement = EltVT.getSizeInBits()/8;
3625   
3626   SmallVector<SDValue, 16> ResultMask;
3627   for (unsigned i = 0, e = PermMask.getNumOperands(); i != e; ++i) {
3628     unsigned SrcElt;
3629     if (PermMask.getOperand(i).getOpcode() == ISD::UNDEF)
3630       SrcElt = 0;
3631     else 
3632       SrcElt = cast<ConstantSDNode>(PermMask.getOperand(i))->getZExtValue();
3633     
3634     for (unsigned j = 0; j != BytesPerElement; ++j)
3635       ResultMask.push_back(DAG.getConstant(SrcElt*BytesPerElement+j,
3636                                            MVT::i8));
3637   }
3638   
3639   SDValue VPermMask = DAG.getNode(ISD::BUILD_VECTOR, MVT::v16i8,
3640                                     &ResultMask[0], ResultMask.size());
3641   return DAG.getNode(PPCISD::VPERM, V1.getValueType(), V1, V2, VPermMask);
3642 }
3643
3644 /// getAltivecCompareInfo - Given an intrinsic, return false if it is not an
3645 /// altivec comparison.  If it is, return true and fill in Opc/isDot with
3646 /// information about the intrinsic.
3647 static bool getAltivecCompareInfo(SDValue Intrin, int &CompareOpc,
3648                                   bool &isDot) {
3649   unsigned IntrinsicID =
3650     cast<ConstantSDNode>(Intrin.getOperand(0))->getZExtValue();
3651   CompareOpc = -1;
3652   isDot = false;
3653   switch (IntrinsicID) {
3654   default: return false;
3655     // Comparison predicates.
3656   case Intrinsic::ppc_altivec_vcmpbfp_p:  CompareOpc = 966; isDot = 1; break;
3657   case Intrinsic::ppc_altivec_vcmpeqfp_p: CompareOpc = 198; isDot = 1; break;
3658   case Intrinsic::ppc_altivec_vcmpequb_p: CompareOpc =   6; isDot = 1; break;
3659   case Intrinsic::ppc_altivec_vcmpequh_p: CompareOpc =  70; isDot = 1; break;
3660   case Intrinsic::ppc_altivec_vcmpequw_p: CompareOpc = 134; isDot = 1; break;
3661   case Intrinsic::ppc_altivec_vcmpgefp_p: CompareOpc = 454; isDot = 1; break;
3662   case Intrinsic::ppc_altivec_vcmpgtfp_p: CompareOpc = 710; isDot = 1; break;
3663   case Intrinsic::ppc_altivec_vcmpgtsb_p: CompareOpc = 774; isDot = 1; break;
3664   case Intrinsic::ppc_altivec_vcmpgtsh_p: CompareOpc = 838; isDot = 1; break;
3665   case Intrinsic::ppc_altivec_vcmpgtsw_p: CompareOpc = 902; isDot = 1; break;
3666   case Intrinsic::ppc_altivec_vcmpgtub_p: CompareOpc = 518; isDot = 1; break;
3667   case Intrinsic::ppc_altivec_vcmpgtuh_p: CompareOpc = 582; isDot = 1; break;
3668   case Intrinsic::ppc_altivec_vcmpgtuw_p: CompareOpc = 646; isDot = 1; break;
3669     
3670     // Normal Comparisons.
3671   case Intrinsic::ppc_altivec_vcmpbfp:    CompareOpc = 966; isDot = 0; break;
3672   case Intrinsic::ppc_altivec_vcmpeqfp:   CompareOpc = 198; isDot = 0; break;
3673   case Intrinsic::ppc_altivec_vcmpequb:   CompareOpc =   6; isDot = 0; break;
3674   case Intrinsic::ppc_altivec_vcmpequh:   CompareOpc =  70; isDot = 0; break;
3675   case Intrinsic::ppc_altivec_vcmpequw:   CompareOpc = 134; isDot = 0; break;
3676   case Intrinsic::ppc_altivec_vcmpgefp:   CompareOpc = 454; isDot = 0; break;
3677   case Intrinsic::ppc_altivec_vcmpgtfp:   CompareOpc = 710; isDot = 0; break;
3678   case Intrinsic::ppc_altivec_vcmpgtsb:   CompareOpc = 774; isDot = 0; break;
3679   case Intrinsic::ppc_altivec_vcmpgtsh:   CompareOpc = 838; isDot = 0; break;
3680   case Intrinsic::ppc_altivec_vcmpgtsw:   CompareOpc = 902; isDot = 0; break;
3681   case Intrinsic::ppc_altivec_vcmpgtub:   CompareOpc = 518; isDot = 0; break;
3682   case Intrinsic::ppc_altivec_vcmpgtuh:   CompareOpc = 582; isDot = 0; break;
3683   case Intrinsic::ppc_altivec_vcmpgtuw:   CompareOpc = 646; isDot = 0; break;
3684   }
3685   return true;
3686 }
3687
3688 /// LowerINTRINSIC_WO_CHAIN - If this is an intrinsic that we want to custom
3689 /// lower, do it, otherwise return null.
3690 SDValue PPCTargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op, 
3691                                                      SelectionDAG &DAG) {
3692   // If this is a lowered altivec predicate compare, CompareOpc is set to the
3693   // opcode number of the comparison.
3694   int CompareOpc;
3695   bool isDot;
3696   if (!getAltivecCompareInfo(Op, CompareOpc, isDot))
3697     return SDValue();    // Don't custom lower most intrinsics.
3698   
3699   // If this is a non-dot comparison, make the VCMP node and we are done.
3700   if (!isDot) {
3701     SDValue Tmp = DAG.getNode(PPCISD::VCMP, Op.getOperand(2).getValueType(),
3702                                 Op.getOperand(1), Op.getOperand(2),
3703                                 DAG.getConstant(CompareOpc, MVT::i32));
3704     return DAG.getNode(ISD::BIT_CONVERT, Op.getValueType(), Tmp);
3705   }
3706   
3707   // Create the PPCISD altivec 'dot' comparison node.
3708   SDValue Ops[] = {
3709     Op.getOperand(2),  // LHS
3710     Op.getOperand(3),  // RHS
3711     DAG.getConstant(CompareOpc, MVT::i32)
3712   };
3713   std::vector<MVT> VTs;
3714   VTs.push_back(Op.getOperand(2).getValueType());
3715   VTs.push_back(MVT::Flag);
3716   SDValue CompNode = DAG.getNode(PPCISD::VCMPo, VTs, Ops, 3);
3717   
3718   // Now that we have the comparison, emit a copy from the CR to a GPR.
3719   // This is flagged to the above dot comparison.
3720   SDValue Flags = DAG.getNode(PPCISD::MFCR, MVT::i32,
3721                                 DAG.getRegister(PPC::CR6, MVT::i32),
3722                                 CompNode.getValue(1)); 
3723   
3724   // Unpack the result based on how the target uses it.
3725   unsigned BitNo;   // Bit # of CR6.
3726   bool InvertBit;   // Invert result?
3727   switch (cast<ConstantSDNode>(Op.getOperand(1))->getZExtValue()) {
3728   default:  // Can't happen, don't crash on invalid number though.
3729   case 0:   // Return the value of the EQ bit of CR6.
3730     BitNo = 0; InvertBit = false;
3731     break;
3732   case 1:   // Return the inverted value of the EQ bit of CR6.
3733     BitNo = 0; InvertBit = true;
3734     break;
3735   case 2:   // Return the value of the LT bit of CR6.
3736     BitNo = 2; InvertBit = false;
3737     break;
3738   case 3:   // Return the inverted value of the LT bit of CR6.
3739     BitNo = 2; InvertBit = true;
3740     break;
3741   }
3742   
3743   // Shift the bit into the low position.
3744   Flags = DAG.getNode(ISD::SRL, MVT::i32, Flags,
3745                       DAG.getConstant(8-(3-BitNo), MVT::i32));
3746   // Isolate the bit.
3747   Flags = DAG.getNode(ISD::AND, MVT::i32, Flags,
3748                       DAG.getConstant(1, MVT::i32));
3749   
3750   // If we are supposed to, toggle the bit.
3751   if (InvertBit)
3752     Flags = DAG.getNode(ISD::XOR, MVT::i32, Flags,
3753                         DAG.getConstant(1, MVT::i32));
3754   return Flags;
3755 }
3756
3757 SDValue PPCTargetLowering::LowerSCALAR_TO_VECTOR(SDValue Op, 
3758                                                    SelectionDAG &DAG) {
3759   // Create a stack slot that is 16-byte aligned.
3760   MachineFrameInfo *FrameInfo = DAG.getMachineFunction().getFrameInfo();
3761   int FrameIdx = FrameInfo->CreateStackObject(16, 16);
3762   MVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy();
3763   SDValue FIdx = DAG.getFrameIndex(FrameIdx, PtrVT);
3764   
3765   // Store the input value into Value#0 of the stack slot.
3766   SDValue Store = DAG.getStore(DAG.getEntryNode(),
3767                                  Op.getOperand(0), FIdx, NULL, 0);
3768   // Load it out.
3769   return DAG.getLoad(Op.getValueType(), Store, FIdx, NULL, 0);
3770 }
3771
3772 SDValue PPCTargetLowering::LowerMUL(SDValue Op, SelectionDAG &DAG) {
3773   if (Op.getValueType() == MVT::v4i32) {
3774     SDValue LHS = Op.getOperand(0), RHS = Op.getOperand(1);
3775     
3776     SDValue Zero  = BuildSplatI(  0, 1, MVT::v4i32, DAG);
3777     SDValue Neg16 = BuildSplatI(-16, 4, MVT::v4i32, DAG); // +16 as shift amt.
3778     
3779     SDValue RHSSwap =   // = vrlw RHS, 16
3780       BuildIntrinsicOp(Intrinsic::ppc_altivec_vrlw, RHS, Neg16, DAG);
3781     
3782     // Shrinkify inputs to v8i16.
3783     LHS = DAG.getNode(ISD::BIT_CONVERT, MVT::v8i16, LHS);
3784     RHS = DAG.getNode(ISD::BIT_CONVERT, MVT::v8i16, RHS);
3785     RHSSwap = DAG.getNode(ISD::BIT_CONVERT, MVT::v8i16, RHSSwap);
3786     
3787     // Low parts multiplied together, generating 32-bit results (we ignore the
3788     // top parts).
3789     SDValue LoProd = BuildIntrinsicOp(Intrinsic::ppc_altivec_vmulouh,
3790                                         LHS, RHS, DAG, MVT::v4i32);
3791     
3792     SDValue HiProd = BuildIntrinsicOp(Intrinsic::ppc_altivec_vmsumuhm,
3793                                         LHS, RHSSwap, Zero, DAG, MVT::v4i32);
3794     // Shift the high parts up 16 bits.
3795     HiProd = BuildIntrinsicOp(Intrinsic::ppc_altivec_vslw, HiProd, Neg16, DAG);
3796     return DAG.getNode(ISD::ADD, MVT::v4i32, LoProd, HiProd);
3797   } else if (Op.getValueType() == MVT::v8i16) {
3798     SDValue LHS = Op.getOperand(0), RHS = Op.getOperand(1);
3799     
3800     SDValue Zero = BuildSplatI(0, 1, MVT::v8i16, DAG);
3801
3802     return BuildIntrinsicOp(Intrinsic::ppc_altivec_vmladduhm,
3803                             LHS, RHS, Zero, DAG);
3804   } else if (Op.getValueType() == MVT::v16i8) {
3805     SDValue LHS = Op.getOperand(0), RHS = Op.getOperand(1);
3806     
3807     // Multiply the even 8-bit parts, producing 16-bit sums.
3808     SDValue EvenParts = BuildIntrinsicOp(Intrinsic::ppc_altivec_vmuleub,
3809                                            LHS, RHS, DAG, MVT::v8i16);
3810     EvenParts = DAG.getNode(ISD::BIT_CONVERT, MVT::v16i8, EvenParts);
3811     
3812     // Multiply the odd 8-bit parts, producing 16-bit sums.
3813     SDValue OddParts = BuildIntrinsicOp(Intrinsic::ppc_altivec_vmuloub,
3814                                           LHS, RHS, DAG, MVT::v8i16);
3815     OddParts = DAG.getNode(ISD::BIT_CONVERT, MVT::v16i8, OddParts);
3816     
3817     // Merge the results together.
3818     SDValue Ops[16];
3819     for (unsigned i = 0; i != 8; ++i) {
3820       Ops[i*2  ] = DAG.getConstant(2*i+1, MVT::i8);
3821       Ops[i*2+1] = DAG.getConstant(2*i+1+16, MVT::i8);
3822     }
3823     return DAG.getNode(ISD::VECTOR_SHUFFLE, MVT::v16i8, EvenParts, OddParts,
3824                        DAG.getNode(ISD::BUILD_VECTOR, MVT::v16i8, Ops, 16));
3825   } else {
3826     assert(0 && "Unknown mul to lower!");
3827     abort();
3828   }
3829 }
3830
3831 /// LowerOperation - Provide custom lowering hooks for some operations.
3832 ///
3833 SDValue PPCTargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) {
3834   switch (Op.getOpcode()) {
3835   default: assert(0 && "Wasn't expecting to be able to lower this!"); 
3836   case ISD::ConstantPool:       return LowerConstantPool(Op, DAG);
3837   case ISD::GlobalAddress:      return LowerGlobalAddress(Op, DAG);
3838   case ISD::GlobalTLSAddress:   return LowerGlobalTLSAddress(Op, DAG);
3839   case ISD::JumpTable:          return LowerJumpTable(Op, DAG);
3840   case ISD::SETCC:              return LowerSETCC(Op, DAG);
3841   case ISD::TRAMPOLINE:         return LowerTRAMPOLINE(Op, DAG);
3842   case ISD::VASTART:            
3843     return LowerVASTART(Op, DAG, VarArgsFrameIndex, VarArgsStackOffset,
3844                         VarArgsNumGPR, VarArgsNumFPR, PPCSubTarget);
3845   
3846   case ISD::VAARG:            
3847     return LowerVAARG(Op, DAG, VarArgsFrameIndex, VarArgsStackOffset,
3848                       VarArgsNumGPR, VarArgsNumFPR, PPCSubTarget);
3849
3850   case ISD::FORMAL_ARGUMENTS:
3851     return LowerFORMAL_ARGUMENTS(Op, DAG, VarArgsFrameIndex, 
3852                                  VarArgsStackOffset, VarArgsNumGPR,
3853                                  VarArgsNumFPR, PPCSubTarget);
3854
3855   case ISD::CALL:               return LowerCALL(Op, DAG, PPCSubTarget,
3856                                                  getTargetMachine());
3857   case ISD::RET:                return LowerRET(Op, DAG, getTargetMachine());
3858   case ISD::STACKRESTORE:       return LowerSTACKRESTORE(Op, DAG, PPCSubTarget);
3859   case ISD::DYNAMIC_STACKALLOC:
3860     return LowerDYNAMIC_STACKALLOC(Op, DAG, PPCSubTarget);
3861
3862   case ISD::SELECT_CC:          return LowerSELECT_CC(Op, DAG);
3863   case ISD::FP_TO_SINT:         return LowerFP_TO_SINT(Op, DAG);
3864   case ISD::SINT_TO_FP:         return LowerSINT_TO_FP(Op, DAG);
3865   case ISD::FP_ROUND_INREG:     return LowerFP_ROUND_INREG(Op, DAG);
3866   case ISD::FLT_ROUNDS_:        return LowerFLT_ROUNDS_(Op, DAG);
3867
3868   // Lower 64-bit shifts.
3869   case ISD::SHL_PARTS:          return LowerSHL_PARTS(Op, DAG);
3870   case ISD::SRL_PARTS:          return LowerSRL_PARTS(Op, DAG);
3871   case ISD::SRA_PARTS:          return LowerSRA_PARTS(Op, DAG);
3872
3873   // Vector-related lowering.
3874   case ISD::BUILD_VECTOR:       return LowerBUILD_VECTOR(Op, DAG);
3875   case ISD::VECTOR_SHUFFLE:     return LowerVECTOR_SHUFFLE(Op, DAG);
3876   case ISD::INTRINSIC_WO_CHAIN: return LowerINTRINSIC_WO_CHAIN(Op, DAG);
3877   case ISD::SCALAR_TO_VECTOR:   return LowerSCALAR_TO_VECTOR(Op, DAG);
3878   case ISD::MUL:                return LowerMUL(Op, DAG);
3879   
3880   // Frame & Return address.
3881   case ISD::RETURNADDR:         return LowerRETURNADDR(Op, DAG);
3882   case ISD::FRAMEADDR:          return LowerFRAMEADDR(Op, DAG);
3883   }
3884   return SDValue();
3885 }
3886
3887 SDNode *PPCTargetLowering::ReplaceNodeResults(SDNode *N, SelectionDAG &DAG) {
3888   switch (N->getOpcode()) {
3889   default: assert(0 && "Wasn't expecting to be able to lower this!");
3890   case ISD::FP_TO_SINT: {
3891     SDValue Res = LowerFP_TO_SINT(SDValue(N, 0), DAG);
3892     // Use MERGE_VALUES to drop the chain result value and get a node with one
3893     // result.  This requires turning off getMergeValues simplification, since
3894     // otherwise it will give us Res back.
3895     return DAG.getMergeValues(&Res, 1, false).getNode();
3896   }
3897   }
3898 }
3899
3900
3901 //===----------------------------------------------------------------------===//
3902 //  Other Lowering Code
3903 //===----------------------------------------------------------------------===//
3904
3905 MachineBasicBlock *
3906 PPCTargetLowering::EmitAtomicBinary(MachineInstr *MI, MachineBasicBlock *BB,
3907                                     bool is64bit, unsigned BinOpcode) {
3908   // This also handles ATOMIC_SWAP, indicated by BinOpcode==0.
3909   const TargetInstrInfo *TII = getTargetMachine().getInstrInfo();
3910
3911   const BasicBlock *LLVM_BB = BB->getBasicBlock();
3912   MachineFunction *F = BB->getParent();
3913   MachineFunction::iterator It = BB;
3914   ++It;
3915
3916   unsigned dest = MI->getOperand(0).getReg();
3917   unsigned ptrA = MI->getOperand(1).getReg();
3918   unsigned ptrB = MI->getOperand(2).getReg();
3919   unsigned incr = MI->getOperand(3).getReg();
3920
3921   MachineBasicBlock *loopMBB = F->CreateMachineBasicBlock(LLVM_BB);
3922   MachineBasicBlock *exitMBB = F->CreateMachineBasicBlock(LLVM_BB);
3923   F->insert(It, loopMBB);
3924   F->insert(It, exitMBB);
3925   exitMBB->transferSuccessors(BB);
3926
3927   MachineRegisterInfo &RegInfo = F->getRegInfo();
3928   unsigned TmpReg = (!BinOpcode) ? incr :
3929     RegInfo.createVirtualRegister(
3930        is64bit ? (const TargetRegisterClass *) &PPC::G8RCRegClass :
3931                  (const TargetRegisterClass *) &PPC::GPRCRegClass);
3932
3933   //  thisMBB:
3934   //   ...
3935   //   fallthrough --> loopMBB
3936   BB->addSuccessor(loopMBB);
3937
3938   //  loopMBB:
3939   //   l[wd]arx dest, ptr
3940   //   add r0, dest, incr
3941   //   st[wd]cx. r0, ptr
3942   //   bne- loopMBB
3943   //   fallthrough --> exitMBB
3944   BB = loopMBB;
3945   BuildMI(BB, TII->get(is64bit ? PPC::LDARX : PPC::LWARX), dest)
3946     .addReg(ptrA).addReg(ptrB);
3947   if (BinOpcode)
3948     BuildMI(BB, TII->get(BinOpcode), TmpReg).addReg(incr).addReg(dest);
3949   BuildMI(BB, TII->get(is64bit ? PPC::STDCX : PPC::STWCX))
3950     .addReg(TmpReg).addReg(ptrA).addReg(ptrB);
3951   BuildMI(BB, TII->get(PPC::BCC))
3952     .addImm(PPC::PRED_NE).addReg(PPC::CR0).addMBB(loopMBB);    
3953   BB->addSuccessor(loopMBB);
3954   BB->addSuccessor(exitMBB);
3955
3956   //  exitMBB:
3957   //   ...
3958   BB = exitMBB;
3959   return BB;
3960 }
3961
3962 MachineBasicBlock *
3963 PPCTargetLowering::EmitPartwordAtomicBinary(MachineInstr *MI, 
3964                                             MachineBasicBlock *BB,
3965                                             bool is8bit,    // operation
3966                                             unsigned BinOpcode) {
3967   // This also handles ATOMIC_SWAP, indicated by BinOpcode==0.
3968   const TargetInstrInfo *TII = getTargetMachine().getInstrInfo();
3969   // In 64 bit mode we have to use 64 bits for addresses, even though the
3970   // lwarx/stwcx are 32 bits.  With the 32-bit atomics we can use address
3971   // registers without caring whether they're 32 or 64, but here we're
3972   // doing actual arithmetic on the addresses.
3973   bool is64bit = PPCSubTarget.isPPC64();
3974
3975   const BasicBlock *LLVM_BB = BB->getBasicBlock();
3976   MachineFunction *F = BB->getParent();
3977   MachineFunction::iterator It = BB;
3978   ++It;
3979
3980   unsigned dest = MI->getOperand(0).getReg();
3981   unsigned ptrA = MI->getOperand(1).getReg();
3982   unsigned ptrB = MI->getOperand(2).getReg();
3983   unsigned incr = MI->getOperand(3).getReg();
3984
3985   MachineBasicBlock *loopMBB = F->CreateMachineBasicBlock(LLVM_BB);
3986   MachineBasicBlock *exitMBB = F->CreateMachineBasicBlock(LLVM_BB);
3987   F->insert(It, loopMBB);
3988   F->insert(It, exitMBB);
3989   exitMBB->transferSuccessors(BB);
3990
3991   MachineRegisterInfo &RegInfo = F->getRegInfo();
3992   const TargetRegisterClass *RC = 
3993     is64bit ? (const TargetRegisterClass *) &PPC::G8RCRegClass :
3994               (const TargetRegisterClass *) &PPC::GPRCRegClass;
3995   unsigned PtrReg = RegInfo.createVirtualRegister(RC);
3996   unsigned Shift1Reg = RegInfo.createVirtualRegister(RC);
3997   unsigned ShiftReg = RegInfo.createVirtualRegister(RC);
3998   unsigned Incr2Reg = RegInfo.createVirtualRegister(RC);
3999   unsigned MaskReg = RegInfo.createVirtualRegister(RC);
4000   unsigned Mask2Reg = RegInfo.createVirtualRegister(RC);
4001   unsigned Mask3Reg = RegInfo.createVirtualRegister(RC);
4002   unsigned Tmp2Reg = RegInfo.createVirtualRegister(RC);
4003   unsigned Tmp3Reg = RegInfo.createVirtualRegister(RC);
4004   unsigned Tmp4Reg = RegInfo.createVirtualRegister(RC);
4005   unsigned TmpDestReg = RegInfo.createVirtualRegister(RC);
4006   unsigned Ptr1Reg;
4007   unsigned TmpReg = (!BinOpcode) ? Incr2Reg : RegInfo.createVirtualRegister(RC);
4008
4009   //  thisMBB:
4010   //   ...
4011   //   fallthrough --> loopMBB
4012   BB->addSuccessor(loopMBB);
4013
4014   // The 4-byte load must be aligned, while a char or short may be
4015   // anywhere in the word.  Hence all this nasty bookkeeping code.
4016   //   add ptr1, ptrA, ptrB [copy if ptrA==0]
4017   //   rlwinm shift1, ptr1, 3, 27, 28 [3, 27, 27]
4018   //   xori shift, shift1, 24 [16]
4019   //   rlwinm ptr, ptr1, 0, 0, 29
4020   //   slw incr2, incr, shift
4021   //   li mask2, 255 [li mask3, 0; ori mask2, mask3, 65535]
4022   //   slw mask, mask2, shift
4023   //  loopMBB:
4024   //   lwarx tmpDest, ptr
4025   //   add tmp, tmpDest, incr2
4026   //   andc tmp2, tmpDest, mask
4027   //   and tmp3, tmp, mask
4028   //   or tmp4, tmp3, tmp2
4029   //   stwcx. tmp4, ptr
4030   //   bne- loopMBB
4031   //   fallthrough --> exitMBB
4032   //   srw dest, tmpDest, shift
4033
4034   if (ptrA!=PPC::R0) {
4035     Ptr1Reg = RegInfo.createVirtualRegister(RC);
4036     BuildMI(BB, TII->get(is64bit ? PPC::ADD8 : PPC::ADD4), Ptr1Reg)
4037       .addReg(ptrA).addReg(ptrB);
4038   } else {
4039     Ptr1Reg = ptrB;
4040   }
4041   BuildMI(BB, TII->get(PPC::RLWINM), Shift1Reg).addReg(Ptr1Reg)
4042       .addImm(3).addImm(27).addImm(is8bit ? 28 : 27);
4043   BuildMI(BB, TII->get(is64bit ? PPC::XORI8 : PPC::XORI), ShiftReg)
4044       .addReg(Shift1Reg).addImm(is8bit ? 24 : 16);
4045   if (is64bit)
4046     BuildMI(BB, TII->get(PPC::RLDICR), PtrReg)
4047       .addReg(Ptr1Reg).addImm(0).addImm(61);
4048   else
4049     BuildMI(BB, TII->get(PPC::RLWINM), PtrReg)
4050       .addReg(Ptr1Reg).addImm(0).addImm(0).addImm(29);
4051   BuildMI(BB, TII->get(PPC::SLW), Incr2Reg)
4052       .addReg(incr).addReg(ShiftReg);
4053   if (is8bit)
4054     BuildMI(BB, TII->get(PPC::LI), Mask2Reg).addImm(255);
4055   else {
4056     BuildMI(BB, TII->get(PPC::LI), Mask3Reg).addImm(0);
4057     BuildMI(BB, TII->get(PPC::ORI), Mask2Reg).addReg(Mask3Reg).addImm(65535);
4058   }
4059   BuildMI(BB, TII->get(PPC::SLW), MaskReg)
4060       .addReg(Mask2Reg).addReg(ShiftReg);
4061
4062   BB = loopMBB;
4063   BuildMI(BB, TII->get(PPC::LWARX), TmpDestReg)
4064     .addReg(PPC::R0).addReg(PtrReg);
4065   if (BinOpcode)
4066     BuildMI(BB, TII->get(BinOpcode), TmpReg)
4067       .addReg(Incr2Reg).addReg(TmpDestReg);
4068   BuildMI(BB, TII->get(is64bit ? PPC::ANDC8 : PPC::ANDC), Tmp2Reg)
4069     .addReg(TmpDestReg).addReg(MaskReg);
4070   BuildMI(BB, TII->get(is64bit ? PPC::AND8 : PPC::AND), Tmp3Reg)
4071     .addReg(TmpReg).addReg(MaskReg);
4072   BuildMI(BB, TII->get(is64bit ? PPC::OR8 : PPC::OR), Tmp4Reg)
4073     .addReg(Tmp3Reg).addReg(Tmp2Reg);
4074   BuildMI(BB, TII->get(PPC::STWCX))
4075     .addReg(Tmp4Reg).addReg(PPC::R0).addReg(PtrReg);
4076   BuildMI(BB, TII->get(PPC::BCC))
4077     .addImm(PPC::PRED_NE).addReg(PPC::CR0).addMBB(loopMBB);    
4078   BB->addSuccessor(loopMBB);
4079   BB->addSuccessor(exitMBB);
4080
4081   //  exitMBB:
4082   //   ...
4083   BB = exitMBB;
4084   BuildMI(BB, TII->get(PPC::SRW), dest).addReg(TmpDestReg).addReg(ShiftReg);
4085   return BB;
4086 }
4087
4088 MachineBasicBlock *
4089 PPCTargetLowering::EmitInstrWithCustomInserter(MachineInstr *MI,
4090                                                MachineBasicBlock *BB) {
4091   const TargetInstrInfo *TII = getTargetMachine().getInstrInfo();
4092
4093   // To "insert" these instructions we actually have to insert their
4094   // control-flow patterns.
4095   const BasicBlock *LLVM_BB = BB->getBasicBlock();
4096   MachineFunction::iterator It = BB;
4097   ++It;
4098
4099   MachineFunction *F = BB->getParent();
4100
4101   if (MI->getOpcode() == PPC::SELECT_CC_I4 ||
4102       MI->getOpcode() == PPC::SELECT_CC_I8 ||
4103       MI->getOpcode() == PPC::SELECT_CC_F4 ||
4104       MI->getOpcode() == PPC::SELECT_CC_F8 ||
4105       MI->getOpcode() == PPC::SELECT_CC_VRRC) {
4106
4107     // The incoming instruction knows the destination vreg to set, the
4108     // condition code register to branch on, the true/false values to
4109     // select between, and a branch opcode to use.
4110
4111     //  thisMBB:
4112     //  ...
4113     //   TrueVal = ...
4114     //   cmpTY ccX, r1, r2
4115     //   bCC copy1MBB
4116     //   fallthrough --> copy0MBB
4117     MachineBasicBlock *thisMBB = BB;
4118     MachineBasicBlock *copy0MBB = F->CreateMachineBasicBlock(LLVM_BB);
4119     MachineBasicBlock *sinkMBB = F->CreateMachineBasicBlock(LLVM_BB);
4120     unsigned SelectPred = MI->getOperand(4).getImm();
4121     BuildMI(BB, TII->get(PPC::BCC))
4122       .addImm(SelectPred).addReg(MI->getOperand(1).getReg()).addMBB(sinkMBB);
4123     F->insert(It, copy0MBB);
4124     F->insert(It, sinkMBB);
4125     // Update machine-CFG edges by transferring all successors of the current
4126     // block to the new block which will contain the Phi node for the select.
4127     sinkMBB->transferSuccessors(BB);
4128     // Next, add the true and fallthrough blocks as its successors.
4129     BB->addSuccessor(copy0MBB);
4130     BB->addSuccessor(sinkMBB);
4131     
4132     //  copy0MBB:
4133     //   %FalseValue = ...
4134     //   # fallthrough to sinkMBB
4135     BB = copy0MBB;
4136     
4137     // Update machine-CFG edges
4138     BB->addSuccessor(sinkMBB);
4139     
4140     //  sinkMBB:
4141     //   %Result = phi [ %FalseValue, copy0MBB ], [ %TrueValue, thisMBB ]
4142     //  ...
4143     BB = sinkMBB;
4144     BuildMI(BB, TII->get(PPC::PHI), MI->getOperand(0).getReg())
4145       .addReg(MI->getOperand(3).getReg()).addMBB(copy0MBB)
4146       .addReg(MI->getOperand(2).getReg()).addMBB(thisMBB);
4147   }
4148   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_ADD_I8)
4149     BB = EmitPartwordAtomicBinary(MI, BB, true, PPC::ADD4);
4150   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_ADD_I16)
4151     BB = EmitPartwordAtomicBinary(MI, BB, false, PPC::ADD4);
4152   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_ADD_I32)
4153     BB = EmitAtomicBinary(MI, BB, false, PPC::ADD4);
4154   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_ADD_I64)
4155     BB = EmitAtomicBinary(MI, BB, true, PPC::ADD8);
4156
4157   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_AND_I8)
4158     BB = EmitPartwordAtomicBinary(MI, BB, true, PPC::AND);
4159   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_AND_I16)
4160     BB = EmitPartwordAtomicBinary(MI, BB, false, PPC::AND);
4161   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_AND_I32)
4162     BB = EmitAtomicBinary(MI, BB, false, PPC::AND);
4163   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_AND_I64)
4164     BB = EmitAtomicBinary(MI, BB, true, PPC::AND8);
4165
4166   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_OR_I8)
4167     BB = EmitPartwordAtomicBinary(MI, BB, true, PPC::OR);
4168   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_OR_I16)
4169     BB = EmitPartwordAtomicBinary(MI, BB, false, PPC::OR);
4170   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_OR_I32)
4171     BB = EmitAtomicBinary(MI, BB, false, PPC::OR);
4172   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_OR_I64)
4173     BB = EmitAtomicBinary(MI, BB, true, PPC::OR8);
4174
4175   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_XOR_I8)
4176     BB = EmitPartwordAtomicBinary(MI, BB, true, PPC::XOR);
4177   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_XOR_I16)
4178     BB = EmitPartwordAtomicBinary(MI, BB, false, PPC::XOR);
4179   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_XOR_I32)
4180     BB = EmitAtomicBinary(MI, BB, false, PPC::XOR);
4181   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_XOR_I64)
4182     BB = EmitAtomicBinary(MI, BB, true, PPC::XOR8);
4183
4184   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_NAND_I8)
4185     BB = EmitPartwordAtomicBinary(MI, BB, true, PPC::ANDC);
4186   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_NAND_I16)
4187     BB = EmitPartwordAtomicBinary(MI, BB, false, PPC::ANDC);
4188   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_NAND_I32)
4189     BB = EmitAtomicBinary(MI, BB, false, PPC::ANDC);
4190   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_NAND_I64)
4191     BB = EmitAtomicBinary(MI, BB, true, PPC::ANDC8);
4192
4193   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_SUB_I8)
4194     BB = EmitPartwordAtomicBinary(MI, BB, true, PPC::SUBF);
4195   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_SUB_I16)
4196     BB = EmitPartwordAtomicBinary(MI, BB, false, PPC::SUBF);
4197   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_SUB_I32)
4198     BB = EmitAtomicBinary(MI, BB, false, PPC::SUBF);
4199   else if (MI->getOpcode() == PPC::ATOMIC_LOAD_SUB_I64)
4200     BB = EmitAtomicBinary(MI, BB, true, PPC::SUBF8);
4201
4202   else if (MI->getOpcode() == PPC::ATOMIC_SWAP_I8)
4203     BB = EmitPartwordAtomicBinary(MI, BB, true, 0);
4204   else if (MI->getOpcode() == PPC::ATOMIC_SWAP_I16)
4205     BB = EmitPartwordAtomicBinary(MI, BB, false, 0);
4206   else if (MI->getOpcode() == PPC::ATOMIC_SWAP_I32)
4207     BB = EmitAtomicBinary(MI, BB, false, 0);
4208   else if (MI->getOpcode() == PPC::ATOMIC_SWAP_I64)
4209     BB = EmitAtomicBinary(MI, BB, true, 0);
4210
4211   else if (MI->getOpcode() == PPC::ATOMIC_CMP_SWAP_I32 ||
4212            MI->getOpcode() == PPC::ATOMIC_CMP_SWAP_I64) {
4213     bool is64bit = MI->getOpcode() == PPC::ATOMIC_CMP_SWAP_I64;
4214
4215     unsigned dest   = MI->getOperand(0).getReg();
4216     unsigned ptrA   = MI->getOperand(1).getReg();
4217     unsigned ptrB   = MI->getOperand(2).getReg();
4218     unsigned oldval = MI->getOperand(3).getReg();
4219     unsigned newval = MI->getOperand(4).getReg();
4220
4221     MachineBasicBlock *loop1MBB = F->CreateMachineBasicBlock(LLVM_BB);
4222     MachineBasicBlock *loop2MBB = F->CreateMachineBasicBlock(LLVM_BB);
4223     MachineBasicBlock *midMBB = F->CreateMachineBasicBlock(LLVM_BB);
4224     MachineBasicBlock *exitMBB = F->CreateMachineBasicBlock(LLVM_BB);
4225     F->insert(It, loop1MBB);
4226     F->insert(It, loop2MBB);
4227     F->insert(It, midMBB);
4228     F->insert(It, exitMBB);
4229     exitMBB->transferSuccessors(BB);
4230
4231     //  thisMBB:
4232     //   ...
4233     //   fallthrough --> loopMBB
4234     BB->addSuccessor(loop1MBB);
4235
4236     // loop1MBB:
4237     //   l[wd]arx dest, ptr
4238     //   cmp[wd] dest, oldval
4239     //   bne- midMBB
4240     // loop2MBB:
4241     //   st[wd]cx. newval, ptr
4242     //   bne- loopMBB
4243     //   b exitBB
4244     // midMBB:
4245     //   st[wd]cx. dest, ptr
4246     // exitBB:
4247     BB = loop1MBB;
4248     BuildMI(BB, TII->get(is64bit ? PPC::LDARX : PPC::LWARX), dest)
4249       .addReg(ptrA).addReg(ptrB);
4250     BuildMI(BB, TII->get(is64bit ? PPC::CMPD : PPC::CMPW), PPC::CR0)
4251       .addReg(oldval).addReg(dest);
4252     BuildMI(BB, TII->get(PPC::BCC))
4253       .addImm(PPC::PRED_NE).addReg(PPC::CR0).addMBB(midMBB);
4254     BB->addSuccessor(loop2MBB);
4255     BB->addSuccessor(midMBB);
4256
4257     BB = loop2MBB;
4258     BuildMI(BB, TII->get(is64bit ? PPC::STDCX : PPC::STWCX))
4259       .addReg(newval).addReg(ptrA).addReg(ptrB);
4260     BuildMI(BB, TII->get(PPC::BCC))
4261       .addImm(PPC::PRED_NE).addReg(PPC::CR0).addMBB(loop1MBB);
4262     BuildMI(BB, TII->get(PPC::B)).addMBB(exitMBB);
4263     BB->addSuccessor(loop1MBB);
4264     BB->addSuccessor(exitMBB);
4265     
4266     BB = midMBB;
4267     BuildMI(BB, TII->get(is64bit ? PPC::STDCX : PPC::STWCX))
4268       .addReg(dest).addReg(ptrA).addReg(ptrB);
4269     BB->addSuccessor(exitMBB);
4270
4271     //  exitMBB:
4272     //   ...
4273     BB = exitMBB;
4274   } else if (MI->getOpcode() == PPC::ATOMIC_CMP_SWAP_I8 ||
4275              MI->getOpcode() == PPC::ATOMIC_CMP_SWAP_I16) {
4276     // We must use 64-bit registers for addresses when targeting 64-bit,
4277     // since we're actually doing arithmetic on them.  Other registers
4278     // can be 32-bit.
4279     bool is64bit = PPCSubTarget.isPPC64();
4280     bool is8bit = MI->getOpcode() == PPC::ATOMIC_CMP_SWAP_I8;
4281
4282     unsigned dest   = MI->getOperand(0).getReg();
4283     unsigned ptrA   = MI->getOperand(1).getReg();
4284     unsigned ptrB   = MI->getOperand(2).getReg();
4285     unsigned oldval = MI->getOperand(3).getReg();
4286     unsigned newval = MI->getOperand(4).getReg();
4287
4288     MachineBasicBlock *loop1MBB = F->CreateMachineBasicBlock(LLVM_BB);
4289     MachineBasicBlock *loop2MBB = F->CreateMachineBasicBlock(LLVM_BB);
4290     MachineBasicBlock *midMBB = F->CreateMachineBasicBlock(LLVM_BB);
4291     MachineBasicBlock *exitMBB = F->CreateMachineBasicBlock(LLVM_BB);
4292     F->insert(It, loop1MBB);
4293     F->insert(It, loop2MBB);
4294     F->insert(It, midMBB);
4295     F->insert(It, exitMBB);
4296     exitMBB->transferSuccessors(BB);
4297
4298     MachineRegisterInfo &RegInfo = F->getRegInfo();
4299     const TargetRegisterClass *RC = 
4300       is64bit ? (const TargetRegisterClass *) &PPC::G8RCRegClass :
4301                 (const TargetRegisterClass *) &PPC::GPRCRegClass;
4302     unsigned PtrReg = RegInfo.createVirtualRegister(RC);
4303     unsigned Shift1Reg = RegInfo.createVirtualRegister(RC);
4304     unsigned ShiftReg = RegInfo.createVirtualRegister(RC);
4305     unsigned NewVal2Reg = RegInfo.createVirtualRegister(RC);
4306     unsigned NewVal3Reg = RegInfo.createVirtualRegister(RC);
4307     unsigned OldVal2Reg = RegInfo.createVirtualRegister(RC);
4308     unsigned OldVal3Reg = RegInfo.createVirtualRegister(RC);
4309     unsigned MaskReg = RegInfo.createVirtualRegister(RC);
4310     unsigned Mask2Reg = RegInfo.createVirtualRegister(RC);
4311     unsigned Mask3Reg = RegInfo.createVirtualRegister(RC);
4312     unsigned Tmp2Reg = RegInfo.createVirtualRegister(RC);
4313     unsigned Tmp4Reg = RegInfo.createVirtualRegister(RC);
4314     unsigned TmpDestReg = RegInfo.createVirtualRegister(RC);
4315     unsigned Ptr1Reg;
4316     unsigned TmpReg = RegInfo.createVirtualRegister(RC);
4317     //  thisMBB:
4318     //   ...
4319     //   fallthrough --> loopMBB
4320     BB->addSuccessor(loop1MBB);
4321
4322     // The 4-byte load must be aligned, while a char or short may be
4323     // anywhere in the word.  Hence all this nasty bookkeeping code.
4324     //   add ptr1, ptrA, ptrB [copy if ptrA==0]
4325     //   rlwinm shift1, ptr1, 3, 27, 28 [3, 27, 27]
4326     //   xori shift, shift1, 24 [16]
4327     //   rlwinm ptr, ptr1, 0, 0, 29
4328     //   slw newval2, newval, shift
4329     //   slw oldval2, oldval,shift
4330     //   li mask2, 255 [li mask3, 0; ori mask2, mask3, 65535]
4331     //   slw mask, mask2, shift
4332     //   and newval3, newval2, mask
4333     //   and oldval3, oldval2, mask
4334     // loop1MBB:
4335     //   lwarx tmpDest, ptr
4336     //   and tmp, tmpDest, mask
4337     //   cmpw tmp, oldval3
4338     //   bne- midMBB
4339     // loop2MBB:
4340     //   andc tmp2, tmpDest, mask
4341     //   or tmp4, tmp2, newval3
4342     //   stwcx. tmp4, ptr
4343     //   bne- loop1MBB
4344     //   b exitBB
4345     // midMBB:
4346     //   stwcx. tmpDest, ptr
4347     // exitBB:
4348     //   srw dest, tmpDest, shift
4349     if (ptrA!=PPC::R0) {
4350       Ptr1Reg = RegInfo.createVirtualRegister(RC);
4351       BuildMI(BB, TII->get(is64bit ? PPC::ADD8 : PPC::ADD4), Ptr1Reg)
4352         .addReg(ptrA).addReg(ptrB);
4353     } else {
4354       Ptr1Reg = ptrB;
4355     }
4356     BuildMI(BB, TII->get(PPC::RLWINM), Shift1Reg).addReg(Ptr1Reg)
4357         .addImm(3).addImm(27).addImm(is8bit ? 28 : 27);
4358     BuildMI(BB, TII->get(is64bit ? PPC::XORI8 : PPC::XORI), ShiftReg)
4359         .addReg(Shift1Reg).addImm(is8bit ? 24 : 16);
4360     if (is64bit)
4361       BuildMI(BB, TII->get(PPC::RLDICR), PtrReg)
4362         .addReg(Ptr1Reg).addImm(0).addImm(61);
4363     else
4364       BuildMI(BB, TII->get(PPC::RLWINM), PtrReg)
4365         .addReg(Ptr1Reg).addImm(0).addImm(0).addImm(29);
4366     BuildMI(BB, TII->get(PPC::SLW), NewVal2Reg)
4367         .addReg(newval).addReg(ShiftReg);
4368     BuildMI(BB, TII->get(PPC::SLW), OldVal2Reg)
4369         .addReg(oldval).addReg(ShiftReg);
4370     if (is8bit)
4371       BuildMI(BB, TII->get(PPC::LI), Mask2Reg).addImm(255);
4372     else {
4373       BuildMI(BB, TII->get(PPC::LI), Mask3Reg).addImm(0);
4374       BuildMI(BB, TII->get(PPC::ORI), Mask2Reg).addReg(Mask3Reg).addImm(65535);
4375     }
4376     BuildMI(BB, TII->get(PPC::SLW), MaskReg)
4377         .addReg(Mask2Reg).addReg(ShiftReg);
4378     BuildMI(BB, TII->get(PPC::AND), NewVal3Reg)
4379         .addReg(NewVal2Reg).addReg(MaskReg);
4380     BuildMI(BB, TII->get(PPC::AND), OldVal3Reg)
4381         .addReg(OldVal2Reg).addReg(MaskReg);
4382
4383     BB = loop1MBB;
4384     BuildMI(BB, TII->get(PPC::LWARX), TmpDestReg)
4385         .addReg(PPC::R0).addReg(PtrReg);
4386     BuildMI(BB, TII->get(PPC::AND),TmpReg).addReg(TmpDestReg).addReg(MaskReg);
4387     BuildMI(BB, TII->get(PPC::CMPW), PPC::CR0)
4388         .addReg(TmpReg).addReg(OldVal3Reg);
4389     BuildMI(BB, TII->get(PPC::BCC))
4390         .addImm(PPC::PRED_NE).addReg(PPC::CR0).addMBB(midMBB);
4391     BB->addSuccessor(loop2MBB);
4392     BB->addSuccessor(midMBB);
4393
4394     BB = loop2MBB;
4395     BuildMI(BB, TII->get(PPC::ANDC),Tmp2Reg).addReg(TmpDestReg).addReg(MaskReg);
4396     BuildMI(BB, TII->get(PPC::OR),Tmp4Reg).addReg(Tmp2Reg).addReg(NewVal3Reg);
4397     BuildMI(BB, TII->get(PPC::STWCX)).addReg(Tmp4Reg)
4398         .addReg(PPC::R0).addReg(PtrReg);
4399     BuildMI(BB, TII->get(PPC::BCC))
4400       .addImm(PPC::PRED_NE).addReg(PPC::CR0).addMBB(loop1MBB);
4401     BuildMI(BB, TII->get(PPC::B)).addMBB(exitMBB);
4402     BB->addSuccessor(loop1MBB);
4403     BB->addSuccessor(exitMBB);
4404     
4405     BB = midMBB;
4406     BuildMI(BB, TII->get(PPC::STWCX)).addReg(TmpDestReg)
4407       .addReg(PPC::R0).addReg(PtrReg);
4408     BB->addSuccessor(exitMBB);
4409
4410     //  exitMBB:
4411     //   ...
4412     BB = exitMBB;
4413     BuildMI(BB, TII->get(PPC::SRW),dest).addReg(TmpReg).addReg(ShiftReg);
4414   } else {
4415     assert(0 && "Unexpected instr type to insert");
4416   }
4417
4418   F->DeleteMachineInstr(MI);   // The pseudo instruction is gone now.
4419   return BB;
4420 }
4421
4422 //===----------------------------------------------------------------------===//
4423 // Target Optimization Hooks
4424 //===----------------------------------------------------------------------===//
4425
4426 SDValue PPCTargetLowering::PerformDAGCombine(SDNode *N, 
4427                                                DAGCombinerInfo &DCI) const {
4428   TargetMachine &TM = getTargetMachine();
4429   SelectionDAG &DAG = DCI.DAG;
4430   switch (N->getOpcode()) {
4431   default: break;
4432   case PPCISD::SHL:
4433     if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(N->getOperand(0))) {
4434       if (C->getZExtValue() == 0)   // 0 << V -> 0.
4435         return N->getOperand(0);
4436     }
4437     break;
4438   case PPCISD::SRL:
4439     if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(N->getOperand(0))) {
4440       if (C->getZExtValue() == 0)   // 0 >>u V -> 0.
4441         return N->getOperand(0);
4442     }
4443     break;
4444   case PPCISD::SRA:
4445     if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(N->getOperand(0))) {
4446       if (C->getZExtValue() == 0 ||   //  0 >>s V -> 0.
4447           C->isAllOnesValue())    // -1 >>s V -> -1.
4448         return N->getOperand(0);
4449     }
4450     break;
4451     
4452   case ISD::SINT_TO_FP:
4453     if (TM.getSubtarget<PPCSubtarget>().has64BitSupport()) {
4454       if (N->getOperand(0).getOpcode() == ISD::FP_TO_SINT) {
4455         // Turn (sint_to_fp (fp_to_sint X)) -> fctidz/fcfid without load/stores.
4456         // We allow the src/dst to be either f32/f64, but the intermediate
4457         // type must be i64.
4458         if (N->getOperand(0).getValueType() == MVT::i64 &&
4459             N->getOperand(0).getOperand(0).getValueType() != MVT::ppcf128) {
4460           SDValue Val = N->getOperand(0).getOperand(0);
4461           if (Val.getValueType() == MVT::f32) {
4462             Val = DAG.getNode(ISD::FP_EXTEND, MVT::f64, Val);
4463             DCI.AddToWorklist(Val.getNode());
4464           }
4465             
4466           Val = DAG.getNode(PPCISD::FCTIDZ, MVT::f64, Val);
4467           DCI.AddToWorklist(Val.getNode());
4468           Val = DAG.getNode(PPCISD::FCFID, MVT::f64, Val);
4469           DCI.AddToWorklist(Val.getNode());
4470           if (N->getValueType(0) == MVT::f32) {
4471             Val = DAG.getNode(ISD::FP_ROUND, MVT::f32, Val, 
4472                               DAG.getIntPtrConstant(0));
4473             DCI.AddToWorklist(Val.getNode());
4474           }
4475           return Val;
4476         } else if (N->getOperand(0).getValueType() == MVT::i32) {
4477           // If the intermediate type is i32, we can avoid the load/store here
4478           // too.
4479         }
4480       }
4481     }
4482     break;
4483   case ISD::STORE:
4484     // Turn STORE (FP_TO_SINT F) -> STFIWX(FCTIWZ(F)).
4485     if (TM.getSubtarget<PPCSubtarget>().hasSTFIWX() &&
4486         !cast<StoreSDNode>(N)->isTruncatingStore() &&
4487         N->getOperand(1).getOpcode() == ISD::FP_TO_SINT &&
4488         N->getOperand(1).getValueType() == MVT::i32 &&
4489         N->getOperand(1).getOperand(0).getValueType() != MVT::ppcf128) {
4490       SDValue Val = N->getOperand(1).getOperand(0);
4491       if (Val.getValueType() == MVT::f32) {
4492         Val = DAG.getNode(ISD::FP_EXTEND, MVT::f64, Val);
4493         DCI.AddToWorklist(Val.getNode());
4494       }
4495       Val = DAG.getNode(PPCISD::FCTIWZ, MVT::f64, Val);
4496       DCI.AddToWorklist(Val.getNode());
4497
4498       Val = DAG.getNode(PPCISD::STFIWX, MVT::Other, N->getOperand(0), Val,
4499                         N->getOperand(2), N->getOperand(3));
4500       DCI.AddToWorklist(Val.getNode());
4501       return Val;
4502     }
4503     
4504     // Turn STORE (BSWAP) -> sthbrx/stwbrx.
4505     if (N->getOperand(1).getOpcode() == ISD::BSWAP &&
4506         N->getOperand(1).getNode()->hasOneUse() &&
4507         (N->getOperand(1).getValueType() == MVT::i32 ||
4508          N->getOperand(1).getValueType() == MVT::i16)) {
4509       SDValue BSwapOp = N->getOperand(1).getOperand(0);
4510       // Do an any-extend to 32-bits if this is a half-word input.
4511       if (BSwapOp.getValueType() == MVT::i16)
4512         BSwapOp = DAG.getNode(ISD::ANY_EXTEND, MVT::i32, BSwapOp);
4513
4514       return DAG.getNode(PPCISD::STBRX, MVT::Other, N->getOperand(0), BSwapOp,
4515                          N->getOperand(2), N->getOperand(3),
4516                          DAG.getValueType(N->getOperand(1).getValueType()));
4517     }
4518     break;
4519   case ISD::BSWAP:
4520     // Turn BSWAP (LOAD) -> lhbrx/lwbrx.
4521     if (ISD::isNON_EXTLoad(N->getOperand(0).getNode()) &&
4522         N->getOperand(0).hasOneUse() &&
4523         (N->getValueType(0) == MVT::i32 || N->getValueType(0) == MVT::i16)) {
4524       SDValue Load = N->getOperand(0);
4525       LoadSDNode *LD = cast<LoadSDNode>(Load);
4526       // Create the byte-swapping load.
4527       std::vector<MVT> VTs;
4528       VTs.push_back(MVT::i32);
4529       VTs.push_back(MVT::Other);
4530       SDValue MO = DAG.getMemOperand(LD->getMemOperand());
4531       SDValue Ops[] = {
4532         LD->getChain(),    // Chain
4533         LD->getBasePtr(),  // Ptr
4534         MO,                // MemOperand
4535         DAG.getValueType(N->getValueType(0)) // VT
4536       };
4537       SDValue BSLoad = DAG.getNode(PPCISD::LBRX, VTs, Ops, 4);
4538
4539       // If this is an i16 load, insert the truncate.  
4540       SDValue ResVal = BSLoad;
4541       if (N->getValueType(0) == MVT::i16)
4542         ResVal = DAG.getNode(ISD::TRUNCATE, MVT::i16, BSLoad);
4543       
4544       // First, combine the bswap away.  This makes the value produced by the
4545       // load dead.
4546       DCI.CombineTo(N, ResVal);
4547
4548       // Next, combine the load away, we give it a bogus result value but a real
4549       // chain result.  The result value is dead because the bswap is dead.
4550       DCI.CombineTo(Load.getNode(), ResVal, BSLoad.getValue(1));
4551       
4552       // Return N so it doesn't get rechecked!
4553       return SDValue(N, 0);
4554     }
4555     
4556     break;
4557   case PPCISD::VCMP: {
4558     // If a VCMPo node already exists with exactly the same operands as this
4559     // node, use its result instead of this node (VCMPo computes both a CR6 and
4560     // a normal output).
4561     //
4562     if (!N->getOperand(0).hasOneUse() &&
4563         !N->getOperand(1).hasOneUse() &&
4564         !N->getOperand(2).hasOneUse()) {
4565       
4566       // Scan all of the users of the LHS, looking for VCMPo's that match.
4567       SDNode *VCMPoNode = 0;
4568       
4569       SDNode *LHSN = N->getOperand(0).getNode();
4570       for (SDNode::use_iterator UI = LHSN->use_begin(), E = LHSN->use_end();
4571            UI != E; ++UI)
4572         if (UI->getOpcode() == PPCISD::VCMPo &&
4573             UI->getOperand(1) == N->getOperand(1) &&
4574             UI->getOperand(2) == N->getOperand(2) &&
4575             UI->getOperand(0) == N->getOperand(0)) {
4576           VCMPoNode = *UI;
4577           break;
4578         }
4579       
4580       // If there is no VCMPo node, or if the flag value has a single use, don't
4581       // transform this.
4582       if (!VCMPoNode || VCMPoNode->hasNUsesOfValue(0, 1))
4583         break;
4584         
4585       // Look at the (necessarily single) use of the flag value.  If it has a 
4586       // chain, this transformation is more complex.  Note that multiple things
4587       // could use the value result, which we should ignore.
4588       SDNode *FlagUser = 0;
4589       for (SDNode::use_iterator UI = VCMPoNode->use_begin(); 
4590            FlagUser == 0; ++UI) {
4591         assert(UI != VCMPoNode->use_end() && "Didn't find user!");
4592         SDNode *User = *UI;
4593         for (unsigned i = 0, e = User->getNumOperands(); i != e; ++i) {
4594           if (User->getOperand(i) == SDValue(VCMPoNode, 1)) {
4595             FlagUser = User;
4596             break;
4597           }
4598         }
4599       }
4600       
4601       // If the user is a MFCR instruction, we know this is safe.  Otherwise we
4602       // give up for right now.
4603       if (FlagUser->getOpcode() == PPCISD::MFCR)
4604         return SDValue(VCMPoNode, 0);
4605     }
4606     break;
4607   }
4608   case ISD::BR_CC: {
4609     // If this is a branch on an altivec predicate comparison, lower this so
4610     // that we don't have to do a MFCR: instead, branch directly on CR6.  This
4611     // lowering is done pre-legalize, because the legalizer lowers the predicate
4612     // compare down to code that is difficult to reassemble.
4613     ISD::CondCode CC = cast<CondCodeSDNode>(N->getOperand(1))->get();
4614     SDValue LHS = N->getOperand(2), RHS = N->getOperand(3);
4615     int CompareOpc;
4616     bool isDot;
4617     
4618     if (LHS.getOpcode() == ISD::INTRINSIC_WO_CHAIN &&
4619         isa<ConstantSDNode>(RHS) && (CC == ISD::SETEQ || CC == ISD::SETNE) &&
4620         getAltivecCompareInfo(LHS, CompareOpc, isDot)) {
4621       assert(isDot && "Can't compare against a vector result!");
4622       
4623       // If this is a comparison against something other than 0/1, then we know
4624       // that the condition is never/always true.
4625       unsigned Val = cast<ConstantSDNode>(RHS)->getZExtValue();
4626       if (Val != 0 && Val != 1) {
4627         if (CC == ISD::SETEQ)      // Cond never true, remove branch.
4628           return N->getOperand(0);
4629         // Always !=, turn it into an unconditional branch.
4630         return DAG.getNode(ISD::BR, MVT::Other, 
4631                            N->getOperand(0), N->getOperand(4));
4632       }
4633     
4634       bool BranchOnWhenPredTrue = (CC == ISD::SETEQ) ^ (Val == 0);
4635       
4636       // Create the PPCISD altivec 'dot' comparison node.
4637       std::vector<MVT> VTs;
4638       SDValue Ops[] = {
4639         LHS.getOperand(2),  // LHS of compare
4640         LHS.getOperand(3),  // RHS of compare
4641         DAG.getConstant(CompareOpc, MVT::i32)
4642       };
4643       VTs.push_back(LHS.getOperand(2).getValueType());
4644       VTs.push_back(MVT::Flag);
4645       SDValue CompNode = DAG.getNode(PPCISD::VCMPo, VTs, Ops, 3);
4646       
4647       // Unpack the result based on how the target uses it.
4648       PPC::Predicate CompOpc;
4649       switch (cast<ConstantSDNode>(LHS.getOperand(1))->getZExtValue()) {
4650       default:  // Can't happen, don't crash on invalid number though.
4651       case 0:   // Branch on the value of the EQ bit of CR6.
4652         CompOpc = BranchOnWhenPredTrue ? PPC::PRED_EQ : PPC::PRED_NE;
4653         break;
4654       case 1:   // Branch on the inverted value of the EQ bit of CR6.
4655         CompOpc = BranchOnWhenPredTrue ? PPC::PRED_NE : PPC::PRED_EQ;
4656         break;
4657       case 2:   // Branch on the value of the LT bit of CR6.
4658         CompOpc = BranchOnWhenPredTrue ? PPC::PRED_LT : PPC::PRED_GE;
4659         break;
4660       case 3:   // Branch on the inverted value of the LT bit of CR6.
4661         CompOpc = BranchOnWhenPredTrue ? PPC::PRED_GE : PPC::PRED_LT;
4662         break;
4663       }
4664
4665       return DAG.getNode(PPCISD::COND_BRANCH, MVT::Other, N->getOperand(0),
4666                          DAG.getConstant(CompOpc, MVT::i32),
4667                          DAG.getRegister(PPC::CR6, MVT::i32),
4668                          N->getOperand(4), CompNode.getValue(1));
4669     }
4670     break;
4671   }
4672   }
4673   
4674   return SDValue();
4675 }
4676
4677 //===----------------------------------------------------------------------===//
4678 // Inline Assembly Support
4679 //===----------------------------------------------------------------------===//
4680
4681 void PPCTargetLowering::computeMaskedBitsForTargetNode(const SDValue Op,
4682                                                        const APInt &Mask,
4683                                                        APInt &KnownZero, 
4684                                                        APInt &KnownOne,
4685                                                        const SelectionDAG &DAG,
4686                                                        unsigned Depth) const {
4687   KnownZero = KnownOne = APInt(Mask.getBitWidth(), 0);
4688   switch (Op.getOpcode()) {
4689   default: break;
4690   case PPCISD::LBRX: {
4691     // lhbrx is known to have the top bits cleared out.
4692     if (cast<VTSDNode>(Op.getOperand(3))->getVT() == MVT::i16)
4693       KnownZero = 0xFFFF0000;
4694     break;
4695   }
4696   case ISD::INTRINSIC_WO_CHAIN: {
4697     switch (cast<ConstantSDNode>(Op.getOperand(0))->getZExtValue()) {
4698     default: break;
4699     case Intrinsic::ppc_altivec_vcmpbfp_p:
4700     case Intrinsic::ppc_altivec_vcmpeqfp_p:
4701     case Intrinsic::ppc_altivec_vcmpequb_p:
4702     case Intrinsic::ppc_altivec_vcmpequh_p:
4703     case Intrinsic::ppc_altivec_vcmpequw_p:
4704     case Intrinsic::ppc_altivec_vcmpgefp_p:
4705     case Intrinsic::ppc_altivec_vcmpgtfp_p:
4706     case Intrinsic::ppc_altivec_vcmpgtsb_p:
4707     case Intrinsic::ppc_altivec_vcmpgtsh_p:
4708     case Intrinsic::ppc_altivec_vcmpgtsw_p:
4709     case Intrinsic::ppc_altivec_vcmpgtub_p:
4710     case Intrinsic::ppc_altivec_vcmpgtuh_p:
4711     case Intrinsic::ppc_altivec_vcmpgtuw_p:
4712       KnownZero = ~1U;  // All bits but the low one are known to be zero.
4713       break;
4714     }        
4715   }
4716   }
4717 }
4718
4719
4720 /// getConstraintType - Given a constraint, return the type of
4721 /// constraint it is for this target.
4722 PPCTargetLowering::ConstraintType 
4723 PPCTargetLowering::getConstraintType(const std::string &Constraint) const {
4724   if (Constraint.size() == 1) {
4725     switch (Constraint[0]) {
4726     default: break;
4727     case 'b':
4728     case 'r':
4729     case 'f':
4730     case 'v':
4731     case 'y':
4732       return C_RegisterClass;
4733     }
4734   }
4735   return TargetLowering::getConstraintType(Constraint);
4736 }
4737
4738 std::pair<unsigned, const TargetRegisterClass*> 
4739 PPCTargetLowering::getRegForInlineAsmConstraint(const std::string &Constraint,
4740                                                 MVT VT) const {
4741   if (Constraint.size() == 1) {
4742     // GCC RS6000 Constraint Letters
4743     switch (Constraint[0]) {
4744     case 'b':   // R1-R31
4745     case 'r':   // R0-R31
4746       if (VT == MVT::i64 && PPCSubTarget.isPPC64())
4747         return std::make_pair(0U, PPC::G8RCRegisterClass);
4748       return std::make_pair(0U, PPC::GPRCRegisterClass);
4749     case 'f':
4750       if (VT == MVT::f32)
4751         return std::make_pair(0U, PPC::F4RCRegisterClass);
4752       else if (VT == MVT::f64)
4753         return std::make_pair(0U, PPC::F8RCRegisterClass);
4754       break;
4755     case 'v': 
4756       return std::make_pair(0U, PPC::VRRCRegisterClass);
4757     case 'y':   // crrc
4758       return std::make_pair(0U, PPC::CRRCRegisterClass);
4759     }
4760   }
4761   
4762   return TargetLowering::getRegForInlineAsmConstraint(Constraint, VT);
4763 }
4764
4765
4766 /// LowerAsmOperandForConstraint - Lower the specified operand into the Ops
4767 /// vector.  If it is invalid, don't add anything to Ops.
4768 void PPCTargetLowering::LowerAsmOperandForConstraint(SDValue Op, char Letter,
4769                                                      std::vector<SDValue>&Ops,
4770                                                      SelectionDAG &DAG) const {
4771   SDValue Result(0,0);
4772   switch (Letter) {
4773   default: break;
4774   case 'I':
4775   case 'J':
4776   case 'K':
4777   case 'L':
4778   case 'M':
4779   case 'N':
4780   case 'O':
4781   case 'P': {
4782     ConstantSDNode *CST = dyn_cast<ConstantSDNode>(Op);
4783     if (!CST) return; // Must be an immediate to match.
4784     unsigned Value = CST->getZExtValue();
4785     switch (Letter) {
4786     default: assert(0 && "Unknown constraint letter!");
4787     case 'I':  // "I" is a signed 16-bit constant.
4788       if ((short)Value == (int)Value)
4789         Result = DAG.getTargetConstant(Value, Op.getValueType());
4790       break;
4791     case 'J':  // "J" is a constant with only the high-order 16 bits nonzero.
4792     case 'L':  // "L" is a signed 16-bit constant shifted left 16 bits.
4793       if ((short)Value == 0)
4794         Result = DAG.getTargetConstant(Value, Op.getValueType());
4795       break;
4796     case 'K':  // "K" is a constant with only the low-order 16 bits nonzero.
4797       if ((Value >> 16) == 0)
4798         Result = DAG.getTargetConstant(Value, Op.getValueType());
4799       break;
4800     case 'M':  // "M" is a constant that is greater than 31.
4801       if (Value > 31)
4802         Result = DAG.getTargetConstant(Value, Op.getValueType());
4803       break;
4804     case 'N':  // "N" is a positive constant that is an exact power of two.
4805       if ((int)Value > 0 && isPowerOf2_32(Value))
4806         Result = DAG.getTargetConstant(Value, Op.getValueType());
4807       break;
4808     case 'O':  // "O" is the constant zero. 
4809       if (Value == 0)
4810         Result = DAG.getTargetConstant(Value, Op.getValueType());
4811       break;
4812     case 'P':  // "P" is a constant whose negation is a signed 16-bit constant.
4813       if ((short)-Value == (int)-Value)
4814         Result = DAG.getTargetConstant(Value, Op.getValueType());
4815       break;
4816     }
4817     break;
4818   }
4819   }
4820   
4821   if (Result.getNode()) {
4822     Ops.push_back(Result);
4823     return;
4824   }
4825   
4826   // Handle standard constraint letters.
4827   TargetLowering::LowerAsmOperandForConstraint(Op, Letter, Ops, DAG);
4828 }
4829
4830 // isLegalAddressingMode - Return true if the addressing mode represented
4831 // by AM is legal for this target, for a load/store of the specified type.
4832 bool PPCTargetLowering::isLegalAddressingMode(const AddrMode &AM, 
4833                                               const Type *Ty) const {
4834   // FIXME: PPC does not allow r+i addressing modes for vectors!
4835   
4836   // PPC allows a sign-extended 16-bit immediate field.
4837   if (AM.BaseOffs <= -(1LL << 16) || AM.BaseOffs >= (1LL << 16)-1)
4838     return false;
4839   
4840   // No global is ever allowed as a base.
4841   if (AM.BaseGV)
4842     return false;
4843   
4844   // PPC only support r+r, 
4845   switch (AM.Scale) {
4846   case 0:  // "r+i" or just "i", depending on HasBaseReg.
4847     break;
4848   case 1:
4849     if (AM.HasBaseReg && AM.BaseOffs)  // "r+r+i" is not allowed.
4850       return false;
4851     // Otherwise we have r+r or r+i.
4852     break;
4853   case 2:
4854     if (AM.HasBaseReg || AM.BaseOffs)  // 2*r+r  or  2*r+i is not allowed.
4855       return false;
4856     // Allow 2*r as r+r.
4857     break;
4858   default:
4859     // No other scales are supported.
4860     return false;
4861   }
4862   
4863   return true;
4864 }
4865
4866 /// isLegalAddressImmediate - Return true if the integer value can be used
4867 /// as the offset of the target addressing mode for load / store of the
4868 /// given type.
4869 bool PPCTargetLowering::isLegalAddressImmediate(int64_t V,const Type *Ty) const{
4870   // PPC allows a sign-extended 16-bit immediate field.
4871   return (V > -(1 << 16) && V < (1 << 16)-1);
4872 }
4873
4874 bool PPCTargetLowering::isLegalAddressImmediate(llvm::GlobalValue* GV) const {
4875   return false; 
4876 }
4877
4878 SDValue PPCTargetLowering::LowerRETURNADDR(SDValue Op, SelectionDAG &DAG) {
4879   // Depths > 0 not supported yet! 
4880   if (cast<ConstantSDNode>(Op.getOperand(0))->getZExtValue() > 0)
4881     return SDValue();
4882
4883   MachineFunction &MF = DAG.getMachineFunction();
4884   PPCFunctionInfo *FuncInfo = MF.getInfo<PPCFunctionInfo>();
4885
4886   // Just load the return address off the stack.
4887   SDValue RetAddrFI = getReturnAddrFrameIndex(DAG);
4888
4889   // Make sure the function really does not optimize away the store of the RA
4890   // to the stack.
4891   FuncInfo->setLRStoreRequired();
4892   return DAG.getLoad(getPointerTy(), DAG.getEntryNode(), RetAddrFI, NULL, 0);
4893 }
4894
4895 SDValue PPCTargetLowering::LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG) {
4896   // Depths > 0 not supported yet! 
4897   if (cast<ConstantSDNode>(Op.getOperand(0))->getZExtValue() > 0)
4898     return SDValue();
4899   
4900   MVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy();
4901   bool isPPC64 = PtrVT == MVT::i64;
4902   
4903   MachineFunction &MF = DAG.getMachineFunction();
4904   MachineFrameInfo *MFI = MF.getFrameInfo();
4905   bool is31 = (NoFramePointerElim || MFI->hasVarSizedObjects()) 
4906                   && MFI->getStackSize();
4907
4908   if (isPPC64)
4909     return DAG.getCopyFromReg(DAG.getEntryNode(), is31 ? PPC::X31 : PPC::X1,
4910       MVT::i64);
4911   else
4912     return DAG.getCopyFromReg(DAG.getEntryNode(), is31 ? PPC::R31 : PPC::R1,
4913       MVT::i32);
4914 }