]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/lib/Target/X86/X86ISelLowering.h
Merge llvm, clang, lld, lldb, compiler-rt and libc++ r304460, and update
[FreeBSD/FreeBSD.git] / contrib / llvm / 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       /// These operations represent an abstract X86 call
60       /// instruction, which includes a bunch of information.  In particular the
61       /// operands of these node are:
62       ///
63       ///     #0 - The incoming token chain
64       ///     #1 - The callee
65       ///     #2 - The number of arg bytes the caller pushes on the stack.
66       ///     #3 - The number of arg bytes the callee pops off the stack.
67       ///     #4 - The value to pass in AL/AX/EAX (optional)
68       ///     #5 - The value to pass in DL/DX/EDX (optional)
69       ///
70       /// The result values of these nodes are:
71       ///
72       ///     #0 - The outgoing token chain
73       ///     #1 - The first register result value (optional)
74       ///     #2 - The second register result value (optional)
75       ///
76       CALL,
77
78       /// This operation implements the lowering for readcyclecounter.
79       RDTSC_DAG,
80
81       /// X86 Read Time-Stamp Counter and Processor ID.
82       RDTSCP_DAG,
83
84       /// X86 Read Performance Monitoring Counters.
85       RDPMC_DAG,
86
87       /// X86 compare and logical compare instructions.
88       CMP, COMI, UCOMI,
89
90       /// X86 bit-test instructions.
91       BT,
92
93       /// X86 SetCC. Operand 0 is condition code, and operand 1 is the EFLAGS
94       /// operand, usually produced by a CMP instruction.
95       SETCC,
96
97       /// X86 Select
98       SELECT, SELECTS,
99
100       // Same as SETCC except it's materialized with a sbb and the value is all
101       // one's or all zero's.
102       SETCC_CARRY,  // R = carry_bit ? ~0 : 0
103
104       /// X86 FP SETCC, implemented with CMP{cc}SS/CMP{cc}SD.
105       /// Operands are two FP values to compare; result is a mask of
106       /// 0s or 1s.  Generally DTRT for C/C++ with NaNs.
107       FSETCC,
108
109       /// X86 FP SETCC, similar to above, but with output as an i1 mask and
110       /// with optional rounding mode.
111       FSETCCM, FSETCCM_RND,
112
113       /// X86 conditional moves. Operand 0 and operand 1 are the two values
114       /// to select from. Operand 2 is the condition code, and operand 3 is the
115       /// flag operand produced by a CMP or TEST instruction. It also writes a
116       /// flag result.
117       CMOV,
118
119       /// X86 conditional branches. Operand 0 is the chain operand, operand 1
120       /// is the block to branch if condition is true, operand 2 is the
121       /// condition code, and operand 3 is the flag operand produced by a CMP
122       /// or TEST instruction.
123       BRCOND,
124
125       /// Return with a flag operand. Operand 0 is the chain operand, operand
126       /// 1 is the number of bytes of stack to pop.
127       RET_FLAG,
128
129       /// Return from interrupt. Operand 0 is the number of bytes to pop.
130       IRET,
131
132       /// Repeat fill, corresponds to X86::REP_STOSx.
133       REP_STOS,
134
135       /// Repeat move, corresponds to X86::REP_MOVSx.
136       REP_MOVS,
137
138       /// On Darwin, this node represents the result of the popl
139       /// at function entry, used for PIC code.
140       GlobalBaseReg,
141
142       /// A wrapper node for TargetConstantPool, TargetJumpTable,
143       /// TargetExternalSymbol, TargetGlobalAddress, TargetGlobalTLSAddress,
144       /// MCSymbol and TargetBlockAddress.
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.
153       MOVDQ2Q,
154
155       /// Copies a 32-bit value from the low word of a MMX
156       /// vector to a GPR.
157       MMX_MOVD2W,
158
159       /// Copies a GPR into the low 32-bit word of a MMX vector
160       /// and zero out the high word.
161       MMX_MOVW2D,
162
163       /// Extract an 8-bit value from a vector and zero extend it to
164       /// i32, corresponds to X86::PEXTRB.
165       PEXTRB,
166
167       /// Extract a 16-bit value from a vector and zero extend it to
168       /// i32, corresponds to X86::PEXTRW.
169       PEXTRW,
170
171       /// Insert any element of a 4 x float vector into any element
172       /// of a destination 4 x floatvector.
173       INSERTPS,
174
175       /// Insert the lower 8-bits of a 32-bit value to a vector,
176       /// corresponds to X86::PINSRB.
177       PINSRB,
178
179       /// Insert the lower 16-bits of a 32-bit value to a vector,
180       /// corresponds to X86::PINSRW.
181       PINSRW,
182
183       /// Shuffle 16 8-bit values within a vector.
184       PSHUFB,
185
186       /// Compute Sum of Absolute Differences.
187       PSADBW,
188       /// Compute Double Block Packed Sum-Absolute-Differences
189       DBPSADBW,
190
191       /// Bitwise Logical AND NOT of Packed FP values.
192       ANDNP,
193
194       /// Blend where the selector is an immediate.
195       BLENDI,
196
197       /// Dynamic (non-constant condition) vector blend where only the sign bits
198       /// of the condition elements are used. This is used to enforce that the
199       /// condition mask is not valid for generic VSELECT optimizations.
200       SHRUNKBLEND,
201
202       /// Combined add and sub on an FP vector.
203       ADDSUB,
204
205       //  FP vector ops with rounding mode.
206       FADD_RND, FADDS_RND,
207       FSUB_RND, FSUBS_RND,
208       FMUL_RND, FMULS_RND,
209       FDIV_RND, FDIVS_RND,
210       FMAX_RND, FMAXS_RND,
211       FMIN_RND, FMINS_RND,
212       FSQRT_RND, FSQRTS_RND,
213
214       // FP vector get exponent.
215       FGETEXP_RND, FGETEXPS_RND,
216       // Extract Normalized Mantissas.
217       VGETMANT, VGETMANTS,
218       // FP Scale.
219       SCALEF,
220       SCALEFS,
221
222       // Integer add/sub with unsigned saturation.
223       ADDUS,
224       SUBUS,
225
226       // Integer add/sub with signed saturation.
227       ADDS,
228       SUBS,
229
230       // Unsigned Integer average.
231       AVG,
232
233       /// Integer horizontal add/sub.
234       HADD,
235       HSUB,
236
237       /// Floating point horizontal add/sub.
238       FHADD,
239       FHSUB,
240
241       // Detect Conflicts Within a Vector
242       CONFLICT,
243
244       /// Floating point max and min.
245       FMAX, FMIN,
246
247       /// Commutative FMIN and FMAX.
248       FMAXC, FMINC,
249
250       /// Scalar intrinsic floating point max and min.
251       FMAXS, FMINS,
252
253       /// Floating point reciprocal-sqrt and reciprocal approximation.
254       /// Note that these typically require refinement
255       /// in order to obtain suitable precision.
256       FRSQRT, FRCP,
257       FRSQRTS, FRCPS,
258
259       // Thread Local Storage.
260       TLSADDR,
261
262       // Thread Local Storage. A call to get the start address
263       // of the TLS block for the current module.
264       TLSBASEADDR,
265
266       // Thread Local Storage.  When calling to an OS provided
267       // thunk at the address from an earlier relocation.
268       TLSCALL,
269
270       // Exception Handling helpers.
271       EH_RETURN,
272
273       // SjLj exception handling setjmp.
274       EH_SJLJ_SETJMP,
275
276       // SjLj exception handling longjmp.
277       EH_SJLJ_LONGJMP,
278
279       // SjLj exception handling dispatch.
280       EH_SJLJ_SETUP_DISPATCH,
281
282       /// Tail call return. See X86TargetLowering::LowerCall for
283       /// the list of operands.
284       TC_RETURN,
285
286       // Vector move to low scalar and zero higher vector elements.
287       VZEXT_MOVL,
288
289       // Vector integer zero-extend.
290       VZEXT,
291       // Vector integer signed-extend.
292       VSEXT,
293
294       // Vector integer truncate.
295       VTRUNC,
296       // Vector integer truncate with unsigned/signed saturation.
297       VTRUNCUS, VTRUNCS,
298
299       // Vector FP extend.
300       VFPEXT, VFPEXT_RND, VFPEXTS_RND,
301
302       // Vector FP round.
303       VFPROUND, VFPROUND_RND, VFPROUNDS_RND,
304
305       // Convert a vector to mask, set bits base on MSB.
306       CVT2MASK,
307
308       // 128-bit vector logical left / right shift
309       VSHLDQ, VSRLDQ,
310
311       // Vector shift elements
312       VSHL, VSRL, VSRA,
313
314       // Vector variable shift right arithmetic.
315       // Unlike ISD::SRA, in case shift count greater then element size
316       // use sign bit to fill destination data element.
317       VSRAV,
318
319       // Vector shift elements by immediate
320       VSHLI, VSRLI, VSRAI,
321
322       // Shifts of mask registers.
323       KSHIFTL, KSHIFTR,
324
325       // Bit rotate by immediate
326       VROTLI, VROTRI,
327
328       // Vector packed double/float comparison.
329       CMPP,
330
331       // Vector integer comparisons.
332       PCMPEQ, PCMPGT,
333       // Vector integer comparisons, the result is in a mask vector.
334       PCMPEQM, PCMPGTM,
335
336       MULTISHIFT,
337
338       /// Vector comparison generating mask bits for fp and
339       /// integer signed and unsigned data types.
340       CMPM,
341       CMPMU,
342       // Vector comparison with rounding mode for FP values
343       CMPM_RND,
344
345       // Arithmetic operations with FLAGS results.
346       ADD, SUB, ADC, SBB, SMUL,
347       INC, DEC, OR, XOR, AND,
348
349       // Bit field extract.
350       BEXTR,
351
352       // LOW, HI, FLAGS = umul LHS, RHS.
353       UMUL,
354
355       // 8-bit SMUL/UMUL - AX, FLAGS = smul8/umul8 AL, RHS.
356       SMUL8, UMUL8,
357
358       // 8-bit divrem that zero-extend the high result (AH).
359       UDIVREM8_ZEXT_HREG,
360       SDIVREM8_SEXT_HREG,
361
362       // X86-specific multiply by immediate.
363       MUL_IMM,
364
365       // Vector sign bit extraction.
366       MOVMSK,
367
368       // Vector bitwise comparisons.
369       PTEST,
370
371       // Vector packed fp sign bitwise comparisons.
372       TESTP,
373
374       // Vector "test" in AVX-512, the result is in a mask vector.
375       TESTM,
376       TESTNM,
377
378       // OR/AND test for masks.
379       KORTEST,
380       KTEST,
381
382       // Several flavors of instructions with vector shuffle behaviors.
383       // Saturated signed/unnsigned packing.
384       PACKSS,
385       PACKUS,
386       // Intra-lane alignr.
387       PALIGNR,
388       // AVX512 inter-lane alignr.
389       VALIGN,
390       PSHUFD,
391       PSHUFHW,
392       PSHUFLW,
393       SHUFP,
394       //Shuffle Packed Values at 128-bit granularity.
395       SHUF128,
396       MOVDDUP,
397       MOVSHDUP,
398       MOVSLDUP,
399       MOVLHPS,
400       MOVLHPD,
401       MOVHLPS,
402       MOVLPS,
403       MOVLPD,
404       MOVSD,
405       MOVSS,
406       UNPCKL,
407       UNPCKH,
408       VPERMILPV,
409       VPERMILPI,
410       VPERMI,
411       VPERM2X128,
412
413       // Variable Permute (VPERM).
414       // Res = VPERMV MaskV, V0
415       VPERMV,
416
417       // 3-op Variable Permute (VPERMT2).
418       // Res = VPERMV3 V0, MaskV, V1
419       VPERMV3,
420
421       // 3-op Variable Permute overwriting the index (VPERMI2).
422       // Res = VPERMIV3 V0, MaskV, V1
423       VPERMIV3,
424
425       // Bitwise ternary logic.
426       VPTERNLOG,
427       // Fix Up Special Packed Float32/64 values.
428       VFIXUPIMM,
429       VFIXUPIMMS,
430       // Range Restriction Calculation For Packed Pairs of Float32/64 values.
431       VRANGE,
432       // Reduce - Perform Reduction Transformation on scalar\packed FP.
433       VREDUCE, VREDUCES,
434       // RndScale - Round FP Values To Include A Given Number Of Fraction Bits.
435       VRNDSCALE, VRNDSCALES,
436       // Tests Types Of a FP Values for packed types.
437       VFPCLASS,
438       // Tests Types Of a FP Values for scalar types.
439       VFPCLASSS,
440
441       // Broadcast scalar to vector.
442       VBROADCAST,
443       // Broadcast mask to vector.
444       VBROADCASTM,
445       // Broadcast subvector to vector.
446       SUBV_BROADCAST,
447
448       // Extract vector element.
449       VEXTRACT,
450
451       /// SSE4A Extraction and Insertion.
452       EXTRQI, INSERTQI,
453
454       // XOP variable/immediate rotations.
455       VPROT, VPROTI,
456       // XOP arithmetic/logical shifts.
457       VPSHA, VPSHL,
458       // XOP signed/unsigned integer comparisons.
459       VPCOM, VPCOMU,
460       // XOP packed permute bytes.
461       VPPERM,
462       // XOP two source permutation.
463       VPERMIL2,
464
465       // Vector multiply packed unsigned doubleword integers.
466       PMULUDQ,
467       // Vector multiply packed signed doubleword integers.
468       PMULDQ,
469       // Vector Multiply Packed UnsignedIntegers with Round and Scale.
470       MULHRS,
471
472       // Multiply and Add Packed Integers.
473       VPMADDUBSW, VPMADDWD,
474       VPMADD52L, VPMADD52H,
475
476       // FMA nodes.
477       FMADD,
478       FNMADD,
479       FMSUB,
480       FNMSUB,
481       FMADDSUB,
482       FMSUBADD,
483
484       // FMA with rounding mode.
485       FMADD_RND,
486       FNMADD_RND,
487       FMSUB_RND,
488       FNMSUB_RND,
489       FMADDSUB_RND,
490       FMSUBADD_RND,
491
492       // Scalar intrinsic FMA with rounding mode.
493       // Two versions, passthru bits on op1 or op3.
494       FMADDS1_RND, FMADDS3_RND,
495       FNMADDS1_RND, FNMADDS3_RND,
496       FMSUBS1_RND, FMSUBS3_RND,
497       FNMSUBS1_RND, FNMSUBS3_RND,
498
499       // Compress and expand.
500       COMPRESS,
501       EXPAND,
502
503       // Convert Unsigned/Integer to Floating-Point Value with rounding mode.
504       SINT_TO_FP_RND, UINT_TO_FP_RND,
505       SCALAR_SINT_TO_FP_RND, SCALAR_UINT_TO_FP_RND,
506
507       // Vector float/double to signed/unsigned integer.
508       CVTP2SI, CVTP2UI, CVTP2SI_RND, CVTP2UI_RND,
509       // Scalar float/double to signed/unsigned integer.
510       CVTS2SI_RND, CVTS2UI_RND,
511
512       // Vector float/double to signed/unsigned integer with truncation.
513       CVTTP2SI, CVTTP2UI, CVTTP2SI_RND, CVTTP2UI_RND,
514       // Scalar float/double to signed/unsigned integer with truncation.
515       CVTTS2SI_RND, CVTTS2UI_RND,
516
517       // Vector signed/unsigned integer to float/double.
518       CVTSI2P, CVTUI2P,
519
520       // Save xmm argument registers to the stack, according to %al. An operator
521       // is needed so that this can be expanded with control flow.
522       VASTART_SAVE_XMM_REGS,
523
524       // Windows's _chkstk call to do stack probing.
525       WIN_ALLOCA,
526
527       // For allocating variable amounts of stack space when using
528       // segmented stacks. Check if the current stacklet has enough space, and
529       // falls back to heap allocation if not.
530       SEG_ALLOCA,
531
532       // Memory barriers.
533       MEMBARRIER,
534       MFENCE,
535
536       // Store FP status word into i16 register.
537       FNSTSW16r,
538
539       // Store contents of %ah into %eflags.
540       SAHF,
541
542       // Get a random integer and indicate whether it is valid in CF.
543       RDRAND,
544
545       // Get a NIST SP800-90B & C compliant random integer and
546       // indicate whether it is valid in CF.
547       RDSEED,
548
549       // SSE42 string comparisons.
550       PCMPISTRI,
551       PCMPESTRI,
552
553       // Test if in transactional execution.
554       XTEST,
555
556       // ERI instructions.
557       RSQRT28, RSQRT28S, RCP28, RCP28S, EXP2,
558
559       // Conversions between float and half-float.
560       CVTPS2PH, CVTPH2PS,
561
562       // LWP insert record.
563       LWPINS,
564
565       // Compare and swap.
566       LCMPXCHG_DAG = ISD::FIRST_TARGET_MEMORY_OPCODE,
567       LCMPXCHG8_DAG,
568       LCMPXCHG16_DAG,
569       LCMPXCHG8_SAVE_EBX_DAG,
570       LCMPXCHG16_SAVE_RBX_DAG,
571
572       /// LOCK-prefixed arithmetic read-modify-write instructions.
573       /// EFLAGS, OUTCHAIN = LADD(INCHAIN, PTR, RHS)
574       LADD, LSUB, LOR, LXOR, LAND,
575
576       // Load, scalar_to_vector, and zero extend.
577       VZEXT_LOAD,
578
579       // Store FP control world into i16 memory.
580       FNSTCW16m,
581
582       /// This instruction implements FP_TO_SINT with the
583       /// integer destination in memory and a FP reg source.  This corresponds
584       /// to the X86::FIST*m instructions and the rounding mode change stuff. It
585       /// has two inputs (token chain and address) and two outputs (int value
586       /// and token chain).
587       FP_TO_INT16_IN_MEM,
588       FP_TO_INT32_IN_MEM,
589       FP_TO_INT64_IN_MEM,
590
591       /// This instruction implements SINT_TO_FP with the
592       /// integer source in memory and FP reg result.  This corresponds to the
593       /// X86::FILD*m instructions. It has three inputs (token chain, address,
594       /// and source type) and two outputs (FP value and token chain). FILD_FLAG
595       /// also produces a flag).
596       FILD,
597       FILD_FLAG,
598
599       /// This instruction implements an extending load to FP stack slots.
600       /// This corresponds to the X86::FLD32m / X86::FLD64m. It takes a chain
601       /// operand, ptr to load from, and a ValueType node indicating the type
602       /// to load to.
603       FLD,
604
605       /// This instruction implements a truncating store to FP stack
606       /// slots. This corresponds to the X86::FST32m / X86::FST64m. It takes a
607       /// chain operand, value to store, address, and a ValueType to store it
608       /// as.
609       FST,
610
611       /// This instruction grabs the address of the next argument
612       /// from a va_list. (reads and modifies the va_list in memory)
613       VAARG_64,
614
615       // Vector truncating store with unsigned/signed saturation
616       VTRUNCSTOREUS, VTRUNCSTORES,
617       // Vector truncating masked store with unsigned/signed saturation
618       VMTRUNCSTOREUS, VMTRUNCSTORES
619
620       // WARNING: Do not add anything in the end unless you want the node to
621       // have memop! In fact, starting from FIRST_TARGET_MEMORY_OPCODE all
622       // opcodes will be thought as target memory ops!
623     };
624   } // end namespace X86ISD
625
626   /// Define some predicates that are used for node matching.
627   namespace X86 {
628     /// Return true if the specified
629     /// EXTRACT_SUBVECTOR operand specifies a vector extract that is
630     /// suitable for input to VEXTRACTF128, VEXTRACTI128 instructions.
631     bool isVEXTRACT128Index(SDNode *N);
632
633     /// Return true if the specified
634     /// INSERT_SUBVECTOR operand specifies a subvector insert that is
635     /// suitable for input to VINSERTF128, VINSERTI128 instructions.
636     bool isVINSERT128Index(SDNode *N);
637
638     /// Return true if the specified
639     /// EXTRACT_SUBVECTOR operand specifies a vector extract that is
640     /// suitable for input to VEXTRACTF64X4, VEXTRACTI64X4 instructions.
641     bool isVEXTRACT256Index(SDNode *N);
642
643     /// Return true if the specified
644     /// INSERT_SUBVECTOR operand specifies a subvector insert that is
645     /// suitable for input to VINSERTF64X4, VINSERTI64X4 instructions.
646     bool isVINSERT256Index(SDNode *N);
647
648     /// Return the appropriate
649     /// immediate to extract the specified EXTRACT_SUBVECTOR index
650     /// with VEXTRACTF128, VEXTRACTI128 instructions.
651     unsigned getExtractVEXTRACT128Immediate(SDNode *N);
652
653     /// Return the appropriate
654     /// immediate to insert at the specified INSERT_SUBVECTOR index
655     /// with VINSERTF128, VINSERT128 instructions.
656     unsigned getInsertVINSERT128Immediate(SDNode *N);
657
658     /// Return the appropriate
659     /// immediate to extract the specified EXTRACT_SUBVECTOR index
660     /// with VEXTRACTF64X4, VEXTRACTI64x4 instructions.
661     unsigned getExtractVEXTRACT256Immediate(SDNode *N);
662
663     /// Return the appropriate
664     /// immediate to insert at the specified INSERT_SUBVECTOR index
665     /// with VINSERTF64x4, VINSERTI64x4 instructions.
666     unsigned getInsertVINSERT256Immediate(SDNode *N);
667
668     /// Returns true if Elt is a constant zero or floating point constant +0.0.
669     bool isZeroNode(SDValue Elt);
670
671     /// Returns true of the given offset can be
672     /// fit into displacement field of the instruction.
673     bool isOffsetSuitableForCodeModel(int64_t Offset, CodeModel::Model M,
674                                       bool hasSymbolicDisplacement = true);
675
676     /// Determines whether the callee is required to pop its
677     /// own arguments. Callee pop is necessary to support tail calls.
678     bool isCalleePop(CallingConv::ID CallingConv,
679                      bool is64Bit, bool IsVarArg, bool GuaranteeTCO);
680
681   } // end namespace X86
682
683   //===--------------------------------------------------------------------===//
684   //  X86 Implementation of the TargetLowering interface
685   class X86TargetLowering final : public TargetLowering {
686   public:
687     explicit X86TargetLowering(const X86TargetMachine &TM,
688                                const X86Subtarget &STI);
689
690     unsigned getJumpTableEncoding() const override;
691     bool useSoftFloat() const override;
692
693     void markLibCallAttributes(MachineFunction *MF, unsigned CC,
694                                ArgListTy &Args) const override;
695
696     MVT getScalarShiftAmountTy(const DataLayout &, EVT) const override {
697       return MVT::i8;
698     }
699
700     const MCExpr *
701     LowerCustomJumpTableEntry(const MachineJumpTableInfo *MJTI,
702                               const MachineBasicBlock *MBB, unsigned uid,
703                               MCContext &Ctx) const override;
704
705     /// Returns relocation base for the given PIC jumptable.
706     SDValue getPICJumpTableRelocBase(SDValue Table,
707                                      SelectionDAG &DAG) const override;
708     const MCExpr *
709     getPICJumpTableRelocBaseExpr(const MachineFunction *MF,
710                                  unsigned JTI, MCContext &Ctx) const override;
711
712     /// Return the desired alignment for ByVal aggregate
713     /// function arguments in the caller parameter area. For X86, aggregates
714     /// that contains are placed at 16-byte boundaries while the rest are at
715     /// 4-byte boundaries.
716     unsigned getByValTypeAlignment(Type *Ty,
717                                    const DataLayout &DL) const override;
718
719     /// Returns the target specific optimal type for load
720     /// and store operations as a result of memset, memcpy, and memmove
721     /// lowering. If DstAlign is zero that means it's safe to destination
722     /// alignment can satisfy any constraint. Similarly if SrcAlign is zero it
723     /// means there isn't a need to check it against alignment requirement,
724     /// probably because the source does not need to be loaded. If 'IsMemset' is
725     /// true, that means it's expanding a memset. If 'ZeroMemset' is true, that
726     /// means it's a memset of zero. 'MemcpyStrSrc' indicates whether the memcpy
727     /// source is constant so it does not need to be loaded.
728     /// It returns EVT::Other if the type should be determined using generic
729     /// target-independent logic.
730     EVT getOptimalMemOpType(uint64_t Size, unsigned DstAlign, unsigned SrcAlign,
731                             bool IsMemset, bool ZeroMemset, bool MemcpyStrSrc,
732                             MachineFunction &MF) const override;
733
734     /// Returns true if it's safe to use load / store of the
735     /// specified type to expand memcpy / memset inline. This is mostly true
736     /// for all types except for some special cases. For example, on X86
737     /// targets without SSE2 f64 load / store are done with fldl / fstpl which
738     /// also does type conversion. Note the specified type doesn't have to be
739     /// legal as the hook is used before type legalization.
740     bool isSafeMemOpType(MVT VT) const override;
741
742     /// Returns true if the target allows unaligned memory accesses of the
743     /// specified type. Returns whether it is "fast" in the last argument.
744     bool allowsMisalignedMemoryAccesses(EVT VT, unsigned AS, unsigned Align,
745                                        bool *Fast) const override;
746
747     /// Provide custom lowering hooks for some operations.
748     ///
749     SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const override;
750
751     /// Places new result values for the node in Results (their number
752     /// and types must exactly match those of the original return values of
753     /// the node), or leaves Results empty, which indicates that the node is not
754     /// to be custom lowered after all.
755     void LowerOperationWrapper(SDNode *N,
756                                SmallVectorImpl<SDValue> &Results,
757                                SelectionDAG &DAG) const override;
758
759     /// Replace the results of node with an illegal result
760     /// type with new values built out of custom code.
761     ///
762     void ReplaceNodeResults(SDNode *N, SmallVectorImpl<SDValue>&Results,
763                             SelectionDAG &DAG) const override;
764
765     SDValue PerformDAGCombine(SDNode *N, DAGCombinerInfo &DCI) const override;
766
767     /// Return true if the target has native support for
768     /// the specified value type and it is 'desirable' to use the type for the
769     /// given node type. e.g. On x86 i16 is legal, but undesirable since i16
770     /// instruction encodings are longer and some i16 instructions are slow.
771     bool isTypeDesirableForOp(unsigned Opc, EVT VT) const override;
772
773     /// Return true if the target has native support for the
774     /// specified value type and it is 'desirable' to use the type. e.g. On x86
775     /// i16 is legal, but undesirable since i16 instruction encodings are longer
776     /// and some i16 instructions are slow.
777     bool IsDesirableToPromoteOp(SDValue Op, EVT &PVT) const override;
778
779     MachineBasicBlock *
780     EmitInstrWithCustomInserter(MachineInstr &MI,
781                                 MachineBasicBlock *MBB) const override;
782
783     /// This method returns the name of a target specific DAG node.
784     const char *getTargetNodeName(unsigned Opcode) const override;
785
786     bool isCheapToSpeculateCttz() const override;
787
788     bool isCheapToSpeculateCtlz() const override;
789
790     bool isCtlzFast() const override;
791
792     bool hasBitPreservingFPLogic(EVT VT) const override {
793       return VT == MVT::f32 || VT == MVT::f64 || VT.isVector();
794     }
795
796     bool isMultiStoresCheaperThanBitsMerge(EVT LTy, EVT HTy) const override {
797       // If the pair to store is a mixture of float and int values, we will
798       // save two bitwise instructions and one float-to-int instruction and
799       // increase one store instruction. There is potentially a more
800       // significant benefit because it avoids the float->int domain switch
801       // for input value. So It is more likely a win.
802       if ((LTy.isFloatingPoint() && HTy.isInteger()) ||
803           (LTy.isInteger() && HTy.isFloatingPoint()))
804         return true;
805       // If the pair only contains int values, we will save two bitwise
806       // instructions and increase one store instruction (costing one more
807       // store buffer). Since the benefit is more blurred so we leave
808       // such pair out until we get testcase to prove it is a win.
809       return false;
810     }
811
812     bool isMaskAndCmp0FoldingBeneficial(const Instruction &AndI) const override;
813
814     bool hasAndNotCompare(SDValue Y) const override;
815
816     bool convertSetCCLogicToBitwiseLogic(EVT VT) const override {
817       return VT.isScalarInteger();
818     }
819
820     /// Vector-sized comparisons are fast using PCMPEQ + PMOVMSK or PTEST.
821     MVT hasFastEqualityCompare(unsigned NumBits) const override;
822
823     /// Return the value type to use for ISD::SETCC.
824     EVT getSetCCResultType(const DataLayout &DL, LLVMContext &Context,
825                            EVT VT) const override;
826
827     /// Determine which of the bits specified in Mask are known to be either
828     /// zero or one and return them in the KnownZero/KnownOne bitsets.
829     void computeKnownBitsForTargetNode(const SDValue Op,
830                                        KnownBits &Known,
831                                        const APInt &DemandedElts,
832                                        const SelectionDAG &DAG,
833                                        unsigned Depth = 0) const override;
834
835     /// Determine the number of bits in the operation that are sign bits.
836     unsigned ComputeNumSignBitsForTargetNode(SDValue Op,
837                                              const APInt &DemandedElts,
838                                              const SelectionDAG &DAG,
839                                              unsigned Depth) const override;
840
841     bool isGAPlusOffset(SDNode *N, const GlobalValue* &GA,
842                         int64_t &Offset) const override;
843
844     SDValue getReturnAddressFrameIndex(SelectionDAG &DAG) const;
845
846     bool ExpandInlineAsm(CallInst *CI) const override;
847
848     ConstraintType getConstraintType(StringRef Constraint) const override;
849
850     /// Examine constraint string and operand type and determine a weight value.
851     /// The operand object must already have been set up with the operand type.
852     ConstraintWeight
853       getSingleConstraintMatchWeight(AsmOperandInfo &info,
854                                      const char *constraint) const override;
855
856     const char *LowerXConstraint(EVT ConstraintVT) const override;
857
858     /// Lower the specified operand into the Ops vector. If it is invalid, don't
859     /// add anything to Ops. If hasMemory is true it means one of the asm
860     /// constraint of the inline asm instruction being processed is 'm'.
861     void LowerAsmOperandForConstraint(SDValue Op,
862                                       std::string &Constraint,
863                                       std::vector<SDValue> &Ops,
864                                       SelectionDAG &DAG) const override;
865
866     unsigned
867     getInlineAsmMemConstraint(StringRef ConstraintCode) const override {
868       if (ConstraintCode == "i")
869         return InlineAsm::Constraint_i;
870       else if (ConstraintCode == "o")
871         return InlineAsm::Constraint_o;
872       else if (ConstraintCode == "v")
873         return InlineAsm::Constraint_v;
874       else if (ConstraintCode == "X")
875         return InlineAsm::Constraint_X;
876       return TargetLowering::getInlineAsmMemConstraint(ConstraintCode);
877     }
878
879     /// Given a physical register constraint
880     /// (e.g. {edx}), return the register number and the register class for the
881     /// register.  This should only be used for C_Register constraints.  On
882     /// error, this returns a register number of 0.
883     std::pair<unsigned, const TargetRegisterClass *>
884     getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
885                                  StringRef Constraint, MVT VT) const override;
886
887     /// Return true if the addressing mode represented
888     /// by AM is legal for this target, for a load/store of the specified type.
889     bool isLegalAddressingMode(const DataLayout &DL, const AddrMode &AM,
890                                Type *Ty, unsigned AS) const override;
891
892     /// Return true if the specified immediate is legal
893     /// icmp immediate, that is the target has icmp instructions which can
894     /// compare a register against the immediate without having to materialize
895     /// the immediate into a register.
896     bool isLegalICmpImmediate(int64_t Imm) const override;
897
898     /// Return true if the specified immediate is legal
899     /// add immediate, that is the target has add instructions which can
900     /// add a register and the immediate without having to materialize
901     /// the immediate into a register.
902     bool isLegalAddImmediate(int64_t Imm) const override;
903
904     /// \brief Return the cost of the scaling factor used in the addressing
905     /// mode represented by AM for this target, for a load/store
906     /// of the specified type.
907     /// If the AM is supported, the return value must be >= 0.
908     /// If the AM is not supported, it returns a negative value.
909     int getScalingFactorCost(const DataLayout &DL, const AddrMode &AM, Type *Ty,
910                              unsigned AS) const override;
911
912     bool isVectorShiftByScalarCheap(Type *Ty) const override;
913
914     /// Return true if it's free to truncate a value of
915     /// type Ty1 to type Ty2. e.g. On x86 it's free to truncate a i32 value in
916     /// register EAX to i16 by referencing its sub-register AX.
917     bool isTruncateFree(Type *Ty1, Type *Ty2) const override;
918     bool isTruncateFree(EVT VT1, EVT VT2) const override;
919
920     bool allowTruncateForTailCall(Type *Ty1, Type *Ty2) const override;
921
922     /// Return true if any actual instruction that defines a
923     /// value of type Ty1 implicit zero-extends the value to Ty2 in the result
924     /// register. This does not necessarily include registers defined in
925     /// unknown ways, such as incoming arguments, or copies from unknown
926     /// virtual registers. Also, if isTruncateFree(Ty2, Ty1) is true, this
927     /// does not necessarily apply to truncate instructions. e.g. on x86-64,
928     /// all instructions that define 32-bit values implicit zero-extend the
929     /// result out to 64 bits.
930     bool isZExtFree(Type *Ty1, Type *Ty2) const override;
931     bool isZExtFree(EVT VT1, EVT VT2) const override;
932     bool isZExtFree(SDValue Val, EVT VT2) const override;
933
934     /// Return true if folding a vector load into ExtVal (a sign, zero, or any
935     /// extend node) is profitable.
936     bool isVectorLoadExtDesirable(SDValue) const override;
937
938     /// Return true if an FMA operation is faster than a pair of fmul and fadd
939     /// instructions. fmuladd intrinsics will be expanded to FMAs when this
940     /// method returns true, otherwise fmuladd is expanded to fmul + fadd.
941     bool isFMAFasterThanFMulAndFAdd(EVT VT) const override;
942
943     /// Return true if it's profitable to narrow
944     /// operations of type VT1 to VT2. e.g. on x86, it's profitable to narrow
945     /// from i32 to i8 but not from i32 to i16.
946     bool isNarrowingProfitable(EVT VT1, EVT VT2) const override;
947
948     /// Given an intrinsic, checks if on the target the intrinsic will need to map
949     /// to a MemIntrinsicNode (touches memory). If this is the case, it returns
950     /// true and stores the intrinsic information into the IntrinsicInfo that was
951     /// passed to the function.
952     bool getTgtMemIntrinsic(IntrinsicInfo &Info, const CallInst &I,
953                             unsigned Intrinsic) const override;
954
955     /// Returns true if the target can instruction select the
956     /// specified FP immediate natively. If false, the legalizer will
957     /// materialize the FP immediate as a load from a constant pool.
958     bool isFPImmLegal(const APFloat &Imm, EVT VT) const override;
959
960     /// Targets can use this to indicate that they only support *some*
961     /// VECTOR_SHUFFLE operations, those with specific masks. By default, if a
962     /// target supports the VECTOR_SHUFFLE node, all mask values are assumed to
963     /// be legal.
964     bool isShuffleMaskLegal(const SmallVectorImpl<int> &Mask,
965                             EVT VT) const override;
966
967     /// Similar to isShuffleMaskLegal. This is used by Targets can use this to
968     /// indicate if there is a suitable VECTOR_SHUFFLE that can be used to
969     /// replace a VAND with a constant pool entry.
970     bool isVectorClearMaskLegal(const SmallVectorImpl<int> &Mask,
971                                 EVT VT) const override;
972
973     /// If true, then instruction selection should
974     /// seek to shrink the FP constant of the specified type to a smaller type
975     /// in order to save space and / or reduce runtime.
976     bool ShouldShrinkFPConstant(EVT VT) const override {
977       // Don't shrink FP constpool if SSE2 is available since cvtss2sd is more
978       // expensive than a straight movsd. On the other hand, it's important to
979       // shrink long double fp constant since fldt is very slow.
980       return !X86ScalarSSEf64 || VT == MVT::f80;
981     }
982
983     /// Return true if we believe it is correct and profitable to reduce the
984     /// load node to a smaller type.
985     bool shouldReduceLoadWidth(SDNode *Load, ISD::LoadExtType ExtTy,
986                                EVT NewVT) const override;
987
988     /// Return true if the specified scalar FP type is computed in an SSE
989     /// register, not on the X87 floating point stack.
990     bool isScalarFPTypeInSSEReg(EVT VT) const {
991       return (VT == MVT::f64 && X86ScalarSSEf64) || // f64 is when SSE2
992              (VT == MVT::f32 && X86ScalarSSEf32);   // f32 is when SSE1
993     }
994
995     /// \brief Returns true if it is beneficial to convert a load of a constant
996     /// to just the constant itself.
997     bool shouldConvertConstantLoadToIntImm(const APInt &Imm,
998                                            Type *Ty) const override;
999
1000     bool convertSelectOfConstantsToMath() const override {
1001       return true;
1002     }
1003
1004     /// Return true if EXTRACT_SUBVECTOR is cheap for this result type
1005     /// with this index.
1006     bool isExtractSubvectorCheap(EVT ResVT, unsigned Index) const override;
1007
1008     /// Intel processors have a unified instruction and data cache
1009     const char * getClearCacheBuiltinName() const override {
1010       return nullptr; // nothing to do, move along.
1011     }
1012
1013     unsigned getRegisterByName(const char* RegName, EVT VT,
1014                                SelectionDAG &DAG) const override;
1015
1016     /// If a physical register, this returns the register that receives the
1017     /// exception address on entry to an EH pad.
1018     unsigned
1019     getExceptionPointerRegister(const Constant *PersonalityFn) const override;
1020
1021     /// If a physical register, this returns the register that receives the
1022     /// exception typeid on entry to a landing pad.
1023     unsigned
1024     getExceptionSelectorRegister(const Constant *PersonalityFn) const override;
1025
1026     virtual bool needsFixedCatchObjects() const override;
1027
1028     /// This method returns a target specific FastISel object,
1029     /// or null if the target does not support "fast" ISel.
1030     FastISel *createFastISel(FunctionLoweringInfo &funcInfo,
1031                              const TargetLibraryInfo *libInfo) const override;
1032
1033     /// If the target has a standard location for the stack protector cookie,
1034     /// returns the address of that location. Otherwise, returns nullptr.
1035     Value *getIRStackGuard(IRBuilder<> &IRB) const override;
1036
1037     bool useLoadStackGuardNode() const override;
1038     void insertSSPDeclarations(Module &M) const override;
1039     Value *getSDagStackGuard(const Module &M) const override;
1040     Value *getSSPStackGuardCheck(const Module &M) const override;
1041
1042     /// Return true if the target stores SafeStack pointer at a fixed offset in
1043     /// some non-standard address space, and populates the address space and
1044     /// offset as appropriate.
1045     Value *getSafeStackPointerLocation(IRBuilder<> &IRB) const override;
1046
1047     SDValue BuildFILD(SDValue Op, EVT SrcVT, SDValue Chain, SDValue StackSlot,
1048                       SelectionDAG &DAG) const;
1049
1050     bool isNoopAddrSpaceCast(unsigned SrcAS, unsigned DestAS) const override;
1051
1052     /// \brief Customize the preferred legalization strategy for certain types.
1053     LegalizeTypeAction getPreferredVectorAction(EVT VT) const override;
1054
1055     bool isIntDivCheap(EVT VT, AttributeList Attr) const override;
1056
1057     bool supportSwiftError() const override;
1058
1059     unsigned getMaxSupportedInterleaveFactor() const override { return 4; }
1060
1061     /// \brief Lower interleaved load(s) into target specific
1062     /// instructions/intrinsics.
1063     bool lowerInterleavedLoad(LoadInst *LI,
1064                               ArrayRef<ShuffleVectorInst *> Shuffles,
1065                               ArrayRef<unsigned> Indices,
1066                               unsigned Factor) const override;
1067
1068     void finalizeLowering(MachineFunction &MF) const override;
1069
1070   protected:
1071     std::pair<const TargetRegisterClass *, uint8_t>
1072     findRepresentativeClass(const TargetRegisterInfo *TRI,
1073                             MVT VT) const override;
1074
1075   private:
1076     /// Keep a reference to the X86Subtarget around so that we can
1077     /// make the right decision when generating code for different targets.
1078     const X86Subtarget &Subtarget;
1079
1080     /// Select between SSE or x87 floating point ops.
1081     /// When SSE is available, use it for f32 operations.
1082     /// When SSE2 is available, use it for f64 operations.
1083     bool X86ScalarSSEf32;
1084     bool X86ScalarSSEf64;
1085
1086     /// A list of legal FP immediates.
1087     std::vector<APFloat> LegalFPImmediates;
1088
1089     /// Indicate that this x86 target can instruction
1090     /// select the specified FP immediate natively.
1091     void addLegalFPImmediate(const APFloat& Imm) {
1092       LegalFPImmediates.push_back(Imm);
1093     }
1094
1095     SDValue LowerCallResult(SDValue Chain, SDValue InFlag,
1096                             CallingConv::ID CallConv, bool isVarArg,
1097                             const SmallVectorImpl<ISD::InputArg> &Ins,
1098                             const SDLoc &dl, SelectionDAG &DAG,
1099                             SmallVectorImpl<SDValue> &InVals,
1100                             uint32_t *RegMask) const;
1101     SDValue LowerMemArgument(SDValue Chain, CallingConv::ID CallConv,
1102                              const SmallVectorImpl<ISD::InputArg> &ArgInfo,
1103                              const SDLoc &dl, SelectionDAG &DAG,
1104                              const CCValAssign &VA, MachineFrameInfo &MFI,
1105                              unsigned i) const;
1106     SDValue LowerMemOpCallTo(SDValue Chain, SDValue StackPtr, SDValue Arg,
1107                              const SDLoc &dl, SelectionDAG &DAG,
1108                              const CCValAssign &VA,
1109                              ISD::ArgFlagsTy Flags) const;
1110
1111     // Call lowering helpers.
1112
1113     /// Check whether the call is eligible for tail call optimization. Targets
1114     /// that want to do tail call optimization should implement this function.
1115     bool IsEligibleForTailCallOptimization(SDValue Callee,
1116                                            CallingConv::ID CalleeCC,
1117                                            bool isVarArg,
1118                                            bool isCalleeStructRet,
1119                                            bool isCallerStructRet,
1120                                            Type *RetTy,
1121                                     const SmallVectorImpl<ISD::OutputArg> &Outs,
1122                                     const SmallVectorImpl<SDValue> &OutVals,
1123                                     const SmallVectorImpl<ISD::InputArg> &Ins,
1124                                            SelectionDAG& DAG) const;
1125     SDValue EmitTailCallLoadRetAddr(SelectionDAG &DAG, SDValue &OutRetAddr,
1126                                     SDValue Chain, bool IsTailCall,
1127                                     bool Is64Bit, int FPDiff,
1128                                     const SDLoc &dl) const;
1129
1130     unsigned GetAlignedArgumentStackSize(unsigned StackSize,
1131                                          SelectionDAG &DAG) const;
1132
1133     unsigned getAddressSpace(void) const;
1134
1135     std::pair<SDValue,SDValue> FP_TO_INTHelper(SDValue Op, SelectionDAG &DAG,
1136                                                bool isSigned,
1137                                                bool isReplace) const;
1138
1139     SDValue LowerBUILD_VECTOR(SDValue Op, SelectionDAG &DAG) const;
1140     SDValue LowerBUILD_VECTORvXi1(SDValue Op, SelectionDAG &DAG) const;
1141     SDValue LowerVSELECT(SDValue Op, SelectionDAG &DAG) const;
1142     SDValue LowerEXTRACT_VECTOR_ELT(SDValue Op, SelectionDAG &DAG) const;
1143     SDValue ExtractBitFromMaskVector(SDValue Op, SelectionDAG &DAG) const;
1144     SDValue InsertBitToMaskVector(SDValue Op, SelectionDAG &DAG) const;
1145     SDValue LowerINSERT_VECTOR_ELT(SDValue Op, SelectionDAG &DAG) const;
1146
1147     unsigned getGlobalWrapperKind(const GlobalValue *GV = nullptr) const;
1148     SDValue LowerConstantPool(SDValue Op, SelectionDAG &DAG) const;
1149     SDValue LowerBlockAddress(SDValue Op, SelectionDAG &DAG) const;
1150     SDValue LowerGlobalAddress(const GlobalValue *GV, const SDLoc &dl,
1151                                int64_t Offset, SelectionDAG &DAG) const;
1152     SDValue LowerGlobalAddress(SDValue Op, SelectionDAG &DAG) const;
1153     SDValue LowerGlobalTLSAddress(SDValue Op, SelectionDAG &DAG) const;
1154     SDValue LowerExternalSymbol(SDValue Op, SelectionDAG &DAG) const;
1155
1156     SDValue LowerSINT_TO_FP(SDValue Op, SelectionDAG &DAG) const;
1157     SDValue LowerUINT_TO_FP(SDValue Op, SelectionDAG &DAG) const;
1158     SDValue LowerUINT_TO_FP_i64(SDValue Op, SelectionDAG &DAG) const;
1159     SDValue LowerUINT_TO_FP_i32(SDValue Op, SelectionDAG &DAG) const;
1160     SDValue lowerUINT_TO_FP_vec(SDValue Op, SelectionDAG &DAG) const;
1161     SDValue LowerTRUNCATE(SDValue Op, SelectionDAG &DAG) const;
1162     SDValue LowerFP_TO_INT(SDValue Op, SelectionDAG &DAG) const;
1163     SDValue LowerToBT(SDValue And, ISD::CondCode CC, const SDLoc &dl,
1164                       SelectionDAG &DAG) const;
1165     SDValue LowerSETCC(SDValue Op, SelectionDAG &DAG) const;
1166     SDValue LowerSETCCCARRY(SDValue Op, SelectionDAG &DAG) const;
1167     SDValue LowerSELECT(SDValue Op, SelectionDAG &DAG) const;
1168     SDValue LowerBRCOND(SDValue Op, SelectionDAG &DAG) const;
1169     SDValue LowerJumpTable(SDValue Op, SelectionDAG &DAG) const;
1170     SDValue LowerDYNAMIC_STACKALLOC(SDValue Op, SelectionDAG &DAG) const;
1171     SDValue LowerVASTART(SDValue Op, SelectionDAG &DAG) const;
1172     SDValue LowerVAARG(SDValue Op, SelectionDAG &DAG) const;
1173     SDValue LowerRETURNADDR(SDValue Op, SelectionDAG &DAG) const;
1174     SDValue LowerADDROFRETURNADDR(SDValue Op, SelectionDAG &DAG) const;
1175     SDValue LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG) const;
1176     SDValue LowerFRAME_TO_ARGS_OFFSET(SDValue Op, SelectionDAG &DAG) const;
1177     SDValue LowerEH_RETURN(SDValue Op, SelectionDAG &DAG) const;
1178     SDValue lowerEH_SJLJ_SETJMP(SDValue Op, SelectionDAG &DAG) const;
1179     SDValue lowerEH_SJLJ_LONGJMP(SDValue Op, SelectionDAG &DAG) const;
1180     SDValue lowerEH_SJLJ_SETUP_DISPATCH(SDValue Op, SelectionDAG &DAG) const;
1181     SDValue LowerINIT_TRAMPOLINE(SDValue Op, SelectionDAG &DAG) const;
1182     SDValue LowerFLT_ROUNDS_(SDValue Op, SelectionDAG &DAG) const;
1183     SDValue LowerWin64_i128OP(SDValue Op, SelectionDAG &DAG) const;
1184     SDValue LowerGC_TRANSITION_START(SDValue Op, SelectionDAG &DAG) const;
1185     SDValue LowerGC_TRANSITION_END(SDValue Op, SelectionDAG &DAG) const;
1186
1187     SDValue
1188     LowerFormalArguments(SDValue Chain, CallingConv::ID CallConv, bool isVarArg,
1189                          const SmallVectorImpl<ISD::InputArg> &Ins,
1190                          const SDLoc &dl, SelectionDAG &DAG,
1191                          SmallVectorImpl<SDValue> &InVals) const override;
1192     SDValue LowerCall(CallLoweringInfo &CLI,
1193                       SmallVectorImpl<SDValue> &InVals) const override;
1194
1195     SDValue LowerReturn(SDValue Chain, CallingConv::ID CallConv, bool isVarArg,
1196                         const SmallVectorImpl<ISD::OutputArg> &Outs,
1197                         const SmallVectorImpl<SDValue> &OutVals,
1198                         const SDLoc &dl, SelectionDAG &DAG) const override;
1199
1200     bool supportSplitCSR(MachineFunction *MF) const override {
1201       return MF->getFunction()->getCallingConv() == CallingConv::CXX_FAST_TLS &&
1202           MF->getFunction()->hasFnAttribute(Attribute::NoUnwind);
1203     }
1204     void initializeSplitCSR(MachineBasicBlock *Entry) const override;
1205     void insertCopiesSplitCSR(
1206       MachineBasicBlock *Entry,
1207       const SmallVectorImpl<MachineBasicBlock *> &Exits) const override;
1208
1209     bool isUsedByReturnOnly(SDNode *N, SDValue &Chain) const override;
1210
1211     bool mayBeEmittedAsTailCall(const CallInst *CI) const override;
1212
1213     EVT getTypeForExtReturn(LLVMContext &Context, EVT VT,
1214                             ISD::NodeType ExtendKind) const override;
1215
1216     bool CanLowerReturn(CallingConv::ID CallConv, MachineFunction &MF,
1217                         bool isVarArg,
1218                         const SmallVectorImpl<ISD::OutputArg> &Outs,
1219                         LLVMContext &Context) const override;
1220
1221     const MCPhysReg *getScratchRegisters(CallingConv::ID CC) const override;
1222
1223     TargetLoweringBase::AtomicExpansionKind
1224     shouldExpandAtomicLoadInIR(LoadInst *SI) const override;
1225     bool shouldExpandAtomicStoreInIR(StoreInst *SI) const override;
1226     TargetLoweringBase::AtomicExpansionKind
1227     shouldExpandAtomicRMWInIR(AtomicRMWInst *AI) const override;
1228
1229     LoadInst *
1230     lowerIdempotentRMWIntoFencedLoad(AtomicRMWInst *AI) const override;
1231
1232     bool needsCmpXchgNb(Type *MemType) const;
1233
1234     void SetupEntryBlockForSjLj(MachineInstr &MI, MachineBasicBlock *MBB,
1235                                 MachineBasicBlock *DispatchBB, int FI) const;
1236
1237     // Utility function to emit the low-level va_arg code for X86-64.
1238     MachineBasicBlock *
1239     EmitVAARG64WithCustomInserter(MachineInstr &MI,
1240                                   MachineBasicBlock *MBB) const;
1241
1242     /// Utility function to emit the xmm reg save portion of va_start.
1243     MachineBasicBlock *
1244     EmitVAStartSaveXMMRegsWithCustomInserter(MachineInstr &BInstr,
1245                                              MachineBasicBlock *BB) const;
1246
1247     MachineBasicBlock *EmitLoweredSelect(MachineInstr &I,
1248                                          MachineBasicBlock *BB) const;
1249
1250     MachineBasicBlock *EmitLoweredAtomicFP(MachineInstr &I,
1251                                            MachineBasicBlock *BB) const;
1252
1253     MachineBasicBlock *EmitLoweredCatchRet(MachineInstr &MI,
1254                                            MachineBasicBlock *BB) const;
1255
1256     MachineBasicBlock *EmitLoweredCatchPad(MachineInstr &MI,
1257                                            MachineBasicBlock *BB) const;
1258
1259     MachineBasicBlock *EmitLoweredSegAlloca(MachineInstr &MI,
1260                                             MachineBasicBlock *BB) const;
1261
1262     MachineBasicBlock *EmitLoweredTLSAddr(MachineInstr &MI,
1263                                           MachineBasicBlock *BB) const;
1264
1265     MachineBasicBlock *EmitLoweredTLSCall(MachineInstr &MI,
1266                                           MachineBasicBlock *BB) const;
1267
1268     MachineBasicBlock *emitEHSjLjSetJmp(MachineInstr &MI,
1269                                         MachineBasicBlock *MBB) const;
1270
1271     MachineBasicBlock *emitEHSjLjLongJmp(MachineInstr &MI,
1272                                          MachineBasicBlock *MBB) const;
1273
1274     MachineBasicBlock *emitFMA3Instr(MachineInstr &MI,
1275                                      MachineBasicBlock *MBB) const;
1276
1277     MachineBasicBlock *EmitSjLjDispatchBlock(MachineInstr &MI,
1278                                              MachineBasicBlock *MBB) const;
1279
1280     /// Emit nodes that will be selected as "test Op0,Op0", or something
1281     /// equivalent, for use with the given x86 condition code.
1282     SDValue EmitTest(SDValue Op0, unsigned X86CC, const SDLoc &dl,
1283                      SelectionDAG &DAG) const;
1284
1285     /// Emit nodes that will be selected as "cmp Op0,Op1", or something
1286     /// equivalent, for use with the given x86 condition code.
1287     SDValue EmitCmp(SDValue Op0, SDValue Op1, unsigned X86CC, const SDLoc &dl,
1288                     SelectionDAG &DAG) const;
1289
1290     /// Convert a comparison if required by the subtarget.
1291     SDValue ConvertCmpIfNecessary(SDValue Cmp, SelectionDAG &DAG) const;
1292
1293     /// Check if replacement of SQRT with RSQRT should be disabled.
1294     bool isFsqrtCheap(SDValue Operand, SelectionDAG &DAG) const override;
1295
1296     /// Use rsqrt* to speed up sqrt calculations.
1297     SDValue getSqrtEstimate(SDValue Operand, SelectionDAG &DAG, int Enabled,
1298                             int &RefinementSteps, bool &UseOneConstNR,
1299                             bool Reciprocal) const override;
1300
1301     /// Use rcp* to speed up fdiv calculations.
1302     SDValue getRecipEstimate(SDValue Operand, SelectionDAG &DAG, int Enabled,
1303                              int &RefinementSteps) const override;
1304
1305     /// Reassociate floating point divisions into multiply by reciprocal.
1306     unsigned combineRepeatedFPDivisors() const override;
1307   };
1308
1309   namespace X86 {
1310     FastISel *createFastISel(FunctionLoweringInfo &funcInfo,
1311                              const TargetLibraryInfo *libInfo);
1312   } // end namespace X86
1313
1314   // Base class for all X86 non-masked store operations.
1315   class X86StoreSDNode : public MemSDNode {
1316   public:
1317     X86StoreSDNode(unsigned Opcode, unsigned Order, const DebugLoc &dl,
1318                    SDVTList VTs, EVT MemVT,
1319                    MachineMemOperand *MMO)
1320       :MemSDNode(Opcode, Order, dl, VTs, MemVT, MMO) {}
1321     const SDValue &getValue() const { return getOperand(1); }
1322     const SDValue &getBasePtr() const { return getOperand(2); }
1323
1324     static bool classof(const SDNode *N) {
1325       return N->getOpcode() == X86ISD::VTRUNCSTORES ||
1326         N->getOpcode() == X86ISD::VTRUNCSTOREUS;
1327     }
1328   };
1329
1330   // Base class for all X86 masked store operations.
1331   // The class has the same order of operands as MaskedStoreSDNode for
1332   // convenience.
1333   class X86MaskedStoreSDNode : public MemSDNode {
1334   public:
1335     X86MaskedStoreSDNode(unsigned Opcode, unsigned Order,
1336                          const DebugLoc &dl, SDVTList VTs, EVT MemVT,
1337                          MachineMemOperand *MMO)
1338       : MemSDNode(Opcode, Order, dl, VTs, MemVT, MMO) {}
1339
1340     const SDValue &getBasePtr() const { return getOperand(1); }
1341     const SDValue &getMask()    const { return getOperand(2); }
1342     const SDValue &getValue()   const { return getOperand(3); }
1343
1344     static bool classof(const SDNode *N) {
1345       return N->getOpcode() == X86ISD::VMTRUNCSTORES ||
1346         N->getOpcode() == X86ISD::VMTRUNCSTOREUS;
1347     }
1348   };
1349
1350   // X86 Truncating Store with Signed saturation.
1351   class TruncSStoreSDNode : public X86StoreSDNode {
1352   public:
1353     TruncSStoreSDNode(unsigned Order, const DebugLoc &dl,
1354                         SDVTList VTs, EVT MemVT, MachineMemOperand *MMO)
1355       : X86StoreSDNode(X86ISD::VTRUNCSTORES, Order, dl, VTs, MemVT, MMO) {}
1356
1357     static bool classof(const SDNode *N) {
1358       return N->getOpcode() == X86ISD::VTRUNCSTORES;
1359     }
1360   };
1361
1362   // X86 Truncating Store with Unsigned saturation.
1363   class TruncUSStoreSDNode : public X86StoreSDNode {
1364   public:
1365     TruncUSStoreSDNode(unsigned Order, const DebugLoc &dl,
1366                       SDVTList VTs, EVT MemVT, MachineMemOperand *MMO)
1367       : X86StoreSDNode(X86ISD::VTRUNCSTOREUS, Order, dl, VTs, MemVT, MMO) {}
1368
1369     static bool classof(const SDNode *N) {
1370       return N->getOpcode() == X86ISD::VTRUNCSTOREUS;
1371     }
1372   };
1373
1374   // X86 Truncating Masked Store with Signed saturation.
1375   class MaskedTruncSStoreSDNode : public X86MaskedStoreSDNode {
1376   public:
1377     MaskedTruncSStoreSDNode(unsigned Order,
1378                          const DebugLoc &dl, SDVTList VTs, EVT MemVT,
1379                          MachineMemOperand *MMO)
1380       : X86MaskedStoreSDNode(X86ISD::VMTRUNCSTORES, Order, dl, VTs, MemVT, MMO) {}
1381
1382     static bool classof(const SDNode *N) {
1383       return N->getOpcode() == X86ISD::VMTRUNCSTORES;
1384     }
1385   };
1386
1387   // X86 Truncating Masked Store with Unsigned saturation.
1388   class MaskedTruncUSStoreSDNode : public X86MaskedStoreSDNode {
1389   public:
1390     MaskedTruncUSStoreSDNode(unsigned Order,
1391                             const DebugLoc &dl, SDVTList VTs, EVT MemVT,
1392                             MachineMemOperand *MMO)
1393       : X86MaskedStoreSDNode(X86ISD::VMTRUNCSTOREUS, Order, dl, VTs, MemVT, MMO) {}
1394
1395     static bool classof(const SDNode *N) {
1396       return N->getOpcode() == X86ISD::VMTRUNCSTOREUS;
1397     }
1398   };
1399
1400 } // end namespace llvm
1401
1402 #endif // LLVM_LIB_TARGET_X86_X86ISELLOWERING_H