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