xref: /freebsd/contrib/llvm-project/llvm/include/llvm/CodeGen/ISDOpcodes.h (revision 700637cbb5e582861067a11aaca4d053546871d2)
1 //===-- llvm/CodeGen/ISDOpcodes.h - CodeGen opcodes -------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file declares codegen opcodes and related utilities.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #ifndef LLVM_CODEGEN_ISDOPCODES_H
14 #define LLVM_CODEGEN_ISDOPCODES_H
15 
16 #include "llvm/CodeGen/ValueTypes.h"
17 #include "llvm/Support/Compiler.h"
18 
19 namespace llvm {
20 
21 /// ISD namespace - This namespace contains an enum which represents all of the
22 /// SelectionDAG node types and value types.
23 ///
24 namespace ISD {
25 
26 //===--------------------------------------------------------------------===//
27 /// ISD::NodeType enum - This enum defines the target-independent operators
28 /// for a SelectionDAG.
29 ///
30 /// Targets may also define target-dependent operator codes for SDNodes. For
31 /// example, on x86, these are the enum values in the X86ISD namespace.
32 /// Targets should aim to use target-independent operators to model their
33 /// instruction sets as much as possible, and only use target-dependent
34 /// operators when they have special requirements.
35 ///
36 /// Finally, during and after selection proper, SNodes may use special
37 /// operator codes that correspond directly with MachineInstr opcodes. These
38 /// are used to represent selected instructions. See the isMachineOpcode()
39 /// and getMachineOpcode() member functions of SDNode.
40 ///
41 enum NodeType {
42 
43   /// DELETED_NODE - This is an illegal value that is used to catch
44   /// errors.  This opcode is not a legal opcode for any node.
45   DELETED_NODE,
46 
47   /// EntryToken - This is the marker used to indicate the start of a region.
48   EntryToken,
49 
50   /// TokenFactor - This node takes multiple tokens as input and produces a
51   /// single token result. This is used to represent the fact that the operand
52   /// operators are independent of each other.
53   TokenFactor,
54 
55   /// AssertSext, AssertZext - These nodes record if a register contains a
56   /// value that has already been zero or sign extended from a narrower type.
57   /// These nodes take two operands.  The first is the node that has already
58   /// been extended, and the second is a value type node indicating the width
59   /// of the extension.
60   /// NOTE: In case of the source value (or any vector element value) is
61   /// poisoned the assertion will not be true for that value.
62   AssertSext,
63   AssertZext,
64 
65   /// AssertAlign - These nodes record if a register contains a value that
66   /// has a known alignment and the trailing bits are known to be zero.
67   /// NOTE: In case of the source value (or any vector element value) is
68   /// poisoned the assertion will not be true for that value.
69   AssertAlign,
70 
71   /// AssertNoFPClass - These nodes record if a register contains a float
72   /// value that is known to be not some type.
73   /// This node takes two operands.  The first is the node that is known
74   /// never to be some float types; the second is a constant value with
75   /// the value of FPClassTest (casted to uint32_t).
76   /// NOTE: In case of the source value (or any vector element value) is
77   /// poisoned the assertion will not be true for that value.
78   AssertNoFPClass,
79 
80   /// Various leaf nodes.
81   BasicBlock,
82   VALUETYPE,
83   CONDCODE,
84   Register,
85   RegisterMask,
86   Constant,
87   ConstantFP,
88   GlobalAddress,
89   GlobalTLSAddress,
90   FrameIndex,
91   JumpTable,
92   ConstantPool,
93   ExternalSymbol,
94   BlockAddress,
95 
96   /// A ptrauth constant.
97   /// ptr, key, addr-disc, disc
98   /// Note that the addr-disc can be a non-constant value, to allow representing
99   /// a constant global address signed using address-diversification, in code.
100   PtrAuthGlobalAddress,
101 
102   /// The address of the GOT
103   GLOBAL_OFFSET_TABLE,
104 
105   /// FRAMEADDR, RETURNADDR - These nodes represent llvm.frameaddress and
106   /// llvm.returnaddress on the DAG.  These nodes take one operand, the index
107   /// of the frame or return address to return.  An index of zero corresponds
108   /// to the current function's frame or return address, an index of one to
109   /// the parent's frame or return address, and so on.
110   FRAMEADDR,
111   RETURNADDR,
112 
113   /// ADDROFRETURNADDR - Represents the llvm.addressofreturnaddress intrinsic.
114   /// This node takes no operand, returns a target-specific pointer to the
115   /// place in the stack frame where the return address of the current
116   /// function is stored.
117   ADDROFRETURNADDR,
118 
119   /// SPONENTRY - Represents the llvm.sponentry intrinsic. Takes no argument
120   /// and returns the stack pointer value at the entry of the current
121   /// function calling this intrinsic.
122   SPONENTRY,
123 
124   /// LOCAL_RECOVER - Represents the llvm.localrecover intrinsic.
125   /// Materializes the offset from the local object pointer of another
126   /// function to a particular local object passed to llvm.localescape. The
127   /// operand is the MCSymbol label used to represent this offset, since
128   /// typically the offset is not known until after code generation of the
129   /// parent.
130   LOCAL_RECOVER,
131 
132   /// READ_REGISTER, WRITE_REGISTER - This node represents llvm.register on
133   /// the DAG, which implements the named register global variables extension.
134   READ_REGISTER,
135   WRITE_REGISTER,
136 
137   /// FRAME_TO_ARGS_OFFSET - This node represents offset from frame pointer to
138   /// first (possible) on-stack argument. This is needed for correct stack
139   /// adjustment during unwind.
140   FRAME_TO_ARGS_OFFSET,
141 
142   /// EH_DWARF_CFA - This node represents the pointer to the DWARF Canonical
143   /// Frame Address (CFA), generally the value of the stack pointer at the
144   /// call site in the previous frame.
145   EH_DWARF_CFA,
146 
147   /// OUTCHAIN = EH_RETURN(INCHAIN, OFFSET, HANDLER) - This node represents
148   /// 'eh_return' gcc dwarf builtin, which is used to return from
149   /// exception. The general meaning is: adjust stack by OFFSET and pass
150   /// execution to HANDLER. Many platform-related details also :)
151   EH_RETURN,
152 
153   /// RESULT, OUTCHAIN = EH_SJLJ_SETJMP(INCHAIN, buffer)
154   /// This corresponds to the eh.sjlj.setjmp intrinsic.
155   /// It takes an input chain and a pointer to the jump buffer as inputs
156   /// and returns an outchain.
157   EH_SJLJ_SETJMP,
158 
159   /// OUTCHAIN = EH_SJLJ_LONGJMP(INCHAIN, buffer)
160   /// This corresponds to the eh.sjlj.longjmp intrinsic.
161   /// It takes an input chain and a pointer to the jump buffer as inputs
162   /// and returns an outchain.
163   EH_SJLJ_LONGJMP,
164 
165   /// OUTCHAIN = EH_SJLJ_SETUP_DISPATCH(INCHAIN)
166   /// The target initializes the dispatch table here.
167   EH_SJLJ_SETUP_DISPATCH,
168 
169   /// TargetConstant* - Like Constant*, but the DAG does not do any folding,
170   /// simplification, or lowering of the constant. They are used for constants
171   /// which are known to fit in the immediate fields of their users, or for
172   /// carrying magic numbers which are not values which need to be
173   /// materialized in registers.
174   TargetConstant,
175   TargetConstantFP,
176 
177   /// TargetGlobalAddress - Like GlobalAddress, but the DAG does no folding or
178   /// anything else with this node, and this is valid in the target-specific
179   /// dag, turning into a GlobalAddress operand.
180   TargetGlobalAddress,
181   TargetGlobalTLSAddress,
182   TargetFrameIndex,
183   TargetJumpTable,
184   TargetConstantPool,
185   TargetExternalSymbol,
186   TargetBlockAddress,
187 
188   MCSymbol,
189 
190   /// TargetIndex - Like a constant pool entry, but with completely
191   /// target-dependent semantics. Holds target flags, a 32-bit index, and a
192   /// 64-bit index. Targets can use this however they like.
193   TargetIndex,
194 
195   /// RESULT = INTRINSIC_WO_CHAIN(INTRINSICID, arg1, arg2, ...)
196   /// This node represents a target intrinsic function with no side effects.
197   /// The first operand is the ID number of the intrinsic from the
198   /// llvm::Intrinsic namespace.  The operands to the intrinsic follow.  The
199   /// node returns the result of the intrinsic.
200   INTRINSIC_WO_CHAIN,
201 
202   /// RESULT,OUTCHAIN = INTRINSIC_W_CHAIN(INCHAIN, INTRINSICID, arg1, ...)
203   /// This node represents a target intrinsic function with side effects that
204   /// returns a result.  The first operand is a chain pointer.  The second is
205   /// the ID number of the intrinsic from the llvm::Intrinsic namespace.  The
206   /// operands to the intrinsic follow.  The node has two results, the result
207   /// of the intrinsic and an output chain.
208   INTRINSIC_W_CHAIN,
209 
210   /// OUTCHAIN = INTRINSIC_VOID(INCHAIN, INTRINSICID, arg1, arg2, ...)
211   /// This node represents a target intrinsic function with side effects that
212   /// does not return a result.  The first operand is a chain pointer.  The
213   /// second is the ID number of the intrinsic from the llvm::Intrinsic
214   /// namespace.  The operands to the intrinsic follow.
215   INTRINSIC_VOID,
216 
217   /// CopyToReg - This node has three operands: a chain, a register number to
218   /// set to this value, and a value.
219   CopyToReg,
220 
221   /// CopyFromReg - This node indicates that the input value is a virtual or
222   /// physical register that is defined outside of the scope of this
223   /// SelectionDAG.  The register is available from the RegisterSDNode object.
224   /// Note that CopyFromReg is considered as also freezing the value.
225   CopyFromReg,
226 
227   /// UNDEF - An undefined node.
228   UNDEF,
229 
230   /// POISON - A poison node.
231   POISON,
232 
233   /// FREEZE - FREEZE(VAL) returns an arbitrary value if VAL is UNDEF (or
234   /// is evaluated to UNDEF), or returns VAL otherwise. Note that each
235   /// read of UNDEF can yield different value, but FREEZE(UNDEF) cannot.
236   FREEZE,
237 
238   /// EXTRACT_ELEMENT - This is used to get the lower or upper (determined by
239   /// a Constant, which is required to be operand #1) half of the integer or
240   /// float value specified as operand #0.  This is only for use before
241   /// legalization, for values that will be broken into multiple registers.
242   EXTRACT_ELEMENT,
243 
244   /// BUILD_PAIR - This is the opposite of EXTRACT_ELEMENT in some ways.
245   /// Given two values of the same integer value type, this produces a value
246   /// twice as big.  Like EXTRACT_ELEMENT, this can only be used before
247   /// legalization. The lower part of the composite value should be in
248   /// element 0 and the upper part should be in element 1.
249   BUILD_PAIR,
250 
251   /// MERGE_VALUES - This node takes multiple discrete operands and returns
252   /// them all as its individual results.  This nodes has exactly the same
253   /// number of inputs and outputs. This node is useful for some pieces of the
254   /// code generator that want to think about a single node with multiple
255   /// results, not multiple nodes.
256   MERGE_VALUES,
257 
258   /// Simple integer binary arithmetic operators.
259   ADD,
260   SUB,
261   MUL,
262   SDIV,
263   UDIV,
264   SREM,
265   UREM,
266 
267   /// SMUL_LOHI/UMUL_LOHI - Multiply two integers of type iN, producing
268   /// a signed/unsigned value of type i[2*N], and return the full value as
269   /// two results, each of type iN.
270   SMUL_LOHI,
271   UMUL_LOHI,
272 
273   /// SDIVREM/UDIVREM - Divide two integers and produce both a quotient and
274   /// remainder result.
275   SDIVREM,
276   UDIVREM,
277 
278   /// CARRY_FALSE - This node is used when folding other nodes,
279   /// like ADDC/SUBC, which indicate the carry result is always false.
280   CARRY_FALSE,
281 
282   /// Carry-setting nodes for multiple precision addition and subtraction.
283   /// These nodes take two operands of the same value type, and produce two
284   /// results.  The first result is the normal add or sub result, the second
285   /// result is the carry flag result.
286   /// FIXME: These nodes are deprecated in favor of UADDO_CARRY and USUBO_CARRY.
287   /// They are kept around for now to provide a smooth transition path
288   /// toward the use of UADDO_CARRY/USUBO_CARRY and will eventually be removed.
289   ADDC,
290   SUBC,
291 
292   /// Carry-using nodes for multiple precision addition and subtraction. These
293   /// nodes take three operands: The first two are the normal lhs and rhs to
294   /// the add or sub, and the third is the input carry flag.  These nodes
295   /// produce two results; the normal result of the add or sub, and the output
296   /// carry flag.  These nodes both read and write a carry flag to allow them
297   /// to them to be chained together for add and sub of arbitrarily large
298   /// values.
299   ADDE,
300   SUBE,
301 
302   /// Carry-using nodes for multiple precision addition and subtraction.
303   /// These nodes take three operands: The first two are the normal lhs and
304   /// rhs to the add or sub, and the third is a boolean value that is 1 if and
305   /// only if there is an incoming carry/borrow. These nodes produce two
306   /// results: the normal result of the add or sub, and a boolean value that is
307   /// 1 if and only if there is an outgoing carry/borrow.
308   ///
309   /// Care must be taken if these opcodes are lowered to hardware instructions
310   /// that use the inverse logic -- 0 if and only if there is an
311   /// incoming/outgoing carry/borrow.  In such cases, you must preserve the
312   /// semantics of these opcodes by inverting the incoming carry/borrow, feeding
313   /// it to the add/sub hardware instruction, and then inverting the outgoing
314   /// carry/borrow.
315   ///
316   /// The use of these opcodes is preferable to ADDE/SUBE if the target supports
317   /// it, as the carry is a regular value rather than a glue, which allows
318   /// further optimisation.
319   ///
320   /// These opcodes are different from [US]{ADD,SUB}O in that
321   /// U{ADD,SUB}O_CARRY consume and produce a carry/borrow, whereas
322   /// [US]{ADD,SUB}O produce an overflow.
323   UADDO_CARRY,
324   USUBO_CARRY,
325 
326   /// Carry-using overflow-aware nodes for multiple precision addition and
327   /// subtraction. These nodes take three operands: The first two are normal lhs
328   /// and rhs to the add or sub, and the third is a boolean indicating if there
329   /// is an incoming carry. They produce two results: the normal result of the
330   /// add or sub, and a boolean that indicates if an overflow occurred (*not*
331   /// flag, because it may be a store to memory, etc.). If the type of the
332   /// boolean is not i1 then the high bits conform to getBooleanContents.
333   SADDO_CARRY,
334   SSUBO_CARRY,
335 
336   /// RESULT, BOOL = [SU]ADDO(LHS, RHS) - Overflow-aware nodes for addition.
337   /// These nodes take two operands: the normal LHS and RHS to the add. They
338   /// produce two results: the normal result of the add, and a boolean that
339   /// indicates if an overflow occurred (*not* a flag, because it may be store
340   /// to memory, etc.).  If the type of the boolean is not i1 then the high
341   /// bits conform to getBooleanContents.
342   /// These nodes are generated from llvm.[su]add.with.overflow intrinsics.
343   SADDO,
344   UADDO,
345 
346   /// Same for subtraction.
347   SSUBO,
348   USUBO,
349 
350   /// Same for multiplication.
351   SMULO,
352   UMULO,
353 
354   /// RESULT = [US]ADDSAT(LHS, RHS) - Perform saturation addition on 2
355   /// integers with the same bit width (W). If the true value of LHS + RHS
356   /// exceeds the largest value that can be represented by W bits, the
357   /// resulting value is this maximum value. Otherwise, if this value is less
358   /// than the smallest value that can be represented by W bits, the
359   /// resulting value is this minimum value.
360   SADDSAT,
361   UADDSAT,
362 
363   /// RESULT = [US]SUBSAT(LHS, RHS) - Perform saturation subtraction on 2
364   /// integers with the same bit width (W). If the true value of LHS - RHS
365   /// exceeds the largest value that can be represented by W bits, the
366   /// resulting value is this maximum value. Otherwise, if this value is less
367   /// than the smallest value that can be represented by W bits, the
368   /// resulting value is this minimum value.
369   SSUBSAT,
370   USUBSAT,
371 
372   /// RESULT = [US]SHLSAT(LHS, RHS) - Perform saturation left shift. The first
373   /// operand is the value to be shifted, and the second argument is the amount
374   /// to shift by. Both must be integers of the same bit width (W). If the true
375   /// value of LHS << RHS exceeds the largest value that can be represented by
376   /// W bits, the resulting value is this maximum value, Otherwise, if this
377   /// value is less than the smallest value that can be represented by W bits,
378   /// the resulting value is this minimum value.
379   SSHLSAT,
380   USHLSAT,
381 
382   /// RESULT = [US]MULFIX(LHS, RHS, SCALE) - Perform fixed point multiplication
383   /// on 2 integers with the same width and scale. SCALE represents the scale
384   /// of both operands as fixed point numbers. This SCALE parameter must be a
385   /// constant integer. A scale of zero is effectively performing
386   /// multiplication on 2 integers.
387   SMULFIX,
388   UMULFIX,
389 
390   /// Same as the corresponding unsaturated fixed point instructions, but the
391   /// result is clamped between the min and max values representable by the
392   /// bits of the first 2 operands.
393   SMULFIXSAT,
394   UMULFIXSAT,
395 
396   /// RESULT = [US]DIVFIX(LHS, RHS, SCALE) - Perform fixed point division on
397   /// 2 integers with the same width and scale. SCALE represents the scale
398   /// of both operands as fixed point numbers. This SCALE parameter must be a
399   /// constant integer.
400   SDIVFIX,
401   UDIVFIX,
402 
403   /// Same as the corresponding unsaturated fixed point instructions, but the
404   /// result is clamped between the min and max values representable by the
405   /// bits of the first 2 operands.
406   SDIVFIXSAT,
407   UDIVFIXSAT,
408 
409   /// Simple binary floating point operators.
410   FADD,
411   FSUB,
412   FMUL,
413   FDIV,
414   FREM,
415 
416   /// Constrained versions of the binary floating point operators.
417   /// These will be lowered to the simple operators before final selection.
418   /// They are used to limit optimizations while the DAG is being
419   /// optimized.
420   STRICT_FADD,
421   STRICT_FSUB,
422   STRICT_FMUL,
423   STRICT_FDIV,
424   STRICT_FREM,
425   STRICT_FMA,
426 
427   /// Constrained versions of libm-equivalent floating point intrinsics.
428   /// These will be lowered to the equivalent non-constrained pseudo-op
429   /// (or expanded to the equivalent library call) before final selection.
430   /// They are used to limit optimizations while the DAG is being optimized.
431   STRICT_FSQRT,
432   STRICT_FPOW,
433   STRICT_FPOWI,
434   STRICT_FLDEXP,
435   STRICT_FSIN,
436   STRICT_FCOS,
437   STRICT_FTAN,
438   STRICT_FASIN,
439   STRICT_FACOS,
440   STRICT_FATAN,
441   STRICT_FATAN2,
442   STRICT_FSINH,
443   STRICT_FCOSH,
444   STRICT_FTANH,
445   STRICT_FEXP,
446   STRICT_FEXP2,
447   STRICT_FLOG,
448   STRICT_FLOG10,
449   STRICT_FLOG2,
450   STRICT_FRINT,
451   STRICT_FNEARBYINT,
452   STRICT_FMAXNUM,
453   STRICT_FMINNUM,
454   STRICT_FCEIL,
455   STRICT_FFLOOR,
456   STRICT_FROUND,
457   STRICT_FROUNDEVEN,
458   STRICT_FTRUNC,
459   STRICT_LROUND,
460   STRICT_LLROUND,
461   STRICT_LRINT,
462   STRICT_LLRINT,
463   STRICT_FMAXIMUM,
464   STRICT_FMINIMUM,
465 
466   /// STRICT_FP_TO_[US]INT - Convert a floating point value to a signed or
467   /// unsigned integer. These have the same semantics as fptosi and fptoui
468   /// in IR.
469   /// They are used to limit optimizations while the DAG is being optimized.
470   STRICT_FP_TO_SINT,
471   STRICT_FP_TO_UINT,
472 
473   /// STRICT_[US]INT_TO_FP - Convert a signed or unsigned integer to
474   /// a floating point value. These have the same semantics as sitofp and
475   /// uitofp in IR.
476   /// They are used to limit optimizations while the DAG is being optimized.
477   STRICT_SINT_TO_FP,
478   STRICT_UINT_TO_FP,
479 
480   /// X = STRICT_FP_ROUND(Y, TRUNC) - Rounding 'Y' from a larger floating
481   /// point type down to the precision of the destination VT.  TRUNC is a
482   /// flag, which is always an integer that is zero or one.  If TRUNC is 0,
483   /// this is a normal rounding, if it is 1, this FP_ROUND is known to not
484   /// change the value of Y.
485   ///
486   /// The TRUNC = 1 case is used in cases where we know that the value will
487   /// not be modified by the node, because Y is not using any of the extra
488   /// precision of source type.  This allows certain transformations like
489   /// STRICT_FP_EXTEND(STRICT_FP_ROUND(X,1)) -> X which are not safe for
490   /// STRICT_FP_EXTEND(STRICT_FP_ROUND(X,0)) because the extra bits aren't
491   /// removed.
492   /// It is used to limit optimizations while the DAG is being optimized.
493   STRICT_FP_ROUND,
494 
495   /// X = STRICT_FP_EXTEND(Y) - Extend a smaller FP type into a larger FP
496   /// type.
497   /// It is used to limit optimizations while the DAG is being optimized.
498   STRICT_FP_EXTEND,
499 
500   /// STRICT_FSETCC/STRICT_FSETCCS - Constrained versions of SETCC, used
501   /// for floating-point operands only.  STRICT_FSETCC performs a quiet
502   /// comparison operation, while STRICT_FSETCCS performs a signaling
503   /// comparison operation.
504   STRICT_FSETCC,
505   STRICT_FSETCCS,
506 
507   /// FPTRUNC_ROUND - This corresponds to the fptrunc_round intrinsic.
508   FPTRUNC_ROUND,
509 
510   /// FMA - Perform a * b + c with no intermediate rounding step.
511   FMA,
512 
513   /// FMAD - Perform a * b + c, while getting the same result as the
514   /// separately rounded operations.
515   FMAD,
516 
517   /// FCOPYSIGN(X, Y) - Return the value of X with the sign of Y.  NOTE: This
518   /// DAG node does not require that X and Y have the same type, just that
519   /// they are both floating point.  X and the result must have the same type.
520   /// FCOPYSIGN(f32, f64) is allowed.
521   FCOPYSIGN,
522 
523   /// INT = FGETSIGN(FP) - Return the sign bit of the specified floating point
524   /// value as an integer 0/1 value.
525   FGETSIGN,
526 
527   /// Returns platform specific canonical encoding of a floating point number.
528   FCANONICALIZE,
529 
530   /// Performs a check of floating point class property, defined by IEEE-754.
531   /// The first operand is the floating point value to check. The second operand
532   /// specifies the checked property and is a TargetConstant which specifies
533   /// test in the same way as intrinsic 'is_fpclass'.
534   /// Returns boolean value.
535   IS_FPCLASS,
536 
537   /// BUILD_VECTOR(ELT0, ELT1, ELT2, ELT3,...) - Return a fixed-width vector
538   /// with the specified, possibly variable, elements. The types of the
539   /// operands must match the vector element type, except that integer types
540   /// are allowed to be larger than the element type, in which case the
541   /// operands are implicitly truncated. The types of the operands must all
542   /// be the same.
543   BUILD_VECTOR,
544 
545   /// INSERT_VECTOR_ELT(VECTOR, VAL, IDX) - Returns VECTOR with the element
546   /// at IDX replaced with VAL. If the type of VAL is larger than the vector
547   /// element type then VAL is truncated before replacement.
548   ///
549   /// If VECTOR is a scalable vector, then IDX may be larger than the minimum
550   /// vector width. IDX is not first scaled by the runtime scaling factor of
551   /// VECTOR.
552   INSERT_VECTOR_ELT,
553 
554   /// EXTRACT_VECTOR_ELT(VECTOR, IDX) - Returns a single element from VECTOR
555   /// identified by the (potentially variable) element number IDX. If the return
556   /// type is an integer type larger than the element type of the vector, the
557   /// result is extended to the width of the return type. In that case, the high
558   /// bits are undefined.
559   ///
560   /// If VECTOR is a scalable vector, then IDX may be larger than the minimum
561   /// vector width. IDX is not first scaled by the runtime scaling factor of
562   /// VECTOR.
563   EXTRACT_VECTOR_ELT,
564 
565   /// CONCAT_VECTORS(VECTOR0, VECTOR1, ...) - Given a number of values of
566   /// vector type with the same length and element type, this produces a
567   /// concatenated vector result value, with length equal to the sum of the
568   /// lengths of the input vectors. If VECTOR0 is a fixed-width vector, then
569   /// VECTOR1..VECTORN must all be fixed-width vectors. Similarly, if VECTOR0
570   /// is a scalable vector, then VECTOR1..VECTORN must all be scalable vectors.
571   CONCAT_VECTORS,
572 
573   /// INSERT_SUBVECTOR(VECTOR1, VECTOR2, IDX) - Returns a vector with VECTOR2
574   /// inserted into VECTOR1. IDX represents the starting element number at which
575   /// VECTOR2 will be inserted. IDX must be a constant multiple of T's known
576   /// minimum vector length. Let the type of VECTOR2 be T, then if T is a
577   /// scalable vector, IDX is first scaled by the runtime scaling factor of T.
578   /// The elements of VECTOR1 starting at IDX are overwritten with VECTOR2.
579   /// Elements IDX through (IDX + num_elements(T) - 1) must be valid VECTOR1
580   /// indices. If this condition cannot be determined statically but is false at
581   /// runtime, then the result vector is undefined. The IDX parameter must be a
582   /// vector index constant type, which for most targets will be an integer
583   /// pointer type.
584   ///
585   /// This operation supports inserting a fixed-width vector into a scalable
586   /// vector, but not the other way around.
587   INSERT_SUBVECTOR,
588 
589   /// EXTRACT_SUBVECTOR(VECTOR, IDX) - Returns a subvector from VECTOR.
590   /// Let the result type be T, then IDX represents the starting element number
591   /// from which a subvector of type T is extracted. IDX must be a constant
592   /// multiple of T's known minimum vector length. If T is a scalable vector,
593   /// IDX is first scaled by the runtime scaling factor of T. Elements IDX
594   /// through (IDX + num_elements(T) - 1) must be valid VECTOR indices. If this
595   /// condition cannot be determined statically but is false at runtime, then
596   /// the result vector is undefined. The IDX parameter must be a vector index
597   /// constant type, which for most targets will be an integer pointer type.
598   ///
599   /// This operation supports extracting a fixed-width vector from a scalable
600   /// vector, but not the other way around.
601   EXTRACT_SUBVECTOR,
602 
603   /// VECTOR_DEINTERLEAVE(VEC1, VEC2, ...) - Returns N vectors from N input
604   /// vectors, where N is the factor to deinterleave. All input and output
605   /// vectors must have the same type.
606   ///
607   /// Each output contains the deinterleaved indices for a specific field from
608   /// CONCAT_VECTORS(VEC1, VEC2, ...):
609   ///
610   /// Result[I][J] = CONCAT_VECTORS(...)[I + N * J]
611   VECTOR_DEINTERLEAVE,
612 
613   /// VECTOR_INTERLEAVE(VEC1, VEC2, ...) - Returns N vectors from N input
614   /// vectors, where N is the factor to interleave. All input and
615   /// output vectors must have the same type.
616   ///
617   /// All input vectors are interleaved into one wide vector, which is then
618   /// chunked into equal sized parts:
619   ///
620   /// Interleaved[I] = VEC(I % N)[I / N]
621   /// Result[J] = EXTRACT_SUBVECTOR(Interleaved, J * getVectorMinNumElements())
622   VECTOR_INTERLEAVE,
623 
624   /// VECTOR_REVERSE(VECTOR) - Returns a vector, of the same type as VECTOR,
625   /// whose elements are shuffled using the following algorithm:
626   ///   RESULT[i] = VECTOR[VECTOR.ElementCount - 1 - i]
627   VECTOR_REVERSE,
628 
629   /// VECTOR_SHUFFLE(VEC1, VEC2) - Returns a vector, of the same type as
630   /// VEC1/VEC2.  A VECTOR_SHUFFLE node also contains an array of constant int
631   /// values that indicate which value (or undef) each result element will
632   /// get.  These constant ints are accessible through the
633   /// ShuffleVectorSDNode class.  This is quite similar to the Altivec
634   /// 'vperm' instruction, except that the indices must be constants and are
635   /// in terms of the element size of VEC1/VEC2, not in terms of bytes.
636   VECTOR_SHUFFLE,
637 
638   /// VECTOR_SPLICE(VEC1, VEC2, IMM) - Returns a subvector of the same type as
639   /// VEC1/VEC2 from CONCAT_VECTORS(VEC1, VEC2), based on the IMM in two ways.
640   /// Let the result type be T, if IMM is positive it represents the starting
641   /// element number (an index) from which a subvector of type T is extracted
642   /// from CONCAT_VECTORS(VEC1, VEC2). If IMM is negative it represents a count
643   /// specifying the number of trailing elements to extract from VEC1, where the
644   /// elements of T are selected using the following algorithm:
645   ///   RESULT[i] = CONCAT_VECTORS(VEC1,VEC2)[VEC1.ElementCount - ABS(IMM) + i]
646   /// If IMM is not in the range [-VL, VL-1] the result vector is undefined. IMM
647   /// is a constant integer.
648   VECTOR_SPLICE,
649 
650   /// SCALAR_TO_VECTOR(VAL) - This represents the operation of loading a
651   /// scalar value into element 0 of the resultant vector type.  The top
652   /// elements 1 to N-1 of the N-element vector are undefined.  The type
653   /// of the operand must match the vector element type, except when they
654   /// are integer types.  In this case the operand is allowed to be wider
655   /// than the vector element type, and is implicitly truncated to it.
656   SCALAR_TO_VECTOR,
657 
658   /// SPLAT_VECTOR(VAL) - Returns a vector with the scalar value VAL
659   /// duplicated in all lanes. The type of the operand must match the vector
660   /// element type, except when they are integer types.  In this case the
661   /// operand is allowed to be wider than the vector element type, and is
662   /// implicitly truncated to it.
663   SPLAT_VECTOR,
664 
665   /// SPLAT_VECTOR_PARTS(SCALAR1, SCALAR2, ...) - Returns a vector with the
666   /// scalar values joined together and then duplicated in all lanes. This
667   /// represents a SPLAT_VECTOR that has had its scalar operand expanded. This
668   /// allows representing a 64-bit splat on a target with 32-bit integers. The
669   /// total width of the scalars must cover the element width. SCALAR1 contains
670   /// the least significant bits of the value regardless of endianness and all
671   /// scalars should have the same type.
672   SPLAT_VECTOR_PARTS,
673 
674   /// STEP_VECTOR(IMM) - Returns a scalable vector whose lanes are comprised
675   /// of a linear sequence of unsigned values starting from 0 with a step of
676   /// IMM, where IMM must be a TargetConstant with type equal to the vector
677   /// element type. The arithmetic is performed modulo the bitwidth of the
678   /// element.
679   ///
680   /// The operation does not support returning fixed-width vectors or
681   /// non-constant operands.
682   STEP_VECTOR,
683 
684   /// VECTOR_COMPRESS(Vec, Mask, Passthru)
685   /// consecutively place vector elements based on mask
686   /// e.g., vec = {A, B, C, D} and mask = {1, 0, 1, 0}
687   ///         --> {A, C, ?, ?} where ? is undefined
688   /// If passthru is defined, ?s are replaced with elements from passthru.
689   /// If passthru is undef, ?s remain undefined.
690   VECTOR_COMPRESS,
691 
692   /// MULHU/MULHS - Multiply high - Multiply two integers of type iN,
693   /// producing an unsigned/signed value of type i[2*N], then return the top
694   /// part.
695   MULHU,
696   MULHS,
697 
698   /// AVGFLOORS/AVGFLOORU - Averaging add - Add two integers using an integer of
699   /// type i[N+1], halving the result by shifting it one bit right.
700   /// shr(add(ext(X), ext(Y)), 1)
701   AVGFLOORS,
702   AVGFLOORU,
703   /// AVGCEILS/AVGCEILU - Rounding averaging add - Add two integers using an
704   /// integer of type i[N+2], add 1 and halve the result by shifting it one bit
705   /// right. shr(add(ext(X), ext(Y), 1), 1)
706   AVGCEILS,
707   AVGCEILU,
708 
709   /// ABDS/ABDU - Absolute difference - Return the absolute difference between
710   /// two numbers interpreted as signed/unsigned.
711   /// i.e trunc(abs(sext(Op0) - sext(Op1))) becomes abds(Op0, Op1)
712   ///  or trunc(abs(zext(Op0) - zext(Op1))) becomes abdu(Op0, Op1)
713   ABDS,
714   ABDU,
715 
716   /// [US]{MIN/MAX} - Binary minimum or maximum of signed or unsigned
717   /// integers.
718   SMIN,
719   SMAX,
720   UMIN,
721   UMAX,
722 
723   /// [US]CMP - 3-way comparison of signed or unsigned integers. Returns -1, 0,
724   /// or 1 depending on whether Op0 <, ==, or > Op1. The operands can have type
725   /// different to the result.
726   SCMP,
727   UCMP,
728 
729   /// Bitwise operators - logical and, logical or, logical xor.
730   AND,
731   OR,
732   XOR,
733 
734   /// ABS - Determine the unsigned absolute value of a signed integer value of
735   /// the same bitwidth.
736   /// Note: A value of INT_MIN will return INT_MIN, no saturation or overflow
737   /// is performed.
738   ABS,
739 
740   /// Shift and rotation operations.  After legalization, the type of the
741   /// shift amount is known to be TLI.getShiftAmountTy().  Before legalization
742   /// the shift amount can be any type, but care must be taken to ensure it is
743   /// large enough.  TLI.getShiftAmountTy() is i8 on some targets, but before
744   /// legalization, types like i1024 can occur and i8 doesn't have enough bits
745   /// to represent the shift amount.
746   /// When the 1st operand is a vector, the shift amount must be in the same
747   /// type. (TLI.getShiftAmountTy() will return the same type when the input
748   /// type is a vector.)
749   /// For rotates and funnel shifts, the shift amount is treated as an unsigned
750   /// amount modulo the element size of the first operand.
751   ///
752   /// Funnel 'double' shifts take 3 operands, 2 inputs and the shift amount.
753   ///
754   ///     fshl(X,Y,Z): (X << (Z % BW)) | (Y >> (BW - (Z % BW)))
755   ///     fshr(X,Y,Z): (X << (BW - (Z % BW))) | (Y >> (Z % BW))
756   SHL,
757   SRA,
758   SRL,
759   ROTL,
760   ROTR,
761   FSHL,
762   FSHR,
763 
764   /// Byte Swap and Counting operators.
765   BSWAP,
766   CTTZ,
767   CTLZ,
768   CTPOP,
769   BITREVERSE,
770   PARITY,
771 
772   /// Bit counting operators with an undefined result for zero inputs.
773   CTTZ_ZERO_UNDEF,
774   CTLZ_ZERO_UNDEF,
775 
776   /// Select(COND, TRUEVAL, FALSEVAL).  If the type of the boolean COND is not
777   /// i1 then the high bits must conform to getBooleanContents.
778   SELECT,
779 
780   /// Select with a vector condition (op #0) and two vector operands (ops #1
781   /// and #2), returning a vector result.  All vectors have the same length.
782   /// Much like the scalar select and setcc, each bit in the condition selects
783   /// whether the corresponding result element is taken from op #1 or op #2.
784   /// At first, the VSELECT condition is of vXi1 type. Later, targets may
785   /// change the condition type in order to match the VSELECT node using a
786   /// pattern. The condition follows the BooleanContent format of the target.
787   VSELECT,
788 
789   /// Select with condition operator - This selects between a true value and
790   /// a false value (ops #2 and #3) based on the boolean result of comparing
791   /// the lhs and rhs (ops #0 and #1) of a conditional expression with the
792   /// condition code in op #4, a CondCodeSDNode.
793   SELECT_CC,
794 
795   /// SetCC operator - This evaluates to a true value iff the condition is
796   /// true.  If the result value type is not i1 then the high bits conform
797   /// to getBooleanContents.  The operands to this are the left and right
798   /// operands to compare (ops #0, and #1) and the condition code to compare
799   /// them with (op #2) as a CondCodeSDNode. If the operands are vector types
800   /// then the result type must also be a vector type.
801   SETCC,
802 
803   /// Like SetCC, ops #0 and #1 are the LHS and RHS operands to compare, but
804   /// op #2 is a boolean indicating if there is an incoming carry. This
805   /// operator checks the result of "LHS - RHS - Carry", and can be used to
806   /// compare two wide integers:
807   /// (setcccarry lhshi rhshi (usubo_carry lhslo rhslo) cc).
808   /// Only valid for integers.
809   SETCCCARRY,
810 
811   /// SHL_PARTS/SRA_PARTS/SRL_PARTS - These operators are used for expanded
812   /// integer shift operations.  The operation ordering is:
813   ///
814   ///     [Lo,Hi] = op [LoLHS,HiLHS], Amt
815   SHL_PARTS,
816   SRA_PARTS,
817   SRL_PARTS,
818 
819   /// Conversion operators.  These are all single input single output
820   /// operations.  For all of these, the result type must be strictly
821   /// wider or narrower (depending on the operation) than the source
822   /// type.
823 
824   /// SIGN_EXTEND - Used for integer types, replicating the sign bit
825   /// into new bits.
826   SIGN_EXTEND,
827 
828   /// ZERO_EXTEND - Used for integer types, zeroing the new bits. Can carry
829   /// the NonNeg SDNodeFlag to indicate that the input is known to be
830   /// non-negative. If the flag is present and the input is negative, the result
831   /// is poison.
832   ZERO_EXTEND,
833 
834   /// ANY_EXTEND - Used for integer types.  The high bits are undefined.
835   ANY_EXTEND,
836 
837   /// TRUNCATE - Completely drop the high bits.
838   TRUNCATE,
839   /// TRUNCATE_[SU]SAT_[SU] - Truncate for saturated operand
840   /// [SU] located in middle, prefix for `SAT` means indicates whether
841   /// existing truncate target was a signed operation. For examples,
842   /// If `truncate(smin(smax(x, C), C))` was saturated then become `S`.
843   /// If `truncate(umin(x, C))` was saturated then become `U`.
844   /// [SU] located in last indicates whether range of truncated values is
845   /// sign-saturated. For example, if `truncate(smin(smax(x, C), C))` is a
846   /// truncation to `i8`, then if value of C ranges from `-128 to 127`, it will
847   /// be saturated against signed values, resulting in `S`, which will combine
848   /// to `TRUNCATE_SSAT_S`. If the value of C ranges from `0 to 255`, it will
849   /// be saturated against unsigned values, resulting in `U`, which will
850   /// combine to `TRUNCATE_SSAT_U`. Similarly, in `truncate(umin(x, C))`, if
851   /// value of C ranges from `0 to 255`, it becomes `U` because it is saturated
852   /// for unsigned values. As a result, it combines to `TRUNCATE_USAT_U`.
853   TRUNCATE_SSAT_S, // saturate signed input to signed result -
854                    // truncate(smin(smax(x, C), C))
855   TRUNCATE_SSAT_U, // saturate signed input to unsigned result -
856                    // truncate(smin(smax(x, 0), C))
857   TRUNCATE_USAT_U, // saturate unsigned input to unsigned result -
858                    // truncate(umin(x, C))
859 
860   /// [SU]INT_TO_FP - These operators convert integers (whose interpreted sign
861   /// depends on the first letter) to floating point.
862   SINT_TO_FP,
863   UINT_TO_FP,
864 
865   /// SIGN_EXTEND_INREG - This operator atomically performs a SHL/SRA pair to
866   /// sign extend a small value in a large integer register (e.g. sign
867   /// extending the low 8 bits of a 32-bit register to fill the top 24 bits
868   /// with the 7th bit).  The size of the smaller type is indicated by the 1th
869   /// operand, a ValueType node.
870   SIGN_EXTEND_INREG,
871 
872   /// ANY_EXTEND_VECTOR_INREG(Vector) - This operator represents an
873   /// in-register any-extension of the low lanes of an integer vector. The
874   /// result type must have fewer elements than the operand type, and those
875   /// elements must be larger integer types such that the total size of the
876   /// operand type is less than or equal to the size of the result type. Each
877   /// of the low operand elements is any-extended into the corresponding,
878   /// wider result elements with the high bits becoming undef.
879   /// NOTE: The type legalizer prefers to make the operand and result size
880   /// the same to allow expansion to shuffle vector during op legalization.
881   ANY_EXTEND_VECTOR_INREG,
882 
883   /// SIGN_EXTEND_VECTOR_INREG(Vector) - This operator represents an
884   /// in-register sign-extension of the low lanes of an integer vector. The
885   /// result type must have fewer elements than the operand type, and those
886   /// elements must be larger integer types such that the total size of the
887   /// operand type is less than or equal to the size of the result type. Each
888   /// of the low operand elements is sign-extended into the corresponding,
889   /// wider result elements.
890   /// NOTE: The type legalizer prefers to make the operand and result size
891   /// the same to allow expansion to shuffle vector during op legalization.
892   SIGN_EXTEND_VECTOR_INREG,
893 
894   /// ZERO_EXTEND_VECTOR_INREG(Vector) - This operator represents an
895   /// in-register zero-extension of the low lanes of an integer vector. The
896   /// result type must have fewer elements than the operand type, and those
897   /// elements must be larger integer types such that the total size of the
898   /// operand type is less than or equal to the size of the result type. Each
899   /// of the low operand elements is zero-extended into the corresponding,
900   /// wider result elements.
901   /// NOTE: The type legalizer prefers to make the operand and result size
902   /// the same to allow expansion to shuffle vector during op legalization.
903   ZERO_EXTEND_VECTOR_INREG,
904 
905   /// FP_TO_[US]INT - Convert a floating point value to a signed or unsigned
906   /// integer. These have the same semantics as fptosi and fptoui in IR. If
907   /// the FP value cannot fit in the integer type, the results are undefined.
908   FP_TO_SINT,
909   FP_TO_UINT,
910 
911   /// FP_TO_[US]INT_SAT - Convert floating point value in operand 0 to a
912   /// signed or unsigned scalar integer type given in operand 1 with the
913   /// following semantics:
914   ///
915   ///  * If the value is NaN, zero is returned.
916   ///  * If the value is larger/smaller than the largest/smallest integer,
917   ///    the largest/smallest integer is returned (saturation).
918   ///  * Otherwise the result of rounding the value towards zero is returned.
919   ///
920   /// The scalar width of the type given in operand 1 must be equal to, or
921   /// smaller than, the scalar result type width. It may end up being smaller
922   /// than the result width as a result of integer type legalization.
923   ///
924   /// After converting to the scalar integer type in operand 1, the value is
925   /// extended to the result VT. FP_TO_SINT_SAT sign extends and FP_TO_UINT_SAT
926   /// zero extends.
927   FP_TO_SINT_SAT,
928   FP_TO_UINT_SAT,
929 
930   /// X = FP_ROUND(Y, TRUNC) - Rounding 'Y' from a larger floating point type
931   /// down to the precision of the destination VT.  TRUNC is a flag, which is
932   /// always an integer that is zero or one.  If TRUNC is 0, this is a
933   /// normal rounding, if it is 1, this FP_ROUND is known to not change the
934   /// value of Y.
935   ///
936   /// The TRUNC = 1 case is used in cases where we know that the value will
937   /// not be modified by the node, because Y is not using any of the extra
938   /// precision of source type.  This allows certain transformations like
939   /// FP_EXTEND(FP_ROUND(X,1)) -> X which are not safe for
940   /// FP_EXTEND(FP_ROUND(X,0)) because the extra bits aren't removed.
941   FP_ROUND,
942 
943   /// Returns current rounding mode:
944   /// -1 Undefined
945   ///  0 Round to 0
946   ///  1 Round to nearest, ties to even
947   ///  2 Round to +inf
948   ///  3 Round to -inf
949   ///  4 Round to nearest, ties to zero
950   ///  Other values are target dependent.
951   /// Result is rounding mode and chain. Input is a chain.
952   GET_ROUNDING,
953 
954   /// Set rounding mode.
955   /// The first operand is a chain pointer. The second specifies the required
956   /// rounding mode, encoded in the same way as used in '``GET_ROUNDING``'.
957   SET_ROUNDING,
958 
959   /// X = FP_EXTEND(Y) - Extend a smaller FP type into a larger FP type.
960   FP_EXTEND,
961 
962   /// BITCAST - This operator converts between integer, vector and FP
963   /// values, as if the value was stored to memory with one type and loaded
964   /// from the same address with the other type (or equivalently for vector
965   /// format conversions, etc).  The source and result are required to have
966   /// the same bit size (e.g.  f32 <-> i32).  This can also be used for
967   /// int-to-int or fp-to-fp conversions, but that is a noop, deleted by
968   /// getNode().
969   ///
970   /// This operator is subtly different from the bitcast instruction from
971   /// LLVM-IR since this node may change the bits in the register. For
972   /// example, this occurs on big-endian NEON and big-endian MSA where the
973   /// layout of the bits in the register depends on the vector type and this
974   /// operator acts as a shuffle operation for some vector type combinations.
975   BITCAST,
976 
977   /// ADDRSPACECAST - This operator converts between pointers of different
978   /// address spaces.
979   ADDRSPACECAST,
980 
981   /// FP16_TO_FP, FP_TO_FP16 - These operators are used to perform promotions
982   /// and truncation for half-precision (16 bit) floating numbers. These nodes
983   /// form a semi-softened interface for dealing with f16 (as an i16), which
984   /// is often a storage-only type but has native conversions.
985   FP16_TO_FP,
986   FP_TO_FP16,
987   STRICT_FP16_TO_FP,
988   STRICT_FP_TO_FP16,
989 
990   /// BF16_TO_FP, FP_TO_BF16 - These operators are used to perform promotions
991   /// and truncation for bfloat16. These nodes form a semi-softened interface
992   /// for dealing with bf16 (as an i16), which is often a storage-only type but
993   /// has native conversions.
994   BF16_TO_FP,
995   FP_TO_BF16,
996   STRICT_BF16_TO_FP,
997   STRICT_FP_TO_BF16,
998 
999   /// Perform various unary floating-point operations inspired by libm. For
1000   /// FPOWI, the result is undefined if the integer operand doesn't fit into
1001   /// sizeof(int).
1002   FNEG,
1003   FABS,
1004   FSQRT,
1005   FCBRT,
1006   FSIN,
1007   FCOS,
1008   FTAN,
1009   FASIN,
1010   FACOS,
1011   FATAN,
1012   FSINH,
1013   FCOSH,
1014   FTANH,
1015   FPOW,
1016   FPOWI,
1017   /// FLDEXP - ldexp, inspired by libm (op0 * 2**op1).
1018   FLDEXP,
1019   /// FATAN2 - atan2, inspired by libm.
1020   FATAN2,
1021 
1022   /// FFREXP - frexp, extract fractional and exponent component of a
1023   /// floating-point value. Returns the two components as separate return
1024   /// values.
1025   FFREXP,
1026 
1027   FLOG,
1028   FLOG2,
1029   FLOG10,
1030   FEXP,
1031   FEXP2,
1032   FEXP10,
1033   FCEIL,
1034   FTRUNC,
1035   FRINT,
1036   FNEARBYINT,
1037   FROUND,
1038   FROUNDEVEN,
1039   FFLOOR,
1040   LROUND,
1041   LLROUND,
1042   LRINT,
1043   LLRINT,
1044 
1045   /// FMINNUM/FMAXNUM - Perform floating-point minimum maximum on two values,
1046   /// following IEEE-754 definitions except for signed zero behavior.
1047   ///
1048   /// If one input is a signaling NaN, returns a quiet NaN. This matches
1049   /// IEEE-754 2008's minNum/maxNum behavior for signaling NaNs (which differs
1050   /// from 2019).
1051   ///
1052   /// These treat -0 as ordered less than +0, matching the behavior of IEEE-754
1053   /// 2019's minimumNumber/maximumNumber.
1054   ///
1055   /// Note that that arithmetic on an sNaN doesn't consistently produce a qNaN,
1056   /// so arithmetic feeding into a minnum/maxnum can produce inconsistent
1057   /// results. FMAXIMUN/FMINIMUM or FMAXIMUMNUM/FMINIMUMNUM may be better choice
1058   /// for non-distinction of sNaN/qNaN handling.
1059   FMINNUM,
1060   FMAXNUM,
1061 
1062   /// FMINNUM_IEEE/FMAXNUM_IEEE - Perform floating-point minimumNumber or
1063   /// maximumNumber on two values, following IEEE-754 definitions. This differs
1064   /// from FMINNUM/FMAXNUM in the handling of signaling NaNs, and signed zero.
1065   ///
1066   /// If one input is a signaling NaN, returns a quiet NaN. This matches
1067   /// IEEE-754 2008's minnum/maxnum behavior for signaling NaNs (which differs
1068   /// from 2019).
1069   ///
1070   /// These treat -0 as ordered less than +0, matching the behavior of IEEE-754
1071   /// 2019's minimumNumber/maximumNumber.
1072   ///
1073   /// Deprecated, and will be removed soon, as FMINNUM/FMAXNUM have the same
1074   /// semantics now.
1075   FMINNUM_IEEE,
1076   FMAXNUM_IEEE,
1077 
1078   /// FMINIMUM/FMAXIMUM - NaN-propagating minimum/maximum that also treat -0.0
1079   /// as less than 0.0. While FMINNUM_IEEE/FMAXNUM_IEEE follow IEEE 754-2008
1080   /// semantics, FMINIMUM/FMAXIMUM follow IEEE 754-2019 semantics.
1081   FMINIMUM,
1082   FMAXIMUM,
1083 
1084   /// FMINIMUMNUM/FMAXIMUMNUM - minimumnum/maximumnum that is same with
1085   /// FMINNUM_IEEE and FMAXNUM_IEEE besides if either operand is sNaN.
1086   FMINIMUMNUM,
1087   FMAXIMUMNUM,
1088 
1089   /// FSINCOS - Compute both fsin and fcos as a single operation.
1090   FSINCOS,
1091 
1092   /// FSINCOSPI - Compute both the sine and cosine times pi more accurately
1093   /// than FSINCOS(pi*x), especially for large x.
1094   FSINCOSPI,
1095 
1096   /// FMODF - Decomposes the operand into integral and fractional parts, each
1097   /// having the same type and sign as the operand.
1098   FMODF,
1099 
1100   /// Gets the current floating-point environment. The first operand is a token
1101   /// chain. The results are FP environment, represented by an integer value,
1102   /// and a token chain.
1103   GET_FPENV,
1104 
1105   /// Sets the current floating-point environment. The first operand is a token
1106   /// chain, the second is FP environment, represented by an integer value. The
1107   /// result is a token chain.
1108   SET_FPENV,
1109 
1110   /// Set floating-point environment to default state. The first operand and the
1111   /// result are token chains.
1112   RESET_FPENV,
1113 
1114   /// Gets the current floating-point environment. The first operand is a token
1115   /// chain, the second is a pointer to memory, where FP environment is stored
1116   /// to. The result is a token chain.
1117   GET_FPENV_MEM,
1118 
1119   /// Sets the current floating point environment. The first operand is a token
1120   /// chain, the second is a pointer to memory, where FP environment is loaded
1121   /// from. The result is a token chain.
1122   SET_FPENV_MEM,
1123 
1124   /// Reads the current dynamic floating-point control modes. The operand is
1125   /// a token chain.
1126   GET_FPMODE,
1127 
1128   /// Sets the current dynamic floating-point control modes. The first operand
1129   /// is a token chain, the second is control modes set represented as integer
1130   /// value.
1131   SET_FPMODE,
1132 
1133   /// Sets default dynamic floating-point control modes. The operand is a
1134   /// token chain.
1135   RESET_FPMODE,
1136 
1137   /// LOAD and STORE have token chains as their first operand, then the same
1138   /// operands as an LLVM load/store instruction, then an offset node that
1139   /// is added / subtracted from the base pointer to form the address (for
1140   /// indexed memory ops).
1141   LOAD,
1142   STORE,
1143 
1144   /// DYNAMIC_STACKALLOC - Allocate some number of bytes on the stack aligned
1145   /// to a specified boundary.  This node always has two return values: a new
1146   /// stack pointer value and a chain. The first operand is the token chain,
1147   /// the second is the number of bytes to allocate, and the third is the
1148   /// alignment boundary.  The size is guaranteed to be a multiple of the
1149   /// stack alignment, and the alignment is guaranteed to be bigger than the
1150   /// stack alignment (if required) or 0 to get standard stack alignment.
1151   DYNAMIC_STACKALLOC,
1152 
1153   /// Control flow instructions.  These all have token chains.
1154 
1155   /// BR - Unconditional branch.  The first operand is the chain
1156   /// operand, the second is the MBB to branch to.
1157   BR,
1158 
1159   /// BRIND - Indirect branch.  The first operand is the chain, the second
1160   /// is the value to branch to, which must be of the same type as the
1161   /// target's pointer type.
1162   BRIND,
1163 
1164   /// BR_JT - Jumptable branch. The first operand is the chain, the second
1165   /// is the jumptable index, the last one is the jumptable entry index.
1166   BR_JT,
1167 
1168   /// JUMP_TABLE_DEBUG_INFO - Jumptable debug info. The first operand is the
1169   /// chain, the second is the jumptable index.
1170   JUMP_TABLE_DEBUG_INFO,
1171 
1172   /// BRCOND - Conditional branch.  The first operand is the chain, the
1173   /// second is the condition, the third is the block to branch to if the
1174   /// condition is true.  If the type of the condition is not i1, then the
1175   /// high bits must conform to getBooleanContents. If the condition is undef,
1176   /// it nondeterministically jumps to the block.
1177   /// TODO: Its semantics w.r.t undef requires further discussion; we need to
1178   /// make it sure that it is consistent with optimizations in MIR & the
1179   /// meaning of IMPLICIT_DEF. See https://reviews.llvm.org/D92015
1180   BRCOND,
1181 
1182   /// BR_CC - Conditional branch.  The behavior is like that of SELECT_CC, in
1183   /// that the condition is represented as condition code, and two nodes to
1184   /// compare, rather than as a combined SetCC node.  The operands in order
1185   /// are chain, cc, lhs, rhs, block to branch to if condition is true. If
1186   /// condition is undef, it nondeterministically jumps to the block.
1187   BR_CC,
1188 
1189   /// INLINEASM - Represents an inline asm block.  This node always has two
1190   /// return values: a chain and a flag result.  The inputs are as follows:
1191   ///   Operand #0  : Input chain.
1192   ///   Operand #1  : a ExternalSymbolSDNode with a pointer to the asm string.
1193   ///   Operand #2  : a MDNodeSDNode with the !srcloc metadata.
1194   ///   Operand #3  : HasSideEffect, IsAlignStack bits.
1195   ///   After this, it is followed by a list of operands with this format:
1196   ///     ConstantSDNode: Flags that encode whether it is a mem or not, the
1197   ///                     of operands that follow, etc.  See InlineAsm.h.
1198   ///     ... however many operands ...
1199   ///   Operand #last: Optional, an incoming flag.
1200   ///
1201   /// The variable width operands are required to represent target addressing
1202   /// modes as a single "operand", even though they may have multiple
1203   /// SDOperands.
1204   INLINEASM,
1205 
1206   /// INLINEASM_BR - Branching version of inline asm. Used by asm-goto.
1207   INLINEASM_BR,
1208 
1209   /// EH_LABEL - Represents a label in mid basic block used to track
1210   /// locations needed for debug and exception handling tables.  These nodes
1211   /// take a chain as input and return a chain.
1212   EH_LABEL,
1213 
1214   /// ANNOTATION_LABEL - Represents a mid basic block label used by
1215   /// annotations. This should remain within the basic block and be ordered
1216   /// with respect to other call instructions, but loads and stores may float
1217   /// past it.
1218   ANNOTATION_LABEL,
1219 
1220   /// CATCHRET - Represents a return from a catch block funclet. Used for
1221   /// MSVC compatible exception handling. Takes a chain operand and a
1222   /// destination basic block operand.
1223   CATCHRET,
1224 
1225   /// CLEANUPRET - Represents a return from a cleanup block funclet.  Used for
1226   /// MSVC compatible exception handling. Takes only a chain operand.
1227   CLEANUPRET,
1228 
1229   /// STACKSAVE - STACKSAVE has one operand, an input chain.  It produces a
1230   /// value, the same type as the pointer type for the system, and an output
1231   /// chain.
1232   STACKSAVE,
1233 
1234   /// STACKRESTORE has two operands, an input chain and a pointer to restore
1235   /// to it returns an output chain.
1236   STACKRESTORE,
1237 
1238   /// CALLSEQ_START/CALLSEQ_END - These operators mark the beginning and end
1239   /// of a call sequence, and carry arbitrary information that target might
1240   /// want to know.  The first operand is a chain, the rest are specified by
1241   /// the target and not touched by the DAG optimizers.
1242   /// Targets that may use stack to pass call arguments define additional
1243   /// operands:
1244   /// - size of the call frame part that must be set up within the
1245   ///   CALLSEQ_START..CALLSEQ_END pair,
1246   /// - part of the call frame prepared prior to CALLSEQ_START.
1247   /// Both these parameters must be constants, their sum is the total call
1248   /// frame size.
1249   /// CALLSEQ_START..CALLSEQ_END pairs may not be nested.
1250   CALLSEQ_START, // Beginning of a call sequence
1251   CALLSEQ_END,   // End of a call sequence
1252 
1253   /// VAARG - VAARG has four operands: an input chain, a pointer, a SRCVALUE,
1254   /// and the alignment. It returns a pair of values: the vaarg value and a
1255   /// new chain.
1256   VAARG,
1257 
1258   /// VACOPY - VACOPY has 5 operands: an input chain, a destination pointer,
1259   /// a source pointer, a SRCVALUE for the destination, and a SRCVALUE for the
1260   /// source.
1261   VACOPY,
1262 
1263   /// VAEND, VASTART - VAEND and VASTART have three operands: an input chain,
1264   /// pointer, and a SRCVALUE.
1265   VAEND,
1266   VASTART,
1267 
1268   /// PREALLOCATED_SETUP - This has 2 operands: an input chain and a SRCVALUE
1269   /// with the preallocated call Value.
1270   PREALLOCATED_SETUP,
1271   /// PREALLOCATED_ARG - This has 3 operands: an input chain, a SRCVALUE
1272   /// with the preallocated call Value, and a constant int.
1273   PREALLOCATED_ARG,
1274 
1275   /// SRCVALUE - This is a node type that holds a Value* that is used to
1276   /// make reference to a value in the LLVM IR.
1277   SRCVALUE,
1278 
1279   /// MDNODE_SDNODE - This is a node that holdes an MDNode*, which is used to
1280   /// reference metadata in the IR.
1281   MDNODE_SDNODE,
1282 
1283   /// PCMARKER - This corresponds to the pcmarker intrinsic.
1284   PCMARKER,
1285 
1286   /// READCYCLECOUNTER - This corresponds to the readcyclecounter intrinsic.
1287   /// It produces a chain and one i64 value. The only operand is a chain.
1288   /// If i64 is not legal, the result will be expanded into smaller values.
1289   /// Still, it returns an i64, so targets should set legality for i64.
1290   /// The result is the content of the architecture-specific cycle
1291   /// counter-like register (or other high accuracy low latency clock source).
1292   READCYCLECOUNTER,
1293 
1294   /// READSTEADYCOUNTER - This corresponds to the readfixedcounter intrinsic.
1295   /// It has the same semantics as the READCYCLECOUNTER implementation except
1296   /// that the result is the content of the architecture-specific fixed
1297   /// frequency counter suitable for measuring elapsed time.
1298   READSTEADYCOUNTER,
1299 
1300   /// HANDLENODE node - Used as a handle for various purposes.
1301   HANDLENODE,
1302 
1303   /// INIT_TRAMPOLINE - This corresponds to the init_trampoline intrinsic.  It
1304   /// takes as input a token chain, the pointer to the trampoline, the pointer
1305   /// to the nested function, the pointer to pass for the 'nest' parameter, a
1306   /// SRCVALUE for the trampoline and another for the nested function
1307   /// (allowing targets to access the original Function*).
1308   /// It produces a token chain as output.
1309   INIT_TRAMPOLINE,
1310 
1311   /// ADJUST_TRAMPOLINE - This corresponds to the adjust_trampoline intrinsic.
1312   /// It takes a pointer to the trampoline and produces a (possibly) new
1313   /// pointer to the same trampoline with platform-specific adjustments
1314   /// applied.  The pointer it returns points to an executable block of code.
1315   ADJUST_TRAMPOLINE,
1316 
1317   /// TRAP - Trapping instruction
1318   TRAP,
1319 
1320   /// DEBUGTRAP - Trap intended to get the attention of a debugger.
1321   DEBUGTRAP,
1322 
1323   /// UBSANTRAP - Trap with an immediate describing the kind of sanitizer
1324   /// failure.
1325   UBSANTRAP,
1326 
1327   /// PREFETCH - This corresponds to a prefetch intrinsic. The first operand
1328   /// is the chain.  The other operands are the address to prefetch,
1329   /// read / write specifier, locality specifier and instruction / data cache
1330   /// specifier.
1331   PREFETCH,
1332 
1333   /// ARITH_FENCE - This corresponds to a arithmetic fence intrinsic. Both its
1334   /// operand and output are the same floating type.
1335   ARITH_FENCE,
1336 
1337   /// MEMBARRIER - Compiler barrier only; generate a no-op.
1338   MEMBARRIER,
1339 
1340   /// OUTCHAIN = ATOMIC_FENCE(INCHAIN, ordering, scope)
1341   /// This corresponds to the fence instruction. It takes an input chain, and
1342   /// two integer constants: an AtomicOrdering and a SynchronizationScope.
1343   ATOMIC_FENCE,
1344 
1345   /// Val, OUTCHAIN = ATOMIC_LOAD(INCHAIN, ptr)
1346   /// This corresponds to "load atomic" instruction.
1347   ATOMIC_LOAD,
1348 
1349   /// OUTCHAIN = ATOMIC_STORE(INCHAIN, val, ptr)
1350   /// This corresponds to "store atomic" instruction.
1351   ATOMIC_STORE,
1352 
1353   /// Val, OUTCHAIN = ATOMIC_CMP_SWAP(INCHAIN, ptr, cmp, swap)
1354   /// For double-word atomic operations:
1355   /// ValLo, ValHi, OUTCHAIN = ATOMIC_CMP_SWAP(INCHAIN, ptr, cmpLo, cmpHi,
1356   ///                                          swapLo, swapHi)
1357   /// This corresponds to the cmpxchg instruction.
1358   ATOMIC_CMP_SWAP,
1359 
1360   /// Val, Success, OUTCHAIN
1361   ///     = ATOMIC_CMP_SWAP_WITH_SUCCESS(INCHAIN, ptr, cmp, swap)
1362   /// N.b. this is still a strong cmpxchg operation, so
1363   /// Success == "Val == cmp".
1364   ATOMIC_CMP_SWAP_WITH_SUCCESS,
1365 
1366   /// Val, OUTCHAIN = ATOMIC_SWAP(INCHAIN, ptr, amt)
1367   /// Val, OUTCHAIN = ATOMIC_LOAD_[OpName](INCHAIN, ptr, amt)
1368   /// For double-word atomic operations:
1369   /// ValLo, ValHi, OUTCHAIN = ATOMIC_SWAP(INCHAIN, ptr, amtLo, amtHi)
1370   /// ValLo, ValHi, OUTCHAIN = ATOMIC_LOAD_[OpName](INCHAIN, ptr, amtLo, amtHi)
1371   /// These correspond to the atomicrmw instruction.
1372   ATOMIC_SWAP,
1373   ATOMIC_LOAD_ADD,
1374   ATOMIC_LOAD_SUB,
1375   ATOMIC_LOAD_AND,
1376   ATOMIC_LOAD_CLR,
1377   ATOMIC_LOAD_OR,
1378   ATOMIC_LOAD_XOR,
1379   ATOMIC_LOAD_NAND,
1380   ATOMIC_LOAD_MIN,
1381   ATOMIC_LOAD_MAX,
1382   ATOMIC_LOAD_UMIN,
1383   ATOMIC_LOAD_UMAX,
1384   ATOMIC_LOAD_FADD,
1385   ATOMIC_LOAD_FSUB,
1386   ATOMIC_LOAD_FMAX,
1387   ATOMIC_LOAD_FMIN,
1388   ATOMIC_LOAD_FMAXIMUM,
1389   ATOMIC_LOAD_FMINIMUM,
1390   ATOMIC_LOAD_UINC_WRAP,
1391   ATOMIC_LOAD_UDEC_WRAP,
1392   ATOMIC_LOAD_USUB_COND,
1393   ATOMIC_LOAD_USUB_SAT,
1394 
1395   /// Masked load and store - consecutive vector load and store operations
1396   /// with additional mask operand that prevents memory accesses to the
1397   /// masked-off lanes.
1398   ///
1399   ///     Val, OutChain = MLOAD(BasePtr, Mask, PassThru)
1400   ///     OutChain = MSTORE(Value, BasePtr, Mask)
1401   MLOAD,
1402   MSTORE,
1403 
1404   /// Masked gather and scatter - load and store operations for a vector of
1405   /// random addresses with additional mask operand that prevents memory
1406   /// accesses to the masked-off lanes.
1407   ///
1408   ///     Val, OutChain = GATHER(InChain, PassThru, Mask, BasePtr, Index, Scale)
1409   ///     OutChain = SCATTER(InChain, Value, Mask, BasePtr, Index, Scale)
1410   ///
1411   /// The Index operand can have more vector elements than the other operands
1412   /// due to type legalization. The extra elements are ignored.
1413   MGATHER,
1414   MSCATTER,
1415 
1416   /// This corresponds to the llvm.lifetime.* intrinsics. The first operand
1417   /// is the chain and the second operand is the alloca pointer.
1418   LIFETIME_START,
1419   LIFETIME_END,
1420 
1421   /// FAKE_USE represents a use of the operand but does not do anything.
1422   /// Its purpose is the extension of the operand's lifetime mainly for
1423   /// debugging purposes.
1424   FAKE_USE,
1425 
1426   /// GC_TRANSITION_START/GC_TRANSITION_END - These operators mark the
1427   /// beginning and end of GC transition  sequence, and carry arbitrary
1428   /// information that target might need for lowering.  The first operand is
1429   /// a chain, the rest are specified by the target and not touched by the DAG
1430   /// optimizers. GC_TRANSITION_START..GC_TRANSITION_END pairs may not be
1431   /// nested.
1432   GC_TRANSITION_START,
1433   GC_TRANSITION_END,
1434 
1435   /// GET_DYNAMIC_AREA_OFFSET - get offset from native SP to the address of
1436   /// the most recent dynamic alloca. For most targets that would be 0, but
1437   /// for some others (e.g. PowerPC, PowerPC64) that would be compile-time
1438   /// known nonzero constant. The only operand here is the chain.
1439   GET_DYNAMIC_AREA_OFFSET,
1440 
1441   /// Pseudo probe for AutoFDO, as a place holder in a basic block to improve
1442   /// the sample counts quality.
1443   PSEUDO_PROBE,
1444 
1445   /// VSCALE(IMM) - Returns the runtime scaling factor used to calculate the
1446   /// number of elements within a scalable vector. IMM is a constant integer
1447   /// multiplier that is applied to the runtime value.
1448   VSCALE,
1449 
1450   /// Generic reduction nodes. These nodes represent horizontal vector
1451   /// reduction operations, producing a scalar result.
1452   /// The SEQ variants perform reductions in sequential order. The first
1453   /// operand is an initial scalar accumulator value, and the second operand
1454   /// is the vector to reduce.
1455   /// E.g. RES = VECREDUCE_SEQ_FADD f32 ACC, <4 x f32> SRC_VEC
1456   ///  ... is equivalent to
1457   /// RES = (((ACC + SRC_VEC[0]) + SRC_VEC[1]) + SRC_VEC[2]) + SRC_VEC[3]
1458   VECREDUCE_SEQ_FADD,
1459   VECREDUCE_SEQ_FMUL,
1460 
1461   /// These reductions have relaxed evaluation order semantics, and have a
1462   /// single vector operand. The order of evaluation is unspecified. For
1463   /// pow-of-2 vectors, one valid legalizer expansion is to use a tree
1464   /// reduction, i.e.:
1465   /// For RES = VECREDUCE_FADD <8 x f16> SRC_VEC
1466   ///
1467   ///     PART_RDX = FADD SRC_VEC[0:3], SRC_VEC[4:7]
1468   ///     PART_RDX2 = FADD PART_RDX[0:1], PART_RDX[2:3]
1469   ///     RES = FADD PART_RDX2[0], PART_RDX2[1]
1470   ///
1471   /// For non-pow-2 vectors, this can be computed by extracting each element
1472   /// and performing the operation as if it were scalarized.
1473   VECREDUCE_FADD,
1474   VECREDUCE_FMUL,
1475   /// FMIN/FMAX nodes can have flags, for NaN/NoNaN variants.
1476   VECREDUCE_FMAX,
1477   VECREDUCE_FMIN,
1478   /// FMINIMUM/FMAXIMUM nodes propatate NaNs and signed zeroes using the
1479   /// llvm.minimum and llvm.maximum semantics.
1480   VECREDUCE_FMAXIMUM,
1481   VECREDUCE_FMINIMUM,
1482   /// Integer reductions may have a result type larger than the vector element
1483   /// type. However, the reduction is performed using the vector element type
1484   /// and the value in the top bits is unspecified.
1485   VECREDUCE_ADD,
1486   VECREDUCE_MUL,
1487   VECREDUCE_AND,
1488   VECREDUCE_OR,
1489   VECREDUCE_XOR,
1490   VECREDUCE_SMAX,
1491   VECREDUCE_SMIN,
1492   VECREDUCE_UMAX,
1493   VECREDUCE_UMIN,
1494 
1495   // PARTIAL_REDUCE_[U|S]MLA(Accumulator, Input1, Input2)
1496   // The partial reduction nodes sign or zero extend Input1 and Input2
1497   // (with the extension kind noted below) to the element type of
1498   // Accumulator before multiplying their results.
1499   // This result is concatenated to the Accumulator, and this is then reduced,
1500   // using addition, to the result type.
1501   // The output is only expected to either be given to another partial reduction
1502   // operation or an equivalent vector reduce operation, so the order in which
1503   // the elements are reduced is deliberately not specified.
1504   // Input1 and Input2 must be the same type. Accumulator and the output must be
1505   // the same type.
1506   // The number of elements in Input1 and Input2 must be a positive integer
1507   // multiple of the number of elements in the Accumulator / output type.
1508   // Input1 and Input2 must have an element type which is the same as or smaller
1509   // than the element type of the Accumulator and output.
1510   PARTIAL_REDUCE_SMLA,  // sext, sext
1511   PARTIAL_REDUCE_UMLA,  // zext, zext
1512   PARTIAL_REDUCE_SUMLA, // sext, zext
1513 
1514   // The `llvm.experimental.stackmap` intrinsic.
1515   // Operands: input chain, glue, <id>, <numShadowBytes>, [live0[, live1...]]
1516   // Outputs: output chain, glue
1517   STACKMAP,
1518 
1519   // The `llvm.experimental.patchpoint.*` intrinsic.
1520   // Operands: input chain, [glue], reg-mask, <id>, <numShadowBytes>, callee,
1521   //   <numArgs>, cc, ...
1522   // Outputs: [rv], output chain, glue
1523   PATCHPOINT,
1524 
1525   // PTRADD represents pointer arithmetic semantics, for targets that opt in
1526   // using shouldPreservePtrArith().
1527   // ptr = PTRADD ptr, offset
1528   PTRADD,
1529 
1530 // Vector Predication
1531 #define BEGIN_REGISTER_VP_SDNODE(VPSDID, ...) VPSDID,
1532 #include "llvm/IR/VPIntrinsics.def"
1533 
1534   // The `llvm.experimental.convergence.*` intrinsics.
1535   CONVERGENCECTRL_ANCHOR,
1536   CONVERGENCECTRL_ENTRY,
1537   CONVERGENCECTRL_LOOP,
1538   // This does not correspond to any convergence control intrinsic. It is used
1539   // to glue a convergence control token to a convergent operation in the DAG,
1540   // which is later translated to an implicit use in the MIR.
1541   CONVERGENCECTRL_GLUE,
1542 
1543   // Experimental vector histogram intrinsic
1544   // Operands: Input Chain, Inc, Mask, Base, Index, Scale, ID
1545   // Output: Output Chain
1546   EXPERIMENTAL_VECTOR_HISTOGRAM,
1547 
1548   // Finds the index of the last active mask element
1549   // Operands: Mask
1550   VECTOR_FIND_LAST_ACTIVE,
1551 
1552   // GET_ACTIVE_LANE_MASK - this corrosponds to the llvm.get.active.lane.mask
1553   // intrinsic. It creates a mask representing active and inactive vector
1554   // lanes, active while Base + index < Trip Count. As with the intrinsic,
1555   // the operands Base and Trip Count have the same scalar integer type and
1556   // the internal addition of Base + index cannot overflow. However, the ISD
1557   // node supports result types which are wider than i1, where the high
1558   // bits conform to getBooleanContents similar to the SETCC operator.
1559   GET_ACTIVE_LANE_MASK,
1560 
1561   // llvm.clear_cache intrinsic
1562   // Operands: Input Chain, Start Addres, End Address
1563   // Outputs: Output Chain
1564   CLEAR_CACHE,
1565 
1566   /// BUILTIN_OP_END - This must be the last enum value in this list.
1567   /// The target-specific pre-isel opcode values start here.
1568   BUILTIN_OP_END
1569 };
1570 
1571 /// Whether this is bitwise logic opcode.
isBitwiseLogicOp(unsigned Opcode)1572 inline bool isBitwiseLogicOp(unsigned Opcode) {
1573   return Opcode == ISD::AND || Opcode == ISD::OR || Opcode == ISD::XOR;
1574 }
1575 
1576 /// Given a \p MinMaxOpc of ISD::(U|S)MIN or ISD::(U|S)MAX, returns
1577 /// ISD::(U|S)MAX and ISD::(U|S)MIN, respectively.
1578 LLVM_ABI NodeType getInverseMinMaxOpcode(unsigned MinMaxOpc);
1579 
1580 /// Get underlying scalar opcode for VECREDUCE opcode.
1581 /// For example ISD::AND for ISD::VECREDUCE_AND.
1582 LLVM_ABI NodeType getVecReduceBaseOpcode(unsigned VecReduceOpcode);
1583 
1584 /// Whether this is a vector-predicated Opcode.
1585 LLVM_ABI bool isVPOpcode(unsigned Opcode);
1586 
1587 /// Whether this is a vector-predicated binary operation opcode.
1588 LLVM_ABI bool isVPBinaryOp(unsigned Opcode);
1589 
1590 /// Whether this is a vector-predicated reduction opcode.
1591 LLVM_ABI bool isVPReduction(unsigned Opcode);
1592 
1593 /// The operand position of the vector mask.
1594 LLVM_ABI std::optional<unsigned> getVPMaskIdx(unsigned Opcode);
1595 
1596 /// The operand position of the explicit vector length parameter.
1597 LLVM_ABI std::optional<unsigned> getVPExplicitVectorLengthIdx(unsigned Opcode);
1598 
1599 /// Translate this VP Opcode to its corresponding non-VP Opcode.
1600 LLVM_ABI std::optional<unsigned> getBaseOpcodeForVP(unsigned Opcode,
1601                                                     bool hasFPExcept);
1602 
1603 /// Translate this non-VP Opcode to its corresponding VP Opcode.
1604 LLVM_ABI std::optional<unsigned> getVPForBaseOpcode(unsigned Opcode);
1605 
1606 //===--------------------------------------------------------------------===//
1607 /// MemIndexedMode enum - This enum defines the load / store indexed
1608 /// addressing modes.
1609 ///
1610 /// UNINDEXED    "Normal" load / store. The effective address is already
1611 ///              computed and is available in the base pointer. The offset
1612 ///              operand is always undefined. In addition to producing a
1613 ///              chain, an unindexed load produces one value (result of the
1614 ///              load); an unindexed store does not produce a value.
1615 ///
1616 /// PRE_INC      Similar to the unindexed mode where the effective address is
1617 /// PRE_DEC      the value of the base pointer add / subtract the offset.
1618 ///              It considers the computation as being folded into the load /
1619 ///              store operation (i.e. the load / store does the address
1620 ///              computation as well as performing the memory transaction).
1621 ///              The base operand is always undefined. In addition to
1622 ///              producing a chain, pre-indexed load produces two values
1623 ///              (result of the load and the result of the address
1624 ///              computation); a pre-indexed store produces one value (result
1625 ///              of the address computation).
1626 ///
1627 /// POST_INC     The effective address is the value of the base pointer. The
1628 /// POST_DEC     value of the offset operand is then added to / subtracted
1629 ///              from the base after memory transaction. In addition to
1630 ///              producing a chain, post-indexed load produces two values
1631 ///              (the result of the load and the result of the base +/- offset
1632 ///              computation); a post-indexed store produces one value (the
1633 ///              the result of the base +/- offset computation).
1634 enum MemIndexedMode { UNINDEXED = 0, PRE_INC, PRE_DEC, POST_INC, POST_DEC };
1635 
1636 static const int LAST_INDEXED_MODE = POST_DEC + 1;
1637 
1638 //===--------------------------------------------------------------------===//
1639 /// MemIndexType enum - This enum defines how to interpret MGATHER/SCATTER's
1640 /// index parameter when calculating addresses.
1641 ///
1642 /// SIGNED_SCALED     Addr = Base + ((signed)Index * Scale)
1643 /// UNSIGNED_SCALED   Addr = Base + ((unsigned)Index * Scale)
1644 ///
1645 /// NOTE: The value of Scale is typically only known to the node owning the
1646 /// IndexType, with a value of 1 the equivalent of being unscaled.
1647 enum MemIndexType { SIGNED_SCALED = 0, UNSIGNED_SCALED };
1648 
1649 static const int LAST_MEM_INDEX_TYPE = UNSIGNED_SCALED + 1;
1650 
isIndexTypeSigned(MemIndexType IndexType)1651 inline bool isIndexTypeSigned(MemIndexType IndexType) {
1652   return IndexType == SIGNED_SCALED;
1653 }
1654 
1655 //===--------------------------------------------------------------------===//
1656 /// LoadExtType enum - This enum defines the three variants of LOADEXT
1657 /// (load with extension).
1658 ///
1659 /// SEXTLOAD loads the integer operand and sign extends it to a larger
1660 ///          integer result type.
1661 /// ZEXTLOAD loads the integer operand and zero extends it to a larger
1662 ///          integer result type.
1663 /// EXTLOAD  is used for two things: floating point extending loads and
1664 ///          integer extending loads [the top bits are undefined].
1665 enum LoadExtType { NON_EXTLOAD = 0, EXTLOAD, SEXTLOAD, ZEXTLOAD };
1666 
1667 static const int LAST_LOADEXT_TYPE = ZEXTLOAD + 1;
1668 
1669 LLVM_ABI NodeType getExtForLoadExtType(bool IsFP, LoadExtType);
1670 
1671 //===--------------------------------------------------------------------===//
1672 /// ISD::CondCode enum - These are ordered carefully to make the bitfields
1673 /// below work out, when considering SETFALSE (something that never exists
1674 /// dynamically) as 0.  "U" -> Unsigned (for integer operands) or Unordered
1675 /// (for floating point), "L" -> Less than, "G" -> Greater than, "E" -> Equal
1676 /// to.  If the "N" column is 1, the result of the comparison is undefined if
1677 /// the input is a NAN.
1678 ///
1679 /// All of these (except for the 'always folded ops') should be handled for
1680 /// floating point.  For integer, only the SETEQ,SETNE,SETLT,SETLE,SETGT,
1681 /// SETGE,SETULT,SETULE,SETUGT, and SETUGE opcodes are used.
1682 ///
1683 /// Note that these are laid out in a specific order to allow bit-twiddling
1684 /// to transform conditions.
1685 enum CondCode {
1686   // Opcode       N U L G E       Intuitive operation
1687   SETFALSE, //      0 0 0 0       Always false (always folded)
1688   SETOEQ,   //      0 0 0 1       True if ordered and equal
1689   SETOGT,   //      0 0 1 0       True if ordered and greater than
1690   SETOGE,   //      0 0 1 1       True if ordered and greater than or equal
1691   SETOLT,   //      0 1 0 0       True if ordered and less than
1692   SETOLE,   //      0 1 0 1       True if ordered and less than or equal
1693   SETONE,   //      0 1 1 0       True if ordered and operands are unequal
1694   SETO,     //      0 1 1 1       True if ordered (no nans)
1695   SETUO,    //      1 0 0 0       True if unordered: isnan(X) | isnan(Y)
1696   SETUEQ,   //      1 0 0 1       True if unordered or equal
1697   SETUGT,   //      1 0 1 0       True if unordered or greater than
1698   SETUGE,   //      1 0 1 1       True if unordered, greater than, or equal
1699   SETULT,   //      1 1 0 0       True if unordered or less than
1700   SETULE,   //      1 1 0 1       True if unordered, less than, or equal
1701   SETUNE,   //      1 1 1 0       True if unordered or not equal
1702   SETTRUE,  //      1 1 1 1       Always true (always folded)
1703   // Don't care operations: undefined if the input is a nan.
1704   SETFALSE2, //   1 X 0 0 0       Always false (always folded)
1705   SETEQ,     //   1 X 0 0 1       True if equal
1706   SETGT,     //   1 X 0 1 0       True if greater than
1707   SETGE,     //   1 X 0 1 1       True if greater than or equal
1708   SETLT,     //   1 X 1 0 0       True if less than
1709   SETLE,     //   1 X 1 0 1       True if less than or equal
1710   SETNE,     //   1 X 1 1 0       True if not equal
1711   SETTRUE2,  //   1 X 1 1 1       Always true (always folded)
1712 
1713   SETCC_INVALID // Marker value.
1714 };
1715 
1716 /// Return true if this is a setcc instruction that performs a signed
1717 /// comparison when used with integer operands.
isSignedIntSetCC(CondCode Code)1718 inline bool isSignedIntSetCC(CondCode Code) {
1719   return Code == SETGT || Code == SETGE || Code == SETLT || Code == SETLE;
1720 }
1721 
1722 /// Return true if this is a setcc instruction that performs an unsigned
1723 /// comparison when used with integer operands.
isUnsignedIntSetCC(CondCode Code)1724 inline bool isUnsignedIntSetCC(CondCode Code) {
1725   return Code == SETUGT || Code == SETUGE || Code == SETULT || Code == SETULE;
1726 }
1727 
1728 /// Return true if this is a setcc instruction that performs an equality
1729 /// comparison when used with integer operands.
isIntEqualitySetCC(CondCode Code)1730 inline bool isIntEqualitySetCC(CondCode Code) {
1731   return Code == SETEQ || Code == SETNE;
1732 }
1733 
1734 /// Return true if this is a setcc instruction that performs an equality
1735 /// comparison when used with floating point operands.
isFPEqualitySetCC(CondCode Code)1736 inline bool isFPEqualitySetCC(CondCode Code) {
1737   return Code == SETOEQ || Code == SETONE || Code == SETUEQ || Code == SETUNE;
1738 }
1739 
1740 /// Return true if the specified condition returns true if the two operands to
1741 /// the condition are equal. Note that if one of the two operands is a NaN,
1742 /// this value is meaningless.
isTrueWhenEqual(CondCode Cond)1743 inline bool isTrueWhenEqual(CondCode Cond) { return ((int)Cond & 1) != 0; }
1744 
1745 /// This function returns 0 if the condition is always false if an operand is
1746 /// a NaN, 1 if the condition is always true if the operand is a NaN, and 2 if
1747 /// the condition is undefined if the operand is a NaN.
getUnorderedFlavor(CondCode Cond)1748 inline unsigned getUnorderedFlavor(CondCode Cond) {
1749   return ((int)Cond >> 3) & 3;
1750 }
1751 
1752 /// Return the operation corresponding to !(X op Y), where 'op' is a valid
1753 /// SetCC operation.
1754 LLVM_ABI CondCode getSetCCInverse(CondCode Operation, EVT Type);
1755 
isExtOpcode(unsigned Opcode)1756 inline bool isExtOpcode(unsigned Opcode) {
1757   return Opcode == ISD::ANY_EXTEND || Opcode == ISD::ZERO_EXTEND ||
1758          Opcode == ISD::SIGN_EXTEND;
1759 }
1760 
isExtVecInRegOpcode(unsigned Opcode)1761 inline bool isExtVecInRegOpcode(unsigned Opcode) {
1762   return Opcode == ISD::ANY_EXTEND_VECTOR_INREG ||
1763          Opcode == ISD::ZERO_EXTEND_VECTOR_INREG ||
1764          Opcode == ISD::SIGN_EXTEND_VECTOR_INREG;
1765 }
1766 
1767 namespace GlobalISel {
1768 /// Return the operation corresponding to !(X op Y), where 'op' is a valid
1769 /// SetCC operation. The U bit of the condition code has different meanings
1770 /// between floating point and integer comparisons and LLT's don't provide
1771 /// this distinction. As such we need to be told whether the comparison is
1772 /// floating point or integer-like. Pointers should use integer-like
1773 /// comparisons.
1774 LLVM_ABI CondCode getSetCCInverse(CondCode Operation, bool isIntegerLike);
1775 } // end namespace GlobalISel
1776 
1777 /// Return the operation corresponding to (Y op X) when given the operation
1778 /// for (X op Y).
1779 LLVM_ABI CondCode getSetCCSwappedOperands(CondCode Operation);
1780 
1781 /// Return the result of a logical OR between different comparisons of
1782 /// identical values: ((X op1 Y) | (X op2 Y)). This function returns
1783 /// SETCC_INVALID if it is not possible to represent the resultant comparison.
1784 LLVM_ABI CondCode getSetCCOrOperation(CondCode Op1, CondCode Op2, EVT Type);
1785 
1786 /// Return the result of a logical AND between different comparisons of
1787 /// identical values: ((X op1 Y) & (X op2 Y)). This function returns
1788 /// SETCC_INVALID if it is not possible to represent the resultant comparison.
1789 LLVM_ABI CondCode getSetCCAndOperation(CondCode Op1, CondCode Op2, EVT Type);
1790 
1791 } // namespace ISD
1792 
1793 } // namespace llvm
1794 
1795 #endif
1796