[x86] Implement a faster vector population count based on the PSHUFB
[oota-llvm.git] / lib / Target / X86 / X86ISelLowering.h
1 //===-- X86ISelLowering.h - X86 DAG Lowering Interface ----------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines the interfaces that X86 uses to lower LLVM code into a
11 // selection DAG.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #ifndef LLVM_LIB_TARGET_X86_X86ISELLOWERING_H
16 #define LLVM_LIB_TARGET_X86_X86ISELLOWERING_H
17
18 #include "llvm/CodeGen/CallingConvLower.h"
19 #include "llvm/CodeGen/SelectionDAG.h"
20 #include "llvm/Target/TargetLowering.h"
21 #include "llvm/Target/TargetOptions.h"
22
23 namespace llvm {
24   class X86Subtarget;
25   class X86TargetMachine;
26
27   namespace X86ISD {
28     // X86 Specific DAG Nodes
29     enum NodeType : unsigned {
30       // Start the numbering where the builtin ops leave off.
31       FIRST_NUMBER = ISD::BUILTIN_OP_END,
32
33       /// Bit scan forward.
34       BSF,
35       /// Bit scan reverse.
36       BSR,
37
38       /// Double shift instructions. These correspond to
39       /// X86::SHLDxx and X86::SHRDxx instructions.
40       SHLD,
41       SHRD,
42
43       /// Bitwise logical AND of floating point values. This corresponds
44       /// to X86::ANDPS or X86::ANDPD.
45       FAND,
46
47       /// Bitwise logical OR of floating point values. This corresponds
48       /// to X86::ORPS or X86::ORPD.
49       FOR,
50
51       /// Bitwise logical XOR of floating point values. This corresponds
52       /// to X86::XORPS or X86::XORPD.
53       FXOR,
54
55       ///  Bitwise logical ANDNOT of floating point values. This
56       /// corresponds to X86::ANDNPS or X86::ANDNPD.
57       FANDN,
58
59       /// Bitwise logical right shift of floating point values. This
60       /// corresponds to X86::PSRLDQ.
61       FSRL,
62
63       /// These operations represent an abstract X86 call
64       /// instruction, which includes a bunch of information.  In particular the
65       /// operands of these node are:
66       ///
67       ///     #0 - The incoming token chain
68       ///     #1 - The callee
69       ///     #2 - The number of arg bytes the caller pushes on the stack.
70       ///     #3 - The number of arg bytes the callee pops off the stack.
71       ///     #4 - The value to pass in AL/AX/EAX (optional)
72       ///     #5 - The value to pass in DL/DX/EDX (optional)
73       ///
74       /// The result values of these nodes are:
75       ///
76       ///     #0 - The outgoing token chain
77       ///     #1 - The first register result value (optional)
78       ///     #2 - The second register result value (optional)
79       ///
80       CALL,
81
82       /// This operation implements the lowering for readcyclecounter
83       RDTSC_DAG,
84
85       /// X86 Read Time-Stamp Counter and Processor ID.
86       RDTSCP_DAG,
87
88       /// X86 Read Performance Monitoring Counters.
89       RDPMC_DAG,
90
91       /// X86 compare and logical compare instructions.
92       CMP, COMI, UCOMI,
93
94       /// X86 bit-test instructions.
95       BT,
96
97       /// X86 SetCC. Operand 0 is condition code, and operand 1 is the EFLAGS
98       /// operand, usually produced by a CMP instruction.
99       SETCC,
100
101       /// X86 Select
102       SELECT,
103
104       // Same as SETCC except it's materialized with a sbb and the value is all
105       // one's or all zero's.
106       SETCC_CARRY,  // R = carry_bit ? ~0 : 0
107
108       /// X86 FP SETCC, implemented with CMP{cc}SS/CMP{cc}SD.
109       /// Operands are two FP values to compare; result is a mask of
110       /// 0s or 1s.  Generally DTRT for C/C++ with NaNs.
111       FSETCC,
112
113       /// X86 MOVMSK{pd|ps}, extracts sign bits of two or four FP values,
114       /// result in an integer GPR.  Needs masking for scalar result.
115       FGETSIGNx86,
116
117       /// X86 conditional moves. Operand 0 and operand 1 are the two values
118       /// to select from. Operand 2 is the condition code, and operand 3 is the
119       /// flag operand produced by a CMP or TEST instruction. It also writes a
120       /// flag result.
121       CMOV,
122
123       /// X86 conditional branches. Operand 0 is the chain operand, operand 1
124       /// is the block to branch if condition is true, operand 2 is the
125       /// condition code, and operand 3 is the flag operand produced by a CMP
126       /// or TEST instruction.
127       BRCOND,
128
129       /// Return with a flag operand. Operand 0 is the chain operand, operand
130       /// 1 is the number of bytes of stack to pop.
131       RET_FLAG,
132
133       /// Repeat fill, corresponds to X86::REP_STOSx.
134       REP_STOS,
135
136       /// Repeat move, corresponds to X86::REP_MOVSx.
137       REP_MOVS,
138
139       /// On Darwin, this node represents the result of the popl
140       /// at function entry, used for PIC code.
141       GlobalBaseReg,
142
143       /// A wrapper node for TargetConstantPool,
144       /// TargetExternalSymbol, and TargetGlobalAddress.
145       Wrapper,
146
147       /// Special wrapper used under X86-64 PIC mode for RIP
148       /// relative displacements.
149       WrapperRIP,
150
151       /// Copies a 64-bit value from the low word of an XMM vector
152       /// to an MMX vector.  If you think this is too close to the previous
153       /// mnemonic, so do I; blame Intel.
154       MOVDQ2Q,
155
156       /// Copies a 32-bit value from the low word of a MMX
157       /// vector to a GPR.
158       MMX_MOVD2W,
159
160       /// Copies a GPR into the low 32-bit word of a MMX vector
161       /// and zero out the high word.
162       MMX_MOVW2D,
163
164       /// Extract an 8-bit value from a vector and zero extend it to
165       /// i32, corresponds to X86::PEXTRB.
166       PEXTRB,
167
168       /// Extract a 16-bit value from a vector and zero extend it to
169       /// i32, corresponds to X86::PEXTRW.
170       PEXTRW,
171
172       /// Insert any element of a 4 x float vector into any element
173       /// of a destination 4 x floatvector.
174       INSERTPS,
175
176       /// Insert the lower 8-bits of a 32-bit value to a vector,
177       /// corresponds to X86::PINSRB.
178       PINSRB,
179
180       /// Insert the lower 16-bits of a 32-bit value to a vector,
181       /// corresponds to X86::PINSRW.
182       PINSRW, MMX_PINSRW,
183
184       /// Shuffle 16 8-bit values within a vector.
185       PSHUFB,
186
187       /// Compute Sum of Absolute Differences.
188       PSADBW,
189
190       /// Bitwise Logical AND NOT of Packed FP values.
191       ANDNP,
192
193       /// Copy integer sign.
194       PSIGN,
195
196       /// Blend where the selector is an immediate.
197       BLENDI,
198
199       /// Blend where the condition has been shrunk.
200       /// This is used to emphasize that the condition mask is
201       /// no more valid for generic VSELECT optimizations.
202       SHRUNKBLEND,
203
204       /// Combined add and sub on an FP vector.
205       ADDSUB,
206       //  FP vector ops with rounding mode.
207       FADD_RND,
208       FSUB_RND,
209       FMUL_RND,
210       FDIV_RND,
211       FMAX_RND,
212       FMIN_RND,
213       
214       // Integer add/sub with unsigned saturation.
215       ADDUS,
216       SUBUS,
217       // Integer add/sub with signed saturation.
218       ADDS,
219       SUBS,
220
221       /// Integer horizontal add.
222       HADD,
223
224       /// Integer horizontal sub.
225       HSUB,
226
227       /// Floating point horizontal add.
228       FHADD,
229
230       /// Floating point horizontal sub.
231       FHSUB,
232
233       /// Unsigned integer max and min.
234       UMAX, UMIN,
235
236       /// Signed integer max and min.
237       SMAX, SMIN,
238
239       /// Floating point max and min.
240       FMAX, FMIN,
241
242       /// Commutative FMIN and FMAX.
243       FMAXC, FMINC,
244
245       /// Floating point reciprocal-sqrt and reciprocal approximation.
246       /// Note that these typically require refinement
247       /// in order to obtain suitable precision.
248       FRSQRT, FRCP,
249
250       // Thread Local Storage.
251       TLSADDR,
252
253       // Thread Local Storage. A call to get the start address
254       // of the TLS block for the current module.
255       TLSBASEADDR,
256
257       // Thread Local Storage.  When calling to an OS provided
258       // thunk at the address from an earlier relocation.
259       TLSCALL,
260
261       // Exception Handling helpers.
262       EH_RETURN,
263
264       // SjLj exception handling setjmp.
265       EH_SJLJ_SETJMP,
266
267       // SjLj exception handling longjmp.
268       EH_SJLJ_LONGJMP,
269
270       /// Tail call return. See X86TargetLowering::LowerCall for
271       /// the list of operands.
272       TC_RETURN,
273
274       // Vector move to low scalar and zero higher vector elements.
275       VZEXT_MOVL,
276
277       // Vector integer zero-extend.
278       VZEXT,
279
280       // Vector integer signed-extend.
281       VSEXT,
282
283       // Vector integer truncate.
284       VTRUNC,
285
286       // Vector integer truncate with mask.
287       VTRUNCM,
288
289       // Vector FP extend.
290       VFPEXT,
291
292       // Vector FP round.
293       VFPROUND,
294
295       // 128-bit vector logical left / right shift
296       VSHLDQ, VSRLDQ,
297
298       // Vector shift elements
299       VSHL, VSRL, VSRA,
300
301       // Vector shift elements by immediate
302       VSHLI, VSRLI, VSRAI,
303
304       // Vector packed double/float comparison.
305       CMPP,
306
307       // Vector integer comparisons.
308       PCMPEQ, PCMPGT,
309       // Vector integer comparisons, the result is in a mask vector.
310       PCMPEQM, PCMPGTM,
311
312       /// Vector comparison generating mask bits for fp and
313       /// integer signed and unsigned data types.
314       CMPM,
315       CMPMU,
316       // Vector comparison with rounding mode for FP values
317       CMPM_RND,
318
319       // Arithmetic operations with FLAGS results.
320       ADD, SUB, ADC, SBB, SMUL,
321       INC, DEC, OR, XOR, AND,
322
323       BEXTR,  // Bit field extract
324
325       UMUL, // LOW, HI, FLAGS = umul LHS, RHS
326
327       // 8-bit SMUL/UMUL - AX, FLAGS = smul8/umul8 AL, RHS
328       SMUL8, UMUL8,
329
330       // 8-bit divrem that zero-extend the high result (AH).
331       UDIVREM8_ZEXT_HREG,
332       SDIVREM8_SEXT_HREG,
333
334       // X86-specific multiply by immediate.
335       MUL_IMM,
336
337       // Vector bitwise comparisons.
338       PTEST,
339
340       // Vector packed fp sign bitwise comparisons.
341       TESTP,
342
343       // Vector "test" in AVX-512, the result is in a mask vector.
344       TESTM,
345       TESTNM,
346
347       // OR/AND test for masks
348       KORTEST,
349
350       // Several flavors of instructions with vector shuffle behaviors.
351       PACKSS,
352       PACKUS,
353       // Intra-lane alignr
354       PALIGNR,
355       // AVX512 inter-lane alignr
356       VALIGN,
357       PSHUFD,
358       PSHUFHW,
359       PSHUFLW,
360       SHUFP,
361       MOVDDUP,
362       MOVSHDUP,
363       MOVSLDUP,
364       MOVLHPS,
365       MOVLHPD,
366       MOVHLPS,
367       MOVLPS,
368       MOVLPD,
369       MOVSD,
370       MOVSS,
371       UNPCKL,
372       UNPCKH,
373       VPERMILPV,
374       VPERMILPI,
375       VPERMV,
376       VPERMV3,
377       VPERMIV3,
378       VPERMI,
379       VPERM2X128,
380       // Broadcast scalar to vector
381       VBROADCAST,
382       // Broadcast subvector to vector
383       SUBV_BROADCAST,
384       // Insert/Extract vector element
385       VINSERT,
386       VEXTRACT,
387
388       // Vector multiply packed unsigned doubleword integers
389       PMULUDQ,
390       // Vector multiply packed signed doubleword integers
391       PMULDQ,
392
393       // FMA nodes
394       FMADD,
395       FNMADD,
396       FMSUB,
397       FNMSUB,
398       FMADDSUB,
399       FMSUBADD,
400       // FMA with rounding mode
401       FMADD_RND,
402       FNMADD_RND,
403       FMSUB_RND,
404       FNMSUB_RND,
405       FMADDSUB_RND,
406       FMSUBADD_RND,
407       RNDSCALE,
408
409       // Compress and expand
410       COMPRESS,
411       EXPAND,
412
413       // Save xmm argument registers to the stack, according to %al. An operator
414       // is needed so that this can be expanded with control flow.
415       VASTART_SAVE_XMM_REGS,
416
417       // Windows's _chkstk call to do stack probing.
418       WIN_ALLOCA,
419
420       // For allocating variable amounts of stack space when using
421       // segmented stacks. Check if the current stacklet has enough space, and
422       // falls back to heap allocation if not.
423       SEG_ALLOCA,
424
425       // Windows's _ftol2 runtime routine to do fptoui.
426       WIN_FTOL,
427
428       // Memory barrier
429       MEMBARRIER,
430       MFENCE,
431       SFENCE,
432       LFENCE,
433
434       // Store FP status word into i16 register.
435       FNSTSW16r,
436
437       // Store contents of %ah into %eflags.
438       SAHF,
439
440       // Get a random integer and indicate whether it is valid in CF.
441       RDRAND,
442
443       // Get a NIST SP800-90B & C compliant random integer and
444       // indicate whether it is valid in CF.
445       RDSEED,
446
447       PCMPISTRI,
448       PCMPESTRI,
449
450       // Test if in transactional execution.
451       XTEST,
452
453       // ERI instructions
454       RSQRT28, RCP28, EXP2,
455
456       // Compare and swap.
457       LCMPXCHG_DAG = ISD::FIRST_TARGET_MEMORY_OPCODE,
458       LCMPXCHG8_DAG,
459       LCMPXCHG16_DAG,
460
461       // Load, scalar_to_vector, and zero extend.
462       VZEXT_LOAD,
463
464       // Store FP control world into i16 memory.
465       FNSTCW16m,
466
467       /// This instruction implements FP_TO_SINT with the
468       /// integer destination in memory and a FP reg source.  This corresponds
469       /// to the X86::FIST*m instructions and the rounding mode change stuff. It
470       /// has two inputs (token chain and address) and two outputs (int value
471       /// and token chain).
472       FP_TO_INT16_IN_MEM,
473       FP_TO_INT32_IN_MEM,
474       FP_TO_INT64_IN_MEM,
475
476       /// This instruction implements SINT_TO_FP with the
477       /// integer source in memory and FP reg result.  This corresponds to the
478       /// X86::FILD*m instructions. It has three inputs (token chain, address,
479       /// and source type) and two outputs (FP value and token chain). FILD_FLAG
480       /// also produces a flag).
481       FILD,
482       FILD_FLAG,
483
484       /// This instruction implements an extending load to FP stack slots.
485       /// This corresponds to the X86::FLD32m / X86::FLD64m. It takes a chain
486       /// operand, ptr to load from, and a ValueType node indicating the type
487       /// to load to.
488       FLD,
489
490       /// This instruction implements a truncating store to FP stack
491       /// slots. This corresponds to the X86::FST32m / X86::FST64m. It takes a
492       /// chain operand, value to store, address, and a ValueType to store it
493       /// as.
494       FST,
495
496       /// This instruction grabs the address of the next argument
497       /// from a va_list. (reads and modifies the va_list in memory)
498       VAARG_64
499
500       // WARNING: Do not add anything in the end unless you want the node to
501       // have memop! In fact, starting from ATOMADD64_DAG all opcodes will be
502       // thought as target memory ops!
503     };
504   }
505
506   /// Define some predicates that are used for node matching.
507   namespace X86 {
508     /// Return true if the specified
509     /// EXTRACT_SUBVECTOR operand specifies a vector extract that is
510     /// suitable for input to VEXTRACTF128, VEXTRACTI128 instructions.
511     bool isVEXTRACT128Index(SDNode *N);
512
513     /// Return true if the specified
514     /// INSERT_SUBVECTOR operand specifies a subvector insert that is
515     /// suitable for input to VINSERTF128, VINSERTI128 instructions.
516     bool isVINSERT128Index(SDNode *N);
517
518     /// Return true if the specified
519     /// EXTRACT_SUBVECTOR operand specifies a vector extract that is
520     /// suitable for input to VEXTRACTF64X4, VEXTRACTI64X4 instructions.
521     bool isVEXTRACT256Index(SDNode *N);
522
523     /// Return true if the specified
524     /// INSERT_SUBVECTOR operand specifies a subvector insert that is
525     /// suitable for input to VINSERTF64X4, VINSERTI64X4 instructions.
526     bool isVINSERT256Index(SDNode *N);
527
528     /// Return the appropriate
529     /// immediate to extract the specified EXTRACT_SUBVECTOR index
530     /// with VEXTRACTF128, VEXTRACTI128 instructions.
531     unsigned getExtractVEXTRACT128Immediate(SDNode *N);
532
533     /// Return the appropriate
534     /// immediate to insert at the specified INSERT_SUBVECTOR index
535     /// with VINSERTF128, VINSERT128 instructions.
536     unsigned getInsertVINSERT128Immediate(SDNode *N);
537
538     /// Return the appropriate
539     /// immediate to extract the specified EXTRACT_SUBVECTOR index
540     /// with VEXTRACTF64X4, VEXTRACTI64x4 instructions.
541     unsigned getExtractVEXTRACT256Immediate(SDNode *N);
542
543     /// Return the appropriate
544     /// immediate to insert at the specified INSERT_SUBVECTOR index
545     /// with VINSERTF64x4, VINSERTI64x4 instructions.
546     unsigned getInsertVINSERT256Immediate(SDNode *N);
547
548     /// Returns true if Elt is a constant zero or floating point constant +0.0.
549     bool isZeroNode(SDValue Elt);
550
551     /// Returns true of the given offset can be
552     /// fit into displacement field of the instruction.
553     bool isOffsetSuitableForCodeModel(int64_t Offset, CodeModel::Model M,
554                                       bool hasSymbolicDisplacement = true);
555
556
557     /// Determines whether the callee is required to pop its
558     /// own arguments. Callee pop is necessary to support tail calls.
559     bool isCalleePop(CallingConv::ID CallingConv,
560                      bool is64Bit, bool IsVarArg, bool TailCallOpt);
561
562     /// AVX512 static rounding constants.  These need to match the values in
563     /// avx512fintrin.h.
564     enum STATIC_ROUNDING {
565       TO_NEAREST_INT = 0,
566       TO_NEG_INF = 1,
567       TO_POS_INF = 2,
568       TO_ZERO = 3,
569       CUR_DIRECTION = 4
570     };
571   }
572
573   //===--------------------------------------------------------------------===//
574   //  X86 Implementation of the TargetLowering interface
575   class X86TargetLowering final : public TargetLowering {
576   public:
577     explicit X86TargetLowering(const X86TargetMachine &TM,
578                                const X86Subtarget &STI);
579
580     unsigned getJumpTableEncoding() const override;
581     bool useSoftFloat() const override;
582
583     MVT getScalarShiftAmountTy(EVT LHSTy) const override { return MVT::i8; }
584
585     const MCExpr *
586     LowerCustomJumpTableEntry(const MachineJumpTableInfo *MJTI,
587                               const MachineBasicBlock *MBB, unsigned uid,
588                               MCContext &Ctx) const override;
589
590     /// Returns relocation base for the given PIC jumptable.
591     SDValue getPICJumpTableRelocBase(SDValue Table,
592                                      SelectionDAG &DAG) const override;
593     const MCExpr *
594     getPICJumpTableRelocBaseExpr(const MachineFunction *MF,
595                                  unsigned JTI, MCContext &Ctx) const override;
596
597     /// Return the desired alignment for ByVal aggregate
598     /// function arguments in the caller parameter area. For X86, aggregates
599     /// that contains are placed at 16-byte boundaries while the rest are at
600     /// 4-byte boundaries.
601     unsigned getByValTypeAlignment(Type *Ty) const override;
602
603     /// Returns the target specific optimal type for load
604     /// and store operations as a result of memset, memcpy, and memmove
605     /// lowering. If DstAlign is zero that means it's safe to destination
606     /// alignment can satisfy any constraint. Similarly if SrcAlign is zero it
607     /// means there isn't a need to check it against alignment requirement,
608     /// probably because the source does not need to be loaded. If 'IsMemset' is
609     /// true, that means it's expanding a memset. If 'ZeroMemset' is true, that
610     /// means it's a memset of zero. 'MemcpyStrSrc' indicates whether the memcpy
611     /// source is constant so it does not need to be loaded.
612     /// It returns EVT::Other if the type should be determined using generic
613     /// target-independent logic.
614     EVT getOptimalMemOpType(uint64_t Size, unsigned DstAlign, unsigned SrcAlign,
615                             bool IsMemset, bool ZeroMemset, bool MemcpyStrSrc,
616                             MachineFunction &MF) const override;
617
618     /// Returns true if it's safe to use load / store of the
619     /// specified type to expand memcpy / memset inline. This is mostly true
620     /// for all types except for some special cases. For example, on X86
621     /// targets without SSE2 f64 load / store are done with fldl / fstpl which
622     /// also does type conversion. Note the specified type doesn't have to be
623     /// legal as the hook is used before type legalization.
624     bool isSafeMemOpType(MVT VT) const override;
625
626     /// Returns true if the target allows
627     /// unaligned memory accesses. of the specified type. Returns whether it
628     /// is "fast" by reference in the second argument.
629     bool allowsMisalignedMemoryAccesses(EVT VT, unsigned AS, unsigned Align,
630                                        bool *Fast) const override;
631
632     /// Provide custom lowering hooks for some operations.
633     ///
634     SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const override;
635
636     /// Replace the results of node with an illegal result
637     /// type with new values built out of custom code.
638     ///
639     void ReplaceNodeResults(SDNode *N, SmallVectorImpl<SDValue>&Results,
640                             SelectionDAG &DAG) const override;
641
642
643     SDValue PerformDAGCombine(SDNode *N, DAGCombinerInfo &DCI) const override;
644
645     /// Return true if the target has native support for
646     /// the specified value type and it is 'desirable' to use the type for the
647     /// given node type. e.g. On x86 i16 is legal, but undesirable since i16
648     /// instruction encodings are longer and some i16 instructions are slow.
649     bool isTypeDesirableForOp(unsigned Opc, EVT VT) const override;
650
651     /// Return true if the target has native support for the
652     /// specified value type and it is 'desirable' to use the type. e.g. On x86
653     /// i16 is legal, but undesirable since i16 instruction encodings are longer
654     /// and some i16 instructions are slow.
655     bool IsDesirableToPromoteOp(SDValue Op, EVT &PVT) const override;
656
657     MachineBasicBlock *
658       EmitInstrWithCustomInserter(MachineInstr *MI,
659                                   MachineBasicBlock *MBB) const override;
660
661
662     /// This method returns the name of a target specific DAG node.
663     const char *getTargetNodeName(unsigned Opcode) const override;
664
665     bool isCheapToSpeculateCttz() const override;
666
667     bool isCheapToSpeculateCtlz() const override;
668
669     /// Return the value type to use for ISD::SETCC.
670     EVT getSetCCResultType(LLVMContext &Context, EVT VT) const override;
671
672     /// Determine which of the bits specified in Mask are known to be either
673     /// zero or one and return them in the KnownZero/KnownOne bitsets.
674     void computeKnownBitsForTargetNode(const SDValue Op,
675                                        APInt &KnownZero,
676                                        APInt &KnownOne,
677                                        const SelectionDAG &DAG,
678                                        unsigned Depth = 0) const override;
679
680     /// Determine the number of bits in the operation that are sign bits.
681     unsigned ComputeNumSignBitsForTargetNode(SDValue Op,
682                                              const SelectionDAG &DAG,
683                                              unsigned Depth) const override;
684
685     bool isGAPlusOffset(SDNode *N, const GlobalValue* &GA,
686                         int64_t &Offset) const override;
687
688     SDValue getReturnAddressFrameIndex(SelectionDAG &DAG) const;
689
690     bool ExpandInlineAsm(CallInst *CI) const override;
691
692     ConstraintType
693       getConstraintType(const std::string &Constraint) const override;
694
695     /// Examine constraint string and operand type and determine a weight value.
696     /// The operand object must already have been set up with the operand type.
697     ConstraintWeight
698       getSingleConstraintMatchWeight(AsmOperandInfo &info,
699                                      const char *constraint) const override;
700
701     const char *LowerXConstraint(EVT ConstraintVT) const override;
702
703     /// Lower the specified operand into the Ops vector. If it is invalid, don't
704     /// add anything to Ops. If hasMemory is true it means one of the asm
705     /// constraint of the inline asm instruction being processed is 'm'.
706     void LowerAsmOperandForConstraint(SDValue Op,
707                                       std::string &Constraint,
708                                       std::vector<SDValue> &Ops,
709                                       SelectionDAG &DAG) const override;
710
711     unsigned getInlineAsmMemConstraint(
712         const std::string &ConstraintCode) const override {
713       if (ConstraintCode == "i")
714         return InlineAsm::Constraint_i;
715       else if (ConstraintCode == "o")
716         return InlineAsm::Constraint_o;
717       else if (ConstraintCode == "v")
718         return InlineAsm::Constraint_v;
719       else if (ConstraintCode == "X")
720         return InlineAsm::Constraint_X;
721       return TargetLowering::getInlineAsmMemConstraint(ConstraintCode);
722     }
723
724     /// Given a physical register constraint
725     /// (e.g. {edx}), return the register number and the register class for the
726     /// register.  This should only be used for C_Register constraints.  On
727     /// error, this returns a register number of 0.
728     std::pair<unsigned, const TargetRegisterClass *>
729     getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
730                                  const std::string &Constraint,
731                                  MVT VT) const override;
732
733     /// Return true if the addressing mode represented
734     /// by AM is legal for this target, for a load/store of the specified type.
735     bool isLegalAddressingMode(const AddrMode &AM, Type *Ty) const override;
736
737     /// Return true if the specified immediate is legal
738     /// icmp immediate, that is the target has icmp instructions which can
739     /// compare a register against the immediate without having to materialize
740     /// the immediate into a register.
741     bool isLegalICmpImmediate(int64_t Imm) const override;
742
743     /// Return true if the specified immediate is legal
744     /// add immediate, that is the target has add instructions which can
745     /// add a register and the immediate without having to materialize
746     /// the immediate into a register.
747     bool isLegalAddImmediate(int64_t Imm) const override;
748
749     /// \brief Return the cost of the scaling factor used in the addressing
750     /// mode represented by AM for this target, for a load/store
751     /// of the specified type.
752     /// If the AM is supported, the return value must be >= 0.
753     /// If the AM is not supported, it returns a negative value.
754     int getScalingFactorCost(const AddrMode &AM, Type *Ty) const override;
755
756     bool isVectorShiftByScalarCheap(Type *Ty) const override;
757
758     /// Return true if it's free to truncate a value of
759     /// type Ty1 to type Ty2. e.g. On x86 it's free to truncate a i32 value in
760     /// register EAX to i16 by referencing its sub-register AX.
761     bool isTruncateFree(Type *Ty1, Type *Ty2) const override;
762     bool isTruncateFree(EVT VT1, EVT VT2) const override;
763
764     bool allowTruncateForTailCall(Type *Ty1, Type *Ty2) const override;
765
766     /// Return true if any actual instruction that defines a
767     /// value of type Ty1 implicit zero-extends the value to Ty2 in the result
768     /// register. This does not necessarily include registers defined in
769     /// unknown ways, such as incoming arguments, or copies from unknown
770     /// virtual registers. Also, if isTruncateFree(Ty2, Ty1) is true, this
771     /// does not necessarily apply to truncate instructions. e.g. on x86-64,
772     /// all instructions that define 32-bit values implicit zero-extend the
773     /// result out to 64 bits.
774     bool isZExtFree(Type *Ty1, Type *Ty2) const override;
775     bool isZExtFree(EVT VT1, EVT VT2) const override;
776     bool isZExtFree(SDValue Val, EVT VT2) const override;
777
778     /// Return true if folding a vector load into ExtVal (a sign, zero, or any
779     /// extend node) is profitable.
780     bool isVectorLoadExtDesirable(SDValue) const override;
781
782     /// Return true if an FMA operation is faster than a pair of fmul and fadd
783     /// instructions. fmuladd intrinsics will be expanded to FMAs when this
784     /// method returns true, otherwise fmuladd is expanded to fmul + fadd.
785     bool isFMAFasterThanFMulAndFAdd(EVT VT) const override;
786
787     /// Return true if it's profitable to narrow
788     /// operations of type VT1 to VT2. e.g. on x86, it's profitable to narrow
789     /// from i32 to i8 but not from i32 to i16.
790     bool isNarrowingProfitable(EVT VT1, EVT VT2) const override;
791
792     /// Returns true if the target can instruction select the
793     /// specified FP immediate natively. If false, the legalizer will
794     /// materialize the FP immediate as a load from a constant pool.
795     bool isFPImmLegal(const APFloat &Imm, EVT VT) const override;
796
797     /// Targets can use this to indicate that they only support *some*
798     /// VECTOR_SHUFFLE operations, those with specific masks. By default, if a
799     /// target supports the VECTOR_SHUFFLE node, all mask values are assumed to
800     /// be legal.
801     bool isShuffleMaskLegal(const SmallVectorImpl<int> &Mask,
802                             EVT VT) const override;
803
804     /// Similar to isShuffleMaskLegal. This is used by Targets can use this to
805     /// indicate if there is a suitable VECTOR_SHUFFLE that can be used to
806     /// replace a VAND with a constant pool entry.
807     bool isVectorClearMaskLegal(const SmallVectorImpl<int> &Mask,
808                                 EVT VT) const override;
809
810     /// If true, then instruction selection should
811     /// seek to shrink the FP constant of the specified type to a smaller type
812     /// in order to save space and / or reduce runtime.
813     bool ShouldShrinkFPConstant(EVT VT) const override {
814       // Don't shrink FP constpool if SSE2 is available since cvtss2sd is more
815       // expensive than a straight movsd. On the other hand, it's important to
816       // shrink long double fp constant since fldt is very slow.
817       return !X86ScalarSSEf64 || VT == MVT::f80;
818     }
819
820     /// Return true if we believe it is correct and profitable to reduce the
821     /// load node to a smaller type.
822     bool shouldReduceLoadWidth(SDNode *Load, ISD::LoadExtType ExtTy,
823                                EVT NewVT) const override;
824
825     /// Return true if the specified scalar FP type is computed in an SSE
826     /// register, not on the X87 floating point stack.
827     bool isScalarFPTypeInSSEReg(EVT VT) const {
828       return (VT == MVT::f64 && X86ScalarSSEf64) || // f64 is when SSE2
829       (VT == MVT::f32 && X86ScalarSSEf32);   // f32 is when SSE1
830     }
831
832     /// Return true if the target uses the MSVC _ftol2 routine for fptoui.
833     bool isTargetFTOL() const;
834
835     /// Return true if the MSVC _ftol2 routine should be used for fptoui to the
836     /// given type.
837     bool isIntegerTypeFTOL(EVT VT) const {
838       return isTargetFTOL() && VT == MVT::i64;
839     }
840
841     /// \brief Returns true if it is beneficial to convert a load of a constant
842     /// to just the constant itself.
843     bool shouldConvertConstantLoadToIntImm(const APInt &Imm,
844                                            Type *Ty) const override;
845
846     /// Return true if EXTRACT_SUBVECTOR is cheap for this result type
847     /// with this index.
848     bool isExtractSubvectorCheap(EVT ResVT, unsigned Index) const override;
849
850     /// Intel processors have a unified instruction and data cache
851     const char * getClearCacheBuiltinName() const override {
852       return nullptr; // nothing to do, move along.
853     }
854
855     unsigned getRegisterByName(const char* RegName, EVT VT) const override;
856
857     /// This method returns a target specific FastISel object,
858     /// or null if the target does not support "fast" ISel.
859     FastISel *createFastISel(FunctionLoweringInfo &funcInfo,
860                              const TargetLibraryInfo *libInfo) const override;
861
862     /// Return true if the target stores stack protector cookies at a fixed
863     /// offset in some non-standard address space, and populates the address
864     /// space and offset as appropriate.
865     bool getStackCookieLocation(unsigned &AddressSpace,
866                                 unsigned &Offset) const override;
867
868     SDValue BuildFILD(SDValue Op, EVT SrcVT, SDValue Chain, SDValue StackSlot,
869                       SelectionDAG &DAG) const;
870
871     bool isNoopAddrSpaceCast(unsigned SrcAS, unsigned DestAS) const override;
872
873     bool useLoadStackGuardNode() const override;
874     /// \brief Customize the preferred legalization strategy for certain types.
875     LegalizeTypeAction getPreferredVectorAction(EVT VT) const override;
876
877   protected:
878     std::pair<const TargetRegisterClass *, uint8_t>
879     findRepresentativeClass(const TargetRegisterInfo *TRI,
880                             MVT VT) const override;
881
882   private:
883     /// Keep a pointer to the X86Subtarget around so that we can
884     /// make the right decision when generating code for different targets.
885     const X86Subtarget *Subtarget;
886     const DataLayout *TD;
887
888     /// Select between SSE or x87 floating point ops.
889     /// When SSE is available, use it for f32 operations.
890     /// When SSE2 is available, use it for f64 operations.
891     bool X86ScalarSSEf32;
892     bool X86ScalarSSEf64;
893
894     /// A list of legal FP immediates.
895     std::vector<APFloat> LegalFPImmediates;
896
897     /// Indicate that this x86 target can instruction
898     /// select the specified FP immediate natively.
899     void addLegalFPImmediate(const APFloat& Imm) {
900       LegalFPImmediates.push_back(Imm);
901     }
902
903     SDValue LowerCallResult(SDValue Chain, SDValue InFlag,
904                             CallingConv::ID CallConv, bool isVarArg,
905                             const SmallVectorImpl<ISD::InputArg> &Ins,
906                             SDLoc dl, SelectionDAG &DAG,
907                             SmallVectorImpl<SDValue> &InVals) const;
908     SDValue LowerMemArgument(SDValue Chain,
909                              CallingConv::ID CallConv,
910                              const SmallVectorImpl<ISD::InputArg> &ArgInfo,
911                              SDLoc dl, SelectionDAG &DAG,
912                              const CCValAssign &VA,  MachineFrameInfo *MFI,
913                               unsigned i) const;
914     SDValue LowerMemOpCallTo(SDValue Chain, SDValue StackPtr, SDValue Arg,
915                              SDLoc dl, SelectionDAG &DAG,
916                              const CCValAssign &VA,
917                              ISD::ArgFlagsTy Flags) const;
918
919     // Call lowering helpers.
920
921     /// Check whether the call is eligible for tail call optimization. Targets
922     /// that want to do tail call optimization should implement this function.
923     bool IsEligibleForTailCallOptimization(SDValue Callee,
924                                            CallingConv::ID CalleeCC,
925                                            bool isVarArg,
926                                            bool isCalleeStructRet,
927                                            bool isCallerStructRet,
928                                            Type *RetTy,
929                                     const SmallVectorImpl<ISD::OutputArg> &Outs,
930                                     const SmallVectorImpl<SDValue> &OutVals,
931                                     const SmallVectorImpl<ISD::InputArg> &Ins,
932                                            SelectionDAG& DAG) const;
933     bool IsCalleePop(bool isVarArg, CallingConv::ID CallConv) const;
934     SDValue EmitTailCallLoadRetAddr(SelectionDAG &DAG, SDValue &OutRetAddr,
935                                 SDValue Chain, bool IsTailCall, bool Is64Bit,
936                                 int FPDiff, SDLoc dl) const;
937
938     unsigned GetAlignedArgumentStackSize(unsigned StackSize,
939                                          SelectionDAG &DAG) const;
940
941     std::pair<SDValue,SDValue> FP_TO_INTHelper(SDValue Op, SelectionDAG &DAG,
942                                                bool isSigned,
943                                                bool isReplace) const;
944
945     SDValue LowerBUILD_VECTOR(SDValue Op, SelectionDAG &DAG) const;
946     SDValue LowerBUILD_VECTORvXi1(SDValue Op, SelectionDAG &DAG) const;
947     SDValue LowerVECTOR_SHUFFLE(SDValue Op, SelectionDAG &DAG) const;
948     SDValue LowerVSELECT(SDValue Op, SelectionDAG &DAG) const;
949     SDValue LowerEXTRACT_VECTOR_ELT(SDValue Op, SelectionDAG &DAG) const;
950     SDValue ExtractBitFromMaskVector(SDValue Op, SelectionDAG &DAG) const;
951     SDValue InsertBitToMaskVector(SDValue Op, SelectionDAG &DAG) const;
952
953     SDValue LowerINSERT_VECTOR_ELT(SDValue Op, SelectionDAG &DAG) const;
954     SDValue LowerConstantPool(SDValue Op, SelectionDAG &DAG) const;
955     SDValue LowerBlockAddress(SDValue Op, SelectionDAG &DAG) const;
956     SDValue LowerGlobalAddress(const GlobalValue *GV, SDLoc dl,
957                                int64_t Offset, SelectionDAG &DAG) const;
958     SDValue LowerGlobalAddress(SDValue Op, SelectionDAG &DAG) const;
959     SDValue LowerGlobalTLSAddress(SDValue Op, SelectionDAG &DAG) const;
960     SDValue LowerExternalSymbol(SDValue Op, SelectionDAG &DAG) const;
961     SDValue LowerSINT_TO_FP(SDValue Op, SelectionDAG &DAG) const;
962     SDValue LowerUINT_TO_FP(SDValue Op, SelectionDAG &DAG) const;
963     SDValue LowerUINT_TO_FP_i64(SDValue Op, SelectionDAG &DAG) const;
964     SDValue LowerUINT_TO_FP_i32(SDValue Op, SelectionDAG &DAG) const;
965     SDValue lowerUINT_TO_FP_vec(SDValue Op, SelectionDAG &DAG) const;
966     SDValue LowerTRUNCATE(SDValue Op, SelectionDAG &DAG) const;
967     SDValue LowerFP_TO_SINT(SDValue Op, SelectionDAG &DAG) const;
968     SDValue LowerFP_TO_UINT(SDValue Op, SelectionDAG &DAG) const;
969     SDValue LowerToBT(SDValue And, ISD::CondCode CC,
970                       SDLoc dl, SelectionDAG &DAG) const;
971     SDValue LowerSETCC(SDValue Op, SelectionDAG &DAG) const;
972     SDValue LowerSELECT(SDValue Op, SelectionDAG &DAG) const;
973     SDValue LowerBRCOND(SDValue Op, SelectionDAG &DAG) const;
974     SDValue LowerMEMSET(SDValue Op, SelectionDAG &DAG) const;
975     SDValue LowerJumpTable(SDValue Op, SelectionDAG &DAG) const;
976     SDValue LowerDYNAMIC_STACKALLOC(SDValue Op, SelectionDAG &DAG) const;
977     SDValue LowerVASTART(SDValue Op, SelectionDAG &DAG) const;
978     SDValue LowerVAARG(SDValue Op, SelectionDAG &DAG) const;
979     SDValue LowerRETURNADDR(SDValue Op, SelectionDAG &DAG) const;
980     SDValue LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG) const;
981     SDValue LowerFRAME_TO_ARGS_OFFSET(SDValue Op, SelectionDAG &DAG) const;
982     SDValue LowerEH_RETURN(SDValue Op, SelectionDAG &DAG) const;
983     SDValue lowerEH_SJLJ_SETJMP(SDValue Op, SelectionDAG &DAG) const;
984     SDValue lowerEH_SJLJ_LONGJMP(SDValue Op, SelectionDAG &DAG) const;
985     SDValue LowerINIT_TRAMPOLINE(SDValue Op, SelectionDAG &DAG) const;
986     SDValue LowerFLT_ROUNDS_(SDValue Op, SelectionDAG &DAG) const;
987     SDValue LowerWin64_i128OP(SDValue Op, SelectionDAG &DAG) const;
988     SDValue LowerGC_TRANSITION_START(SDValue Op, SelectionDAG &DAG) const;
989     SDValue LowerGC_TRANSITION_END(SDValue Op, SelectionDAG &DAG) const;
990
991     SDValue
992       LowerFormalArguments(SDValue Chain,
993                            CallingConv::ID CallConv, bool isVarArg,
994                            const SmallVectorImpl<ISD::InputArg> &Ins,
995                            SDLoc dl, SelectionDAG &DAG,
996                            SmallVectorImpl<SDValue> &InVals) const override;
997     SDValue LowerCall(CallLoweringInfo &CLI,
998                       SmallVectorImpl<SDValue> &InVals) const override;
999
1000     SDValue LowerReturn(SDValue Chain,
1001                         CallingConv::ID CallConv, bool isVarArg,
1002                         const SmallVectorImpl<ISD::OutputArg> &Outs,
1003                         const SmallVectorImpl<SDValue> &OutVals,
1004                         SDLoc dl, SelectionDAG &DAG) const override;
1005
1006     bool isUsedByReturnOnly(SDNode *N, SDValue &Chain) const override;
1007
1008     bool mayBeEmittedAsTailCall(CallInst *CI) const override;
1009
1010     EVT getTypeForExtArgOrReturn(LLVMContext &Context, EVT VT,
1011                                  ISD::NodeType ExtendKind) const override;
1012
1013     bool CanLowerReturn(CallingConv::ID CallConv, MachineFunction &MF,
1014                         bool isVarArg,
1015                         const SmallVectorImpl<ISD::OutputArg> &Outs,
1016                         LLVMContext &Context) const override;
1017
1018     const MCPhysReg *getScratchRegisters(CallingConv::ID CC) const override;
1019
1020     bool shouldExpandAtomicLoadInIR(LoadInst *SI) const override;
1021     bool shouldExpandAtomicStoreInIR(StoreInst *SI) const override;
1022     TargetLoweringBase::AtomicRMWExpansionKind
1023     shouldExpandAtomicRMWInIR(AtomicRMWInst *AI) const override;
1024
1025     LoadInst *
1026     lowerIdempotentRMWIntoFencedLoad(AtomicRMWInst *AI) const override;
1027
1028     bool needsCmpXchgNb(const Type *MemType) const;
1029
1030     /// Utility function to emit atomic-load-arith operations (and, or, xor,
1031     /// nand, max, min, umax, umin). It takes the corresponding instruction to
1032     /// expand, the associated machine basic block, and the associated X86
1033     /// opcodes for reg/reg.
1034     MachineBasicBlock *EmitAtomicLoadArith(MachineInstr *MI,
1035                                            MachineBasicBlock *MBB) const;
1036
1037     /// Utility function to emit atomic-load-arith operations (and, or, xor,
1038     /// nand, add, sub, swap) for 64-bit operands on 32-bit target.
1039     MachineBasicBlock *EmitAtomicLoadArith6432(MachineInstr *MI,
1040                                                MachineBasicBlock *MBB) const;
1041
1042     // Utility function to emit the low-level va_arg code for X86-64.
1043     MachineBasicBlock *EmitVAARG64WithCustomInserter(
1044                        MachineInstr *MI,
1045                        MachineBasicBlock *MBB) const;
1046
1047     /// Utility function to emit the xmm reg save portion of va_start.
1048     MachineBasicBlock *EmitVAStartSaveXMMRegsWithCustomInserter(
1049                                                    MachineInstr *BInstr,
1050                                                    MachineBasicBlock *BB) const;
1051
1052     MachineBasicBlock *EmitLoweredSelect(MachineInstr *I,
1053                                          MachineBasicBlock *BB) const;
1054
1055     MachineBasicBlock *EmitLoweredWinAlloca(MachineInstr *MI,
1056                                               MachineBasicBlock *BB) const;
1057
1058     MachineBasicBlock *EmitLoweredSegAlloca(MachineInstr *MI,
1059                                             MachineBasicBlock *BB) const;
1060
1061     MachineBasicBlock *EmitLoweredTLSCall(MachineInstr *MI,
1062                                           MachineBasicBlock *BB) const;
1063
1064     MachineBasicBlock *emitLoweredTLSAddr(MachineInstr *MI,
1065                                           MachineBasicBlock *BB) const;
1066
1067     MachineBasicBlock *emitEHSjLjSetJmp(MachineInstr *MI,
1068                                         MachineBasicBlock *MBB) const;
1069
1070     MachineBasicBlock *emitEHSjLjLongJmp(MachineInstr *MI,
1071                                          MachineBasicBlock *MBB) const;
1072
1073     MachineBasicBlock *emitFMA3Instr(MachineInstr *MI,
1074                                      MachineBasicBlock *MBB) const;
1075
1076     /// Emit nodes that will be selected as "test Op0,Op0", or something
1077     /// equivalent, for use with the given x86 condition code.
1078     SDValue EmitTest(SDValue Op0, unsigned X86CC, SDLoc dl,
1079                      SelectionDAG &DAG) const;
1080
1081     /// Emit nodes that will be selected as "cmp Op0,Op1", or something
1082     /// equivalent, for use with the given x86 condition code.
1083     SDValue EmitCmp(SDValue Op0, SDValue Op1, unsigned X86CC, SDLoc dl,
1084                     SelectionDAG &DAG) const;
1085
1086     /// Convert a comparison if required by the subtarget.
1087     SDValue ConvertCmpIfNecessary(SDValue Cmp, SelectionDAG &DAG) const;
1088
1089     /// Use rsqrt* to speed up sqrt calculations.
1090     SDValue getRsqrtEstimate(SDValue Operand, DAGCombinerInfo &DCI,
1091                              unsigned &RefinementSteps,
1092                              bool &UseOneConstNR) const override;
1093
1094     /// Use rcp* to speed up fdiv calculations.
1095     SDValue getRecipEstimate(SDValue Operand, DAGCombinerInfo &DCI,
1096                              unsigned &RefinementSteps) const override;
1097
1098     /// Reassociate floating point divisions into multiply by reciprocal.
1099     bool combineRepeatedFPDivisors(unsigned NumUsers) const override;
1100   };
1101
1102   namespace X86 {
1103     FastISel *createFastISel(FunctionLoweringInfo &funcInfo,
1104                              const TargetLibraryInfo *libInfo);
1105   }
1106 }
1107
1108 #endif    // X86ISELLOWERING_H