JumpTable support! What this represents is working asm and jit support for
[oota-llvm.git] / lib / Target / X86 / X86ISelLowering.cpp
1 //===-- X86ISelLowering.h - X86 DAG Lowering Interface ----------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file was developed by Chris Lattner and is distributed under
6 // the University of Illinois Open Source License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines the interfaces that X86 uses to lower LLVM code into a
11 // selection DAG.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #include "X86.h"
16 #include "X86InstrBuilder.h"
17 #include "X86ISelLowering.h"
18 #include "X86TargetMachine.h"
19 #include "llvm/CallingConv.h"
20 #include "llvm/Constants.h"
21 #include "llvm/Function.h"
22 #include "llvm/Intrinsics.h"
23 #include "llvm/ADT/VectorExtras.h"
24 #include "llvm/Analysis/ScalarEvolutionExpressions.h"
25 #include "llvm/CodeGen/MachineFrameInfo.h"
26 #include "llvm/CodeGen/MachineFunction.h"
27 #include "llvm/CodeGen/MachineInstrBuilder.h"
28 #include "llvm/CodeGen/SelectionDAG.h"
29 #include "llvm/CodeGen/SSARegMap.h"
30 #include "llvm/Support/MathExtras.h"
31 #include "llvm/Target/TargetOptions.h"
32 using namespace llvm;
33
34 // FIXME: temporary.
35 #include "llvm/Support/CommandLine.h"
36 static cl::opt<bool> EnableFastCC("enable-x86-fastcc", cl::Hidden,
37                                   cl::desc("Enable fastcc on X86"));
38
39 X86TargetLowering::X86TargetLowering(TargetMachine &TM)
40   : TargetLowering(TM) {
41   Subtarget = &TM.getSubtarget<X86Subtarget>();
42   X86ScalarSSE = Subtarget->hasSSE2();
43
44   // Set up the TargetLowering object.
45
46   // X86 is weird, it always uses i8 for shift amounts and setcc results.
47   setShiftAmountType(MVT::i8);
48   setSetCCResultType(MVT::i8);
49   setSetCCResultContents(ZeroOrOneSetCCResult);
50   setSchedulingPreference(SchedulingForRegPressure);
51   setShiftAmountFlavor(Mask);   // shl X, 32 == shl X, 0
52   setStackPointerRegisterToSaveRestore(X86::ESP);
53
54   if (!Subtarget->isTargetDarwin())
55     // Darwin should use _setjmp/_longjmp instead of setjmp/longjmp.
56     setUseUnderscoreSetJmpLongJmp(true);
57     
58   // Add legal addressing mode scale values.
59   addLegalAddressScale(8);
60   addLegalAddressScale(4);
61   addLegalAddressScale(2);
62   // Enter the ones which require both scale + index last. These are more
63   // expensive.
64   addLegalAddressScale(9);
65   addLegalAddressScale(5);
66   addLegalAddressScale(3);
67   
68   // Set up the register classes.
69   addRegisterClass(MVT::i8, X86::R8RegisterClass);
70   addRegisterClass(MVT::i16, X86::R16RegisterClass);
71   addRegisterClass(MVT::i32, X86::R32RegisterClass);
72
73   // Promote all UINT_TO_FP to larger SINT_TO_FP's, as X86 doesn't have this
74   // operation.
75   setOperationAction(ISD::UINT_TO_FP       , MVT::i1   , Promote);
76   setOperationAction(ISD::UINT_TO_FP       , MVT::i8   , Promote);
77   setOperationAction(ISD::UINT_TO_FP       , MVT::i16  , Promote);
78
79   if (X86ScalarSSE)
80     // No SSE i64 SINT_TO_FP, so expand i32 UINT_TO_FP instead.
81     setOperationAction(ISD::UINT_TO_FP     , MVT::i32  , Expand);
82   else
83     setOperationAction(ISD::UINT_TO_FP     , MVT::i32  , Promote);
84
85   // Promote i1/i8 SINT_TO_FP to larger SINT_TO_FP's, as X86 doesn't have
86   // this operation.
87   setOperationAction(ISD::SINT_TO_FP       , MVT::i1   , Promote);
88   setOperationAction(ISD::SINT_TO_FP       , MVT::i8   , Promote);
89   // SSE has no i16 to fp conversion, only i32
90   if (X86ScalarSSE)
91     setOperationAction(ISD::SINT_TO_FP     , MVT::i16  , Promote);
92   else {
93     setOperationAction(ISD::SINT_TO_FP     , MVT::i16  , Custom);
94     setOperationAction(ISD::SINT_TO_FP     , MVT::i32  , Custom);
95   }
96
97   // We can handle SINT_TO_FP and FP_TO_SINT from/to i64 even though i64
98   // isn't legal.
99   setOperationAction(ISD::SINT_TO_FP       , MVT::i64  , Custom);
100   setOperationAction(ISD::FP_TO_SINT       , MVT::i64  , Custom);
101
102   // Promote i1/i8 FP_TO_SINT to larger FP_TO_SINTS's, as X86 doesn't have
103   // this operation.
104   setOperationAction(ISD::FP_TO_SINT       , MVT::i1   , Promote);
105   setOperationAction(ISD::FP_TO_SINT       , MVT::i8   , Promote);
106
107   if (X86ScalarSSE) {
108     setOperationAction(ISD::FP_TO_SINT     , MVT::i16  , Promote);
109   } else {
110     setOperationAction(ISD::FP_TO_SINT     , MVT::i16  , Custom);
111     setOperationAction(ISD::FP_TO_SINT     , MVT::i32  , Custom);
112   }
113
114   // Handle FP_TO_UINT by promoting the destination to a larger signed
115   // conversion.
116   setOperationAction(ISD::FP_TO_UINT       , MVT::i1   , Promote);
117   setOperationAction(ISD::FP_TO_UINT       , MVT::i8   , Promote);
118   setOperationAction(ISD::FP_TO_UINT       , MVT::i16  , Promote);
119
120   if (X86ScalarSSE && !Subtarget->hasSSE3())
121     // Expand FP_TO_UINT into a select.
122     // FIXME: We would like to use a Custom expander here eventually to do
123     // the optimal thing for SSE vs. the default expansion in the legalizer.
124     setOperationAction(ISD::FP_TO_UINT     , MVT::i32  , Expand);
125   else
126     // With SSE3 we can use fisttpll to convert to a signed i64.
127     setOperationAction(ISD::FP_TO_UINT     , MVT::i32  , Promote);
128
129   setOperationAction(ISD::BIT_CONVERT      , MVT::f32  , Expand);
130   setOperationAction(ISD::BIT_CONVERT      , MVT::i32  , Expand);
131
132   setOperationAction(ISD::BRCOND           , MVT::Other, Custom);
133   setOperationAction(ISD::BR_CC            , MVT::Other, Expand);
134   setOperationAction(ISD::SELECT_CC        , MVT::Other, Expand);
135   setOperationAction(ISD::MEMMOVE          , MVT::Other, Expand);
136   setOperationAction(ISD::SIGN_EXTEND_INREG, MVT::i16  , Expand);
137   setOperationAction(ISD::SIGN_EXTEND_INREG, MVT::i8   , Expand);
138   setOperationAction(ISD::SIGN_EXTEND_INREG, MVT::i1   , Expand);
139   setOperationAction(ISD::FP_ROUND_INREG   , MVT::f32  , Expand);
140   setOperationAction(ISD::SEXTLOAD         , MVT::i1   , Expand);
141   setOperationAction(ISD::FREM             , MVT::f64  , Expand);
142   setOperationAction(ISD::CTPOP            , MVT::i8   , Expand);
143   setOperationAction(ISD::CTTZ             , MVT::i8   , Expand);
144   setOperationAction(ISD::CTLZ             , MVT::i8   , Expand);
145   setOperationAction(ISD::CTPOP            , MVT::i16  , Expand);
146   setOperationAction(ISD::CTTZ             , MVT::i16  , Expand);
147   setOperationAction(ISD::CTLZ             , MVT::i16  , Expand);
148   setOperationAction(ISD::CTPOP            , MVT::i32  , Expand);
149   setOperationAction(ISD::CTTZ             , MVT::i32  , Expand);
150   setOperationAction(ISD::CTLZ             , MVT::i32  , Expand);
151   setOperationAction(ISD::READCYCLECOUNTER , MVT::i64  , Custom);
152   setOperationAction(ISD::BSWAP            , MVT::i16  , Expand);
153
154   // These should be promoted to a larger select which is supported.
155   setOperationAction(ISD::SELECT           , MVT::i1   , Promote);
156   setOperationAction(ISD::SELECT           , MVT::i8   , Promote);
157
158   // X86 wants to expand cmov itself.
159   setOperationAction(ISD::SELECT          , MVT::i16  , Custom);
160   setOperationAction(ISD::SELECT          , MVT::i32  , Custom);
161   setOperationAction(ISD::SELECT          , MVT::f32  , Custom);
162   setOperationAction(ISD::SELECT          , MVT::f64  , Custom);
163   setOperationAction(ISD::SETCC           , MVT::i8   , Custom);
164   setOperationAction(ISD::SETCC           , MVT::i16  , Custom);
165   setOperationAction(ISD::SETCC           , MVT::i32  , Custom);
166   setOperationAction(ISD::SETCC           , MVT::f32  , Custom);
167   setOperationAction(ISD::SETCC           , MVT::f64  , Custom);
168   // X86 ret instruction may pop stack.
169   setOperationAction(ISD::RET             , MVT::Other, Custom);
170   // Darwin ABI issue.
171   setOperationAction(ISD::ConstantPool    , MVT::i32  , Custom);
172   setOperationAction(ISD::JumpTable       , MVT::i32  , Custom);
173   setOperationAction(ISD::GlobalAddress   , MVT::i32  , Custom);
174   setOperationAction(ISD::ExternalSymbol  , MVT::i32  , Custom);
175   // 64-bit addm sub, shl, sra, srl (iff 32-bit x86)
176   setOperationAction(ISD::SHL_PARTS       , MVT::i32  , Custom);
177   setOperationAction(ISD::SRA_PARTS       , MVT::i32  , Custom);
178   setOperationAction(ISD::SRL_PARTS       , MVT::i32  , Custom);
179   // X86 wants to expand memset / memcpy itself.
180   setOperationAction(ISD::MEMSET          , MVT::Other, Custom);
181   setOperationAction(ISD::MEMCPY          , MVT::Other, Custom);
182
183   // We don't have line number support yet.
184   setOperationAction(ISD::LOCATION, MVT::Other, Expand);
185   setOperationAction(ISD::DEBUG_LOC, MVT::Other, Expand);
186   // FIXME - use subtarget debug flags
187   if (!Subtarget->isTargetDarwin())
188     setOperationAction(ISD::DEBUG_LABEL, MVT::Other, Expand);
189
190   // VASTART needs to be custom lowered to use the VarArgsFrameIndex
191   setOperationAction(ISD::VASTART           , MVT::Other, Custom);
192   
193   // Use the default implementation.
194   setOperationAction(ISD::VAARG             , MVT::Other, Expand);
195   setOperationAction(ISD::VACOPY            , MVT::Other, Expand);
196   setOperationAction(ISD::VAEND             , MVT::Other, Expand);
197   setOperationAction(ISD::STACKSAVE,          MVT::Other, Expand); 
198   setOperationAction(ISD::STACKRESTORE,       MVT::Other, Expand);
199   setOperationAction(ISD::DYNAMIC_STACKALLOC, MVT::i32  , Expand);
200
201   setOperationAction(ISD::FCOPYSIGN, MVT::f64, Expand);
202   setOperationAction(ISD::FCOPYSIGN, MVT::f32, Expand);
203
204   if (X86ScalarSSE) {
205     // Set up the FP register classes.
206     addRegisterClass(MVT::f32, X86::FR32RegisterClass);
207     addRegisterClass(MVT::f64, X86::FR64RegisterClass);
208
209     // SSE has no load+extend ops
210     setOperationAction(ISD::EXTLOAD,  MVT::f32, Expand);
211     setOperationAction(ISD::ZEXTLOAD, MVT::f32, Expand);
212
213     // Use ANDPD to simulate FABS.
214     setOperationAction(ISD::FABS , MVT::f64, Custom);
215     setOperationAction(ISD::FABS , MVT::f32, Custom);
216
217     // Use XORP to simulate FNEG.
218     setOperationAction(ISD::FNEG , MVT::f64, Custom);
219     setOperationAction(ISD::FNEG , MVT::f32, Custom);
220
221     // We don't support sin/cos/fmod
222     setOperationAction(ISD::FSIN , MVT::f64, Expand);
223     setOperationAction(ISD::FCOS , MVT::f64, Expand);
224     setOperationAction(ISD::FREM , MVT::f64, Expand);
225     setOperationAction(ISD::FSIN , MVT::f32, Expand);
226     setOperationAction(ISD::FCOS , MVT::f32, Expand);
227     setOperationAction(ISD::FREM , MVT::f32, Expand);
228
229     // Expand FP immediates into loads from the stack, except for the special
230     // cases we handle.
231     setOperationAction(ISD::ConstantFP, MVT::f64, Expand);
232     setOperationAction(ISD::ConstantFP, MVT::f32, Expand);
233     addLegalFPImmediate(+0.0); // xorps / xorpd
234   } else {
235     // Set up the FP register classes.
236     addRegisterClass(MVT::f64, X86::RFPRegisterClass);
237     
238     setOperationAction(ISD::UNDEF, MVT::f64, Expand);
239     
240     if (!UnsafeFPMath) {
241       setOperationAction(ISD::FSIN           , MVT::f64  , Expand);
242       setOperationAction(ISD::FCOS           , MVT::f64  , Expand);
243     }
244
245     setOperationAction(ISD::ConstantFP, MVT::f64, Expand);
246     addLegalFPImmediate(+0.0); // FLD0
247     addLegalFPImmediate(+1.0); // FLD1
248     addLegalFPImmediate(-0.0); // FLD0/FCHS
249     addLegalFPImmediate(-1.0); // FLD1/FCHS
250   }
251
252   // First set operation action for all vector types to expand. Then we
253   // will selectively turn on ones that can be effectively codegen'd.
254   for (unsigned VT = (unsigned)MVT::Vector + 1;
255        VT != (unsigned)MVT::LAST_VALUETYPE; VT++) {
256     setOperationAction(ISD::ADD , (MVT::ValueType)VT, Expand);
257     setOperationAction(ISD::SUB , (MVT::ValueType)VT, Expand);
258     setOperationAction(ISD::MUL , (MVT::ValueType)VT, Expand);
259     setOperationAction(ISD::LOAD, (MVT::ValueType)VT, Expand);
260     setOperationAction(ISD::VECTOR_SHUFFLE,     (MVT::ValueType)VT, Expand);
261     setOperationAction(ISD::EXTRACT_VECTOR_ELT, (MVT::ValueType)VT, Expand);
262     setOperationAction(ISD::INSERT_VECTOR_ELT,  (MVT::ValueType)VT, Expand);
263   }
264
265   if (Subtarget->hasMMX()) {
266     addRegisterClass(MVT::v8i8,  X86::VR64RegisterClass);
267     addRegisterClass(MVT::v4i16, X86::VR64RegisterClass);
268     addRegisterClass(MVT::v2i32, X86::VR64RegisterClass);
269
270     // FIXME: add MMX packed arithmetics
271     setOperationAction(ISD::BUILD_VECTOR,     MVT::v8i8,  Expand);
272     setOperationAction(ISD::BUILD_VECTOR,     MVT::v4i16, Expand);
273     setOperationAction(ISD::BUILD_VECTOR,     MVT::v2i32, Expand);
274   }
275
276   if (Subtarget->hasSSE1()) {
277     addRegisterClass(MVT::v4f32, X86::VR128RegisterClass);
278
279     setOperationAction(ISD::AND,                MVT::v4f32, Legal);
280     setOperationAction(ISD::OR,                 MVT::v4f32, Legal);
281     setOperationAction(ISD::XOR,                MVT::v4f32, Legal);
282     setOperationAction(ISD::ADD,                MVT::v4f32, Legal);
283     setOperationAction(ISD::SUB,                MVT::v4f32, Legal);
284     setOperationAction(ISD::MUL,                MVT::v4f32, Legal);
285     setOperationAction(ISD::LOAD,               MVT::v4f32, Legal);
286     setOperationAction(ISD::BUILD_VECTOR,       MVT::v4f32, Custom);
287     setOperationAction(ISD::VECTOR_SHUFFLE,     MVT::v4f32, Custom);
288     setOperationAction(ISD::EXTRACT_VECTOR_ELT, MVT::v4f32, Custom);
289     setOperationAction(ISD::SELECT,             MVT::v4f32, Custom);
290   }
291
292   if (Subtarget->hasSSE2()) {
293     addRegisterClass(MVT::v2f64, X86::VR128RegisterClass);
294     addRegisterClass(MVT::v16i8, X86::VR128RegisterClass);
295     addRegisterClass(MVT::v8i16, X86::VR128RegisterClass);
296     addRegisterClass(MVT::v4i32, X86::VR128RegisterClass);
297     addRegisterClass(MVT::v2i64, X86::VR128RegisterClass);
298
299     setOperationAction(ISD::ADD,                MVT::v2f64, Legal);
300     setOperationAction(ISD::ADD,                MVT::v16i8, Legal);
301     setOperationAction(ISD::ADD,                MVT::v8i16, Legal);
302     setOperationAction(ISD::ADD,                MVT::v4i32, Legal);
303     setOperationAction(ISD::SUB,                MVT::v2f64, Legal);
304     setOperationAction(ISD::SUB,                MVT::v16i8, Legal);
305     setOperationAction(ISD::SUB,                MVT::v8i16, Legal);
306     setOperationAction(ISD::SUB,                MVT::v4i32, Legal);
307     setOperationAction(ISD::MUL,                MVT::v8i16, Legal);
308     setOperationAction(ISD::MUL,                MVT::v2f64, Legal);
309
310     setOperationAction(ISD::SCALAR_TO_VECTOR,   MVT::v16i8, Custom);
311     setOperationAction(ISD::SCALAR_TO_VECTOR,   MVT::v8i16, Custom);
312     setOperationAction(ISD::INSERT_VECTOR_ELT,  MVT::v8i16, Custom);
313     setOperationAction(ISD::INSERT_VECTOR_ELT,  MVT::v4i32, Custom);
314     // Implement v4f32 insert_vector_elt in terms of SSE2 v8i16 ones.
315     setOperationAction(ISD::INSERT_VECTOR_ELT,  MVT::v4f32, Custom);
316
317     // Custom lower build_vector, vector_shuffle, and extract_vector_elt.
318     for (unsigned VT = (unsigned)MVT::v16i8; VT != (unsigned)MVT::v2i64; VT++) {
319       setOperationAction(ISD::BUILD_VECTOR,        (MVT::ValueType)VT, Custom);
320       setOperationAction(ISD::VECTOR_SHUFFLE,      (MVT::ValueType)VT, Custom);
321       setOperationAction(ISD::EXTRACT_VECTOR_ELT,  (MVT::ValueType)VT, Custom);
322     }
323     setOperationAction(ISD::BUILD_VECTOR,       MVT::v2f64, Custom);
324     setOperationAction(ISD::BUILD_VECTOR,       MVT::v2i64, Custom);
325     setOperationAction(ISD::VECTOR_SHUFFLE,     MVT::v2f64, Custom);
326     setOperationAction(ISD::VECTOR_SHUFFLE,     MVT::v2i64, Custom);
327     setOperationAction(ISD::EXTRACT_VECTOR_ELT, MVT::v2f64, Custom);
328     setOperationAction(ISD::EXTRACT_VECTOR_ELT, MVT::v2i64, Custom);
329
330     // Promote v16i8, v8i16, v4i32 load, select, and, or, xor to v2i64. 
331     for (unsigned VT = (unsigned)MVT::v16i8; VT != (unsigned)MVT::v2i64; VT++) {
332       setOperationAction(ISD::AND,    (MVT::ValueType)VT, Promote);
333       AddPromotedToType (ISD::AND,    (MVT::ValueType)VT, MVT::v2i64);
334       setOperationAction(ISD::OR,     (MVT::ValueType)VT, Promote);
335       AddPromotedToType (ISD::OR,     (MVT::ValueType)VT, MVT::v2i64);
336       setOperationAction(ISD::XOR,    (MVT::ValueType)VT, Promote);
337       AddPromotedToType (ISD::XOR,    (MVT::ValueType)VT, MVT::v2i64);
338       setOperationAction(ISD::LOAD,   (MVT::ValueType)VT, Promote);
339       AddPromotedToType (ISD::LOAD,   (MVT::ValueType)VT, MVT::v2i64);
340       setOperationAction(ISD::SELECT, (MVT::ValueType)VT, Promote);
341       AddPromotedToType (ISD::SELECT, (MVT::ValueType)VT, MVT::v2i64);
342     }
343
344     // Custom lower v2i64 and v2f64 selects.
345     setOperationAction(ISD::LOAD,               MVT::v2f64, Legal);
346     setOperationAction(ISD::LOAD,               MVT::v2i64, Legal);
347     setOperationAction(ISD::SELECT,             MVT::v2f64, Custom);
348     setOperationAction(ISD::SELECT,             MVT::v2i64, Custom);
349   }
350
351   // We want to custom lower some of our intrinsics.
352   setOperationAction(ISD::INTRINSIC_WO_CHAIN, MVT::Other, Custom);
353
354   computeRegisterProperties();
355
356   // FIXME: These should be based on subtarget info. Plus, the values should
357   // be smaller when we are in optimizing for size mode.
358   maxStoresPerMemset = 16; // For %llvm.memset -> sequence of stores
359   maxStoresPerMemcpy = 16; // For %llvm.memcpy -> sequence of stores
360   maxStoresPerMemmove = 16; // For %llvm.memmove -> sequence of stores
361   allowUnalignedMemoryAccesses = true; // x86 supports it!
362 }
363
364 std::vector<SDOperand>
365 X86TargetLowering::LowerArguments(Function &F, SelectionDAG &DAG) {
366   if (F.getCallingConv() == CallingConv::Fast && EnableFastCC)
367     return LowerFastCCArguments(F, DAG);
368   return LowerCCCArguments(F, DAG);
369 }
370
371 std::pair<SDOperand, SDOperand>
372 X86TargetLowering::LowerCallTo(SDOperand Chain, const Type *RetTy,
373                                bool isVarArg, unsigned CallingConv,
374                                bool isTailCall,
375                                SDOperand Callee, ArgListTy &Args,
376                                SelectionDAG &DAG) {
377   assert((!isVarArg || CallingConv == CallingConv::C) &&
378          "Only C takes varargs!");
379
380   // If the callee is a GlobalAddress node (quite common, every direct call is)
381   // turn it into a TargetGlobalAddress node so that legalize doesn't hack it.
382   if (GlobalAddressSDNode *G = dyn_cast<GlobalAddressSDNode>(Callee))
383     Callee = DAG.getTargetGlobalAddress(G->getGlobal(), getPointerTy());
384   else if (ExternalSymbolSDNode *S = dyn_cast<ExternalSymbolSDNode>(Callee))
385     Callee = DAG.getTargetExternalSymbol(S->getSymbol(), getPointerTy());
386
387   if (CallingConv == CallingConv::Fast && EnableFastCC)
388     return LowerFastCCCallTo(Chain, RetTy, isTailCall, Callee, Args, DAG);
389   return  LowerCCCCallTo(Chain, RetTy, isVarArg, isTailCall, Callee, Args, DAG);
390 }
391
392 //===----------------------------------------------------------------------===//
393 //                    C Calling Convention implementation
394 //===----------------------------------------------------------------------===//
395
396 std::vector<SDOperand>
397 X86TargetLowering::LowerCCCArguments(Function &F, SelectionDAG &DAG) {
398   std::vector<SDOperand> ArgValues;
399
400   MachineFunction &MF = DAG.getMachineFunction();
401   MachineFrameInfo *MFI = MF.getFrameInfo();
402
403   // Add DAG nodes to load the arguments...  On entry to a function on the X86,
404   // the stack frame looks like this:
405   //
406   // [ESP] -- return address
407   // [ESP + 4] -- first argument (leftmost lexically)
408   // [ESP + 8] -- second argument, if first argument is four bytes in size
409   //    ...
410   //
411   unsigned ArgOffset = 0;   // Frame mechanisms handle retaddr slot
412   for (Function::arg_iterator I = F.arg_begin(), E = F.arg_end(); I != E; ++I) {
413     MVT::ValueType ObjectVT = getValueType(I->getType());
414     unsigned ArgIncrement = 4;
415     unsigned ObjSize;
416     switch (ObjectVT) {
417     default: assert(0 && "Unhandled argument type!");
418     case MVT::i1:
419     case MVT::i8:  ObjSize = 1;                break;
420     case MVT::i16: ObjSize = 2;                break;
421     case MVT::i32: ObjSize = 4;                break;
422     case MVT::i64: ObjSize = ArgIncrement = 8; break;
423     case MVT::f32: ObjSize = 4;                break;
424     case MVT::f64: ObjSize = ArgIncrement = 8; break;
425     }
426     // Create the frame index object for this incoming parameter...
427     int FI = MFI->CreateFixedObject(ObjSize, ArgOffset);
428
429     // Create the SelectionDAG nodes corresponding to a load from this parameter
430     SDOperand FIN = DAG.getFrameIndex(FI, MVT::i32);
431
432     // Don't codegen dead arguments.  FIXME: remove this check when we can nuke
433     // dead loads.
434     SDOperand ArgValue;
435     if (!I->use_empty())
436       ArgValue = DAG.getLoad(ObjectVT, DAG.getEntryNode(), FIN,
437                              DAG.getSrcValue(NULL));
438     else {
439       if (MVT::isInteger(ObjectVT))
440         ArgValue = DAG.getConstant(0, ObjectVT);
441       else
442         ArgValue = DAG.getConstantFP(0, ObjectVT);
443     }
444     ArgValues.push_back(ArgValue);
445
446     ArgOffset += ArgIncrement;   // Move on to the next argument...
447   }
448
449   // If the function takes variable number of arguments, make a frame index for
450   // the start of the first vararg value... for expansion of llvm.va_start.
451   if (F.isVarArg())
452     VarArgsFrameIndex = MFI->CreateFixedObject(1, ArgOffset);
453   ReturnAddrIndex = 0;     // No return address slot generated yet.
454   BytesToPopOnReturn = 0;  // Callee pops nothing.
455   BytesCallerReserves = ArgOffset;
456   return ArgValues;
457 }
458
459 std::pair<SDOperand, SDOperand>
460 X86TargetLowering::LowerCCCCallTo(SDOperand Chain, const Type *RetTy,
461                                   bool isVarArg, bool isTailCall,
462                                   SDOperand Callee, ArgListTy &Args,
463                                   SelectionDAG &DAG) {
464   // Count how many bytes are to be pushed on the stack.
465   unsigned NumBytes = 0;
466
467   if (Args.empty()) {
468     // Save zero bytes.
469     Chain = DAG.getCALLSEQ_START(Chain, DAG.getConstant(0, getPointerTy()));
470   } else {
471     for (unsigned i = 0, e = Args.size(); i != e; ++i)
472       switch (getValueType(Args[i].second)) {
473       default: assert(0 && "Unknown value type!");
474       case MVT::i1:
475       case MVT::i8:
476       case MVT::i16:
477       case MVT::i32:
478       case MVT::f32:
479         NumBytes += 4;
480         break;
481       case MVT::i64:
482       case MVT::f64:
483         NumBytes += 8;
484         break;
485       }
486
487     Chain = DAG.getCALLSEQ_START(Chain,
488                                  DAG.getConstant(NumBytes, getPointerTy()));
489
490     // Arguments go on the stack in reverse order, as specified by the ABI.
491     unsigned ArgOffset = 0;
492     SDOperand StackPtr = DAG.getRegister(X86::ESP, MVT::i32);
493     std::vector<SDOperand> Stores;
494
495     for (unsigned i = 0, e = Args.size(); i != e; ++i) {
496       SDOperand PtrOff = DAG.getConstant(ArgOffset, getPointerTy());
497       PtrOff = DAG.getNode(ISD::ADD, MVT::i32, StackPtr, PtrOff);
498
499       switch (getValueType(Args[i].second)) {
500       default: assert(0 && "Unexpected ValueType for argument!");
501       case MVT::i1:
502       case MVT::i8:
503       case MVT::i16:
504         // Promote the integer to 32 bits.  If the input type is signed use a
505         // sign extend, otherwise use a zero extend.
506         if (Args[i].second->isSigned())
507           Args[i].first =DAG.getNode(ISD::SIGN_EXTEND, MVT::i32, Args[i].first);
508         else
509           Args[i].first =DAG.getNode(ISD::ZERO_EXTEND, MVT::i32, Args[i].first);
510
511         // FALL THROUGH
512       case MVT::i32:
513       case MVT::f32:
514         Stores.push_back(DAG.getNode(ISD::STORE, MVT::Other, Chain,
515                                      Args[i].first, PtrOff,
516                                      DAG.getSrcValue(NULL)));
517         ArgOffset += 4;
518         break;
519       case MVT::i64:
520       case MVT::f64:
521         Stores.push_back(DAG.getNode(ISD::STORE, MVT::Other, Chain,
522                                      Args[i].first, PtrOff,
523                                      DAG.getSrcValue(NULL)));
524         ArgOffset += 8;
525         break;
526       }
527     }
528     Chain = DAG.getNode(ISD::TokenFactor, MVT::Other, Stores);
529   }
530
531   std::vector<MVT::ValueType> RetVals;
532   MVT::ValueType RetTyVT = getValueType(RetTy);
533   RetVals.push_back(MVT::Other);
534
535   // The result values produced have to be legal.  Promote the result.
536   switch (RetTyVT) {
537   case MVT::isVoid: break;
538   default:
539     RetVals.push_back(RetTyVT);
540     break;
541   case MVT::i1:
542   case MVT::i8:
543   case MVT::i16:
544     RetVals.push_back(MVT::i32);
545     break;
546   case MVT::f32:
547     if (X86ScalarSSE)
548       RetVals.push_back(MVT::f32);
549     else
550       RetVals.push_back(MVT::f64);
551     break;
552   case MVT::i64:
553     RetVals.push_back(MVT::i32);
554     RetVals.push_back(MVT::i32);
555     break;
556   }
557
558   std::vector<MVT::ValueType> NodeTys;
559   NodeTys.push_back(MVT::Other);   // Returns a chain
560   NodeTys.push_back(MVT::Flag);    // Returns a flag for retval copy to use.
561   std::vector<SDOperand> Ops;
562   Ops.push_back(Chain);
563   Ops.push_back(Callee);
564
565   // FIXME: Do not generate X86ISD::TAILCALL for now.
566   Chain = DAG.getNode(X86ISD::CALL, NodeTys, Ops);
567   SDOperand InFlag = Chain.getValue(1);
568
569   NodeTys.clear();
570   NodeTys.push_back(MVT::Other);   // Returns a chain
571   NodeTys.push_back(MVT::Flag);    // Returns a flag for retval copy to use.
572   Ops.clear();
573   Ops.push_back(Chain);
574   Ops.push_back(DAG.getConstant(NumBytes, getPointerTy()));
575   Ops.push_back(DAG.getConstant(0, getPointerTy()));
576   Ops.push_back(InFlag);
577   Chain = DAG.getNode(ISD::CALLSEQ_END, NodeTys, Ops);
578   InFlag = Chain.getValue(1);
579   
580   SDOperand RetVal;
581   if (RetTyVT != MVT::isVoid) {
582     switch (RetTyVT) {
583     default: assert(0 && "Unknown value type to return!");
584     case MVT::i1:
585     case MVT::i8:
586       RetVal = DAG.getCopyFromReg(Chain, X86::AL, MVT::i8, InFlag);
587       Chain = RetVal.getValue(1);
588       if (RetTyVT == MVT::i1) 
589         RetVal = DAG.getNode(ISD::TRUNCATE, MVT::i1, RetVal);
590       break;
591     case MVT::i16:
592       RetVal = DAG.getCopyFromReg(Chain, X86::AX, MVT::i16, InFlag);
593       Chain = RetVal.getValue(1);
594       break;
595     case MVT::i32:
596       RetVal = DAG.getCopyFromReg(Chain, X86::EAX, MVT::i32, InFlag);
597       Chain = RetVal.getValue(1);
598       break;
599     case MVT::i64: {
600       SDOperand Lo = DAG.getCopyFromReg(Chain, X86::EAX, MVT::i32, InFlag);
601       SDOperand Hi = DAG.getCopyFromReg(Lo.getValue(1), X86::EDX, MVT::i32, 
602                                         Lo.getValue(2));
603       RetVal = DAG.getNode(ISD::BUILD_PAIR, MVT::i64, Lo, Hi);
604       Chain = Hi.getValue(1);
605       break;
606     }
607     case MVT::f32:
608     case MVT::f64: {
609       std::vector<MVT::ValueType> Tys;
610       Tys.push_back(MVT::f64);
611       Tys.push_back(MVT::Other);
612       Tys.push_back(MVT::Flag);
613       std::vector<SDOperand> Ops;
614       Ops.push_back(Chain);
615       Ops.push_back(InFlag);
616       RetVal = DAG.getNode(X86ISD::FP_GET_RESULT, Tys, Ops);
617       Chain  = RetVal.getValue(1);
618       InFlag = RetVal.getValue(2);
619       if (X86ScalarSSE) {
620         // FIXME: Currently the FST is flagged to the FP_GET_RESULT. This
621         // shouldn't be necessary except that RFP cannot be live across
622         // multiple blocks. When stackifier is fixed, they can be uncoupled.
623         MachineFunction &MF = DAG.getMachineFunction();
624         int SSFI = MF.getFrameInfo()->CreateStackObject(8, 8);
625         SDOperand StackSlot = DAG.getFrameIndex(SSFI, getPointerTy());
626         Tys.clear();
627         Tys.push_back(MVT::Other);
628         Ops.clear();
629         Ops.push_back(Chain);
630         Ops.push_back(RetVal);
631         Ops.push_back(StackSlot);
632         Ops.push_back(DAG.getValueType(RetTyVT));
633         Ops.push_back(InFlag);
634         Chain = DAG.getNode(X86ISD::FST, Tys, Ops);
635         RetVal = DAG.getLoad(RetTyVT, Chain, StackSlot,
636                              DAG.getSrcValue(NULL));
637         Chain = RetVal.getValue(1);
638       }
639
640       if (RetTyVT == MVT::f32 && !X86ScalarSSE)
641         // FIXME: we would really like to remember that this FP_ROUND
642         // operation is okay to eliminate if we allow excess FP precision.
643         RetVal = DAG.getNode(ISD::FP_ROUND, MVT::f32, RetVal);
644       break;
645     }
646     }
647   }
648
649   return std::make_pair(RetVal, Chain);
650 }
651
652 //===----------------------------------------------------------------------===//
653 //                    Fast Calling Convention implementation
654 //===----------------------------------------------------------------------===//
655 //
656 // The X86 'fast' calling convention passes up to two integer arguments in
657 // registers (an appropriate portion of EAX/EDX), passes arguments in C order,
658 // and requires that the callee pop its arguments off the stack (allowing proper
659 // tail calls), and has the same return value conventions as C calling convs.
660 //
661 // This calling convention always arranges for the callee pop value to be 8n+4
662 // bytes, which is needed for tail recursion elimination and stack alignment
663 // reasons.
664 //
665 // Note that this can be enhanced in the future to pass fp vals in registers
666 // (when we have a global fp allocator) and do other tricks.
667 //
668
669 /// AddLiveIn - This helper function adds the specified physical register to the
670 /// MachineFunction as a live in value.  It also creates a corresponding virtual
671 /// register for it.
672 static unsigned AddLiveIn(MachineFunction &MF, unsigned PReg,
673                           TargetRegisterClass *RC) {
674   assert(RC->contains(PReg) && "Not the correct regclass!");
675   unsigned VReg = MF.getSSARegMap()->createVirtualRegister(RC);
676   MF.addLiveIn(PReg, VReg);
677   return VReg;
678 }
679
680 // FASTCC_NUM_INT_ARGS_INREGS - This is the max number of integer arguments
681 // to pass in registers.  0 is none, 1 is is "use EAX", 2 is "use EAX and
682 // EDX".  Anything more is illegal.
683 //
684 // FIXME: The linscan register allocator currently has problem with
685 // coalescing.  At the time of this writing, whenever it decides to coalesce
686 // a physreg with a virtreg, this increases the size of the physreg's live
687 // range, and the live range cannot ever be reduced.  This causes problems if
688 // too many physregs are coaleced with virtregs, which can cause the register
689 // allocator to wedge itself.
690 //
691 // This code triggers this problem more often if we pass args in registers,
692 // so disable it until this is fixed.
693 //
694 // NOTE: this isn't marked const, so that GCC doesn't emit annoying warnings
695 // about code being dead.
696 //
697 static unsigned FASTCC_NUM_INT_ARGS_INREGS = 0;
698
699
700 std::vector<SDOperand>
701 X86TargetLowering::LowerFastCCArguments(Function &F, SelectionDAG &DAG) {
702   std::vector<SDOperand> ArgValues;
703
704   MachineFunction &MF = DAG.getMachineFunction();
705   MachineFrameInfo *MFI = MF.getFrameInfo();
706
707   // Add DAG nodes to load the arguments...  On entry to a function the stack
708   // frame looks like this:
709   //
710   // [ESP] -- return address
711   // [ESP + 4] -- first nonreg argument (leftmost lexically)
712   // [ESP + 8] -- second nonreg argument, if first argument is 4 bytes in size
713   //    ...
714   unsigned ArgOffset = 0;   // Frame mechanisms handle retaddr slot
715
716   // Keep track of the number of integer regs passed so far.  This can be either
717   // 0 (neither EAX or EDX used), 1 (EAX is used) or 2 (EAX and EDX are both
718   // used).
719   unsigned NumIntRegs = 0;
720   
721   for (Function::arg_iterator I = F.arg_begin(), E = F.arg_end(); I != E; ++I) {
722     MVT::ValueType ObjectVT = getValueType(I->getType());
723     unsigned ArgIncrement = 4;
724     unsigned ObjSize = 0;
725     SDOperand ArgValue;
726
727     switch (ObjectVT) {
728     default: assert(0 && "Unhandled argument type!");
729     case MVT::i1:
730     case MVT::i8:
731       if (NumIntRegs < FASTCC_NUM_INT_ARGS_INREGS) {
732         if (!I->use_empty()) {
733           unsigned VReg = AddLiveIn(MF, NumIntRegs ? X86::DL : X86::AL,
734                                     X86::R8RegisterClass);
735           ArgValue = DAG.getCopyFromReg(DAG.getRoot(), VReg, MVT::i8);
736           DAG.setRoot(ArgValue.getValue(1));
737           if (ObjectVT == MVT::i1)
738             // FIXME: Should insert a assertzext here.
739             ArgValue = DAG.getNode(ISD::TRUNCATE, MVT::i1, ArgValue);
740         }
741         ++NumIntRegs;
742         break;
743       }
744
745       ObjSize = 1;
746       break;
747     case MVT::i16:
748       if (NumIntRegs < FASTCC_NUM_INT_ARGS_INREGS) {
749         if (!I->use_empty()) {
750           unsigned VReg = AddLiveIn(MF, NumIntRegs ? X86::DX : X86::AX,
751                                     X86::R16RegisterClass);
752           ArgValue = DAG.getCopyFromReg(DAG.getRoot(), VReg, MVT::i16);
753           DAG.setRoot(ArgValue.getValue(1));
754         }
755         ++NumIntRegs;
756         break;
757       }
758       ObjSize = 2;
759       break;
760     case MVT::i32:
761       if (NumIntRegs < FASTCC_NUM_INT_ARGS_INREGS) {
762         if (!I->use_empty()) {
763           unsigned VReg = AddLiveIn(MF, NumIntRegs ? X86::EDX : X86::EAX,
764                                     X86::R32RegisterClass);
765           ArgValue = DAG.getCopyFromReg(DAG.getRoot(), VReg, MVT::i32);
766           DAG.setRoot(ArgValue.getValue(1));
767         }
768         ++NumIntRegs;
769         break;
770       }
771       ObjSize = 4;
772       break;
773     case MVT::i64:
774       if (NumIntRegs+2 <= FASTCC_NUM_INT_ARGS_INREGS) {
775         if (!I->use_empty()) {
776           unsigned BotReg = AddLiveIn(MF, X86::EAX, X86::R32RegisterClass);
777           unsigned TopReg = AddLiveIn(MF, X86::EDX, X86::R32RegisterClass);
778
779           SDOperand Low = DAG.getCopyFromReg(DAG.getRoot(), BotReg, MVT::i32);
780           SDOperand Hi  = DAG.getCopyFromReg(Low.getValue(1), TopReg, MVT::i32);
781           DAG.setRoot(Hi.getValue(1));
782
783           ArgValue = DAG.getNode(ISD::BUILD_PAIR, MVT::i64, Low, Hi);
784         }
785         NumIntRegs += 2;
786         break;
787       } else if (NumIntRegs+1 <= FASTCC_NUM_INT_ARGS_INREGS) {
788         if (!I->use_empty()) {
789           unsigned BotReg = AddLiveIn(MF, X86::EDX, X86::R32RegisterClass);
790           SDOperand Low = DAG.getCopyFromReg(DAG.getRoot(), BotReg, MVT::i32);
791           DAG.setRoot(Low.getValue(1));
792
793           // Load the high part from memory.
794           // Create the frame index object for this incoming parameter...
795           int FI = MFI->CreateFixedObject(4, ArgOffset);
796           SDOperand FIN = DAG.getFrameIndex(FI, MVT::i32);
797           SDOperand Hi = DAG.getLoad(MVT::i32, DAG.getEntryNode(), FIN,
798                                      DAG.getSrcValue(NULL));
799           ArgValue = DAG.getNode(ISD::BUILD_PAIR, MVT::i64, Low, Hi);
800         }
801         ArgOffset += 4;
802         NumIntRegs = FASTCC_NUM_INT_ARGS_INREGS;
803         break;
804       }
805       ObjSize = ArgIncrement = 8;
806       break;
807     case MVT::f32: ObjSize = 4;                break;
808     case MVT::f64: ObjSize = ArgIncrement = 8; break;
809     }
810
811     // Don't codegen dead arguments.  FIXME: remove this check when we can nuke
812     // dead loads.
813     if (ObjSize && !I->use_empty()) {
814       // Create the frame index object for this incoming parameter...
815       int FI = MFI->CreateFixedObject(ObjSize, ArgOffset);
816
817       // Create the SelectionDAG nodes corresponding to a load from this
818       // parameter.
819       SDOperand FIN = DAG.getFrameIndex(FI, MVT::i32);
820
821       ArgValue = DAG.getLoad(ObjectVT, DAG.getEntryNode(), FIN,
822                              DAG.getSrcValue(NULL));
823     } else if (ArgValue.Val == 0) {
824       if (MVT::isInteger(ObjectVT))
825         ArgValue = DAG.getConstant(0, ObjectVT);
826       else
827         ArgValue = DAG.getConstantFP(0, ObjectVT);
828     }
829     ArgValues.push_back(ArgValue);
830
831     if (ObjSize)
832       ArgOffset += ArgIncrement;   // Move on to the next argument.
833   }
834
835   // Make sure the instruction takes 8n+4 bytes to make sure the start of the
836   // arguments and the arguments after the retaddr has been pushed are aligned.
837   if ((ArgOffset & 7) == 0)
838     ArgOffset += 4;
839
840   VarArgsFrameIndex = 0xAAAAAAA;   // fastcc functions can't have varargs.
841   ReturnAddrIndex = 0;             // No return address slot generated yet.
842   BytesToPopOnReturn = ArgOffset;  // Callee pops all stack arguments.
843   BytesCallerReserves = 0;
844
845   // Finally, inform the code generator which regs we return values in.
846   switch (getValueType(F.getReturnType())) {
847   default: assert(0 && "Unknown type!");
848   case MVT::isVoid: break;
849   case MVT::i1:
850   case MVT::i8:
851   case MVT::i16:
852   case MVT::i32:
853     MF.addLiveOut(X86::EAX);
854     break;
855   case MVT::i64:
856     MF.addLiveOut(X86::EAX);
857     MF.addLiveOut(X86::EDX);
858     break;
859   case MVT::f32:
860   case MVT::f64:
861     MF.addLiveOut(X86::ST0);
862     break;
863   }
864   return ArgValues;
865 }
866
867 std::pair<SDOperand, SDOperand>
868 X86TargetLowering::LowerFastCCCallTo(SDOperand Chain, const Type *RetTy,
869                                      bool isTailCall, SDOperand Callee,
870                                      ArgListTy &Args, SelectionDAG &DAG) {
871   // Count how many bytes are to be pushed on the stack.
872   unsigned NumBytes = 0;
873
874   // Keep track of the number of integer regs passed so far.  This can be either
875   // 0 (neither EAX or EDX used), 1 (EAX is used) or 2 (EAX and EDX are both
876   // used).
877   unsigned NumIntRegs = 0;
878
879   for (unsigned i = 0, e = Args.size(); i != e; ++i)
880     switch (getValueType(Args[i].second)) {
881     default: assert(0 && "Unknown value type!");
882     case MVT::i1:
883     case MVT::i8:
884     case MVT::i16:
885     case MVT::i32:
886       if (NumIntRegs < FASTCC_NUM_INT_ARGS_INREGS) {
887         ++NumIntRegs;
888         break;
889       }
890       // fall through
891     case MVT::f32:
892       NumBytes += 4;
893       break;
894     case MVT::i64:
895       if (NumIntRegs+2 <= FASTCC_NUM_INT_ARGS_INREGS) {
896         NumIntRegs += 2;
897         break;
898       } else if (NumIntRegs+1 <= FASTCC_NUM_INT_ARGS_INREGS) {
899         NumIntRegs = FASTCC_NUM_INT_ARGS_INREGS;
900         NumBytes += 4;
901         break;
902       }
903
904       // fall through
905     case MVT::f64:
906       NumBytes += 8;
907       break;
908     }
909
910   // Make sure the instruction takes 8n+4 bytes to make sure the start of the
911   // arguments and the arguments after the retaddr has been pushed are aligned.
912   if ((NumBytes & 7) == 0)
913     NumBytes += 4;
914
915   Chain = DAG.getCALLSEQ_START(Chain,DAG.getConstant(NumBytes, getPointerTy()));
916
917   // Arguments go on the stack in reverse order, as specified by the ABI.
918   unsigned ArgOffset = 0;
919   SDOperand StackPtr = DAG.getRegister(X86::ESP, MVT::i32);
920   NumIntRegs = 0;
921   std::vector<SDOperand> Stores;
922   std::vector<SDOperand> RegValuesToPass;
923   for (unsigned i = 0, e = Args.size(); i != e; ++i) {
924     switch (getValueType(Args[i].second)) {
925     default: assert(0 && "Unexpected ValueType for argument!");
926     case MVT::i1:
927       Args[i].first = DAG.getNode(ISD::ANY_EXTEND, MVT::i8, Args[i].first);
928       // Fall through.
929     case MVT::i8:
930     case MVT::i16:
931     case MVT::i32:
932       if (NumIntRegs < FASTCC_NUM_INT_ARGS_INREGS) {
933         RegValuesToPass.push_back(Args[i].first);
934         ++NumIntRegs;
935         break;
936       }
937       // Fall through
938     case MVT::f32: {
939       SDOperand PtrOff = DAG.getConstant(ArgOffset, getPointerTy());
940       PtrOff = DAG.getNode(ISD::ADD, MVT::i32, StackPtr, PtrOff);
941       Stores.push_back(DAG.getNode(ISD::STORE, MVT::Other, Chain,
942                                    Args[i].first, PtrOff,
943                                    DAG.getSrcValue(NULL)));
944       ArgOffset += 4;
945       break;
946     }
947     case MVT::i64:
948        // Can pass (at least) part of it in regs?
949       if (NumIntRegs < FASTCC_NUM_INT_ARGS_INREGS) {
950         SDOperand Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, MVT::i32,
951                                    Args[i].first, DAG.getConstant(1, MVT::i32));
952         SDOperand Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, MVT::i32,
953                                    Args[i].first, DAG.getConstant(0, MVT::i32));
954         RegValuesToPass.push_back(Lo);
955         ++NumIntRegs;
956         
957         // Pass both parts in regs?
958         if (NumIntRegs < FASTCC_NUM_INT_ARGS_INREGS) {
959           RegValuesToPass.push_back(Hi);
960           ++NumIntRegs;
961         } else {
962           // Pass the high part in memory.
963           SDOperand PtrOff = DAG.getConstant(ArgOffset, getPointerTy());
964           PtrOff = DAG.getNode(ISD::ADD, MVT::i32, StackPtr, PtrOff);
965           Stores.push_back(DAG.getNode(ISD::STORE, MVT::Other, Chain,
966                                        Hi, PtrOff, DAG.getSrcValue(NULL)));
967           ArgOffset += 4;
968         }
969         break;
970       }
971       // Fall through
972     case MVT::f64:
973       SDOperand PtrOff = DAG.getConstant(ArgOffset, getPointerTy());
974       PtrOff = DAG.getNode(ISD::ADD, MVT::i32, StackPtr, PtrOff);
975       Stores.push_back(DAG.getNode(ISD::STORE, MVT::Other, Chain,
976                                    Args[i].first, PtrOff,
977                                    DAG.getSrcValue(NULL)));
978       ArgOffset += 8;
979       break;
980     }
981   }
982   if (!Stores.empty())
983     Chain = DAG.getNode(ISD::TokenFactor, MVT::Other, Stores);
984
985   // Make sure the instruction takes 8n+4 bytes to make sure the start of the
986   // arguments and the arguments after the retaddr has been pushed are aligned.
987   if ((ArgOffset & 7) == 0)
988     ArgOffset += 4;
989
990   std::vector<MVT::ValueType> RetVals;
991   MVT::ValueType RetTyVT = getValueType(RetTy);
992
993   RetVals.push_back(MVT::Other);
994
995   // The result values produced have to be legal.  Promote the result.
996   switch (RetTyVT) {
997   case MVT::isVoid: break;
998   default:
999     RetVals.push_back(RetTyVT);
1000     break;
1001   case MVT::i1:
1002   case MVT::i8:
1003   case MVT::i16:
1004     RetVals.push_back(MVT::i32);
1005     break;
1006   case MVT::f32:
1007     if (X86ScalarSSE)
1008       RetVals.push_back(MVT::f32);
1009     else
1010       RetVals.push_back(MVT::f64);
1011     break;
1012   case MVT::i64:
1013     RetVals.push_back(MVT::i32);
1014     RetVals.push_back(MVT::i32);
1015     break;
1016   }
1017
1018   // Build a sequence of copy-to-reg nodes chained together with token chain
1019   // and flag operands which copy the outgoing args into registers.
1020   SDOperand InFlag;
1021   for (unsigned i = 0, e = RegValuesToPass.size(); i != e; ++i) {
1022     unsigned CCReg;
1023     SDOperand RegToPass = RegValuesToPass[i];
1024     switch (RegToPass.getValueType()) {
1025     default: assert(0 && "Bad thing to pass in regs");
1026     case MVT::i8:
1027       CCReg = (i == 0) ? X86::AL  : X86::DL;
1028       break;
1029     case MVT::i16:
1030       CCReg = (i == 0) ? X86::AX  : X86::DX;
1031       break;
1032     case MVT::i32:
1033       CCReg = (i == 0) ? X86::EAX : X86::EDX;
1034       break;
1035     }
1036
1037     Chain = DAG.getCopyToReg(Chain, CCReg, RegToPass, InFlag);
1038     InFlag = Chain.getValue(1);
1039   }
1040
1041   std::vector<MVT::ValueType> NodeTys;
1042   NodeTys.push_back(MVT::Other);   // Returns a chain
1043   NodeTys.push_back(MVT::Flag);    // Returns a flag for retval copy to use.
1044   std::vector<SDOperand> Ops;
1045   Ops.push_back(Chain);
1046   Ops.push_back(Callee);
1047   if (InFlag.Val)
1048     Ops.push_back(InFlag);
1049
1050   // FIXME: Do not generate X86ISD::TAILCALL for now.
1051   Chain = DAG.getNode(X86ISD::CALL, NodeTys, Ops);
1052   InFlag = Chain.getValue(1);
1053
1054   NodeTys.clear();
1055   NodeTys.push_back(MVT::Other);   // Returns a chain
1056   NodeTys.push_back(MVT::Flag);    // Returns a flag for retval copy to use.
1057   Ops.clear();
1058   Ops.push_back(Chain);
1059   Ops.push_back(DAG.getConstant(ArgOffset, getPointerTy()));
1060   Ops.push_back(DAG.getConstant(ArgOffset, getPointerTy()));
1061   Ops.push_back(InFlag);
1062   Chain = DAG.getNode(ISD::CALLSEQ_END, NodeTys, Ops);
1063   InFlag = Chain.getValue(1);
1064   
1065   SDOperand RetVal;
1066   if (RetTyVT != MVT::isVoid) {
1067     switch (RetTyVT) {
1068     default: assert(0 && "Unknown value type to return!");
1069     case MVT::i1:
1070     case MVT::i8:
1071       RetVal = DAG.getCopyFromReg(Chain, X86::AL, MVT::i8, InFlag);
1072       Chain = RetVal.getValue(1);
1073       if (RetTyVT == MVT::i1) 
1074         RetVal = DAG.getNode(ISD::TRUNCATE, MVT::i1, RetVal);
1075       break;
1076     case MVT::i16:
1077       RetVal = DAG.getCopyFromReg(Chain, X86::AX, MVT::i16, InFlag);
1078       Chain = RetVal.getValue(1);
1079       break;
1080     case MVT::i32:
1081       RetVal = DAG.getCopyFromReg(Chain, X86::EAX, MVT::i32, InFlag);
1082       Chain = RetVal.getValue(1);
1083       break;
1084     case MVT::i64: {
1085       SDOperand Lo = DAG.getCopyFromReg(Chain, X86::EAX, MVT::i32, InFlag);
1086       SDOperand Hi = DAG.getCopyFromReg(Lo.getValue(1), X86::EDX, MVT::i32, 
1087                                         Lo.getValue(2));
1088       RetVal = DAG.getNode(ISD::BUILD_PAIR, MVT::i64, Lo, Hi);
1089       Chain = Hi.getValue(1);
1090       break;
1091     }
1092     case MVT::f32:
1093     case MVT::f64: {
1094       std::vector<MVT::ValueType> Tys;
1095       Tys.push_back(MVT::f64);
1096       Tys.push_back(MVT::Other);
1097       Tys.push_back(MVT::Flag);
1098       std::vector<SDOperand> Ops;
1099       Ops.push_back(Chain);
1100       Ops.push_back(InFlag);
1101       RetVal = DAG.getNode(X86ISD::FP_GET_RESULT, Tys, Ops);
1102       Chain  = RetVal.getValue(1);
1103       InFlag = RetVal.getValue(2);
1104       if (X86ScalarSSE) {
1105         // FIXME: Currently the FST is flagged to the FP_GET_RESULT. This
1106         // shouldn't be necessary except that RFP cannot be live across
1107         // multiple blocks. When stackifier is fixed, they can be uncoupled.
1108         MachineFunction &MF = DAG.getMachineFunction();
1109         int SSFI = MF.getFrameInfo()->CreateStackObject(8, 8);
1110         SDOperand StackSlot = DAG.getFrameIndex(SSFI, getPointerTy());
1111         Tys.clear();
1112         Tys.push_back(MVT::Other);
1113         Ops.clear();
1114         Ops.push_back(Chain);
1115         Ops.push_back(RetVal);
1116         Ops.push_back(StackSlot);
1117         Ops.push_back(DAG.getValueType(RetTyVT));
1118         Ops.push_back(InFlag);
1119         Chain = DAG.getNode(X86ISD::FST, Tys, Ops);
1120         RetVal = DAG.getLoad(RetTyVT, Chain, StackSlot,
1121                              DAG.getSrcValue(NULL));
1122         Chain = RetVal.getValue(1);
1123       }
1124
1125       if (RetTyVT == MVT::f32 && !X86ScalarSSE)
1126         // FIXME: we would really like to remember that this FP_ROUND
1127         // operation is okay to eliminate if we allow excess FP precision.
1128         RetVal = DAG.getNode(ISD::FP_ROUND, MVT::f32, RetVal);
1129       break;
1130     }
1131     }
1132   }
1133
1134   return std::make_pair(RetVal, Chain);
1135 }
1136
1137 SDOperand X86TargetLowering::getReturnAddressFrameIndex(SelectionDAG &DAG) {
1138   if (ReturnAddrIndex == 0) {
1139     // Set up a frame object for the return address.
1140     MachineFunction &MF = DAG.getMachineFunction();
1141     ReturnAddrIndex = MF.getFrameInfo()->CreateFixedObject(4, -4);
1142   }
1143
1144   return DAG.getFrameIndex(ReturnAddrIndex, MVT::i32);
1145 }
1146
1147
1148
1149 std::pair<SDOperand, SDOperand> X86TargetLowering::
1150 LowerFrameReturnAddress(bool isFrameAddress, SDOperand Chain, unsigned Depth,
1151                         SelectionDAG &DAG) {
1152   SDOperand Result;
1153   if (Depth)        // Depths > 0 not supported yet!
1154     Result = DAG.getConstant(0, getPointerTy());
1155   else {
1156     SDOperand RetAddrFI = getReturnAddressFrameIndex(DAG);
1157     if (!isFrameAddress)
1158       // Just load the return address
1159       Result = DAG.getLoad(MVT::i32, DAG.getEntryNode(), RetAddrFI,
1160                            DAG.getSrcValue(NULL));
1161     else
1162       Result = DAG.getNode(ISD::SUB, MVT::i32, RetAddrFI,
1163                            DAG.getConstant(4, MVT::i32));
1164   }
1165   return std::make_pair(Result, Chain);
1166 }
1167
1168 /// getCondBrOpcodeForX86CC - Returns the X86 conditional branch opcode
1169 /// which corresponds to the condition code.
1170 static unsigned getCondBrOpcodeForX86CC(unsigned X86CC) {
1171   switch (X86CC) {
1172   default: assert(0 && "Unknown X86 conditional code!");
1173   case X86ISD::COND_A:  return X86::JA;
1174   case X86ISD::COND_AE: return X86::JAE;
1175   case X86ISD::COND_B:  return X86::JB;
1176   case X86ISD::COND_BE: return X86::JBE;
1177   case X86ISD::COND_E:  return X86::JE;
1178   case X86ISD::COND_G:  return X86::JG;
1179   case X86ISD::COND_GE: return X86::JGE;
1180   case X86ISD::COND_L:  return X86::JL;
1181   case X86ISD::COND_LE: return X86::JLE;
1182   case X86ISD::COND_NE: return X86::JNE;
1183   case X86ISD::COND_NO: return X86::JNO;
1184   case X86ISD::COND_NP: return X86::JNP;
1185   case X86ISD::COND_NS: return X86::JNS;
1186   case X86ISD::COND_O:  return X86::JO;
1187   case X86ISD::COND_P:  return X86::JP;
1188   case X86ISD::COND_S:  return X86::JS;
1189   }
1190 }
1191
1192 /// translateX86CC - do a one to one translation of a ISD::CondCode to the X86
1193 /// specific condition code. It returns a false if it cannot do a direct
1194 /// translation. X86CC is the translated CondCode. Flip is set to true if the
1195 /// the order of comparison operands should be flipped.
1196 static bool translateX86CC(ISD::CondCode SetCCOpcode, bool isFP,
1197                            unsigned &X86CC, bool &Flip) {
1198   Flip = false;
1199   X86CC = X86ISD::COND_INVALID;
1200   if (!isFP) {
1201     switch (SetCCOpcode) {
1202     default: break;
1203     case ISD::SETEQ:  X86CC = X86ISD::COND_E;  break;
1204     case ISD::SETGT:  X86CC = X86ISD::COND_G;  break;
1205     case ISD::SETGE:  X86CC = X86ISD::COND_GE; break;
1206     case ISD::SETLT:  X86CC = X86ISD::COND_L;  break;
1207     case ISD::SETLE:  X86CC = X86ISD::COND_LE; break;
1208     case ISD::SETNE:  X86CC = X86ISD::COND_NE; break;
1209     case ISD::SETULT: X86CC = X86ISD::COND_B;  break;
1210     case ISD::SETUGT: X86CC = X86ISD::COND_A;  break;
1211     case ISD::SETULE: X86CC = X86ISD::COND_BE; break;
1212     case ISD::SETUGE: X86CC = X86ISD::COND_AE; break;
1213     }
1214   } else {
1215     // On a floating point condition, the flags are set as follows:
1216     // ZF  PF  CF   op
1217     //  0 | 0 | 0 | X > Y
1218     //  0 | 0 | 1 | X < Y
1219     //  1 | 0 | 0 | X == Y
1220     //  1 | 1 | 1 | unordered
1221     switch (SetCCOpcode) {
1222     default: break;
1223     case ISD::SETUEQ:
1224     case ISD::SETEQ: X86CC = X86ISD::COND_E;  break;
1225     case ISD::SETOLT: Flip = true; // Fallthrough
1226     case ISD::SETOGT:
1227     case ISD::SETGT: X86CC = X86ISD::COND_A;  break;
1228     case ISD::SETOLE: Flip = true; // Fallthrough
1229     case ISD::SETOGE:
1230     case ISD::SETGE: X86CC = X86ISD::COND_AE; break;
1231     case ISD::SETUGT: Flip = true; // Fallthrough
1232     case ISD::SETULT:
1233     case ISD::SETLT: X86CC = X86ISD::COND_B;  break;
1234     case ISD::SETUGE: Flip = true; // Fallthrough
1235     case ISD::SETULE:
1236     case ISD::SETLE: X86CC = X86ISD::COND_BE; break;
1237     case ISD::SETONE:
1238     case ISD::SETNE: X86CC = X86ISD::COND_NE; break;
1239     case ISD::SETUO: X86CC = X86ISD::COND_P;  break;
1240     case ISD::SETO:  X86CC = X86ISD::COND_NP; break;
1241     }
1242   }
1243
1244   return X86CC != X86ISD::COND_INVALID;
1245 }
1246
1247 static bool translateX86CC(SDOperand CC, bool isFP, unsigned &X86CC,
1248                            bool &Flip) {
1249   return translateX86CC(cast<CondCodeSDNode>(CC)->get(), isFP, X86CC, Flip);
1250 }
1251
1252 /// hasFPCMov - is there a floating point cmov for the specific X86 condition
1253 /// code. Current x86 isa includes the following FP cmov instructions:
1254 /// fcmovb, fcomvbe, fcomve, fcmovu, fcmovae, fcmova, fcmovne, fcmovnu.
1255 static bool hasFPCMov(unsigned X86CC) {
1256   switch (X86CC) {
1257   default:
1258     return false;
1259   case X86ISD::COND_B:
1260   case X86ISD::COND_BE:
1261   case X86ISD::COND_E:
1262   case X86ISD::COND_P:
1263   case X86ISD::COND_A:
1264   case X86ISD::COND_AE:
1265   case X86ISD::COND_NE:
1266   case X86ISD::COND_NP:
1267     return true;
1268   }
1269 }
1270
1271 MachineBasicBlock *
1272 X86TargetLowering::InsertAtEndOfBasicBlock(MachineInstr *MI,
1273                                            MachineBasicBlock *BB) {
1274   switch (MI->getOpcode()) {
1275   default: assert(false && "Unexpected instr type to insert");
1276   case X86::CMOV_FR32:
1277   case X86::CMOV_FR64:
1278   case X86::CMOV_V4F32:
1279   case X86::CMOV_V2F64:
1280   case X86::CMOV_V2I64: {
1281     // To "insert" a SELECT_CC instruction, we actually have to insert the
1282     // diamond control-flow pattern.  The incoming instruction knows the
1283     // destination vreg to set, the condition code register to branch on, the
1284     // true/false values to select between, and a branch opcode to use.
1285     const BasicBlock *LLVM_BB = BB->getBasicBlock();
1286     ilist<MachineBasicBlock>::iterator It = BB;
1287     ++It;
1288   
1289     //  thisMBB:
1290     //  ...
1291     //   TrueVal = ...
1292     //   cmpTY ccX, r1, r2
1293     //   bCC copy1MBB
1294     //   fallthrough --> copy0MBB
1295     MachineBasicBlock *thisMBB = BB;
1296     MachineBasicBlock *copy0MBB = new MachineBasicBlock(LLVM_BB);
1297     MachineBasicBlock *sinkMBB = new MachineBasicBlock(LLVM_BB);
1298     unsigned Opc = getCondBrOpcodeForX86CC(MI->getOperand(3).getImmedValue());
1299     BuildMI(BB, Opc, 1).addMBB(sinkMBB);
1300     MachineFunction *F = BB->getParent();
1301     F->getBasicBlockList().insert(It, copy0MBB);
1302     F->getBasicBlockList().insert(It, sinkMBB);
1303     // Update machine-CFG edges by first adding all successors of the current
1304     // block to the new block which will contain the Phi node for the select.
1305     for(MachineBasicBlock::succ_iterator i = BB->succ_begin(), 
1306         e = BB->succ_end(); i != e; ++i)
1307       sinkMBB->addSuccessor(*i);
1308     // Next, remove all successors of the current block, and add the true
1309     // and fallthrough blocks as its successors.
1310     while(!BB->succ_empty())
1311       BB->removeSuccessor(BB->succ_begin());
1312     BB->addSuccessor(copy0MBB);
1313     BB->addSuccessor(sinkMBB);
1314   
1315     //  copy0MBB:
1316     //   %FalseValue = ...
1317     //   # fallthrough to sinkMBB
1318     BB = copy0MBB;
1319   
1320     // Update machine-CFG edges
1321     BB->addSuccessor(sinkMBB);
1322   
1323     //  sinkMBB:
1324     //   %Result = phi [ %FalseValue, copy0MBB ], [ %TrueValue, thisMBB ]
1325     //  ...
1326     BB = sinkMBB;
1327     BuildMI(BB, X86::PHI, 4, MI->getOperand(0).getReg())
1328       .addReg(MI->getOperand(1).getReg()).addMBB(copy0MBB)
1329       .addReg(MI->getOperand(2).getReg()).addMBB(thisMBB);
1330
1331     delete MI;   // The pseudo instruction is gone now.
1332     return BB;
1333   }
1334
1335   case X86::FP_TO_INT16_IN_MEM:
1336   case X86::FP_TO_INT32_IN_MEM:
1337   case X86::FP_TO_INT64_IN_MEM: {
1338     // Change the floating point control register to use "round towards zero"
1339     // mode when truncating to an integer value.
1340     MachineFunction *F = BB->getParent();
1341     int CWFrameIdx = F->getFrameInfo()->CreateStackObject(2, 2);
1342     addFrameReference(BuildMI(BB, X86::FNSTCW16m, 4), CWFrameIdx);
1343
1344     // Load the old value of the high byte of the control word...
1345     unsigned OldCW =
1346       F->getSSARegMap()->createVirtualRegister(X86::R16RegisterClass);
1347     addFrameReference(BuildMI(BB, X86::MOV16rm, 4, OldCW), CWFrameIdx);
1348
1349     // Set the high part to be round to zero...
1350     addFrameReference(BuildMI(BB, X86::MOV16mi, 5), CWFrameIdx).addImm(0xC7F);
1351
1352     // Reload the modified control word now...
1353     addFrameReference(BuildMI(BB, X86::FLDCW16m, 4), CWFrameIdx);
1354
1355     // Restore the memory image of control word to original value
1356     addFrameReference(BuildMI(BB, X86::MOV16mr, 5), CWFrameIdx).addReg(OldCW);
1357
1358     // Get the X86 opcode to use.
1359     unsigned Opc;
1360     switch (MI->getOpcode()) {
1361     default: assert(0 && "illegal opcode!");
1362     case X86::FP_TO_INT16_IN_MEM: Opc = X86::FpIST16m; break;
1363     case X86::FP_TO_INT32_IN_MEM: Opc = X86::FpIST32m; break;
1364     case X86::FP_TO_INT64_IN_MEM: Opc = X86::FpIST64m; break;
1365     }
1366
1367     X86AddressMode AM;
1368     MachineOperand &Op = MI->getOperand(0);
1369     if (Op.isRegister()) {
1370       AM.BaseType = X86AddressMode::RegBase;
1371       AM.Base.Reg = Op.getReg();
1372     } else {
1373       AM.BaseType = X86AddressMode::FrameIndexBase;
1374       AM.Base.FrameIndex = Op.getFrameIndex();
1375     }
1376     Op = MI->getOperand(1);
1377     if (Op.isImmediate())
1378       AM.Scale = Op.getImmedValue();
1379     Op = MI->getOperand(2);
1380     if (Op.isImmediate())
1381       AM.IndexReg = Op.getImmedValue();
1382     Op = MI->getOperand(3);
1383     if (Op.isGlobalAddress()) {
1384       AM.GV = Op.getGlobal();
1385     } else {
1386       AM.Disp = Op.getImmedValue();
1387     }
1388     addFullAddress(BuildMI(BB, Opc, 5), AM).addReg(MI->getOperand(4).getReg());
1389
1390     // Reload the original control word now.
1391     addFrameReference(BuildMI(BB, X86::FLDCW16m, 4), CWFrameIdx);
1392
1393     delete MI;   // The pseudo instruction is gone now.
1394     return BB;
1395   }
1396   }
1397 }
1398
1399
1400 //===----------------------------------------------------------------------===//
1401 //                           X86 Custom Lowering Hooks
1402 //===----------------------------------------------------------------------===//
1403
1404 /// DarwinGVRequiresExtraLoad - true if accessing the GV requires an extra
1405 /// load. For Darwin, external and weak symbols are indirect, loading the value
1406 /// at address GV rather then the value of GV itself. This means that the
1407 /// GlobalAddress must be in the base or index register of the address, not the
1408 /// GV offset field.
1409 static bool DarwinGVRequiresExtraLoad(GlobalValue *GV) {
1410   return (GV->hasWeakLinkage() || GV->hasLinkOnceLinkage() ||
1411           (GV->isExternal() && !GV->hasNotBeenReadFromBytecode()));
1412 }
1413
1414 /// isUndefOrInRange - Op is either an undef node or a ConstantSDNode.  Return
1415 /// true if Op is undef or if its value falls within the specified range (L, H].
1416 static bool isUndefOrInRange(SDOperand Op, unsigned Low, unsigned Hi) {
1417   if (Op.getOpcode() == ISD::UNDEF)
1418     return true;
1419
1420   unsigned Val = cast<ConstantSDNode>(Op)->getValue();
1421   return (Val >= Low && Val < Hi);
1422 }
1423
1424 /// isUndefOrEqual - Op is either an undef node or a ConstantSDNode.  Return
1425 /// true if Op is undef or if its value equal to the specified value.
1426 static bool isUndefOrEqual(SDOperand Op, unsigned Val) {
1427   if (Op.getOpcode() == ISD::UNDEF)
1428     return true;
1429   return cast<ConstantSDNode>(Op)->getValue() == Val;
1430 }
1431
1432 /// isPSHUFDMask - Return true if the specified VECTOR_SHUFFLE operand
1433 /// specifies a shuffle of elements that is suitable for input to PSHUFD.
1434 bool X86::isPSHUFDMask(SDNode *N) {
1435   assert(N->getOpcode() == ISD::BUILD_VECTOR);
1436
1437   if (N->getNumOperands() != 4)
1438     return false;
1439
1440   // Check if the value doesn't reference the second vector.
1441   for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) {
1442     SDOperand Arg = N->getOperand(i);
1443     if (Arg.getOpcode() == ISD::UNDEF) continue;
1444     assert(isa<ConstantSDNode>(Arg) && "Invalid VECTOR_SHUFFLE mask!");
1445     if (cast<ConstantSDNode>(Arg)->getValue() >= 4)
1446       return false;
1447   }
1448
1449   return true;
1450 }
1451
1452 /// isPSHUFHWMask - Return true if the specified VECTOR_SHUFFLE operand
1453 /// specifies a shuffle of elements that is suitable for input to PSHUFHW.
1454 bool X86::isPSHUFHWMask(SDNode *N) {
1455   assert(N->getOpcode() == ISD::BUILD_VECTOR);
1456
1457   if (N->getNumOperands() != 8)
1458     return false;
1459
1460   // Lower quadword copied in order.
1461   for (unsigned i = 0; i != 4; ++i) {
1462     SDOperand Arg = N->getOperand(i);
1463     if (Arg.getOpcode() == ISD::UNDEF) continue;
1464     assert(isa<ConstantSDNode>(Arg) && "Invalid VECTOR_SHUFFLE mask!");
1465     if (cast<ConstantSDNode>(Arg)->getValue() != i)
1466       return false;
1467   }
1468
1469   // Upper quadword shuffled.
1470   for (unsigned i = 4; i != 8; ++i) {
1471     SDOperand Arg = N->getOperand(i);
1472     if (Arg.getOpcode() == ISD::UNDEF) continue;
1473     assert(isa<ConstantSDNode>(Arg) && "Invalid VECTOR_SHUFFLE mask!");
1474     unsigned Val = cast<ConstantSDNode>(Arg)->getValue();
1475     if (Val < 4 || Val > 7)
1476       return false;
1477   }
1478
1479   return true;
1480 }
1481
1482 /// isPSHUFLWMask - Return true if the specified VECTOR_SHUFFLE operand
1483 /// specifies a shuffle of elements that is suitable for input to PSHUFLW.
1484 bool X86::isPSHUFLWMask(SDNode *N) {
1485   assert(N->getOpcode() == ISD::BUILD_VECTOR);
1486
1487   if (N->getNumOperands() != 8)
1488     return false;
1489
1490   // Upper quadword copied in order.
1491   for (unsigned i = 4; i != 8; ++i)
1492     if (!isUndefOrEqual(N->getOperand(i), i))
1493       return false;
1494
1495   // Lower quadword shuffled.
1496   for (unsigned i = 0; i != 4; ++i)
1497     if (!isUndefOrInRange(N->getOperand(i), 0, 4))
1498       return false;
1499
1500   return true;
1501 }
1502
1503 /// isSHUFPMask - Return true if the specified VECTOR_SHUFFLE operand
1504 /// specifies a shuffle of elements that is suitable for input to SHUFP*.
1505 static bool isSHUFPMask(std::vector<SDOperand> &N) {
1506   unsigned NumElems = N.size();
1507   if (NumElems != 2 && NumElems != 4) return false;
1508
1509   unsigned Half = NumElems / 2;
1510   for (unsigned i = 0; i < Half; ++i)
1511     if (!isUndefOrInRange(N[i], 0, NumElems))
1512       return false;
1513   for (unsigned i = Half; i < NumElems; ++i)
1514     if (!isUndefOrInRange(N[i], NumElems, NumElems*2))
1515       return false;
1516
1517   return true;
1518 }
1519
1520 bool X86::isSHUFPMask(SDNode *N) {
1521   assert(N->getOpcode() == ISD::BUILD_VECTOR);
1522   std::vector<SDOperand> Ops(N->op_begin(), N->op_end());
1523   return ::isSHUFPMask(Ops);
1524 }
1525
1526 /// isCommutedSHUFP - Returns true if the shuffle mask is except
1527 /// the reverse of what x86 shuffles want. x86 shuffles requires the lower
1528 /// half elements to come from vector 1 (which would equal the dest.) and
1529 /// the upper half to come from vector 2.
1530 static bool isCommutedSHUFP(std::vector<SDOperand> &Ops) {
1531   unsigned NumElems = Ops.size();
1532   if (NumElems != 2 && NumElems != 4) return false;
1533
1534   unsigned Half = NumElems / 2;
1535   for (unsigned i = 0; i < Half; ++i)
1536     if (!isUndefOrInRange(Ops[i], NumElems, NumElems*2))
1537       return false;
1538   for (unsigned i = Half; i < NumElems; ++i)
1539     if (!isUndefOrInRange(Ops[i], 0, NumElems))
1540       return false;
1541   return true;
1542 }
1543
1544 static bool isCommutedSHUFP(SDNode *N) {
1545   assert(N->getOpcode() == ISD::BUILD_VECTOR);
1546   std::vector<SDOperand> Ops(N->op_begin(), N->op_end());
1547   return isCommutedSHUFP(Ops);
1548 }
1549
1550 /// isMOVHLPSMask - Return true if the specified VECTOR_SHUFFLE operand
1551 /// specifies a shuffle of elements that is suitable for input to MOVHLPS.
1552 bool X86::isMOVHLPSMask(SDNode *N) {
1553   assert(N->getOpcode() == ISD::BUILD_VECTOR);
1554
1555   if (N->getNumOperands() != 4)
1556     return false;
1557
1558   // Expect bit0 == 6, bit1 == 7, bit2 == 2, bit3 == 3
1559   return isUndefOrEqual(N->getOperand(0), 6) &&
1560          isUndefOrEqual(N->getOperand(1), 7) &&
1561          isUndefOrEqual(N->getOperand(2), 2) &&
1562          isUndefOrEqual(N->getOperand(3), 3);
1563 }
1564
1565 /// isMOVLPMask - Return true if the specified VECTOR_SHUFFLE operand
1566 /// specifies a shuffle of elements that is suitable for input to MOVLP{S|D}.
1567 bool X86::isMOVLPMask(SDNode *N) {
1568   assert(N->getOpcode() == ISD::BUILD_VECTOR);
1569
1570   unsigned NumElems = N->getNumOperands();
1571   if (NumElems != 2 && NumElems != 4)
1572     return false;
1573
1574   for (unsigned i = 0; i < NumElems/2; ++i)
1575     if (!isUndefOrEqual(N->getOperand(i), i + NumElems))
1576       return false;
1577
1578   for (unsigned i = NumElems/2; i < NumElems; ++i)
1579     if (!isUndefOrEqual(N->getOperand(i), i))
1580       return false;
1581
1582   return true;
1583 }
1584
1585 /// isMOVHPMask - Return true if the specified VECTOR_SHUFFLE operand
1586 /// specifies a shuffle of elements that is suitable for input to MOVHP{S|D}
1587 /// and MOVLHPS.
1588 bool X86::isMOVHPMask(SDNode *N) {
1589   assert(N->getOpcode() == ISD::BUILD_VECTOR);
1590
1591   unsigned NumElems = N->getNumOperands();
1592   if (NumElems != 2 && NumElems != 4)
1593     return false;
1594
1595   for (unsigned i = 0; i < NumElems/2; ++i)
1596     if (!isUndefOrEqual(N->getOperand(i), i))
1597       return false;
1598
1599   for (unsigned i = 0; i < NumElems/2; ++i) {
1600     SDOperand Arg = N->getOperand(i + NumElems/2);
1601     if (!isUndefOrEqual(Arg, i + NumElems))
1602       return false;
1603   }
1604
1605   return true;
1606 }
1607
1608 /// isUNPCKLMask - Return true if the specified VECTOR_SHUFFLE operand
1609 /// specifies a shuffle of elements that is suitable for input to UNPCKL.
1610 bool static isUNPCKLMask(std::vector<SDOperand> &N, bool V2IsSplat = false) {
1611   unsigned NumElems = N.size();
1612   if (NumElems != 2 && NumElems != 4 && NumElems != 8 && NumElems != 16)
1613     return false;
1614
1615   for (unsigned i = 0, j = 0; i != NumElems; i += 2, ++j) {
1616     SDOperand BitI  = N[i];
1617     SDOperand BitI1 = N[i+1];
1618     if (!isUndefOrEqual(BitI, j))
1619       return false;
1620     if (V2IsSplat) {
1621       if (isUndefOrEqual(BitI1, NumElems))
1622         return false;
1623     } else {
1624       if (!isUndefOrEqual(BitI1, j + NumElems))
1625         return false;
1626     }
1627   }
1628
1629   return true;
1630 }
1631
1632 bool X86::isUNPCKLMask(SDNode *N, bool V2IsSplat) {
1633   assert(N->getOpcode() == ISD::BUILD_VECTOR);
1634   std::vector<SDOperand> Ops(N->op_begin(), N->op_end());
1635   return ::isUNPCKLMask(Ops, V2IsSplat);
1636 }
1637
1638 /// isUNPCKHMask - Return true if the specified VECTOR_SHUFFLE operand
1639 /// specifies a shuffle of elements that is suitable for input to UNPCKH.
1640 bool static isUNPCKHMask(std::vector<SDOperand> &N, bool V2IsSplat = false) {
1641   unsigned NumElems = N.size();
1642   if (NumElems != 2 && NumElems != 4 && NumElems != 8 && NumElems != 16)
1643     return false;
1644
1645   for (unsigned i = 0, j = 0; i != NumElems; i += 2, ++j) {
1646     SDOperand BitI  = N[i];
1647     SDOperand BitI1 = N[i+1];
1648     if (!isUndefOrEqual(BitI, j + NumElems/2))
1649       return false;
1650     if (V2IsSplat) {
1651       if (isUndefOrEqual(BitI1, NumElems))
1652         return false;
1653     } else {
1654       if (!isUndefOrEqual(BitI1, j + NumElems/2 + NumElems))
1655         return false;
1656     }
1657   }
1658
1659   return true;
1660 }
1661
1662 bool X86::isUNPCKHMask(SDNode *N, bool V2IsSplat) {
1663   assert(N->getOpcode() == ISD::BUILD_VECTOR);
1664   std::vector<SDOperand> Ops(N->op_begin(), N->op_end());
1665   return ::isUNPCKHMask(Ops, V2IsSplat);
1666 }
1667
1668 /// isUNPCKL_v_undef_Mask - Special case of isUNPCKLMask for canonical form
1669 /// of vector_shuffle v, v, <0, 4, 1, 5>, i.e. vector_shuffle v, undef,
1670 /// <0, 0, 1, 1>
1671 bool X86::isUNPCKL_v_undef_Mask(SDNode *N) {
1672   assert(N->getOpcode() == ISD::BUILD_VECTOR);
1673
1674   unsigned NumElems = N->getNumOperands();
1675   if (NumElems != 4 && NumElems != 8 && NumElems != 16)
1676     return false;
1677
1678   for (unsigned i = 0, j = 0; i != NumElems; i += 2, ++j) {
1679     SDOperand BitI  = N->getOperand(i);
1680     SDOperand BitI1 = N->getOperand(i+1);
1681
1682     if (!isUndefOrEqual(BitI, j))
1683       return false;
1684     if (!isUndefOrEqual(BitI1, j))
1685       return false;
1686   }
1687
1688   return true;
1689 }
1690
1691 /// isMOVLMask - Return true if the specified VECTOR_SHUFFLE operand
1692 /// specifies a shuffle of elements that is suitable for input to MOVSS,
1693 /// MOVSD, and MOVD, i.e. setting the lowest element.
1694 static bool isMOVLMask(std::vector<SDOperand> &N) {
1695   unsigned NumElems = N.size();
1696   if (NumElems != 2 && NumElems != 4 && NumElems != 8 && NumElems != 16)
1697     return false;
1698
1699   if (!isUndefOrEqual(N[0], NumElems))
1700     return false;
1701
1702   for (unsigned i = 1; i < NumElems; ++i) {
1703     SDOperand Arg = N[i];
1704     if (!isUndefOrEqual(Arg, i))
1705       return false;
1706   }
1707
1708   return true;
1709 }
1710
1711 bool X86::isMOVLMask(SDNode *N) {
1712   assert(N->getOpcode() == ISD::BUILD_VECTOR);
1713   std::vector<SDOperand> Ops(N->op_begin(), N->op_end());
1714   return ::isMOVLMask(Ops);
1715 }
1716
1717 /// isCommutedMOVL - Returns true if the shuffle mask is except the reverse
1718 /// of what x86 movss want. X86 movs requires the lowest  element to be lowest
1719 /// element of vector 2 and the other elements to come from vector 1 in order.
1720 static bool isCommutedMOVL(std::vector<SDOperand> &Ops, bool V2IsSplat = false) {
1721   unsigned NumElems = Ops.size();
1722   if (NumElems != 2 && NumElems != 4 && NumElems != 8 && NumElems != 16)
1723     return false;
1724
1725   if (!isUndefOrEqual(Ops[0], 0))
1726     return false;
1727
1728   for (unsigned i = 1; i < NumElems; ++i) {
1729     SDOperand Arg = Ops[i];
1730     if (V2IsSplat) {
1731       if (!isUndefOrEqual(Arg, NumElems))
1732         return false;
1733     } else {
1734       if (!isUndefOrEqual(Arg, i+NumElems))
1735         return false;
1736     }
1737   }
1738
1739   return true;
1740 }
1741
1742 static bool isCommutedMOVL(SDNode *N, bool V2IsSplat = false) {
1743   assert(N->getOpcode() == ISD::BUILD_VECTOR);
1744   std::vector<SDOperand> Ops(N->op_begin(), N->op_end());
1745   return isCommutedMOVL(Ops, V2IsSplat);
1746 }
1747
1748 /// isMOVSHDUPMask - Return true if the specified VECTOR_SHUFFLE operand
1749 /// specifies a shuffle of elements that is suitable for input to MOVSHDUP.
1750 bool X86::isMOVSHDUPMask(SDNode *N) {
1751   assert(N->getOpcode() == ISD::BUILD_VECTOR);
1752
1753   if (N->getNumOperands() != 4)
1754     return false;
1755
1756   // Expect 1, 1, 3, 3
1757   for (unsigned i = 0; i < 2; ++i) {
1758     SDOperand Arg = N->getOperand(i);
1759     if (Arg.getOpcode() == ISD::UNDEF) continue;
1760     assert(isa<ConstantSDNode>(Arg) && "Invalid VECTOR_SHUFFLE mask!");
1761     unsigned Val = cast<ConstantSDNode>(Arg)->getValue();
1762     if (Val != 1) return false;
1763   }
1764
1765   bool HasHi = false;
1766   for (unsigned i = 2; i < 4; ++i) {
1767     SDOperand Arg = N->getOperand(i);
1768     if (Arg.getOpcode() == ISD::UNDEF) continue;
1769     assert(isa<ConstantSDNode>(Arg) && "Invalid VECTOR_SHUFFLE mask!");
1770     unsigned Val = cast<ConstantSDNode>(Arg)->getValue();
1771     if (Val != 3) return false;
1772     HasHi = true;
1773   }
1774
1775   // Don't use movshdup if it can be done with a shufps.
1776   return HasHi;
1777 }
1778
1779 /// isMOVSLDUPMask - Return true if the specified VECTOR_SHUFFLE operand
1780 /// specifies a shuffle of elements that is suitable for input to MOVSLDUP.
1781 bool X86::isMOVSLDUPMask(SDNode *N) {
1782   assert(N->getOpcode() == ISD::BUILD_VECTOR);
1783
1784   if (N->getNumOperands() != 4)
1785     return false;
1786
1787   // Expect 0, 0, 2, 2
1788   for (unsigned i = 0; i < 2; ++i) {
1789     SDOperand Arg = N->getOperand(i);
1790     if (Arg.getOpcode() == ISD::UNDEF) continue;
1791     assert(isa<ConstantSDNode>(Arg) && "Invalid VECTOR_SHUFFLE mask!");
1792     unsigned Val = cast<ConstantSDNode>(Arg)->getValue();
1793     if (Val != 0) return false;
1794   }
1795
1796   bool HasHi = false;
1797   for (unsigned i = 2; i < 4; ++i) {
1798     SDOperand Arg = N->getOperand(i);
1799     if (Arg.getOpcode() == ISD::UNDEF) continue;
1800     assert(isa<ConstantSDNode>(Arg) && "Invalid VECTOR_SHUFFLE mask!");
1801     unsigned Val = cast<ConstantSDNode>(Arg)->getValue();
1802     if (Val != 2) return false;
1803     HasHi = true;
1804   }
1805
1806   // Don't use movshdup if it can be done with a shufps.
1807   return HasHi;
1808 }
1809
1810 /// isSplatMask - Return true if the specified VECTOR_SHUFFLE operand specifies
1811 /// a splat of a single element.
1812 static bool isSplatMask(SDNode *N) {
1813   assert(N->getOpcode() == ISD::BUILD_VECTOR);
1814
1815   // This is a splat operation if each element of the permute is the same, and
1816   // if the value doesn't reference the second vector.
1817   unsigned NumElems = N->getNumOperands();
1818   SDOperand ElementBase;
1819   unsigned i = 0;
1820   for (; i != NumElems; ++i) {
1821     SDOperand Elt = N->getOperand(i);
1822     if (ConstantSDNode *EltV = dyn_cast<ConstantSDNode>(Elt)) {
1823       ElementBase = Elt;
1824       break;
1825     }
1826   }
1827
1828   if (!ElementBase.Val)
1829     return false;
1830
1831   for (; i != NumElems; ++i) {
1832     SDOperand Arg = N->getOperand(i);
1833     if (Arg.getOpcode() == ISD::UNDEF) continue;
1834     assert(isa<ConstantSDNode>(Arg) && "Invalid VECTOR_SHUFFLE mask!");
1835     if (Arg != ElementBase) return false;
1836   }
1837
1838   // Make sure it is a splat of the first vector operand.
1839   return cast<ConstantSDNode>(ElementBase)->getValue() < NumElems;
1840 }
1841
1842 /// isSplatMask - Return true if the specified VECTOR_SHUFFLE operand specifies
1843 /// a splat of a single element and it's a 2 or 4 element mask.
1844 bool X86::isSplatMask(SDNode *N) {
1845   assert(N->getOpcode() == ISD::BUILD_VECTOR);
1846
1847   // We can only splat 64-bit, and 32-bit quantities with a single instruction.
1848   if (N->getNumOperands() != 4 && N->getNumOperands() != 2)
1849     return false;
1850   return ::isSplatMask(N);
1851 }
1852
1853 /// getShuffleSHUFImmediate - Return the appropriate immediate to shuffle
1854 /// the specified isShuffleMask VECTOR_SHUFFLE mask with PSHUF* and SHUFP*
1855 /// instructions.
1856 unsigned X86::getShuffleSHUFImmediate(SDNode *N) {
1857   unsigned NumOperands = N->getNumOperands();
1858   unsigned Shift = (NumOperands == 4) ? 2 : 1;
1859   unsigned Mask = 0;
1860   for (unsigned i = 0; i < NumOperands; ++i) {
1861     unsigned Val = 0;
1862     SDOperand Arg = N->getOperand(NumOperands-i-1);
1863     if (Arg.getOpcode() != ISD::UNDEF)
1864       Val = cast<ConstantSDNode>(Arg)->getValue();
1865     if (Val >= NumOperands) Val -= NumOperands;
1866     Mask |= Val;
1867     if (i != NumOperands - 1)
1868       Mask <<= Shift;
1869   }
1870
1871   return Mask;
1872 }
1873
1874 /// getShufflePSHUFHWImmediate - Return the appropriate immediate to shuffle
1875 /// the specified isShuffleMask VECTOR_SHUFFLE mask with PSHUFHW
1876 /// instructions.
1877 unsigned X86::getShufflePSHUFHWImmediate(SDNode *N) {
1878   unsigned Mask = 0;
1879   // 8 nodes, but we only care about the last 4.
1880   for (unsigned i = 7; i >= 4; --i) {
1881     unsigned Val = 0;
1882     SDOperand Arg = N->getOperand(i);
1883     if (Arg.getOpcode() != ISD::UNDEF)
1884       Val = cast<ConstantSDNode>(Arg)->getValue();
1885     Mask |= (Val - 4);
1886     if (i != 4)
1887       Mask <<= 2;
1888   }
1889
1890   return Mask;
1891 }
1892
1893 /// getShufflePSHUFLWImmediate - Return the appropriate immediate to shuffle
1894 /// the specified isShuffleMask VECTOR_SHUFFLE mask with PSHUFLW
1895 /// instructions.
1896 unsigned X86::getShufflePSHUFLWImmediate(SDNode *N) {
1897   unsigned Mask = 0;
1898   // 8 nodes, but we only care about the first 4.
1899   for (int i = 3; i >= 0; --i) {
1900     unsigned Val = 0;
1901     SDOperand Arg = N->getOperand(i);
1902     if (Arg.getOpcode() != ISD::UNDEF)
1903       Val = cast<ConstantSDNode>(Arg)->getValue();
1904     Mask |= Val;
1905     if (i != 0)
1906       Mask <<= 2;
1907   }
1908
1909   return Mask;
1910 }
1911
1912 /// isPSHUFHW_PSHUFLWMask - true if the specified VECTOR_SHUFFLE operand
1913 /// specifies a 8 element shuffle that can be broken into a pair of
1914 /// PSHUFHW and PSHUFLW.
1915 static bool isPSHUFHW_PSHUFLWMask(SDNode *N) {
1916   assert(N->getOpcode() == ISD::BUILD_VECTOR);
1917
1918   if (N->getNumOperands() != 8)
1919     return false;
1920
1921   // Lower quadword shuffled.
1922   for (unsigned i = 0; i != 4; ++i) {
1923     SDOperand Arg = N->getOperand(i);
1924     if (Arg.getOpcode() == ISD::UNDEF) continue;
1925     assert(isa<ConstantSDNode>(Arg) && "Invalid VECTOR_SHUFFLE mask!");
1926     unsigned Val = cast<ConstantSDNode>(Arg)->getValue();
1927     if (Val > 4)
1928       return false;
1929   }
1930
1931   // Upper quadword shuffled.
1932   for (unsigned i = 4; i != 8; ++i) {
1933     SDOperand Arg = N->getOperand(i);
1934     if (Arg.getOpcode() == ISD::UNDEF) continue;
1935     assert(isa<ConstantSDNode>(Arg) && "Invalid VECTOR_SHUFFLE mask!");
1936     unsigned Val = cast<ConstantSDNode>(Arg)->getValue();
1937     if (Val < 4 || Val > 7)
1938       return false;
1939   }
1940
1941   return true;
1942 }
1943
1944 /// CommuteVectorShuffle - Swap vector_shuffle operandsas well as
1945 /// values in ther permute mask.
1946 static SDOperand CommuteVectorShuffle(SDOperand Op, SelectionDAG &DAG) {
1947   SDOperand V1 = Op.getOperand(0);
1948   SDOperand V2 = Op.getOperand(1);
1949   SDOperand Mask = Op.getOperand(2);
1950   MVT::ValueType VT = Op.getValueType();
1951   MVT::ValueType MaskVT = Mask.getValueType();
1952   MVT::ValueType EltVT = MVT::getVectorBaseType(MaskVT);
1953   unsigned NumElems = Mask.getNumOperands();
1954   std::vector<SDOperand> MaskVec;
1955
1956   for (unsigned i = 0; i != NumElems; ++i) {
1957     SDOperand Arg = Mask.getOperand(i);
1958     if (Arg.getOpcode() == ISD::UNDEF) {
1959       MaskVec.push_back(DAG.getNode(ISD::UNDEF, EltVT));
1960       continue;
1961     }
1962     assert(isa<ConstantSDNode>(Arg) && "Invalid VECTOR_SHUFFLE mask!");
1963     unsigned Val = cast<ConstantSDNode>(Arg)->getValue();
1964     if (Val < NumElems)
1965       MaskVec.push_back(DAG.getConstant(Val + NumElems, EltVT));
1966     else
1967       MaskVec.push_back(DAG.getConstant(Val - NumElems, EltVT));
1968   }
1969
1970   Mask = DAG.getNode(ISD::BUILD_VECTOR, MaskVT, MaskVec);
1971   return DAG.getNode(ISD::VECTOR_SHUFFLE, VT, V2, V1, Mask);
1972 }
1973
1974 /// ShouldXformToMOVHLPS - Return true if the node should be transformed to
1975 /// match movhlps. The lower half elements should come from upper half of
1976 /// V1 (and in order), and the upper half elements should come from the upper
1977 /// half of V2 (and in order). 
1978 static bool ShouldXformToMOVHLPS(SDNode *Mask) {
1979   unsigned NumElems = Mask->getNumOperands();
1980   if (NumElems != 4)
1981     return false;
1982   for (unsigned i = 0, e = 2; i != e; ++i)
1983     if (!isUndefOrEqual(Mask->getOperand(i), i+2))
1984       return false;
1985   for (unsigned i = 2; i != 4; ++i)
1986     if (!isUndefOrEqual(Mask->getOperand(i), i+4))
1987       return false;
1988   return true;
1989 }
1990
1991 /// isScalarLoadToVector - Returns true if the node is a scalar load that
1992 /// is promoted to a vector.
1993 static inline bool isScalarLoadToVector(SDNode *N) {
1994   if (N->getOpcode() == ISD::SCALAR_TO_VECTOR) {
1995     N = N->getOperand(0).Val;
1996     return (N->getOpcode() == ISD::LOAD);
1997   }
1998   return false;
1999 }
2000
2001 /// ShouldXformToMOVLP{S|D} - Return true if the node should be transformed to
2002 /// match movlp{s|d}. The lower half elements should come from lower half of
2003 /// V1 (and in order), and the upper half elements should come from the upper
2004 /// half of V2 (and in order). And since V1 will become the source of the
2005 /// MOVLP, it must be either a vector load or a scalar load to vector.
2006 static bool ShouldXformToMOVLP(SDNode *V1, SDNode *Mask) {
2007   if (V1->getOpcode() != ISD::LOAD && !isScalarLoadToVector(V1))
2008     return false;
2009
2010   unsigned NumElems = Mask->getNumOperands();
2011   if (NumElems != 2 && NumElems != 4)
2012     return false;
2013   for (unsigned i = 0, e = NumElems/2; i != e; ++i)
2014     if (!isUndefOrEqual(Mask->getOperand(i), i))
2015       return false;
2016   for (unsigned i = NumElems/2; i != NumElems; ++i)
2017     if (!isUndefOrEqual(Mask->getOperand(i), i+NumElems))
2018       return false;
2019   return true;
2020 }
2021
2022 /// isSplatVector - Returns true if N is a BUILD_VECTOR node whose elements are
2023 /// all the same.
2024 static bool isSplatVector(SDNode *N) {
2025   if (N->getOpcode() != ISD::BUILD_VECTOR)
2026     return false;
2027
2028   SDOperand SplatValue = N->getOperand(0);
2029   for (unsigned i = 1, e = N->getNumOperands(); i != e; ++i)
2030     if (N->getOperand(i) != SplatValue)
2031       return false;
2032   return true;
2033 }
2034
2035 /// NormalizeMask - V2 is a splat, modify the mask (if needed) so all elements
2036 /// that point to V2 points to its first element.
2037 static SDOperand NormalizeMask(SDOperand Mask, SelectionDAG &DAG) {
2038   assert(Mask.getOpcode() == ISD::BUILD_VECTOR);
2039
2040   bool Changed = false;
2041   std::vector<SDOperand> MaskVec;
2042   unsigned NumElems = Mask.getNumOperands();
2043   for (unsigned i = 0; i != NumElems; ++i) {
2044     SDOperand Arg = Mask.getOperand(i);
2045     if (Arg.getOpcode() != ISD::UNDEF) {
2046       unsigned Val = cast<ConstantSDNode>(Arg)->getValue();
2047       if (Val > NumElems) {
2048         Arg = DAG.getConstant(NumElems, Arg.getValueType());
2049         Changed = true;
2050       }
2051     }
2052     MaskVec.push_back(Arg);
2053   }
2054
2055   if (Changed)
2056     Mask = DAG.getNode(ISD::BUILD_VECTOR, Mask.getValueType(), MaskVec);
2057   return Mask;
2058 }
2059
2060 /// getMOVLMask - Returns a vector_shuffle mask for an movs{s|d}, movd
2061 /// operation of specified width.
2062 static SDOperand getMOVLMask(unsigned NumElems, SelectionDAG &DAG) {
2063   MVT::ValueType MaskVT = MVT::getIntVectorWithNumElements(NumElems);
2064   MVT::ValueType BaseVT = MVT::getVectorBaseType(MaskVT);
2065
2066   std::vector<SDOperand> MaskVec;
2067   MaskVec.push_back(DAG.getConstant(NumElems, BaseVT));
2068   for (unsigned i = 1; i != NumElems; ++i)
2069     MaskVec.push_back(DAG.getConstant(i, BaseVT));
2070   return DAG.getNode(ISD::BUILD_VECTOR, MaskVT, MaskVec);
2071 }
2072
2073 /// getUnpacklMask - Returns a vector_shuffle mask for an unpackl operation
2074 /// of specified width.
2075 static SDOperand getUnpacklMask(unsigned NumElems, SelectionDAG &DAG) {
2076   MVT::ValueType MaskVT = MVT::getIntVectorWithNumElements(NumElems);
2077   MVT::ValueType BaseVT = MVT::getVectorBaseType(MaskVT);
2078   std::vector<SDOperand> MaskVec;
2079   for (unsigned i = 0, e = NumElems/2; i != e; ++i) {
2080     MaskVec.push_back(DAG.getConstant(i,            BaseVT));
2081     MaskVec.push_back(DAG.getConstant(i + NumElems, BaseVT));
2082   }
2083   return DAG.getNode(ISD::BUILD_VECTOR, MaskVT, MaskVec);
2084 }
2085
2086 /// getUnpackhMask - Returns a vector_shuffle mask for an unpackh operation
2087 /// of specified width.
2088 static SDOperand getUnpackhMask(unsigned NumElems, SelectionDAG &DAG) {
2089   MVT::ValueType MaskVT = MVT::getIntVectorWithNumElements(NumElems);
2090   MVT::ValueType BaseVT = MVT::getVectorBaseType(MaskVT);
2091   unsigned Half = NumElems/2;
2092   std::vector<SDOperand> MaskVec;
2093   for (unsigned i = 0; i != Half; ++i) {
2094     MaskVec.push_back(DAG.getConstant(i + Half,            BaseVT));
2095     MaskVec.push_back(DAG.getConstant(i + NumElems + Half, BaseVT));
2096   }
2097   return DAG.getNode(ISD::BUILD_VECTOR, MaskVT, MaskVec);
2098 }
2099
2100 /// getZeroVector - Returns a vector of specified type with all zero elements.
2101 ///
2102 static SDOperand getZeroVector(MVT::ValueType VT, SelectionDAG &DAG) {
2103   assert(MVT::isVector(VT) && "Expected a vector type");
2104   unsigned NumElems = getVectorNumElements(VT);
2105   MVT::ValueType EVT = MVT::getVectorBaseType(VT);
2106   bool isFP = MVT::isFloatingPoint(EVT);
2107   SDOperand Zero = isFP ? DAG.getConstantFP(0.0, EVT) : DAG.getConstant(0, EVT);
2108   std::vector<SDOperand> ZeroVec(NumElems, Zero);
2109   return DAG.getNode(ISD::BUILD_VECTOR, VT, ZeroVec);
2110 }
2111
2112 /// PromoteSplat - Promote a splat of v8i16 or v16i8 to v4i32.
2113 ///
2114 static SDOperand PromoteSplat(SDOperand Op, SelectionDAG &DAG) {
2115   SDOperand V1 = Op.getOperand(0);
2116   SDOperand Mask = Op.getOperand(2);
2117   MVT::ValueType VT = Op.getValueType();
2118   unsigned NumElems = Mask.getNumOperands();
2119   Mask = getUnpacklMask(NumElems, DAG);
2120   while (NumElems != 4) {
2121     V1 = DAG.getNode(ISD::VECTOR_SHUFFLE, VT, V1, V1, Mask);
2122     NumElems >>= 1;
2123   }
2124   V1 = DAG.getNode(ISD::BIT_CONVERT, MVT::v4i32, V1);
2125
2126   MVT::ValueType MaskVT = MVT::getIntVectorWithNumElements(4);
2127   Mask = getZeroVector(MaskVT, DAG);
2128   SDOperand Shuffle = DAG.getNode(ISD::VECTOR_SHUFFLE, MVT::v4i32, V1,
2129                                   DAG.getNode(ISD::UNDEF, MVT::v4i32), Mask);
2130   return DAG.getNode(ISD::BIT_CONVERT, VT, Shuffle);
2131 }
2132
2133 /// isZeroNode - Returns true if Elt is a constant zero or a floating point
2134 /// constant +0.0.
2135 static inline bool isZeroNode(SDOperand Elt) {
2136   return ((isa<ConstantSDNode>(Elt) &&
2137            cast<ConstantSDNode>(Elt)->getValue() == 0) ||
2138           (isa<ConstantFPSDNode>(Elt) &&
2139            cast<ConstantFPSDNode>(Elt)->isExactlyValue(0.0)));
2140 }
2141
2142 /// getShuffleVectorZeroOrUndef - Return a vector_shuffle of the specified
2143 /// vector and zero or undef vector.
2144 static SDOperand getShuffleVectorZeroOrUndef(SDOperand V2, MVT::ValueType VT,
2145                                              unsigned NumElems, unsigned Idx,
2146                                              bool isZero, SelectionDAG &DAG) {
2147   SDOperand V1 = isZero ? getZeroVector(VT, DAG) : DAG.getNode(ISD::UNDEF, VT);
2148   MVT::ValueType MaskVT = MVT::getIntVectorWithNumElements(NumElems);
2149   MVT::ValueType EVT = MVT::getVectorBaseType(MaskVT);
2150   SDOperand Zero = DAG.getConstant(0, EVT);
2151   std::vector<SDOperand> MaskVec(NumElems, Zero);
2152   MaskVec[Idx] = DAG.getConstant(NumElems, EVT);
2153   SDOperand Mask = DAG.getNode(ISD::BUILD_VECTOR, MaskVT, MaskVec);
2154   return DAG.getNode(ISD::VECTOR_SHUFFLE, VT, V1, V2, Mask);
2155 }
2156
2157 /// LowerOperation - Provide custom lowering hooks for some operations.
2158 ///
2159 SDOperand X86TargetLowering::LowerOperation(SDOperand Op, SelectionDAG &DAG) {
2160   switch (Op.getOpcode()) {
2161   default: assert(0 && "Should not custom lower this!");
2162   case ISD::SHL_PARTS:
2163   case ISD::SRA_PARTS:
2164   case ISD::SRL_PARTS: {
2165     assert(Op.getNumOperands() == 3 && Op.getValueType() == MVT::i32 &&
2166            "Not an i64 shift!");
2167     bool isSRA = Op.getOpcode() == ISD::SRA_PARTS;
2168     SDOperand ShOpLo = Op.getOperand(0);
2169     SDOperand ShOpHi = Op.getOperand(1);
2170     SDOperand ShAmt  = Op.getOperand(2);
2171     SDOperand Tmp1 = isSRA ? DAG.getNode(ISD::SRA, MVT::i32, ShOpHi,
2172                                          DAG.getConstant(31, MVT::i8))
2173                            : DAG.getConstant(0, MVT::i32);
2174
2175     SDOperand Tmp2, Tmp3;
2176     if (Op.getOpcode() == ISD::SHL_PARTS) {
2177       Tmp2 = DAG.getNode(X86ISD::SHLD, MVT::i32, ShOpHi, ShOpLo, ShAmt);
2178       Tmp3 = DAG.getNode(ISD::SHL, MVT::i32, ShOpLo, ShAmt);
2179     } else {
2180       Tmp2 = DAG.getNode(X86ISD::SHRD, MVT::i32, ShOpLo, ShOpHi, ShAmt);
2181       Tmp3 = DAG.getNode(isSRA ? ISD::SRA : ISD::SRL, MVT::i32, ShOpHi, ShAmt);
2182     }
2183
2184     SDOperand InFlag = DAG.getNode(X86ISD::TEST, MVT::Flag,
2185                                    ShAmt, DAG.getConstant(32, MVT::i8));
2186
2187     SDOperand Hi, Lo;
2188     SDOperand CC = DAG.getConstant(X86ISD::COND_NE, MVT::i8);
2189
2190     std::vector<MVT::ValueType> Tys;
2191     Tys.push_back(MVT::i32);
2192     Tys.push_back(MVT::Flag);
2193     std::vector<SDOperand> Ops;
2194     if (Op.getOpcode() == ISD::SHL_PARTS) {
2195       Ops.push_back(Tmp2);
2196       Ops.push_back(Tmp3);
2197       Ops.push_back(CC);
2198       Ops.push_back(InFlag);
2199       Hi = DAG.getNode(X86ISD::CMOV, Tys, Ops);
2200       InFlag = Hi.getValue(1);
2201
2202       Ops.clear();
2203       Ops.push_back(Tmp3);
2204       Ops.push_back(Tmp1);
2205       Ops.push_back(CC);
2206       Ops.push_back(InFlag);
2207       Lo = DAG.getNode(X86ISD::CMOV, Tys, Ops);
2208     } else {
2209       Ops.push_back(Tmp2);
2210       Ops.push_back(Tmp3);
2211       Ops.push_back(CC);
2212       Ops.push_back(InFlag);
2213       Lo = DAG.getNode(X86ISD::CMOV, Tys, Ops);
2214       InFlag = Lo.getValue(1);
2215
2216       Ops.clear();
2217       Ops.push_back(Tmp3);
2218       Ops.push_back(Tmp1);
2219       Ops.push_back(CC);
2220       Ops.push_back(InFlag);
2221       Hi = DAG.getNode(X86ISD::CMOV, Tys, Ops);
2222     }
2223
2224     Tys.clear();
2225     Tys.push_back(MVT::i32);
2226     Tys.push_back(MVT::i32);
2227     Ops.clear();
2228     Ops.push_back(Lo);
2229     Ops.push_back(Hi);
2230     return DAG.getNode(ISD::MERGE_VALUES, Tys, Ops);
2231   }
2232   case ISD::SINT_TO_FP: {
2233     assert(Op.getOperand(0).getValueType() <= MVT::i64 &&
2234            Op.getOperand(0).getValueType() >= MVT::i16 &&
2235            "Unknown SINT_TO_FP to lower!");
2236
2237     SDOperand Result;
2238     MVT::ValueType SrcVT = Op.getOperand(0).getValueType();
2239     unsigned Size = MVT::getSizeInBits(SrcVT)/8;
2240     MachineFunction &MF = DAG.getMachineFunction();
2241     int SSFI = MF.getFrameInfo()->CreateStackObject(Size, Size);
2242     SDOperand StackSlot = DAG.getFrameIndex(SSFI, getPointerTy());
2243     SDOperand Chain = DAG.getNode(ISD::STORE, MVT::Other,
2244                                   DAG.getEntryNode(), Op.getOperand(0),
2245                                   StackSlot, DAG.getSrcValue(NULL));
2246
2247     // Build the FILD
2248     std::vector<MVT::ValueType> Tys;
2249     Tys.push_back(MVT::f64);
2250     Tys.push_back(MVT::Other);
2251     if (X86ScalarSSE) Tys.push_back(MVT::Flag);
2252     std::vector<SDOperand> Ops;
2253     Ops.push_back(Chain);
2254     Ops.push_back(StackSlot);
2255     Ops.push_back(DAG.getValueType(SrcVT));
2256     Result = DAG.getNode(X86ScalarSSE ? X86ISD::FILD_FLAG :X86ISD::FILD,
2257                          Tys, Ops);
2258
2259     if (X86ScalarSSE) {
2260       Chain = Result.getValue(1);
2261       SDOperand InFlag = Result.getValue(2);
2262
2263       // FIXME: Currently the FST is flagged to the FILD_FLAG. This
2264       // shouldn't be necessary except that RFP cannot be live across
2265       // multiple blocks. When stackifier is fixed, they can be uncoupled.
2266       MachineFunction &MF = DAG.getMachineFunction();
2267       int SSFI = MF.getFrameInfo()->CreateStackObject(8, 8);
2268       SDOperand StackSlot = DAG.getFrameIndex(SSFI, getPointerTy());
2269       std::vector<MVT::ValueType> Tys;
2270       Tys.push_back(MVT::Other);
2271       std::vector<SDOperand> Ops;
2272       Ops.push_back(Chain);
2273       Ops.push_back(Result);
2274       Ops.push_back(StackSlot);
2275       Ops.push_back(DAG.getValueType(Op.getValueType()));
2276       Ops.push_back(InFlag);
2277       Chain = DAG.getNode(X86ISD::FST, Tys, Ops);
2278       Result = DAG.getLoad(Op.getValueType(), Chain, StackSlot,
2279                            DAG.getSrcValue(NULL));
2280     }
2281
2282     return Result;
2283   }
2284   case ISD::FP_TO_SINT: {
2285     assert(Op.getValueType() <= MVT::i64 && Op.getValueType() >= MVT::i16 &&
2286            "Unknown FP_TO_SINT to lower!");
2287     // We lower FP->sint64 into FISTP64, followed by a load, all to a temporary
2288     // stack slot.
2289     MachineFunction &MF = DAG.getMachineFunction();
2290     unsigned MemSize = MVT::getSizeInBits(Op.getValueType())/8;
2291     int SSFI = MF.getFrameInfo()->CreateStackObject(MemSize, MemSize);
2292     SDOperand StackSlot = DAG.getFrameIndex(SSFI, getPointerTy());
2293
2294     unsigned Opc;
2295     switch (Op.getValueType()) {
2296     default: assert(0 && "Invalid FP_TO_SINT to lower!");
2297     case MVT::i16: Opc = X86ISD::FP_TO_INT16_IN_MEM; break;
2298     case MVT::i32: Opc = X86ISD::FP_TO_INT32_IN_MEM; break;
2299     case MVT::i64: Opc = X86ISD::FP_TO_INT64_IN_MEM; break;
2300     }
2301
2302     SDOperand Chain = DAG.getEntryNode();
2303     SDOperand Value = Op.getOperand(0);
2304     if (X86ScalarSSE) {
2305       assert(Op.getValueType() == MVT::i64 && "Invalid FP_TO_SINT to lower!");
2306       Chain = DAG.getNode(ISD::STORE, MVT::Other, Chain, Value, StackSlot, 
2307                           DAG.getSrcValue(0));
2308       std::vector<MVT::ValueType> Tys;
2309       Tys.push_back(MVT::f64);
2310       Tys.push_back(MVT::Other);
2311       std::vector<SDOperand> Ops;
2312       Ops.push_back(Chain);
2313       Ops.push_back(StackSlot);
2314       Ops.push_back(DAG.getValueType(Op.getOperand(0).getValueType()));
2315       Value = DAG.getNode(X86ISD::FLD, Tys, Ops);
2316       Chain = Value.getValue(1);
2317       SSFI = MF.getFrameInfo()->CreateStackObject(MemSize, MemSize);
2318       StackSlot = DAG.getFrameIndex(SSFI, getPointerTy());
2319     }
2320
2321     // Build the FP_TO_INT*_IN_MEM
2322     std::vector<SDOperand> Ops;
2323     Ops.push_back(Chain);
2324     Ops.push_back(Value);
2325     Ops.push_back(StackSlot);
2326     SDOperand FIST = DAG.getNode(Opc, MVT::Other, Ops);
2327
2328     // Load the result.
2329     return DAG.getLoad(Op.getValueType(), FIST, StackSlot,
2330                        DAG.getSrcValue(NULL));
2331   }
2332   case ISD::READCYCLECOUNTER: {
2333     std::vector<MVT::ValueType> Tys;
2334     Tys.push_back(MVT::Other);
2335     Tys.push_back(MVT::Flag);
2336     std::vector<SDOperand> Ops;
2337     Ops.push_back(Op.getOperand(0));
2338     SDOperand rd = DAG.getNode(X86ISD::RDTSC_DAG, Tys, Ops);
2339     Ops.clear();
2340     Ops.push_back(DAG.getCopyFromReg(rd, X86::EAX, MVT::i32, rd.getValue(1)));
2341     Ops.push_back(DAG.getCopyFromReg(Ops[0].getValue(1), X86::EDX, 
2342                                      MVT::i32, Ops[0].getValue(2)));
2343     Ops.push_back(Ops[1].getValue(1));
2344     Tys[0] = Tys[1] = MVT::i32;
2345     Tys.push_back(MVT::Other);
2346     return DAG.getNode(ISD::MERGE_VALUES, Tys, Ops);
2347   }
2348   case ISD::FABS: {
2349     MVT::ValueType VT = Op.getValueType();
2350     const Type *OpNTy =  MVT::getTypeForValueType(VT);
2351     std::vector<Constant*> CV;
2352     if (VT == MVT::f64) {
2353       CV.push_back(ConstantFP::get(OpNTy, BitsToDouble(~(1ULL << 63))));
2354       CV.push_back(ConstantFP::get(OpNTy, 0.0));
2355     } else {
2356       CV.push_back(ConstantFP::get(OpNTy, BitsToFloat(~(1U << 31))));
2357       CV.push_back(ConstantFP::get(OpNTy, 0.0));
2358       CV.push_back(ConstantFP::get(OpNTy, 0.0));
2359       CV.push_back(ConstantFP::get(OpNTy, 0.0));
2360     }
2361     Constant *CS = ConstantStruct::get(CV);
2362     SDOperand CPIdx = DAG.getConstantPool(CS, getPointerTy(), 4);
2363     SDOperand Mask 
2364       = DAG.getNode(X86ISD::LOAD_PACK,
2365                     VT, DAG.getEntryNode(), CPIdx, DAG.getSrcValue(NULL));
2366     return DAG.getNode(X86ISD::FAND, VT, Op.getOperand(0), Mask);
2367   }
2368   case ISD::FNEG: {
2369     MVT::ValueType VT = Op.getValueType();
2370     const Type *OpNTy =  MVT::getTypeForValueType(VT);
2371     std::vector<Constant*> CV;
2372     if (VT == MVT::f64) {
2373       CV.push_back(ConstantFP::get(OpNTy, BitsToDouble(1ULL << 63)));
2374       CV.push_back(ConstantFP::get(OpNTy, 0.0));
2375     } else {
2376       CV.push_back(ConstantFP::get(OpNTy, BitsToFloat(1U << 31)));
2377       CV.push_back(ConstantFP::get(OpNTy, 0.0));
2378       CV.push_back(ConstantFP::get(OpNTy, 0.0));
2379       CV.push_back(ConstantFP::get(OpNTy, 0.0));
2380     }
2381     Constant *CS = ConstantStruct::get(CV);
2382     SDOperand CPIdx = DAG.getConstantPool(CS, getPointerTy(), 4);
2383     SDOperand Mask 
2384       = DAG.getNode(X86ISD::LOAD_PACK,
2385                     VT, DAG.getEntryNode(), CPIdx, DAG.getSrcValue(NULL));
2386     return DAG.getNode(X86ISD::FXOR, VT, Op.getOperand(0), Mask);
2387   }
2388   case ISD::SETCC: {
2389     assert(Op.getValueType() == MVT::i8 && "SetCC type must be 8-bit integer");
2390     SDOperand Cond;
2391     SDOperand CC = Op.getOperand(2);
2392     ISD::CondCode SetCCOpcode = cast<CondCodeSDNode>(CC)->get();
2393     bool isFP = MVT::isFloatingPoint(Op.getOperand(1).getValueType());
2394     bool Flip;
2395     unsigned X86CC;
2396     if (translateX86CC(CC, isFP, X86CC, Flip)) {
2397       if (Flip)
2398         Cond = DAG.getNode(X86ISD::CMP, MVT::Flag,
2399                            Op.getOperand(1), Op.getOperand(0));
2400       else
2401         Cond = DAG.getNode(X86ISD::CMP, MVT::Flag,
2402                            Op.getOperand(0), Op.getOperand(1));
2403       return DAG.getNode(X86ISD::SETCC, MVT::i8, 
2404                          DAG.getConstant(X86CC, MVT::i8), Cond);
2405     } else {
2406       assert(isFP && "Illegal integer SetCC!");
2407
2408       Cond = DAG.getNode(X86ISD::CMP, MVT::Flag,
2409                          Op.getOperand(0), Op.getOperand(1));
2410       std::vector<MVT::ValueType> Tys;
2411       std::vector<SDOperand> Ops;
2412       switch (SetCCOpcode) {
2413       default: assert(false && "Illegal floating point SetCC!");
2414       case ISD::SETOEQ: {  // !PF & ZF
2415         Tys.push_back(MVT::i8);
2416         Tys.push_back(MVT::Flag);
2417         Ops.push_back(DAG.getConstant(X86ISD::COND_NP, MVT::i8));
2418         Ops.push_back(Cond);
2419         SDOperand Tmp1 = DAG.getNode(X86ISD::SETCC, Tys, Ops);
2420         SDOperand Tmp2 = DAG.getNode(X86ISD::SETCC, MVT::i8,
2421                                      DAG.getConstant(X86ISD::COND_E, MVT::i8),
2422                                      Tmp1.getValue(1));
2423         return DAG.getNode(ISD::AND, MVT::i8, Tmp1, Tmp2);
2424       }
2425       case ISD::SETUNE: {  // PF | !ZF
2426         Tys.push_back(MVT::i8);
2427         Tys.push_back(MVT::Flag);
2428         Ops.push_back(DAG.getConstant(X86ISD::COND_P, MVT::i8));
2429         Ops.push_back(Cond);
2430         SDOperand Tmp1 = DAG.getNode(X86ISD::SETCC, Tys, Ops);
2431         SDOperand Tmp2 = DAG.getNode(X86ISD::SETCC, MVT::i8,
2432                                      DAG.getConstant(X86ISD::COND_NE, MVT::i8),
2433                                      Tmp1.getValue(1));
2434         return DAG.getNode(ISD::OR, MVT::i8, Tmp1, Tmp2);
2435       }
2436       }
2437     }
2438   }
2439   case ISD::SELECT: {
2440     MVT::ValueType VT = Op.getValueType();
2441     bool isFPStack = MVT::isFloatingPoint(VT) && !X86ScalarSSE;
2442     bool addTest   = false;
2443     SDOperand Op0 = Op.getOperand(0);
2444     SDOperand Cond, CC;
2445     if (Op0.getOpcode() == ISD::SETCC)
2446       Op0 = LowerOperation(Op0, DAG);
2447
2448     if (Op0.getOpcode() == X86ISD::SETCC) {
2449       // If condition flag is set by a X86ISD::CMP, then make a copy of it
2450       // (since flag operand cannot be shared). If the X86ISD::SETCC does not
2451       // have another use it will be eliminated.
2452       // If the X86ISD::SETCC has more than one use, then it's probably better
2453       // to use a test instead of duplicating the X86ISD::CMP (for register
2454       // pressure reason).
2455       unsigned CmpOpc = Op0.getOperand(1).getOpcode();
2456       if (CmpOpc == X86ISD::CMP || CmpOpc == X86ISD::COMI ||
2457           CmpOpc == X86ISD::UCOMI) {
2458         if (!Op0.hasOneUse()) {
2459           std::vector<MVT::ValueType> Tys;
2460           for (unsigned i = 0; i < Op0.Val->getNumValues(); ++i)
2461             Tys.push_back(Op0.Val->getValueType(i));
2462           std::vector<SDOperand> Ops;
2463           for (unsigned i = 0; i < Op0.getNumOperands(); ++i)
2464             Ops.push_back(Op0.getOperand(i));
2465           Op0 = DAG.getNode(X86ISD::SETCC, Tys, Ops);
2466         }
2467
2468         CC   = Op0.getOperand(0);
2469         Cond = Op0.getOperand(1);
2470         // Make a copy as flag result cannot be used by more than one.
2471         Cond = DAG.getNode(CmpOpc, MVT::Flag,
2472                            Cond.getOperand(0), Cond.getOperand(1));
2473         addTest =
2474           isFPStack && !hasFPCMov(cast<ConstantSDNode>(CC)->getSignExtended());
2475       } else
2476         addTest = true;
2477     } else
2478       addTest = true;
2479
2480     if (addTest) {
2481       CC = DAG.getConstant(X86ISD::COND_NE, MVT::i8);
2482       Cond = DAG.getNode(X86ISD::TEST, MVT::Flag, Op0, Op0);
2483     }
2484
2485     std::vector<MVT::ValueType> Tys;
2486     Tys.push_back(Op.getValueType());
2487     Tys.push_back(MVT::Flag);
2488     std::vector<SDOperand> Ops;
2489     // X86ISD::CMOV means set the result (which is operand 1) to the RHS if
2490     // condition is true.
2491     Ops.push_back(Op.getOperand(2));
2492     Ops.push_back(Op.getOperand(1));
2493     Ops.push_back(CC);
2494     Ops.push_back(Cond);
2495     return DAG.getNode(X86ISD::CMOV, Tys, Ops);
2496   }
2497   case ISD::BRCOND: {
2498     bool addTest = false;
2499     SDOperand Cond  = Op.getOperand(1);
2500     SDOperand Dest  = Op.getOperand(2);
2501     SDOperand CC;
2502     if (Cond.getOpcode() == ISD::SETCC)
2503       Cond = LowerOperation(Cond, DAG);
2504
2505     if (Cond.getOpcode() == X86ISD::SETCC) {
2506       // If condition flag is set by a X86ISD::CMP, then make a copy of it
2507       // (since flag operand cannot be shared). If the X86ISD::SETCC does not
2508       // have another use it will be eliminated.
2509       // If the X86ISD::SETCC has more than one use, then it's probably better
2510       // to use a test instead of duplicating the X86ISD::CMP (for register
2511       // pressure reason).
2512       unsigned CmpOpc = Cond.getOperand(1).getOpcode();
2513       if (CmpOpc == X86ISD::CMP || CmpOpc == X86ISD::COMI ||
2514           CmpOpc == X86ISD::UCOMI) {
2515         if (!Cond.hasOneUse()) {
2516           std::vector<MVT::ValueType> Tys;
2517           for (unsigned i = 0; i < Cond.Val->getNumValues(); ++i)
2518             Tys.push_back(Cond.Val->getValueType(i));
2519           std::vector<SDOperand> Ops;
2520           for (unsigned i = 0; i < Cond.getNumOperands(); ++i)
2521             Ops.push_back(Cond.getOperand(i));
2522           Cond = DAG.getNode(X86ISD::SETCC, Tys, Ops);
2523         }
2524
2525         CC   = Cond.getOperand(0);
2526         Cond = Cond.getOperand(1);
2527         // Make a copy as flag result cannot be used by more than one.
2528         Cond = DAG.getNode(CmpOpc, MVT::Flag,
2529                            Cond.getOperand(0), Cond.getOperand(1));
2530       } else
2531         addTest = true;
2532     } else
2533       addTest = true;
2534
2535     if (addTest) {
2536       CC = DAG.getConstant(X86ISD::COND_NE, MVT::i8);
2537       Cond = DAG.getNode(X86ISD::TEST, MVT::Flag, Cond, Cond);
2538     }
2539     return DAG.getNode(X86ISD::BRCOND, Op.getValueType(),
2540                        Op.getOperand(0), Op.getOperand(2), CC, Cond);
2541   }
2542   case ISD::MEMSET: {
2543     SDOperand InFlag(0, 0);
2544     SDOperand Chain = Op.getOperand(0);
2545     unsigned Align =
2546       (unsigned)cast<ConstantSDNode>(Op.getOperand(4))->getValue();
2547     if (Align == 0) Align = 1;
2548
2549     ConstantSDNode *I = dyn_cast<ConstantSDNode>(Op.getOperand(3));
2550     // If not DWORD aligned, call memset if size is less than the threshold.
2551     // It knows how to align to the right boundary first.
2552     if ((Align & 3) != 0 ||
2553         (I && I->getValue() < Subtarget->getMinRepStrSizeThreshold())) {
2554       MVT::ValueType IntPtr = getPointerTy();
2555       const Type *IntPtrTy = getTargetData().getIntPtrType();
2556       std::vector<std::pair<SDOperand, const Type*> > Args;
2557       Args.push_back(std::make_pair(Op.getOperand(1), IntPtrTy));
2558       // Extend the ubyte argument to be an int value for the call.
2559       SDOperand Val = DAG.getNode(ISD::ZERO_EXTEND, MVT::i32, Op.getOperand(2));
2560       Args.push_back(std::make_pair(Val, IntPtrTy));
2561       Args.push_back(std::make_pair(Op.getOperand(3), IntPtrTy));
2562       std::pair<SDOperand,SDOperand> CallResult =
2563         LowerCallTo(Chain, Type::VoidTy, false, CallingConv::C, false,
2564                     DAG.getExternalSymbol("memset", IntPtr), Args, DAG);
2565       return CallResult.second;
2566     }
2567
2568     MVT::ValueType AVT;
2569     SDOperand Count;
2570     ConstantSDNode *ValC = dyn_cast<ConstantSDNode>(Op.getOperand(2));
2571     unsigned BytesLeft = 0;
2572     bool TwoRepStos = false;
2573     if (ValC) {
2574       unsigned ValReg;
2575       unsigned Val = ValC->getValue() & 255;
2576
2577       // If the value is a constant, then we can potentially use larger sets.
2578       switch (Align & 3) {
2579       case 2:   // WORD aligned
2580         AVT = MVT::i16;
2581         Count = DAG.getConstant(I->getValue() / 2, MVT::i32);
2582         BytesLeft = I->getValue() % 2;
2583         Val    = (Val << 8) | Val;
2584         ValReg = X86::AX;
2585         break;
2586       case 0:   // DWORD aligned
2587         AVT = MVT::i32;
2588         if (I) {
2589           Count = DAG.getConstant(I->getValue() / 4, MVT::i32);
2590           BytesLeft = I->getValue() % 4;
2591         } else {
2592           Count = DAG.getNode(ISD::SRL, MVT::i32, Op.getOperand(3),
2593                               DAG.getConstant(2, MVT::i8));
2594           TwoRepStos = true;
2595         }
2596         Val = (Val << 8)  | Val;
2597         Val = (Val << 16) | Val;
2598         ValReg = X86::EAX;
2599         break;
2600       default:  // Byte aligned
2601         AVT = MVT::i8;
2602         Count = Op.getOperand(3);
2603         ValReg = X86::AL;
2604         break;
2605       }
2606
2607       Chain  = DAG.getCopyToReg(Chain, ValReg, DAG.getConstant(Val, AVT),
2608                                 InFlag);
2609       InFlag = Chain.getValue(1);
2610     } else {
2611       AVT = MVT::i8;
2612       Count  = Op.getOperand(3);
2613       Chain  = DAG.getCopyToReg(Chain, X86::AL, Op.getOperand(2), InFlag);
2614       InFlag = Chain.getValue(1);
2615     }
2616
2617     Chain  = DAG.getCopyToReg(Chain, X86::ECX, Count, InFlag);
2618     InFlag = Chain.getValue(1);
2619     Chain  = DAG.getCopyToReg(Chain, X86::EDI, Op.getOperand(1), InFlag);
2620     InFlag = Chain.getValue(1);
2621
2622     std::vector<MVT::ValueType> Tys;
2623     Tys.push_back(MVT::Other);
2624     Tys.push_back(MVT::Flag);
2625     std::vector<SDOperand> Ops;
2626     Ops.push_back(Chain);
2627     Ops.push_back(DAG.getValueType(AVT));
2628     Ops.push_back(InFlag);
2629     Chain  = DAG.getNode(X86ISD::REP_STOS, Tys, Ops);
2630
2631     if (TwoRepStos) {
2632       InFlag = Chain.getValue(1);
2633       Count = Op.getOperand(3);
2634       MVT::ValueType CVT = Count.getValueType();
2635       SDOperand Left = DAG.getNode(ISD::AND, CVT, Count,
2636                                    DAG.getConstant(3, CVT));
2637       Chain  = DAG.getCopyToReg(Chain, X86::ECX, Left, InFlag);
2638       InFlag = Chain.getValue(1);
2639       Tys.clear();
2640       Tys.push_back(MVT::Other);
2641       Tys.push_back(MVT::Flag);
2642       Ops.clear();
2643       Ops.push_back(Chain);
2644       Ops.push_back(DAG.getValueType(MVT::i8));
2645       Ops.push_back(InFlag);
2646       Chain  = DAG.getNode(X86ISD::REP_STOS, Tys, Ops);
2647     } else if (BytesLeft) {
2648       // Issue stores for the last 1 - 3 bytes.
2649       SDOperand Value;
2650       unsigned Val = ValC->getValue() & 255;
2651       unsigned Offset = I->getValue() - BytesLeft;
2652       SDOperand DstAddr = Op.getOperand(1);
2653       MVT::ValueType AddrVT = DstAddr.getValueType();
2654       if (BytesLeft >= 2) {
2655         Value = DAG.getConstant((Val << 8) | Val, MVT::i16);
2656         Chain = DAG.getNode(ISD::STORE, MVT::Other, Chain, Value,
2657                             DAG.getNode(ISD::ADD, AddrVT, DstAddr,
2658                                         DAG.getConstant(Offset, AddrVT)),
2659                             DAG.getSrcValue(NULL));
2660         BytesLeft -= 2;
2661         Offset += 2;
2662       }
2663
2664       if (BytesLeft == 1) {
2665         Value = DAG.getConstant(Val, MVT::i8);
2666         Chain = DAG.getNode(ISD::STORE, MVT::Other, Chain, Value,
2667                             DAG.getNode(ISD::ADD, AddrVT, DstAddr,
2668                                         DAG.getConstant(Offset, AddrVT)),
2669                             DAG.getSrcValue(NULL));
2670       }
2671     }
2672
2673     return Chain;
2674   }
2675   case ISD::MEMCPY: {
2676     SDOperand Chain = Op.getOperand(0);
2677     unsigned Align =
2678       (unsigned)cast<ConstantSDNode>(Op.getOperand(4))->getValue();
2679     if (Align == 0) Align = 1;
2680
2681     ConstantSDNode *I = dyn_cast<ConstantSDNode>(Op.getOperand(3));
2682     // If not DWORD aligned, call memcpy if size is less than the threshold.
2683     // It knows how to align to the right boundary first.
2684     if ((Align & 3) != 0 ||
2685         (I && I->getValue() < Subtarget->getMinRepStrSizeThreshold())) {
2686       MVT::ValueType IntPtr = getPointerTy();
2687       const Type *IntPtrTy = getTargetData().getIntPtrType();
2688       std::vector<std::pair<SDOperand, const Type*> > Args;
2689       Args.push_back(std::make_pair(Op.getOperand(1), IntPtrTy));
2690       Args.push_back(std::make_pair(Op.getOperand(2), IntPtrTy));
2691       Args.push_back(std::make_pair(Op.getOperand(3), IntPtrTy));
2692       std::pair<SDOperand,SDOperand> CallResult =
2693         LowerCallTo(Chain, Type::VoidTy, false, CallingConv::C, false,
2694                     DAG.getExternalSymbol("memcpy", IntPtr), Args, DAG);
2695       return CallResult.second;
2696     }
2697
2698     MVT::ValueType AVT;
2699     SDOperand Count;
2700     unsigned BytesLeft = 0;
2701     bool TwoRepMovs = false;
2702     switch (Align & 3) {
2703     case 2:   // WORD aligned
2704       AVT = MVT::i16;
2705       Count = DAG.getConstant(I->getValue() / 2, MVT::i32);
2706       BytesLeft = I->getValue() % 2;
2707       break;
2708     case 0:   // DWORD aligned
2709       AVT = MVT::i32;
2710       if (I) {
2711         Count = DAG.getConstant(I->getValue() / 4, MVT::i32);
2712         BytesLeft = I->getValue() % 4;
2713       } else {
2714         Count = DAG.getNode(ISD::SRL, MVT::i32, Op.getOperand(3),
2715                             DAG.getConstant(2, MVT::i8));
2716         TwoRepMovs = true;
2717       }
2718       break;
2719     default:  // Byte aligned
2720       AVT = MVT::i8;
2721       Count = Op.getOperand(3);
2722       break;
2723     }
2724
2725     SDOperand InFlag(0, 0);
2726     Chain  = DAG.getCopyToReg(Chain, X86::ECX, Count, InFlag);
2727     InFlag = Chain.getValue(1);
2728     Chain  = DAG.getCopyToReg(Chain, X86::EDI, Op.getOperand(1), InFlag);
2729     InFlag = Chain.getValue(1);
2730     Chain  = DAG.getCopyToReg(Chain, X86::ESI, Op.getOperand(2), InFlag);
2731     InFlag = Chain.getValue(1);
2732
2733     std::vector<MVT::ValueType> Tys;
2734     Tys.push_back(MVT::Other);
2735     Tys.push_back(MVT::Flag);
2736     std::vector<SDOperand> Ops;
2737     Ops.push_back(Chain);
2738     Ops.push_back(DAG.getValueType(AVT));
2739     Ops.push_back(InFlag);
2740     Chain = DAG.getNode(X86ISD::REP_MOVS, Tys, Ops);
2741
2742     if (TwoRepMovs) {
2743       InFlag = Chain.getValue(1);
2744       Count = Op.getOperand(3);
2745       MVT::ValueType CVT = Count.getValueType();
2746       SDOperand Left = DAG.getNode(ISD::AND, CVT, Count,
2747                                    DAG.getConstant(3, CVT));
2748       Chain  = DAG.getCopyToReg(Chain, X86::ECX, Left, InFlag);
2749       InFlag = Chain.getValue(1);
2750       Tys.clear();
2751       Tys.push_back(MVT::Other);
2752       Tys.push_back(MVT::Flag);
2753       Ops.clear();
2754       Ops.push_back(Chain);
2755       Ops.push_back(DAG.getValueType(MVT::i8));
2756       Ops.push_back(InFlag);
2757       Chain = DAG.getNode(X86ISD::REP_MOVS, Tys, Ops);
2758     } else if (BytesLeft) {
2759       // Issue loads and stores for the last 1 - 3 bytes.
2760       unsigned Offset = I->getValue() - BytesLeft;
2761       SDOperand DstAddr = Op.getOperand(1);
2762       MVT::ValueType DstVT = DstAddr.getValueType();
2763       SDOperand SrcAddr = Op.getOperand(2);
2764       MVT::ValueType SrcVT = SrcAddr.getValueType();
2765       SDOperand Value;
2766       if (BytesLeft >= 2) {
2767         Value = DAG.getLoad(MVT::i16, Chain,
2768                             DAG.getNode(ISD::ADD, SrcVT, SrcAddr,
2769                                         DAG.getConstant(Offset, SrcVT)),
2770                             DAG.getSrcValue(NULL));
2771         Chain = Value.getValue(1);
2772         Chain = DAG.getNode(ISD::STORE, MVT::Other, Chain, Value,
2773                             DAG.getNode(ISD::ADD, DstVT, DstAddr,
2774                                         DAG.getConstant(Offset, DstVT)),
2775                             DAG.getSrcValue(NULL));
2776         BytesLeft -= 2;
2777         Offset += 2;
2778       }
2779
2780       if (BytesLeft == 1) {
2781         Value = DAG.getLoad(MVT::i8, Chain,
2782                             DAG.getNode(ISD::ADD, SrcVT, SrcAddr,
2783                                         DAG.getConstant(Offset, SrcVT)),
2784                             DAG.getSrcValue(NULL));
2785         Chain = Value.getValue(1);
2786         Chain = DAG.getNode(ISD::STORE, MVT::Other, Chain, Value,
2787                             DAG.getNode(ISD::ADD, DstVT, DstAddr,
2788                                         DAG.getConstant(Offset, DstVT)),
2789                             DAG.getSrcValue(NULL));
2790       }
2791     }
2792
2793     return Chain;
2794   }
2795
2796   // ConstantPool, JumpTable, GlobalAddress, and ExternalSymbol are lowered as 
2797   // their target countpart wrapped in the X86ISD::Wrapper node. Suppose N is
2798   // one of the above mentioned nodes. It has to be wrapped because otherwise
2799   // Select(N) returns N. So the raw TargetGlobalAddress nodes, etc. can only
2800   // be used to form addressing mode. These wrapped nodes will be selected
2801   // into MOV32ri.
2802   case ISD::ConstantPool: {
2803     ConstantPoolSDNode *CP = cast<ConstantPoolSDNode>(Op);
2804     SDOperand Result = DAG.getNode(X86ISD::Wrapper, getPointerTy(),
2805                          DAG.getTargetConstantPool(CP->get(), getPointerTy(),
2806                                                    CP->getAlignment()));
2807     if (Subtarget->isTargetDarwin()) {
2808       // With PIC, the address is actually $g + Offset.
2809       if (getTargetMachine().getRelocationModel() == Reloc::PIC)
2810         Result = DAG.getNode(ISD::ADD, getPointerTy(),
2811                 DAG.getNode(X86ISD::GlobalBaseReg, getPointerTy()), Result);    
2812     }
2813
2814     return Result;
2815   }
2816   case ISD::JumpTable: {
2817     JumpTableSDNode *JT = cast<JumpTableSDNode>(Op);
2818     SDOperand Result = DAG.getNode(X86ISD::Wrapper, getPointerTy(),
2819                                    DAG.getTargetJumpTable(JT->getIndex(),
2820                                                           getPointerTy()));
2821     if (Subtarget->isTargetDarwin()) {
2822       // With PIC, the address is actually $g + Offset.
2823       if (getTargetMachine().getRelocationModel() == Reloc::PIC)
2824         Result = DAG.getNode(ISD::ADD, getPointerTy(),
2825                 DAG.getNode(X86ISD::GlobalBaseReg, getPointerTy()), Result);    
2826     }
2827
2828     return Result;
2829   }
2830   case ISD::GlobalAddress: {
2831     GlobalValue *GV = cast<GlobalAddressSDNode>(Op)->getGlobal();
2832     SDOperand Result = DAG.getNode(X86ISD::Wrapper, getPointerTy(),
2833                          DAG.getTargetGlobalAddress(GV, getPointerTy()));
2834     if (Subtarget->isTargetDarwin()) {
2835       // With PIC, the address is actually $g + Offset.
2836       if (getTargetMachine().getRelocationModel() == Reloc::PIC)
2837         Result = DAG.getNode(ISD::ADD, getPointerTy(),
2838                     DAG.getNode(X86ISD::GlobalBaseReg, getPointerTy()), Result);
2839
2840       // For Darwin, external and weak symbols are indirect, so we want to load
2841       // the value at address GV, not the value of GV itself. This means that
2842       // the GlobalAddress must be in the base or index register of the address,
2843       // not the GV offset field.
2844       if (getTargetMachine().getRelocationModel() != Reloc::Static &&
2845           DarwinGVRequiresExtraLoad(GV))
2846         Result = DAG.getLoad(MVT::i32, DAG.getEntryNode(),
2847                              Result, DAG.getSrcValue(NULL));
2848     }
2849
2850     return Result;
2851   }
2852   case ISD::ExternalSymbol: {
2853     const char *Sym = cast<ExternalSymbolSDNode>(Op)->getSymbol();
2854     SDOperand Result = DAG.getNode(X86ISD::Wrapper, getPointerTy(),
2855                          DAG.getTargetExternalSymbol(Sym, getPointerTy()));
2856     if (Subtarget->isTargetDarwin()) {
2857       // With PIC, the address is actually $g + Offset.
2858       if (getTargetMachine().getRelocationModel() == Reloc::PIC)
2859         Result = DAG.getNode(ISD::ADD, getPointerTy(),
2860                     DAG.getNode(X86ISD::GlobalBaseReg, getPointerTy()), Result);
2861     }
2862
2863     return Result;
2864   }
2865   case ISD::VASTART: {
2866     // vastart just stores the address of the VarArgsFrameIndex slot into the
2867     // memory location argument.
2868     // FIXME: Replace MVT::i32 with PointerTy
2869     SDOperand FR = DAG.getFrameIndex(VarArgsFrameIndex, MVT::i32);
2870     return DAG.getNode(ISD::STORE, MVT::Other, Op.getOperand(0), FR, 
2871                        Op.getOperand(1), Op.getOperand(2));
2872   }
2873   case ISD::RET: {
2874     SDOperand Copy;
2875     
2876     switch(Op.getNumOperands()) {
2877     default:
2878       assert(0 && "Do not know how to return this many arguments!");
2879       abort();
2880     case 1:    // ret void.
2881       return DAG.getNode(X86ISD::RET_FLAG, MVT::Other, Op.getOperand(0),
2882                          DAG.getConstant(getBytesToPopOnReturn(), MVT::i16));
2883     case 2: {
2884       MVT::ValueType ArgVT = Op.getOperand(1).getValueType();
2885       
2886       if (MVT::isVector(ArgVT)) {
2887         // Integer or FP vector result -> XMM0.
2888         if (DAG.getMachineFunction().liveout_empty())
2889           DAG.getMachineFunction().addLiveOut(X86::XMM0);
2890         Copy = DAG.getCopyToReg(Op.getOperand(0), X86::XMM0, Op.getOperand(1),
2891                                 SDOperand());
2892       } else if (MVT::isInteger(ArgVT)) {
2893         // Integer result -> EAX
2894         if (DAG.getMachineFunction().liveout_empty())
2895           DAG.getMachineFunction().addLiveOut(X86::EAX);
2896
2897         Copy = DAG.getCopyToReg(Op.getOperand(0), X86::EAX, Op.getOperand(1),
2898                                 SDOperand());
2899       } else if (!X86ScalarSSE) {
2900         // FP return with fp-stack value.
2901         if (DAG.getMachineFunction().liveout_empty())
2902           DAG.getMachineFunction().addLiveOut(X86::ST0);
2903
2904         std::vector<MVT::ValueType> Tys;
2905         Tys.push_back(MVT::Other);
2906         Tys.push_back(MVT::Flag);
2907         std::vector<SDOperand> Ops;
2908         Ops.push_back(Op.getOperand(0));
2909         Ops.push_back(Op.getOperand(1));
2910         Copy = DAG.getNode(X86ISD::FP_SET_RESULT, Tys, Ops);
2911       } else {
2912         // FP return with ScalarSSE (return on fp-stack).
2913         if (DAG.getMachineFunction().liveout_empty())
2914           DAG.getMachineFunction().addLiveOut(X86::ST0);
2915
2916         SDOperand MemLoc;
2917         SDOperand Chain = Op.getOperand(0);
2918         SDOperand Value = Op.getOperand(1);
2919
2920         if (Value.getOpcode() == ISD::LOAD &&
2921             (Chain == Value.getValue(1) || Chain == Value.getOperand(0))) {
2922           Chain  = Value.getOperand(0);
2923           MemLoc = Value.getOperand(1);
2924         } else {
2925           // Spill the value to memory and reload it into top of stack.
2926           unsigned Size = MVT::getSizeInBits(ArgVT)/8;
2927           MachineFunction &MF = DAG.getMachineFunction();
2928           int SSFI = MF.getFrameInfo()->CreateStackObject(Size, Size);
2929           MemLoc = DAG.getFrameIndex(SSFI, getPointerTy());
2930           Chain = DAG.getNode(ISD::STORE, MVT::Other, Op.getOperand(0), 
2931                               Value, MemLoc, DAG.getSrcValue(0));
2932         }
2933         std::vector<MVT::ValueType> Tys;
2934         Tys.push_back(MVT::f64);
2935         Tys.push_back(MVT::Other);
2936         std::vector<SDOperand> Ops;
2937         Ops.push_back(Chain);
2938         Ops.push_back(MemLoc);
2939         Ops.push_back(DAG.getValueType(ArgVT));
2940         Copy = DAG.getNode(X86ISD::FLD, Tys, Ops);
2941         Tys.clear();
2942         Tys.push_back(MVT::Other);
2943         Tys.push_back(MVT::Flag);
2944         Ops.clear();
2945         Ops.push_back(Copy.getValue(1));
2946         Ops.push_back(Copy);
2947         Copy = DAG.getNode(X86ISD::FP_SET_RESULT, Tys, Ops);
2948       }
2949       break;
2950     }
2951     case 3:
2952       if (DAG.getMachineFunction().liveout_empty()) {
2953         DAG.getMachineFunction().addLiveOut(X86::EAX);
2954         DAG.getMachineFunction().addLiveOut(X86::EDX);
2955       }
2956
2957       Copy = DAG.getCopyToReg(Op.getOperand(0), X86::EDX, Op.getOperand(2), 
2958                               SDOperand());
2959       Copy = DAG.getCopyToReg(Copy, X86::EAX,Op.getOperand(1),Copy.getValue(1));
2960       break;
2961     }
2962     return DAG.getNode(X86ISD::RET_FLAG, MVT::Other,
2963                        Copy, DAG.getConstant(getBytesToPopOnReturn(), MVT::i16),
2964                        Copy.getValue(1));
2965   }
2966   case ISD::SCALAR_TO_VECTOR: {
2967     SDOperand AnyExt = DAG.getNode(ISD::ANY_EXTEND, MVT::i32, Op.getOperand(0));
2968     return DAG.getNode(X86ISD::S2VEC, Op.getValueType(), AnyExt);
2969   }
2970   case ISD::VECTOR_SHUFFLE: {
2971     SDOperand V1 = Op.getOperand(0);
2972     SDOperand V2 = Op.getOperand(1);
2973     SDOperand PermMask = Op.getOperand(2);
2974     MVT::ValueType VT = Op.getValueType();
2975     unsigned NumElems = PermMask.getNumOperands();
2976
2977     if (isSplatMask(PermMask.Val)) {
2978       if (NumElems <= 4) return Op;
2979       // Promote it to a v4i32 splat.
2980       return PromoteSplat(Op, DAG);
2981     }
2982
2983     if (X86::isMOVLMask(PermMask.Val) ||
2984         X86::isMOVSHDUPMask(PermMask.Val) ||
2985         X86::isMOVSLDUPMask(PermMask.Val) ||
2986         X86::isMOVHLPSMask(PermMask.Val) ||
2987         X86::isMOVHPMask(PermMask.Val) ||
2988         X86::isMOVLPMask(PermMask.Val))
2989       return Op;
2990
2991     if (ShouldXformToMOVHLPS(PermMask.Val) ||
2992         ShouldXformToMOVLP(V1.Val, PermMask.Val))
2993       return CommuteVectorShuffle(Op, DAG);
2994
2995     bool V1IsSplat = isSplatVector(V1.Val) || V1.getOpcode() == ISD::UNDEF;
2996     bool V2IsSplat = isSplatVector(V2.Val) || V2.getOpcode() == ISD::UNDEF;
2997     if (V1IsSplat && !V2IsSplat) {
2998       Op = CommuteVectorShuffle(Op, DAG);
2999       V1 = Op.getOperand(0);
3000       V2 = Op.getOperand(1);
3001       PermMask = Op.getOperand(2);
3002       V2IsSplat = true;
3003     }
3004
3005     if (isCommutedMOVL(PermMask.Val, V2IsSplat)) {
3006       Op = CommuteVectorShuffle(Op, DAG);
3007       V1 = Op.getOperand(0);
3008       V2 = Op.getOperand(1);
3009       PermMask = Op.getOperand(2);
3010       if (V2IsSplat) {
3011         // V2 is a splat, so the mask may be malformed. That is, it may point
3012         // to any V2 element. The instruction selectior won't like this. Get
3013         // a corrected mask and commute to form a proper MOVS{S|D}.
3014         SDOperand NewMask = getMOVLMask(NumElems, DAG);
3015         if (NewMask.Val != PermMask.Val)
3016           Op = DAG.getNode(ISD::VECTOR_SHUFFLE, VT, V1, V2, NewMask);
3017       }
3018       return Op;
3019     }
3020
3021     if (X86::isUNPCKL_v_undef_Mask(PermMask.Val) ||
3022         X86::isUNPCKLMask(PermMask.Val) ||
3023         X86::isUNPCKHMask(PermMask.Val))
3024       return Op;
3025
3026     if (V2IsSplat) {
3027       // Normalize mask so all entries that point to V2 points to its first
3028       // element then try to match unpck{h|l} again. If match, return a 
3029       // new vector_shuffle with the corrected mask.
3030       SDOperand NewMask = NormalizeMask(PermMask, DAG);
3031       if (NewMask.Val != PermMask.Val) {
3032         if (X86::isUNPCKLMask(PermMask.Val, true)) {
3033           SDOperand NewMask = getUnpacklMask(NumElems, DAG);
3034           return DAG.getNode(ISD::VECTOR_SHUFFLE, VT, V1, V2, NewMask);
3035         } else if (X86::isUNPCKHMask(PermMask.Val, true)) {
3036           SDOperand NewMask = getUnpackhMask(NumElems, DAG);
3037           return DAG.getNode(ISD::VECTOR_SHUFFLE, VT, V1, V2, NewMask);
3038         }
3039       }
3040     }
3041
3042     // Normalize the node to match x86 shuffle ops if needed
3043     if (V2.getOpcode() != ISD::UNDEF)
3044       if (isCommutedSHUFP(PermMask.Val)) {
3045         Op = CommuteVectorShuffle(Op, DAG);
3046         V1 = Op.getOperand(0);
3047         V2 = Op.getOperand(1);
3048         PermMask = Op.getOperand(2);
3049       }
3050
3051     // If VT is integer, try PSHUF* first, then SHUFP*.
3052     if (MVT::isInteger(VT)) {
3053       if (X86::isPSHUFDMask(PermMask.Val) ||
3054           X86::isPSHUFHWMask(PermMask.Val) ||
3055           X86::isPSHUFLWMask(PermMask.Val)) {
3056         if (V2.getOpcode() != ISD::UNDEF)
3057           return DAG.getNode(ISD::VECTOR_SHUFFLE, VT, V1,
3058                              DAG.getNode(ISD::UNDEF, V1.getValueType()),PermMask);
3059         return Op;
3060       }
3061
3062       if (X86::isSHUFPMask(PermMask.Val))
3063         return Op;
3064
3065       // Handle v8i16 shuffle high / low shuffle node pair.
3066       if (VT == MVT::v8i16 && isPSHUFHW_PSHUFLWMask(PermMask.Val)) {
3067         MVT::ValueType MaskVT = MVT::getIntVectorWithNumElements(NumElems);
3068         MVT::ValueType BaseVT = MVT::getVectorBaseType(MaskVT);
3069         std::vector<SDOperand> MaskVec;
3070         for (unsigned i = 0; i != 4; ++i)
3071           MaskVec.push_back(PermMask.getOperand(i));
3072         for (unsigned i = 4; i != 8; ++i)
3073           MaskVec.push_back(DAG.getConstant(i, BaseVT));
3074         SDOperand Mask = DAG.getNode(ISD::BUILD_VECTOR, MaskVT, MaskVec);
3075         V1 = DAG.getNode(ISD::VECTOR_SHUFFLE, VT, V1, V2, Mask);
3076         MaskVec.clear();
3077         for (unsigned i = 0; i != 4; ++i)
3078           MaskVec.push_back(DAG.getConstant(i, BaseVT));
3079         for (unsigned i = 4; i != 8; ++i)
3080           MaskVec.push_back(PermMask.getOperand(i));
3081         Mask = DAG.getNode(ISD::BUILD_VECTOR, MaskVT, MaskVec);
3082         return DAG.getNode(ISD::VECTOR_SHUFFLE, VT, V1, V2, Mask);
3083       }
3084     } else {
3085       // Floating point cases in the other order.
3086       if (X86::isSHUFPMask(PermMask.Val))
3087         return Op;
3088       if (X86::isPSHUFDMask(PermMask.Val) ||
3089           X86::isPSHUFHWMask(PermMask.Val) ||
3090           X86::isPSHUFLWMask(PermMask.Val)) {
3091         if (V2.getOpcode() != ISD::UNDEF)
3092           return DAG.getNode(ISD::VECTOR_SHUFFLE, VT, V1,
3093                              DAG.getNode(ISD::UNDEF, V1.getValueType()),PermMask);
3094         return Op;
3095       }
3096     }
3097
3098     if (NumElems == 4) {
3099       // Break it into (shuffle shuffle_hi, shuffle_lo).
3100       MVT::ValueType MaskVT = PermMask.getValueType();
3101       MVT::ValueType MaskEVT = MVT::getVectorBaseType(MaskVT);
3102       std::map<unsigned, std::pair<int, int> > Locs;
3103       std::vector<SDOperand> LoMask(NumElems, DAG.getNode(ISD::UNDEF, MaskEVT));
3104       std::vector<SDOperand> HiMask(NumElems, DAG.getNode(ISD::UNDEF, MaskEVT));
3105       std::vector<SDOperand> *MaskPtr = &LoMask;
3106       unsigned MaskIdx = 0;
3107       unsigned LoIdx = 0;
3108       unsigned HiIdx = NumElems/2;
3109       for (unsigned i = 0; i != NumElems; ++i) {
3110         if (i == NumElems/2) {
3111           MaskPtr = &HiMask;
3112           MaskIdx = 1;
3113           LoIdx = 0;
3114           HiIdx = NumElems/2;
3115         }
3116         SDOperand Elt = PermMask.getOperand(i);
3117         if (Elt.getOpcode() == ISD::UNDEF) {
3118           Locs[i] = std::make_pair(-1, -1);
3119         } else if (cast<ConstantSDNode>(Elt)->getValue() < NumElems) {
3120           Locs[i] = std::make_pair(MaskIdx, LoIdx);
3121           (*MaskPtr)[LoIdx] = Elt;
3122           LoIdx++;
3123         } else {
3124           Locs[i] = std::make_pair(MaskIdx, HiIdx);
3125           (*MaskPtr)[HiIdx] = Elt;
3126           HiIdx++;
3127         }
3128       }
3129
3130       SDOperand LoShuffle = DAG.getNode(ISD::VECTOR_SHUFFLE, VT, V1, V2,
3131                                 DAG.getNode(ISD::BUILD_VECTOR, MaskVT, LoMask));
3132       SDOperand HiShuffle = DAG.getNode(ISD::VECTOR_SHUFFLE, VT, V1, V2,
3133                                 DAG.getNode(ISD::BUILD_VECTOR, MaskVT, HiMask));
3134       std::vector<SDOperand> MaskOps;
3135       for (unsigned i = 0; i != NumElems; ++i) {
3136         if (Locs[i].first == -1) {
3137           MaskOps.push_back(DAG.getNode(ISD::UNDEF, MaskEVT));
3138         } else {
3139           unsigned Idx = Locs[i].first * NumElems + Locs[i].second;
3140           MaskOps.push_back(DAG.getConstant(Idx, MaskEVT));
3141         }
3142       }
3143       return DAG.getNode(ISD::VECTOR_SHUFFLE, VT, LoShuffle, HiShuffle,
3144                          DAG.getNode(ISD::BUILD_VECTOR, MaskVT, MaskOps));
3145     }
3146
3147     return SDOperand();
3148   }
3149   case ISD::BUILD_VECTOR: {
3150     // All one's are handled with pcmpeqd.
3151     if (ISD::isBuildVectorAllOnes(Op.Val))
3152       return Op;
3153
3154     unsigned NumElems = Op.getNumOperands();
3155     if (NumElems == 2)
3156       return SDOperand();
3157
3158     unsigned Half = NumElems/2;
3159     MVT::ValueType VT = Op.getValueType();
3160     MVT::ValueType EVT = MVT::getVectorBaseType(VT);
3161     unsigned NumZero  = 0;
3162     unsigned NonZeros = 0;
3163     std::set<SDOperand> Values;
3164     for (unsigned i = 0; i < NumElems; ++i) {
3165       SDOperand Elt = Op.getOperand(i);
3166       Values.insert(Elt);
3167       if (isZeroNode(Elt))
3168         NumZero++;
3169       else if (Elt.getOpcode() != ISD::UNDEF)
3170         NonZeros |= (1 << i);
3171     }
3172
3173     unsigned NumNonZero = CountPopulation_32(NonZeros);
3174     if (NumNonZero == 0)
3175       return Op;
3176
3177     // Splat is obviously ok. Let legalizer expand it to a shuffle.
3178     if (Values.size() == 1)
3179       return SDOperand();
3180
3181     // If element VT is >= 32 bits, turn it into a number of shuffles.
3182     if (NumNonZero == 1) {
3183       unsigned Idx = CountTrailingZeros_32(NonZeros);
3184       SDOperand Item = Op.getOperand(Idx);
3185       Item = DAG.getNode(ISD::SCALAR_TO_VECTOR, VT, Item);
3186       if (Idx == 0)
3187         // Turn it into a MOVL (i.e. movss, movsd, or movd) to a zero vector.
3188         return getShuffleVectorZeroOrUndef(Item, VT, NumElems, Idx,
3189                                            NumZero > 0, DAG);
3190
3191       if (MVT::getSizeInBits(EVT) >= 32) {
3192         // Turn it into a shuffle of zero and zero-extended scalar to vector.
3193         Item = getShuffleVectorZeroOrUndef(Item, VT, NumElems, 0, NumZero > 0,
3194                                            DAG);
3195         MVT::ValueType MaskVT  = MVT::getIntVectorWithNumElements(NumElems);
3196         MVT::ValueType MaskEVT = MVT::getVectorBaseType(MaskVT);
3197         std::vector<SDOperand> MaskVec;
3198         for (unsigned i = 0; i < NumElems; i++)
3199           MaskVec.push_back(DAG.getConstant((i == Idx) ? 0 : 1, MaskEVT));
3200         SDOperand Mask = DAG.getNode(ISD::BUILD_VECTOR, MaskVT, MaskVec);
3201         return DAG.getNode(ISD::VECTOR_SHUFFLE, VT, Item,
3202                            DAG.getNode(ISD::UNDEF, VT), Mask);
3203       }
3204     }
3205
3206     // If element VT is < 32 bits, convert it to inserts into a zero vector.
3207     if (MVT::getSizeInBits(EVT) <= 16) {
3208       if (NumNonZero <= Half) {
3209         SDOperand V(0, 0);
3210
3211         for (unsigned i = 0; i < NumNonZero; ++i) {
3212           unsigned Idx = CountTrailingZeros_32(NonZeros);
3213           NonZeros ^= (1 << Idx);
3214           SDOperand Item = Op.getOperand(Idx);
3215           if (i == 0) {
3216             if (NumZero)
3217               V = getZeroVector(MVT::v8i16, DAG);
3218             else
3219               V = DAG.getNode(ISD::UNDEF, MVT::v8i16);
3220           }
3221           if (EVT == MVT::i8) {
3222             Item = DAG.getNode(ISD::ANY_EXTEND, MVT::i16, Item);
3223             if ((Idx % 2) != 0)
3224               Item = DAG.getNode(ISD::SHL, MVT::i16,
3225                                  Item, DAG.getConstant(8, MVT::i8));
3226             Idx /= 2;
3227           }
3228           V = DAG.getNode(ISD::INSERT_VECTOR_ELT, MVT::v8i16, V, Item,
3229                           DAG.getConstant(Idx, MVT::i32));
3230         }
3231
3232         if (EVT == MVT::i8)
3233           V = DAG.getNode(ISD::BIT_CONVERT, VT, V);
3234         return V;
3235       }
3236     }
3237
3238     std::vector<SDOperand> V(NumElems);
3239     if (NumElems == 4 && NumZero > 0) {
3240       for (unsigned i = 0; i < 4; ++i) {
3241         bool isZero = !(NonZeros & (1 << i));
3242         if (isZero)
3243           V[i] = getZeroVector(VT, DAG);
3244         else
3245           V[i] = DAG.getNode(ISD::SCALAR_TO_VECTOR, VT, Op.getOperand(i));
3246       }
3247
3248       for (unsigned i = 0; i < 2; ++i) {
3249         switch ((NonZeros & (0x3 << i*2)) >> (i*2)) {
3250         default: break;
3251         case 0:
3252           V[i] = V[i*2];  // Must be a zero vector.
3253           break;
3254         case 1:
3255           V[i] = DAG.getNode(ISD::VECTOR_SHUFFLE, VT, V[i*2+1], V[i*2],
3256                              getMOVLMask(NumElems, DAG));
3257           break;
3258         case 2:
3259           V[i] = DAG.getNode(ISD::VECTOR_SHUFFLE, VT, V[i*2], V[i*2+1],
3260                              getMOVLMask(NumElems, DAG));
3261           break;
3262         case 3:
3263           V[i] = DAG.getNode(ISD::VECTOR_SHUFFLE, VT, V[i*2], V[i*2+1],
3264                              getUnpacklMask(NumElems, DAG));
3265           break;
3266         }
3267       }
3268
3269       // Take advantage of the fact R32 to VR128 scalar_to_vector (i.e. movd)
3270       // clears the upper bits. 
3271       // FIXME: we can do the same for v4f32 case when we know both parts of
3272       // the lower half come from scalar_to_vector (loadf32). We should do
3273       // that in post legalizer dag combiner with target specific hooks.
3274       if (MVT::isInteger(EVT) && (NonZeros & (0x3 << 2)) == 0)
3275         return V[0];
3276       MVT::ValueType MaskVT = MVT::getIntVectorWithNumElements(NumElems);
3277       MVT::ValueType EVT = MVT::getVectorBaseType(MaskVT);
3278       std::vector<SDOperand> MaskVec;
3279       bool Reverse = (NonZeros & 0x3) == 2;
3280       for (unsigned i = 0; i < 2; ++i)
3281         if (Reverse)
3282           MaskVec.push_back(DAG.getConstant(1-i, EVT));
3283         else
3284           MaskVec.push_back(DAG.getConstant(i, EVT));
3285       Reverse = ((NonZeros & (0x3 << 2)) >> 2) == 2;
3286       for (unsigned i = 0; i < 2; ++i)
3287         if (Reverse)
3288           MaskVec.push_back(DAG.getConstant(1-i+NumElems, EVT));
3289         else
3290           MaskVec.push_back(DAG.getConstant(i+NumElems, EVT));
3291       SDOperand ShufMask = DAG.getNode(ISD::BUILD_VECTOR, MaskVT, MaskVec);
3292       return DAG.getNode(ISD::VECTOR_SHUFFLE, VT, V[0], V[1], ShufMask);
3293     }
3294
3295     if (Values.size() > 2) {
3296       // Expand into a number of unpckl*.
3297       // e.g. for v4f32
3298       //   Step 1: unpcklps 0, 2 ==> X: <?, ?, 2, 0>
3299       //         : unpcklps 1, 3 ==> Y: <?, ?, 3, 1>
3300       //   Step 2: unpcklps X, Y ==>    <3, 2, 1, 0>
3301       SDOperand UnpckMask = getUnpacklMask(NumElems, DAG);
3302       for (unsigned i = 0; i < NumElems; ++i)
3303         V[i] = DAG.getNode(ISD::SCALAR_TO_VECTOR, VT, Op.getOperand(i));
3304       NumElems >>= 1;
3305       while (NumElems != 0) {
3306         for (unsigned i = 0; i < NumElems; ++i)
3307           V[i] = DAG.getNode(ISD::VECTOR_SHUFFLE, VT, V[i], V[i + NumElems],
3308                              UnpckMask);
3309         NumElems >>= 1;
3310       }
3311       return V[0];
3312     }
3313
3314     return SDOperand();
3315   }
3316   case ISD::EXTRACT_VECTOR_ELT: {
3317     if (!isa<ConstantSDNode>(Op.getOperand(1)))
3318         return SDOperand();
3319
3320     MVT::ValueType VT = Op.getValueType();
3321     // TODO: handle v16i8.
3322     if (MVT::getSizeInBits(VT) == 16) {
3323       // Transform it so it match pextrw which produces a 32-bit result.
3324       MVT::ValueType EVT = (MVT::ValueType)(VT+1);
3325       SDOperand Extract = DAG.getNode(X86ISD::PEXTRW, EVT,
3326                                       Op.getOperand(0), Op.getOperand(1));
3327       SDOperand Assert  = DAG.getNode(ISD::AssertZext, EVT, Extract,
3328                                       DAG.getValueType(VT));
3329       return DAG.getNode(ISD::TRUNCATE, VT, Assert);
3330     } else if (MVT::getSizeInBits(VT) == 32) {
3331       SDOperand Vec = Op.getOperand(0);
3332       unsigned Idx = cast<ConstantSDNode>(Op.getOperand(1))->getValue();
3333       if (Idx == 0)
3334         return Op;
3335
3336       // SHUFPS the element to the lowest double word, then movss.
3337       MVT::ValueType MaskVT = MVT::getIntVectorWithNumElements(4);
3338       SDOperand IdxNode = DAG.getConstant((Idx < 2) ? Idx : Idx+4,
3339                                           MVT::getVectorBaseType(MaskVT));
3340       std::vector<SDOperand> IdxVec;
3341       IdxVec.push_back(DAG.getConstant(Idx, MVT::getVectorBaseType(MaskVT)));
3342       IdxVec.push_back(DAG.getNode(ISD::UNDEF, MVT::getVectorBaseType(MaskVT)));
3343       IdxVec.push_back(DAG.getNode(ISD::UNDEF, MVT::getVectorBaseType(MaskVT)));
3344       IdxVec.push_back(DAG.getNode(ISD::UNDEF, MVT::getVectorBaseType(MaskVT)));
3345       SDOperand Mask = DAG.getNode(ISD::BUILD_VECTOR, MaskVT, IdxVec);
3346       Vec = DAG.getNode(ISD::VECTOR_SHUFFLE, Vec.getValueType(),
3347                         Vec, Vec, Mask);
3348       return DAG.getNode(ISD::EXTRACT_VECTOR_ELT, VT, Vec,
3349                          DAG.getConstant(0, MVT::i32));
3350     } else if (MVT::getSizeInBits(VT) == 64) {
3351       SDOperand Vec = Op.getOperand(0);
3352       unsigned Idx = cast<ConstantSDNode>(Op.getOperand(1))->getValue();
3353       if (Idx == 0)
3354         return Op;
3355
3356       // UNPCKHPD the element to the lowest double word, then movsd.
3357       // Note if the lower 64 bits of the result of the UNPCKHPD is then stored
3358       // to a f64mem, the whole operation is folded into a single MOVHPDmr.
3359       MVT::ValueType MaskVT = MVT::getIntVectorWithNumElements(4);
3360       std::vector<SDOperand> IdxVec;
3361       IdxVec.push_back(DAG.getConstant(1, MVT::getVectorBaseType(MaskVT)));
3362       IdxVec.push_back(DAG.getNode(ISD::UNDEF, MVT::getVectorBaseType(MaskVT)));
3363       SDOperand Mask = DAG.getNode(ISD::BUILD_VECTOR, MaskVT, IdxVec);
3364       Vec = DAG.getNode(ISD::VECTOR_SHUFFLE, Vec.getValueType(),
3365                         Vec, DAG.getNode(ISD::UNDEF, Vec.getValueType()), Mask);
3366       return DAG.getNode(ISD::EXTRACT_VECTOR_ELT, VT, Vec,
3367                          DAG.getConstant(0, MVT::i32));
3368     }
3369
3370     return SDOperand();
3371   }
3372   case ISD::INSERT_VECTOR_ELT: {
3373     // Transform it so it match pinsrw which expects a 16-bit value in a R32
3374     // as its second argument.
3375     MVT::ValueType VT = Op.getValueType();
3376     MVT::ValueType BaseVT = MVT::getVectorBaseType(VT);
3377     SDOperand N0 = Op.getOperand(0);
3378     SDOperand N1 = Op.getOperand(1);
3379     SDOperand N2 = Op.getOperand(2);
3380     if (MVT::getSizeInBits(BaseVT) == 16) {
3381       if (N1.getValueType() != MVT::i32)
3382         N1 = DAG.getNode(ISD::ANY_EXTEND, MVT::i32, N1);
3383       if (N2.getValueType() != MVT::i32)
3384         N2 = DAG.getConstant(cast<ConstantSDNode>(N2)->getValue(), MVT::i32);
3385       return DAG.getNode(X86ISD::PINSRW, VT, N0, N1, N2);
3386     } else if (MVT::getSizeInBits(BaseVT) == 32) {
3387       unsigned Idx = cast<ConstantSDNode>(N2)->getValue();
3388       if (Idx == 0) {
3389         // Use a movss.
3390         N1 = DAG.getNode(ISD::SCALAR_TO_VECTOR, VT, N1);
3391         MVT::ValueType MaskVT = MVT::getIntVectorWithNumElements(4);
3392         MVT::ValueType BaseVT = MVT::getVectorBaseType(MaskVT);
3393         std::vector<SDOperand> MaskVec;
3394         MaskVec.push_back(DAG.getConstant(4, BaseVT));
3395         for (unsigned i = 1; i <= 3; ++i)
3396           MaskVec.push_back(DAG.getConstant(i, BaseVT));
3397         return DAG.getNode(ISD::VECTOR_SHUFFLE, VT, N0, N1,
3398                            DAG.getNode(ISD::BUILD_VECTOR, MaskVT, MaskVec));
3399       } else {
3400         // Use two pinsrw instructions to insert a 32 bit value.
3401         Idx <<= 1;
3402         if (MVT::isFloatingPoint(N1.getValueType())) {
3403           if (N1.getOpcode() == ISD::LOAD) {
3404             // Just load directly from f32mem to R32.
3405             N1 = DAG.getLoad(MVT::i32, N1.getOperand(0), N1.getOperand(1),
3406                              N1.getOperand(2));
3407           } else {
3408             N1 = DAG.getNode(ISD::SCALAR_TO_VECTOR, MVT::v4f32, N1);
3409             N1 = DAG.getNode(ISD::BIT_CONVERT, MVT::v4i32, N1);
3410             N1 = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, MVT::i32, N1,
3411                              DAG.getConstant(0, MVT::i32));
3412           }
3413         }
3414         N0 = DAG.getNode(ISD::BIT_CONVERT, MVT::v8i16, N0);
3415         N0 = DAG.getNode(X86ISD::PINSRW, MVT::v8i16, N0, N1,
3416                          DAG.getConstant(Idx, MVT::i32));
3417         N1 = DAG.getNode(ISD::SRL, MVT::i32, N1, DAG.getConstant(16, MVT::i8));
3418         N0 = DAG.getNode(X86ISD::PINSRW, MVT::v8i16, N0, N1,
3419                          DAG.getConstant(Idx+1, MVT::i32));
3420         return DAG.getNode(ISD::BIT_CONVERT, VT, N0);
3421       }
3422     }
3423
3424     return SDOperand();
3425   }
3426   case ISD::INTRINSIC_WO_CHAIN: {
3427     unsigned IntNo = cast<ConstantSDNode>(Op.getOperand(0))->getValue();
3428     switch (IntNo) {
3429     default: return SDOperand();    // Don't custom lower most intrinsics.
3430     // Comparison intrinsics.
3431     case Intrinsic::x86_sse_comieq_ss:
3432     case Intrinsic::x86_sse_comilt_ss:
3433     case Intrinsic::x86_sse_comile_ss:
3434     case Intrinsic::x86_sse_comigt_ss:
3435     case Intrinsic::x86_sse_comige_ss:
3436     case Intrinsic::x86_sse_comineq_ss:
3437     case Intrinsic::x86_sse_ucomieq_ss:
3438     case Intrinsic::x86_sse_ucomilt_ss:
3439     case Intrinsic::x86_sse_ucomile_ss:
3440     case Intrinsic::x86_sse_ucomigt_ss:
3441     case Intrinsic::x86_sse_ucomige_ss:
3442     case Intrinsic::x86_sse_ucomineq_ss:
3443     case Intrinsic::x86_sse2_comieq_sd:
3444     case Intrinsic::x86_sse2_comilt_sd:
3445     case Intrinsic::x86_sse2_comile_sd:
3446     case Intrinsic::x86_sse2_comigt_sd:
3447     case Intrinsic::x86_sse2_comige_sd:
3448     case Intrinsic::x86_sse2_comineq_sd:
3449     case Intrinsic::x86_sse2_ucomieq_sd:
3450     case Intrinsic::x86_sse2_ucomilt_sd:
3451     case Intrinsic::x86_sse2_ucomile_sd:
3452     case Intrinsic::x86_sse2_ucomigt_sd:
3453     case Intrinsic::x86_sse2_ucomige_sd:
3454     case Intrinsic::x86_sse2_ucomineq_sd: {
3455       unsigned Opc = 0;
3456       ISD::CondCode CC = ISD::SETCC_INVALID;
3457       switch (IntNo) {
3458         default: break;
3459         case Intrinsic::x86_sse_comieq_ss: 
3460         case Intrinsic::x86_sse2_comieq_sd: 
3461           Opc = X86ISD::COMI;
3462           CC = ISD::SETEQ;
3463           break;
3464         case Intrinsic::x86_sse_comilt_ss:
3465         case Intrinsic::x86_sse2_comilt_sd:
3466           Opc = X86ISD::COMI;
3467           CC = ISD::SETLT;
3468           break;
3469         case Intrinsic::x86_sse_comile_ss:
3470         case Intrinsic::x86_sse2_comile_sd:
3471           Opc = X86ISD::COMI;
3472           CC = ISD::SETLE;
3473           break;
3474         case Intrinsic::x86_sse_comigt_ss:
3475         case Intrinsic::x86_sse2_comigt_sd:
3476           Opc = X86ISD::COMI;
3477           CC = ISD::SETGT;
3478           break;
3479         case Intrinsic::x86_sse_comige_ss:
3480         case Intrinsic::x86_sse2_comige_sd:
3481           Opc = X86ISD::COMI;
3482           CC = ISD::SETGE;
3483           break;
3484         case Intrinsic::x86_sse_comineq_ss:
3485         case Intrinsic::x86_sse2_comineq_sd:
3486           Opc = X86ISD::COMI;
3487           CC = ISD::SETNE;
3488           break;
3489         case Intrinsic::x86_sse_ucomieq_ss:
3490         case Intrinsic::x86_sse2_ucomieq_sd:
3491           Opc = X86ISD::UCOMI;
3492           CC = ISD::SETEQ;
3493           break;
3494         case Intrinsic::x86_sse_ucomilt_ss:
3495         case Intrinsic::x86_sse2_ucomilt_sd:
3496           Opc = X86ISD::UCOMI;
3497           CC = ISD::SETLT;
3498           break;
3499         case Intrinsic::x86_sse_ucomile_ss:
3500         case Intrinsic::x86_sse2_ucomile_sd:
3501           Opc = X86ISD::UCOMI;
3502           CC = ISD::SETLE;
3503           break;
3504         case Intrinsic::x86_sse_ucomigt_ss:
3505         case Intrinsic::x86_sse2_ucomigt_sd:
3506           Opc = X86ISD::UCOMI;
3507           CC = ISD::SETGT;
3508           break;
3509         case Intrinsic::x86_sse_ucomige_ss:
3510         case Intrinsic::x86_sse2_ucomige_sd:
3511           Opc = X86ISD::UCOMI;
3512           CC = ISD::SETGE;
3513           break;
3514         case Intrinsic::x86_sse_ucomineq_ss:
3515         case Intrinsic::x86_sse2_ucomineq_sd:
3516           Opc = X86ISD::UCOMI;
3517           CC = ISD::SETNE;
3518           break;
3519       }
3520       bool Flip;
3521       unsigned X86CC;
3522       translateX86CC(CC, true, X86CC, Flip);
3523       SDOperand Cond = DAG.getNode(Opc, MVT::Flag, Op.getOperand(Flip?2:1),
3524                                    Op.getOperand(Flip?1:2));
3525       SDOperand SetCC = DAG.getNode(X86ISD::SETCC, MVT::i8, 
3526                                     DAG.getConstant(X86CC, MVT::i8), Cond);
3527       return DAG.getNode(ISD::ANY_EXTEND, MVT::i32, SetCC);
3528     }
3529     }
3530   }
3531   }
3532 }
3533
3534 const char *X86TargetLowering::getTargetNodeName(unsigned Opcode) const {
3535   switch (Opcode) {
3536   default: return NULL;
3537   case X86ISD::SHLD:               return "X86ISD::SHLD";
3538   case X86ISD::SHRD:               return "X86ISD::SHRD";
3539   case X86ISD::FAND:               return "X86ISD::FAND";
3540   case X86ISD::FXOR:               return "X86ISD::FXOR";
3541   case X86ISD::FILD:               return "X86ISD::FILD";
3542   case X86ISD::FILD_FLAG:          return "X86ISD::FILD_FLAG";
3543   case X86ISD::FP_TO_INT16_IN_MEM: return "X86ISD::FP_TO_INT16_IN_MEM";
3544   case X86ISD::FP_TO_INT32_IN_MEM: return "X86ISD::FP_TO_INT32_IN_MEM";
3545   case X86ISD::FP_TO_INT64_IN_MEM: return "X86ISD::FP_TO_INT64_IN_MEM";
3546   case X86ISD::FLD:                return "X86ISD::FLD";
3547   case X86ISD::FST:                return "X86ISD::FST";
3548   case X86ISD::FP_GET_RESULT:      return "X86ISD::FP_GET_RESULT";
3549   case X86ISD::FP_SET_RESULT:      return "X86ISD::FP_SET_RESULT";
3550   case X86ISD::CALL:               return "X86ISD::CALL";
3551   case X86ISD::TAILCALL:           return "X86ISD::TAILCALL";
3552   case X86ISD::RDTSC_DAG:          return "X86ISD::RDTSC_DAG";
3553   case X86ISD::CMP:                return "X86ISD::CMP";
3554   case X86ISD::TEST:               return "X86ISD::TEST";
3555   case X86ISD::COMI:               return "X86ISD::COMI";
3556   case X86ISD::UCOMI:              return "X86ISD::UCOMI";
3557   case X86ISD::SETCC:              return "X86ISD::SETCC";
3558   case X86ISD::CMOV:               return "X86ISD::CMOV";
3559   case X86ISD::BRCOND:             return "X86ISD::BRCOND";
3560   case X86ISD::RET_FLAG:           return "X86ISD::RET_FLAG";
3561   case X86ISD::REP_STOS:           return "X86ISD::REP_STOS";
3562   case X86ISD::REP_MOVS:           return "X86ISD::REP_MOVS";
3563   case X86ISD::LOAD_PACK:          return "X86ISD::LOAD_PACK";
3564   case X86ISD::GlobalBaseReg:      return "X86ISD::GlobalBaseReg";
3565   case X86ISD::Wrapper:            return "X86ISD::Wrapper";
3566   case X86ISD::S2VEC:              return "X86ISD::S2VEC";
3567   case X86ISD::PEXTRW:             return "X86ISD::PEXTRW";
3568   case X86ISD::PINSRW:             return "X86ISD::PINSRW";
3569   }
3570 }
3571
3572 void X86TargetLowering::computeMaskedBitsForTargetNode(const SDOperand Op,
3573                                                        uint64_t Mask,
3574                                                        uint64_t &KnownZero, 
3575                                                        uint64_t &KnownOne,
3576                                                        unsigned Depth) const {
3577   unsigned Opc = Op.getOpcode();
3578   assert((Opc >= ISD::BUILTIN_OP_END ||
3579           Opc == ISD::INTRINSIC_WO_CHAIN ||
3580           Opc == ISD::INTRINSIC_W_CHAIN ||
3581           Opc == ISD::INTRINSIC_VOID) &&
3582          "Should use MaskedValueIsZero if you don't know whether Op"
3583          " is a target node!");
3584
3585   KnownZero = KnownOne = 0;   // Don't know anything.
3586   switch (Opc) {
3587   default: break;
3588   case X86ISD::SETCC: 
3589     KnownZero |= (MVT::getIntVTBitMask(Op.getValueType()) ^ 1ULL);
3590     break;
3591   }
3592 }
3593
3594 std::vector<unsigned> X86TargetLowering::
3595 getRegClassForInlineAsmConstraint(const std::string &Constraint,
3596                                   MVT::ValueType VT) const {
3597   if (Constraint.size() == 1) {
3598     // FIXME: not handling fp-stack yet!
3599     // FIXME: not handling MMX registers yet ('y' constraint).
3600     switch (Constraint[0]) {      // GCC X86 Constraint Letters
3601     default: break;  // Unknown constriant letter
3602     case 'r':   // GENERAL_REGS
3603     case 'R':   // LEGACY_REGS
3604       return make_vector<unsigned>(X86::EAX, X86::EBX, X86::ECX, X86::EDX,
3605                                    X86::ESI, X86::EDI, X86::EBP, X86::ESP, 0);
3606     case 'l':   // INDEX_REGS
3607       return make_vector<unsigned>(X86::EAX, X86::EBX, X86::ECX, X86::EDX,
3608                                    X86::ESI, X86::EDI, X86::EBP, 0);
3609     case 'q':   // Q_REGS (GENERAL_REGS in 64-bit mode)
3610     case 'Q':   // Q_REGS
3611       return make_vector<unsigned>(X86::EAX, X86::EBX, X86::ECX, X86::EDX, 0);
3612     case 'x':   // SSE_REGS if SSE1 allowed
3613       if (Subtarget->hasSSE1())
3614         return make_vector<unsigned>(X86::XMM0, X86::XMM1, X86::XMM2, X86::XMM3,
3615                                      X86::XMM4, X86::XMM5, X86::XMM6, X86::XMM7,
3616                                      0);
3617       return std::vector<unsigned>();
3618     case 'Y':   // SSE_REGS if SSE2 allowed
3619       if (Subtarget->hasSSE2())
3620         return make_vector<unsigned>(X86::XMM0, X86::XMM1, X86::XMM2, X86::XMM3,
3621                                      X86::XMM4, X86::XMM5, X86::XMM6, X86::XMM7,
3622                                      0);
3623       return std::vector<unsigned>();
3624     }
3625   }
3626   
3627   return std::vector<unsigned>();
3628 }
3629
3630 /// isLegalAddressImmediate - Return true if the integer value or
3631 /// GlobalValue can be used as the offset of the target addressing mode.
3632 bool X86TargetLowering::isLegalAddressImmediate(int64_t V) const {
3633   // X86 allows a sign-extended 32-bit immediate field.
3634   return (V > -(1LL << 32) && V < (1LL << 32)-1);
3635 }
3636
3637 bool X86TargetLowering::isLegalAddressImmediate(GlobalValue *GV) const {
3638   if (Subtarget->isTargetDarwin()) {
3639     Reloc::Model RModel = getTargetMachine().getRelocationModel();
3640     if (RModel == Reloc::Static)
3641       return true;
3642     else if (RModel == Reloc::DynamicNoPIC)
3643       return !DarwinGVRequiresExtraLoad(GV);
3644     else
3645       return false;
3646   } else
3647     return true;
3648 }
3649
3650 /// isShuffleMaskLegal - Targets can use this to indicate that they only
3651 /// support *some* VECTOR_SHUFFLE operations, those with specific masks.
3652 /// By default, if a target supports the VECTOR_SHUFFLE node, all mask values
3653 /// are assumed to be legal.
3654 bool
3655 X86TargetLowering::isShuffleMaskLegal(SDOperand Mask, MVT::ValueType VT) const {
3656   // Only do shuffles on 128-bit vector types for now.
3657   if (MVT::getSizeInBits(VT) == 64) return false;
3658   return (Mask.Val->getNumOperands() <= 4 ||
3659           isSplatMask(Mask.Val)  ||
3660           isPSHUFHW_PSHUFLWMask(Mask.Val) ||
3661           X86::isUNPCKLMask(Mask.Val) ||
3662           X86::isUNPCKL_v_undef_Mask(Mask.Val) ||
3663           X86::isUNPCKHMask(Mask.Val));
3664 }
3665
3666 bool X86TargetLowering::isVectorClearMaskLegal(std::vector<SDOperand> &BVOps,
3667                                                MVT::ValueType EVT,
3668                                                SelectionDAG &DAG) const {
3669   unsigned NumElts = BVOps.size();
3670   // Only do shuffles on 128-bit vector types for now.
3671   if (MVT::getSizeInBits(EVT) * NumElts == 64) return false;
3672   if (NumElts == 2) return true;
3673   if (NumElts == 4) {
3674     return (isMOVLMask(BVOps)  || isCommutedMOVL(BVOps, true) ||
3675             isSHUFPMask(BVOps) || isCommutedSHUFP(BVOps));
3676   }
3677   return false;
3678 }