LLVM API Documentation
00001 //===-- llvm/CodeGen/ISDOpcodes.h - CodeGen opcodes -------------*- C++ -*-===// 00002 // 00003 // The LLVM Compiler Infrastructure 00004 // 00005 // This file is distributed under the University of Illinois Open Source 00006 // License. See LICENSE.TXT for details. 00007 // 00008 //===----------------------------------------------------------------------===// 00009 // 00010 // This file declares codegen opcodes and related utilities. 00011 // 00012 //===----------------------------------------------------------------------===// 00013 00014 #ifndef LLVM_CODEGEN_ISDOPCODES_H 00015 #define LLVM_CODEGEN_ISDOPCODES_H 00016 00017 namespace llvm { 00018 00019 /// ISD namespace - This namespace contains an enum which represents all of the 00020 /// SelectionDAG node types and value types. 00021 /// 00022 namespace ISD { 00023 00024 //===--------------------------------------------------------------------===// 00025 /// ISD::NodeType enum - This enum defines the target-independent operators 00026 /// for a SelectionDAG. 00027 /// 00028 /// Targets may also define target-dependent operator codes for SDNodes. For 00029 /// example, on x86, these are the enum values in the X86ISD namespace. 00030 /// Targets should aim to use target-independent operators to model their 00031 /// instruction sets as much as possible, and only use target-dependent 00032 /// operators when they have special requirements. 00033 /// 00034 /// Finally, during and after selection proper, SNodes may use special 00035 /// operator codes that correspond directly with MachineInstr opcodes. These 00036 /// are used to represent selected instructions. See the isMachineOpcode() 00037 /// and getMachineOpcode() member functions of SDNode. 00038 /// 00039 enum NodeType { 00040 /// DELETED_NODE - This is an illegal value that is used to catch 00041 /// errors. This opcode is not a legal opcode for any node. 00042 DELETED_NODE, 00043 00044 /// EntryToken - This is the marker used to indicate the start of a region. 00045 EntryToken, 00046 00047 /// TokenFactor - This node takes multiple tokens as input and produces a 00048 /// single token result. This is used to represent the fact that the operand 00049 /// operators are independent of each other. 00050 TokenFactor, 00051 00052 /// AssertSext, AssertZext - These nodes record if a register contains a 00053 /// value that has already been zero or sign extended from a narrower type. 00054 /// These nodes take two operands. The first is the node that has already 00055 /// been extended, and the second is a value type node indicating the width 00056 /// of the extension 00057 AssertSext, AssertZext, 00058 00059 /// Various leaf nodes. 00060 BasicBlock, VALUETYPE, CONDCODE, Register, RegisterMask, 00061 Constant, ConstantFP, 00062 GlobalAddress, GlobalTLSAddress, FrameIndex, 00063 JumpTable, ConstantPool, ExternalSymbol, BlockAddress, 00064 00065 /// The address of the GOT 00066 GLOBAL_OFFSET_TABLE, 00067 00068 /// FRAMEADDR, RETURNADDR - These nodes represent llvm.frameaddress and 00069 /// llvm.returnaddress on the DAG. These nodes take one operand, the index 00070 /// of the frame or return address to return. An index of zero corresponds 00071 /// to the current function's frame or return address, an index of one to 00072 /// the parent's frame or return address, and so on. 00073 FRAMEADDR, RETURNADDR, 00074 00075 /// FRAME_TO_ARGS_OFFSET - This node represents offset from frame pointer to 00076 /// first (possible) on-stack argument. This is needed for correct stack 00077 /// adjustment during unwind. 00078 FRAME_TO_ARGS_OFFSET, 00079 00080 /// RESULT, OUTCHAIN = EXCEPTIONADDR(INCHAIN) - This node represents the 00081 /// address of the exception block on entry to an landing pad block. 00082 EXCEPTIONADDR, 00083 00084 /// RESULT, OUTCHAIN = LSDAADDR(INCHAIN) - This node represents the 00085 /// address of the Language Specific Data Area for the enclosing function. 00086 LSDAADDR, 00087 00088 /// RESULT, OUTCHAIN = EHSELECTION(INCHAIN, EXCEPTION) - This node 00089 /// represents the selection index of the exception thrown. 00090 EHSELECTION, 00091 00092 /// OUTCHAIN = EH_RETURN(INCHAIN, OFFSET, HANDLER) - This node represents 00093 /// 'eh_return' gcc dwarf builtin, which is used to return from 00094 /// exception. The general meaning is: adjust stack by OFFSET and pass 00095 /// execution to HANDLER. Many platform-related details also :) 00096 EH_RETURN, 00097 00098 /// RESULT, OUTCHAIN = EH_SJLJ_SETJMP(INCHAIN, buffer) 00099 /// This corresponds to the eh.sjlj.setjmp intrinsic. 00100 /// It takes an input chain and a pointer to the jump buffer as inputs 00101 /// and returns an outchain. 00102 EH_SJLJ_SETJMP, 00103 00104 /// OUTCHAIN = EH_SJLJ_LONGJMP(INCHAIN, buffer) 00105 /// This corresponds to the eh.sjlj.longjmp intrinsic. 00106 /// It takes an input chain and a pointer to the jump buffer as inputs 00107 /// and returns an outchain. 00108 EH_SJLJ_LONGJMP, 00109 00110 /// TargetConstant* - Like Constant*, but the DAG does not do any folding, 00111 /// simplification, or lowering of the constant. They are used for constants 00112 /// which are known to fit in the immediate fields of their users, or for 00113 /// carrying magic numbers which are not values which need to be 00114 /// materialized in registers. 00115 TargetConstant, 00116 TargetConstantFP, 00117 00118 /// TargetGlobalAddress - Like GlobalAddress, but the DAG does no folding or 00119 /// anything else with this node, and this is valid in the target-specific 00120 /// dag, turning into a GlobalAddress operand. 00121 TargetGlobalAddress, 00122 TargetGlobalTLSAddress, 00123 TargetFrameIndex, 00124 TargetJumpTable, 00125 TargetConstantPool, 00126 TargetExternalSymbol, 00127 TargetBlockAddress, 00128 00129 /// TargetIndex - Like a constant pool entry, but with completely 00130 /// target-dependent semantics. Holds target flags, a 32-bit index, and a 00131 /// 64-bit index. Targets can use this however they like. 00132 TargetIndex, 00133 00134 /// RESULT = INTRINSIC_WO_CHAIN(INTRINSICID, arg1, arg2, ...) 00135 /// This node represents a target intrinsic function with no side effects. 00136 /// The first operand is the ID number of the intrinsic from the 00137 /// llvm::Intrinsic namespace. The operands to the intrinsic follow. The 00138 /// node returns the result of the intrinsic. 00139 INTRINSIC_WO_CHAIN, 00140 00141 /// RESULT,OUTCHAIN = INTRINSIC_W_CHAIN(INCHAIN, INTRINSICID, arg1, ...) 00142 /// This node represents a target intrinsic function with side effects that 00143 /// returns a result. The first operand is a chain pointer. The second is 00144 /// the ID number of the intrinsic from the llvm::Intrinsic namespace. The 00145 /// operands to the intrinsic follow. The node has two results, the result 00146 /// of the intrinsic and an output chain. 00147 INTRINSIC_W_CHAIN, 00148 00149 /// OUTCHAIN = INTRINSIC_VOID(INCHAIN, INTRINSICID, arg1, arg2, ...) 00150 /// This node represents a target intrinsic function with side effects that 00151 /// does not return a result. The first operand is a chain pointer. The 00152 /// second is the ID number of the intrinsic from the llvm::Intrinsic 00153 /// namespace. The operands to the intrinsic follow. 00154 INTRINSIC_VOID, 00155 00156 /// CopyToReg - This node has three operands: a chain, a register number to 00157 /// set to this value, and a value. 00158 CopyToReg, 00159 00160 /// CopyFromReg - This node indicates that the input value is a virtual or 00161 /// physical register that is defined outside of the scope of this 00162 /// SelectionDAG. The register is available from the RegisterSDNode object. 00163 CopyFromReg, 00164 00165 /// UNDEF - An undefined node. 00166 UNDEF, 00167 00168 /// EXTRACT_ELEMENT - This is used to get the lower or upper (determined by 00169 /// a Constant, which is required to be operand #1) half of the integer or 00170 /// float value specified as operand #0. This is only for use before 00171 /// legalization, for values that will be broken into multiple registers. 00172 EXTRACT_ELEMENT, 00173 00174 /// BUILD_PAIR - This is the opposite of EXTRACT_ELEMENT in some ways. 00175 /// Given two values of the same integer value type, this produces a value 00176 /// twice as big. Like EXTRACT_ELEMENT, this can only be used before 00177 /// legalization. 00178 BUILD_PAIR, 00179 00180 /// MERGE_VALUES - This node takes multiple discrete operands and returns 00181 /// them all as its individual results. This nodes has exactly the same 00182 /// number of inputs and outputs. This node is useful for some pieces of the 00183 /// code generator that want to think about a single node with multiple 00184 /// results, not multiple nodes. 00185 MERGE_VALUES, 00186 00187 /// Simple integer binary arithmetic operators. 00188 ADD, SUB, MUL, SDIV, UDIV, SREM, UREM, 00189 00190 /// SMUL_LOHI/UMUL_LOHI - Multiply two integers of type iN, producing 00191 /// a signed/unsigned value of type i[2*N], and return the full value as 00192 /// two results, each of type iN. 00193 SMUL_LOHI, UMUL_LOHI, 00194 00195 /// SDIVREM/UDIVREM - Divide two integers and produce both a quotient and 00196 /// remainder result. 00197 SDIVREM, UDIVREM, 00198 00199 /// CARRY_FALSE - This node is used when folding other nodes, 00200 /// like ADDC/SUBC, which indicate the carry result is always false. 00201 CARRY_FALSE, 00202 00203 /// Carry-setting nodes for multiple precision addition and subtraction. 00204 /// These nodes take two operands of the same value type, and produce two 00205 /// results. The first result is the normal add or sub result, the second 00206 /// result is the carry flag result. 00207 ADDC, SUBC, 00208 00209 /// Carry-using nodes for multiple precision addition and subtraction. These 00210 /// nodes take three operands: The first two are the normal lhs and rhs to 00211 /// the add or sub, and the third is the input carry flag. These nodes 00212 /// produce two results; the normal result of the add or sub, and the output 00213 /// carry flag. These nodes both read and write a carry flag to allow them 00214 /// to them to be chained together for add and sub of arbitrarily large 00215 /// values. 00216 ADDE, SUBE, 00217 00218 /// RESULT, BOOL = [SU]ADDO(LHS, RHS) - Overflow-aware nodes for addition. 00219 /// These nodes take two operands: the normal LHS and RHS to the add. They 00220 /// produce two results: the normal result of the add, and a boolean that 00221 /// indicates if an overflow occurred (*not* a flag, because it may be store 00222 /// to memory, etc.). If the type of the boolean is not i1 then the high 00223 /// bits conform to getBooleanContents. 00224 /// These nodes are generated from llvm.[su]add.with.overflow intrinsics. 00225 SADDO, UADDO, 00226 00227 /// Same for subtraction. 00228 SSUBO, USUBO, 00229 00230 /// Same for multiplication. 00231 SMULO, UMULO, 00232 00233 /// Simple binary floating point operators. 00234 FADD, FSUB, FMUL, FMA, FDIV, FREM, 00235 00236 /// FCOPYSIGN(X, Y) - Return the value of X with the sign of Y. NOTE: This 00237 /// DAG node does not require that X and Y have the same type, just that the 00238 /// are both floating point. X and the result must have the same type. 00239 /// FCOPYSIGN(f32, f64) is allowed. 00240 FCOPYSIGN, 00241 00242 /// INT = FGETSIGN(FP) - Return the sign bit of the specified floating point 00243 /// value as an integer 0/1 value. 00244 FGETSIGN, 00245 00246 /// BUILD_VECTOR(ELT0, ELT1, ELT2, ELT3,...) - Return a vector with the 00247 /// specified, possibly variable, elements. The number of elements is 00248 /// required to be a power of two. The types of the operands must all be 00249 /// the same and must match the vector element type, except that integer 00250 /// types are allowed to be larger than the element type, in which case 00251 /// the operands are implicitly truncated. 00252 BUILD_VECTOR, 00253 00254 /// INSERT_VECTOR_ELT(VECTOR, VAL, IDX) - Returns VECTOR with the element 00255 /// at IDX replaced with VAL. If the type of VAL is larger than the vector 00256 /// element type then VAL is truncated before replacement. 00257 INSERT_VECTOR_ELT, 00258 00259 /// EXTRACT_VECTOR_ELT(VECTOR, IDX) - Returns a single element from VECTOR 00260 /// identified by the (potentially variable) element number IDX. If the 00261 /// return type is an integer type larger than the element type of the 00262 /// vector, the result is extended to the width of the return type. 00263 EXTRACT_VECTOR_ELT, 00264 00265 /// CONCAT_VECTORS(VECTOR0, VECTOR1, ...) - Given a number of values of 00266 /// vector type with the same length and element type, this produces a 00267 /// concatenated vector result value, with length equal to the sum of the 00268 /// lengths of the input vectors. 00269 CONCAT_VECTORS, 00270 00271 /// INSERT_SUBVECTOR(VECTOR1, VECTOR2, IDX) - Returns a vector 00272 /// with VECTOR2 inserted into VECTOR1 at the (potentially 00273 /// variable) element number IDX, which must be a multiple of the 00274 /// VECTOR2 vector length. The elements of VECTOR1 starting at 00275 /// IDX are overwritten with VECTOR2. Elements IDX through 00276 /// vector_length(VECTOR2) must be valid VECTOR1 indices. 00277 INSERT_SUBVECTOR, 00278 00279 /// EXTRACT_SUBVECTOR(VECTOR, IDX) - Returns a subvector from VECTOR (an 00280 /// vector value) starting with the element number IDX, which must be a 00281 /// constant multiple of the result vector length. 00282 EXTRACT_SUBVECTOR, 00283 00284 /// VECTOR_SHUFFLE(VEC1, VEC2) - Returns a vector, of the same type as 00285 /// VEC1/VEC2. A VECTOR_SHUFFLE node also contains an array of constant int 00286 /// values that indicate which value (or undef) each result element will 00287 /// get. These constant ints are accessible through the 00288 /// ShuffleVectorSDNode class. This is quite similar to the Altivec 00289 /// 'vperm' instruction, except that the indices must be constants and are 00290 /// in terms of the element size of VEC1/VEC2, not in terms of bytes. 00291 VECTOR_SHUFFLE, 00292 00293 /// SCALAR_TO_VECTOR(VAL) - This represents the operation of loading a 00294 /// scalar value into element 0 of the resultant vector type. The top 00295 /// elements 1 to N-1 of the N-element vector are undefined. The type 00296 /// of the operand must match the vector element type, except when they 00297 /// are integer types. In this case the operand is allowed to be wider 00298 /// than the vector element type, and is implicitly truncated to it. 00299 SCALAR_TO_VECTOR, 00300 00301 /// MULHU/MULHS - Multiply high - Multiply two integers of type iN, 00302 /// producing an unsigned/signed value of type i[2*N], then return the top 00303 /// part. 00304 MULHU, MULHS, 00305 00306 /// Bitwise operators - logical and, logical or, logical xor. 00307 AND, OR, XOR, 00308 00309 /// Shift and rotation operations. After legalization, the type of the 00310 /// shift amount is known to be TLI.getShiftAmountTy(). Before legalization 00311 /// the shift amount can be any type, but care must be taken to ensure it is 00312 /// large enough. TLI.getShiftAmountTy() is i8 on some targets, but before 00313 /// legalization, types like i1024 can occur and i8 doesn't have enough bits 00314 /// to represent the shift amount. 00315 /// When the 1st operand is a vector, the shift amount must be in the same 00316 /// type. (TLI.getShiftAmountTy() will return the same type when the input 00317 /// type is a vector.) 00318 SHL, SRA, SRL, ROTL, ROTR, 00319 00320 /// Byte Swap and Counting operators. 00321 BSWAP, CTTZ, CTLZ, CTPOP, 00322 00323 /// Bit counting operators with an undefined result for zero inputs. 00324 CTTZ_ZERO_UNDEF, CTLZ_ZERO_UNDEF, 00325 00326 /// Select(COND, TRUEVAL, FALSEVAL). If the type of the boolean COND is not 00327 /// i1 then the high bits must conform to getBooleanContents. 00328 SELECT, 00329 00330 /// Select with a vector condition (op #0) and two vector operands (ops #1 00331 /// and #2), returning a vector result. All vectors have the same length. 00332 /// Much like the scalar select and setcc, each bit in the condition selects 00333 /// whether the corresponding result element is taken from op #1 or op #2. 00334 /// At first, the VSELECT condition is of vXi1 type. Later, targets may 00335 /// change the condition type in order to match the VSELECT node using a 00336 /// pattern. The condition follows the BooleanContent format of the target. 00337 VSELECT, 00338 00339 /// Select with condition operator - This selects between a true value and 00340 /// a false value (ops #2 and #3) based on the boolean result of comparing 00341 /// the lhs and rhs (ops #0 and #1) of a conditional expression with the 00342 /// condition code in op #4, a CondCodeSDNode. 00343 SELECT_CC, 00344 00345 /// SetCC operator - This evaluates to a true value iff the condition is 00346 /// true. If the result value type is not i1 then the high bits conform 00347 /// to getBooleanContents. The operands to this are the left and right 00348 /// operands to compare (ops #0, and #1) and the condition code to compare 00349 /// them with (op #2) as a CondCodeSDNode. If the operands are vector types 00350 /// then the result type must also be a vector type. 00351 SETCC, 00352 00353 /// SHL_PARTS/SRA_PARTS/SRL_PARTS - These operators are used for expanded 00354 /// integer shift operations, just like ADD/SUB_PARTS. The operation 00355 /// ordering is: 00356 /// [Lo,Hi] = op [LoLHS,HiLHS], Amt 00357 SHL_PARTS, SRA_PARTS, SRL_PARTS, 00358 00359 /// Conversion operators. These are all single input single output 00360 /// operations. For all of these, the result type must be strictly 00361 /// wider or narrower (depending on the operation) than the source 00362 /// type. 00363 00364 /// SIGN_EXTEND - Used for integer types, replicating the sign bit 00365 /// into new bits. 00366 SIGN_EXTEND, 00367 00368 /// ZERO_EXTEND - Used for integer types, zeroing the new bits. 00369 ZERO_EXTEND, 00370 00371 /// ANY_EXTEND - Used for integer types. The high bits are undefined. 00372 ANY_EXTEND, 00373 00374 /// TRUNCATE - Completely drop the high bits. 00375 TRUNCATE, 00376 00377 /// [SU]INT_TO_FP - These operators convert integers (whose interpreted sign 00378 /// depends on the first letter) to floating point. 00379 SINT_TO_FP, 00380 UINT_TO_FP, 00381 00382 /// SIGN_EXTEND_INREG - This operator atomically performs a SHL/SRA pair to 00383 /// sign extend a small value in a large integer register (e.g. sign 00384 /// extending the low 8 bits of a 32-bit register to fill the top 24 bits 00385 /// with the 7th bit). The size of the smaller type is indicated by the 1th 00386 /// operand, a ValueType node. 00387 SIGN_EXTEND_INREG, 00388 00389 /// FP_TO_[US]INT - Convert a floating point value to a signed or unsigned 00390 /// integer. 00391 FP_TO_SINT, 00392 FP_TO_UINT, 00393 00394 /// X = FP_ROUND(Y, TRUNC) - Rounding 'Y' from a larger floating point type 00395 /// down to the precision of the destination VT. TRUNC is a flag, which is 00396 /// always an integer that is zero or one. If TRUNC is 0, this is a 00397 /// normal rounding, if it is 1, this FP_ROUND is known to not change the 00398 /// value of Y. 00399 /// 00400 /// The TRUNC = 1 case is used in cases where we know that the value will 00401 /// not be modified by the node, because Y is not using any of the extra 00402 /// precision of source type. This allows certain transformations like 00403 /// FP_EXTEND(FP_ROUND(X,1)) -> X which are not safe for 00404 /// FP_EXTEND(FP_ROUND(X,0)) because the extra bits aren't removed. 00405 FP_ROUND, 00406 00407 /// FLT_ROUNDS_ - Returns current rounding mode: 00408 /// -1 Undefined 00409 /// 0 Round to 0 00410 /// 1 Round to nearest 00411 /// 2 Round to +inf 00412 /// 3 Round to -inf 00413 FLT_ROUNDS_, 00414 00415 /// X = FP_ROUND_INREG(Y, VT) - This operator takes an FP register, and 00416 /// rounds it to a floating point value. It then promotes it and returns it 00417 /// in a register of the same size. This operation effectively just 00418 /// discards excess precision. The type to round down to is specified by 00419 /// the VT operand, a VTSDNode. 00420 FP_ROUND_INREG, 00421 00422 /// X = FP_EXTEND(Y) - Extend a smaller FP type into a larger FP type. 00423 FP_EXTEND, 00424 00425 /// BITCAST - This operator converts between integer, vector and FP 00426 /// values, as if the value was stored to memory with one type and loaded 00427 /// from the same address with the other type (or equivalently for vector 00428 /// format conversions, etc). The source and result are required to have 00429 /// the same bit size (e.g. f32 <-> i32). This can also be used for 00430 /// int-to-int or fp-to-fp conversions, but that is a noop, deleted by 00431 /// getNode(). 00432 BITCAST, 00433 00434 /// CONVERT_RNDSAT - This operator is used to support various conversions 00435 /// between various types (float, signed, unsigned and vectors of those 00436 /// types) with rounding and saturation. NOTE: Avoid using this operator as 00437 /// most target don't support it and the operator might be removed in the 00438 /// future. It takes the following arguments: 00439 /// 0) value 00440 /// 1) dest type (type to convert to) 00441 /// 2) src type (type to convert from) 00442 /// 3) rounding imm 00443 /// 4) saturation imm 00444 /// 5) ISD::CvtCode indicating the type of conversion to do 00445 CONVERT_RNDSAT, 00446 00447 /// FP16_TO_FP32, FP32_TO_FP16 - These operators are used to perform 00448 /// promotions and truncation for half-precision (16 bit) floating 00449 /// numbers. We need special nodes since FP16 is a storage-only type with 00450 /// special semantics of operations. 00451 FP16_TO_FP32, FP32_TO_FP16, 00452 00453 /// FNEG, FABS, FSQRT, FSIN, FCOS, FPOWI, FPOW, 00454 /// FLOG, FLOG2, FLOG10, FEXP, FEXP2, 00455 /// FCEIL, FTRUNC, FRINT, FNEARBYINT, FFLOOR - Perform various unary 00456 /// floating point operations. These are inspired by libm. 00457 FNEG, FABS, FSQRT, FSIN, FCOS, FPOWI, FPOW, 00458 FLOG, FLOG2, FLOG10, FEXP, FEXP2, 00459 FCEIL, FTRUNC, FRINT, FNEARBYINT, FFLOOR, 00460 00461 /// FSINCOS - Compute both fsin and fcos as a single operation. 00462 FSINCOS, 00463 00464 /// LOAD and STORE have token chains as their first operand, then the same 00465 /// operands as an LLVM load/store instruction, then an offset node that 00466 /// is added / subtracted from the base pointer to form the address (for 00467 /// indexed memory ops). 00468 LOAD, STORE, 00469 00470 /// DYNAMIC_STACKALLOC - Allocate some number of bytes on the stack aligned 00471 /// to a specified boundary. This node always has two return values: a new 00472 /// stack pointer value and a chain. The first operand is the token chain, 00473 /// the second is the number of bytes to allocate, and the third is the 00474 /// alignment boundary. The size is guaranteed to be a multiple of the 00475 /// stack alignment, and the alignment is guaranteed to be bigger than the 00476 /// stack alignment (if required) or 0 to get standard stack alignment. 00477 DYNAMIC_STACKALLOC, 00478 00479 /// Control flow instructions. These all have token chains. 00480 00481 /// BR - Unconditional branch. The first operand is the chain 00482 /// operand, the second is the MBB to branch to. 00483 BR, 00484 00485 /// BRIND - Indirect branch. The first operand is the chain, the second 00486 /// is the value to branch to, which must be of the same type as the 00487 /// target's pointer type. 00488 BRIND, 00489 00490 /// BR_JT - Jumptable branch. The first operand is the chain, the second 00491 /// is the jumptable index, the last one is the jumptable entry index. 00492 BR_JT, 00493 00494 /// BRCOND - Conditional branch. The first operand is the chain, the 00495 /// second is the condition, the third is the block to branch to if the 00496 /// condition is true. If the type of the condition is not i1, then the 00497 /// high bits must conform to getBooleanContents. 00498 BRCOND, 00499 00500 /// BR_CC - Conditional branch. The behavior is like that of SELECT_CC, in 00501 /// that the condition is represented as condition code, and two nodes to 00502 /// compare, rather than as a combined SetCC node. The operands in order 00503 /// are chain, cc, lhs, rhs, block to branch to if condition is true. 00504 BR_CC, 00505 00506 /// INLINEASM - Represents an inline asm block. This node always has two 00507 /// return values: a chain and a flag result. The inputs are as follows: 00508 /// Operand #0 : Input chain. 00509 /// Operand #1 : a ExternalSymbolSDNode with a pointer to the asm string. 00510 /// Operand #2 : a MDNodeSDNode with the !srcloc metadata. 00511 /// Operand #3 : HasSideEffect, IsAlignStack bits. 00512 /// After this, it is followed by a list of operands with this format: 00513 /// ConstantSDNode: Flags that encode whether it is a mem or not, the 00514 /// of operands that follow, etc. See InlineAsm.h. 00515 /// ... however many operands ... 00516 /// Operand #last: Optional, an incoming flag. 00517 /// 00518 /// The variable width operands are required to represent target addressing 00519 /// modes as a single "operand", even though they may have multiple 00520 /// SDOperands. 00521 INLINEASM, 00522 00523 /// EH_LABEL - Represents a label in mid basic block used to track 00524 /// locations needed for debug and exception handling tables. These nodes 00525 /// take a chain as input and return a chain. 00526 EH_LABEL, 00527 00528 /// STACKSAVE - STACKSAVE has one operand, an input chain. It produces a 00529 /// value, the same type as the pointer type for the system, and an output 00530 /// chain. 00531 STACKSAVE, 00532 00533 /// STACKRESTORE has two operands, an input chain and a pointer to restore 00534 /// to it returns an output chain. 00535 STACKRESTORE, 00536 00537 /// CALLSEQ_START/CALLSEQ_END - These operators mark the beginning and end 00538 /// of a call sequence, and carry arbitrary information that target might 00539 /// want to know. The first operand is a chain, the rest are specified by 00540 /// the target and not touched by the DAG optimizers. 00541 /// CALLSEQ_START..CALLSEQ_END pairs may not be nested. 00542 CALLSEQ_START, // Beginning of a call sequence 00543 CALLSEQ_END, // End of a call sequence 00544 00545 /// VAARG - VAARG has four operands: an input chain, a pointer, a SRCVALUE, 00546 /// and the alignment. It returns a pair of values: the vaarg value and a 00547 /// new chain. 00548 VAARG, 00549 00550 /// VACOPY - VACOPY has 5 operands: an input chain, a destination pointer, 00551 /// a source pointer, a SRCVALUE for the destination, and a SRCVALUE for the 00552 /// source. 00553 VACOPY, 00554 00555 /// VAEND, VASTART - VAEND and VASTART have three operands: an input chain, 00556 /// pointer, and a SRCVALUE. 00557 VAEND, VASTART, 00558 00559 /// SRCVALUE - This is a node type that holds a Value* that is used to 00560 /// make reference to a value in the LLVM IR. 00561 SRCVALUE, 00562 00563 /// MDNODE_SDNODE - This is a node that holdes an MDNode*, which is used to 00564 /// reference metadata in the IR. 00565 MDNODE_SDNODE, 00566 00567 /// PCMARKER - This corresponds to the pcmarker intrinsic. 00568 PCMARKER, 00569 00570 /// READCYCLECOUNTER - This corresponds to the readcyclecounter intrinsic. 00571 /// The only operand is a chain and a value and a chain are produced. The 00572 /// value is the contents of the architecture specific cycle counter like 00573 /// register (or other high accuracy low latency clock source) 00574 READCYCLECOUNTER, 00575 00576 /// HANDLENODE node - Used as a handle for various purposes. 00577 HANDLENODE, 00578 00579 /// INIT_TRAMPOLINE - This corresponds to the init_trampoline intrinsic. It 00580 /// takes as input a token chain, the pointer to the trampoline, the pointer 00581 /// to the nested function, the pointer to pass for the 'nest' parameter, a 00582 /// SRCVALUE for the trampoline and another for the nested function 00583 /// (allowing targets to access the original Function*). 00584 /// It produces a token chain as output. 00585 INIT_TRAMPOLINE, 00586 00587 /// ADJUST_TRAMPOLINE - This corresponds to the adjust_trampoline intrinsic. 00588 /// It takes a pointer to the trampoline and produces a (possibly) new 00589 /// pointer to the same trampoline with platform-specific adjustments 00590 /// applied. The pointer it returns points to an executable block of code. 00591 ADJUST_TRAMPOLINE, 00592 00593 /// TRAP - Trapping instruction 00594 TRAP, 00595 00596 /// DEBUGTRAP - Trap intended to get the attention of a debugger. 00597 DEBUGTRAP, 00598 00599 /// PREFETCH - This corresponds to a prefetch intrinsic. The first operand 00600 /// is the chain. The other operands are the address to prefetch, 00601 /// read / write specifier, locality specifier and instruction / data cache 00602 /// specifier. 00603 PREFETCH, 00604 00605 /// OUTCHAIN = ATOMIC_FENCE(INCHAIN, ordering, scope) 00606 /// This corresponds to the fence instruction. It takes an input chain, and 00607 /// two integer constants: an AtomicOrdering and a SynchronizationScope. 00608 ATOMIC_FENCE, 00609 00610 /// Val, OUTCHAIN = ATOMIC_LOAD(INCHAIN, ptr) 00611 /// This corresponds to "load atomic" instruction. 00612 ATOMIC_LOAD, 00613 00614 /// OUTCHAIN = ATOMIC_LOAD(INCHAIN, ptr, val) 00615 /// This corresponds to "store atomic" instruction. 00616 ATOMIC_STORE, 00617 00618 /// Val, OUTCHAIN = ATOMIC_CMP_SWAP(INCHAIN, ptr, cmp, swap) 00619 /// This corresponds to the cmpxchg instruction. 00620 ATOMIC_CMP_SWAP, 00621 00622 /// Val, OUTCHAIN = ATOMIC_SWAP(INCHAIN, ptr, amt) 00623 /// Val, OUTCHAIN = ATOMIC_LOAD_[OpName](INCHAIN, ptr, amt) 00624 /// These correspond to the atomicrmw instruction. 00625 ATOMIC_SWAP, 00626 ATOMIC_LOAD_ADD, 00627 ATOMIC_LOAD_SUB, 00628 ATOMIC_LOAD_AND, 00629 ATOMIC_LOAD_OR, 00630 ATOMIC_LOAD_XOR, 00631 ATOMIC_LOAD_NAND, 00632 ATOMIC_LOAD_MIN, 00633 ATOMIC_LOAD_MAX, 00634 ATOMIC_LOAD_UMIN, 00635 ATOMIC_LOAD_UMAX, 00636 00637 /// This corresponds to the llvm.lifetime.* intrinsics. The first operand 00638 /// is the chain and the second operand is the alloca pointer. 00639 LIFETIME_START, LIFETIME_END, 00640 00641 /// BUILTIN_OP_END - This must be the last enum value in this list. 00642 /// The target-specific pre-isel opcode values start here. 00643 BUILTIN_OP_END 00644 }; 00645 00646 /// FIRST_TARGET_MEMORY_OPCODE - Target-specific pre-isel operations 00647 /// which do not reference a specific memory location should be less than 00648 /// this value. Those that do must not be less than this value, and can 00649 /// be used with SelectionDAG::getMemIntrinsicNode. 00650 static const int FIRST_TARGET_MEMORY_OPCODE = BUILTIN_OP_END+150; 00651 00652 //===--------------------------------------------------------------------===// 00653 /// MemIndexedMode enum - This enum defines the load / store indexed 00654 /// addressing modes. 00655 /// 00656 /// UNINDEXED "Normal" load / store. The effective address is already 00657 /// computed and is available in the base pointer. The offset 00658 /// operand is always undefined. In addition to producing a 00659 /// chain, an unindexed load produces one value (result of the 00660 /// load); an unindexed store does not produce a value. 00661 /// 00662 /// PRE_INC Similar to the unindexed mode where the effective address is 00663 /// PRE_DEC the value of the base pointer add / subtract the offset. 00664 /// It considers the computation as being folded into the load / 00665 /// store operation (i.e. the load / store does the address 00666 /// computation as well as performing the memory transaction). 00667 /// The base operand is always undefined. In addition to 00668 /// producing a chain, pre-indexed load produces two values 00669 /// (result of the load and the result of the address 00670 /// computation); a pre-indexed store produces one value (result 00671 /// of the address computation). 00672 /// 00673 /// POST_INC The effective address is the value of the base pointer. The 00674 /// POST_DEC value of the offset operand is then added to / subtracted 00675 /// from the base after memory transaction. In addition to 00676 /// producing a chain, post-indexed load produces two values 00677 /// (the result of the load and the result of the base +/- offset 00678 /// computation); a post-indexed store produces one value (the 00679 /// the result of the base +/- offset computation). 00680 enum MemIndexedMode { 00681 UNINDEXED = 0, 00682 PRE_INC, 00683 PRE_DEC, 00684 POST_INC, 00685 POST_DEC, 00686 LAST_INDEXED_MODE 00687 }; 00688 00689 //===--------------------------------------------------------------------===// 00690 /// LoadExtType enum - This enum defines the three variants of LOADEXT 00691 /// (load with extension). 00692 /// 00693 /// SEXTLOAD loads the integer operand and sign extends it to a larger 00694 /// integer result type. 00695 /// ZEXTLOAD loads the integer operand and zero extends it to a larger 00696 /// integer result type. 00697 /// EXTLOAD is used for two things: floating point extending loads and 00698 /// integer extending loads [the top bits are undefined]. 00699 enum LoadExtType { 00700 NON_EXTLOAD = 0, 00701 EXTLOAD, 00702 SEXTLOAD, 00703 ZEXTLOAD, 00704 LAST_LOADEXT_TYPE 00705 }; 00706 00707 //===--------------------------------------------------------------------===// 00708 /// ISD::CondCode enum - These are ordered carefully to make the bitfields 00709 /// below work out, when considering SETFALSE (something that never exists 00710 /// dynamically) as 0. "U" -> Unsigned (for integer operands) or Unordered 00711 /// (for floating point), "L" -> Less than, "G" -> Greater than, "E" -> Equal 00712 /// to. If the "N" column is 1, the result of the comparison is undefined if 00713 /// the input is a NAN. 00714 /// 00715 /// All of these (except for the 'always folded ops') should be handled for 00716 /// floating point. For integer, only the SETEQ,SETNE,SETLT,SETLE,SETGT, 00717 /// SETGE,SETULT,SETULE,SETUGT, and SETUGE opcodes are used. 00718 /// 00719 /// Note that these are laid out in a specific order to allow bit-twiddling 00720 /// to transform conditions. 00721 enum CondCode { 00722 // Opcode N U L G E Intuitive operation 00723 SETFALSE, // 0 0 0 0 Always false (always folded) 00724 SETOEQ, // 0 0 0 1 True if ordered and equal 00725 SETOGT, // 0 0 1 0 True if ordered and greater than 00726 SETOGE, // 0 0 1 1 True if ordered and greater than or equal 00727 SETOLT, // 0 1 0 0 True if ordered and less than 00728 SETOLE, // 0 1 0 1 True if ordered and less than or equal 00729 SETONE, // 0 1 1 0 True if ordered and operands are unequal 00730 SETO, // 0 1 1 1 True if ordered (no nans) 00731 SETUO, // 1 0 0 0 True if unordered: isnan(X) | isnan(Y) 00732 SETUEQ, // 1 0 0 1 True if unordered or equal 00733 SETUGT, // 1 0 1 0 True if unordered or greater than 00734 SETUGE, // 1 0 1 1 True if unordered, greater than, or equal 00735 SETULT, // 1 1 0 0 True if unordered or less than 00736 SETULE, // 1 1 0 1 True if unordered, less than, or equal 00737 SETUNE, // 1 1 1 0 True if unordered or not equal 00738 SETTRUE, // 1 1 1 1 Always true (always folded) 00739 // Don't care operations: undefined if the input is a nan. 00740 SETFALSE2, // 1 X 0 0 0 Always false (always folded) 00741 SETEQ, // 1 X 0 0 1 True if equal 00742 SETGT, // 1 X 0 1 0 True if greater than 00743 SETGE, // 1 X 0 1 1 True if greater than or equal 00744 SETLT, // 1 X 1 0 0 True if less than 00745 SETLE, // 1 X 1 0 1 True if less than or equal 00746 SETNE, // 1 X 1 1 0 True if not equal 00747 SETTRUE2, // 1 X 1 1 1 Always true (always folded) 00748 00749 SETCC_INVALID // Marker value. 00750 }; 00751 00752 /// isSignedIntSetCC - Return true if this is a setcc instruction that 00753 /// performs a signed comparison when used with integer operands. 00754 inline bool isSignedIntSetCC(CondCode Code) { 00755 return Code == SETGT || Code == SETGE || Code == SETLT || Code == SETLE; 00756 } 00757 00758 /// isUnsignedIntSetCC - Return true if this is a setcc instruction that 00759 /// performs an unsigned comparison when used with integer operands. 00760 inline bool isUnsignedIntSetCC(CondCode Code) { 00761 return Code == SETUGT || Code == SETUGE || Code == SETULT || Code == SETULE; 00762 } 00763 00764 /// isTrueWhenEqual - Return true if the specified condition returns true if 00765 /// the two operands to the condition are equal. Note that if one of the two 00766 /// operands is a NaN, this value is meaningless. 00767 inline bool isTrueWhenEqual(CondCode Cond) { 00768 return ((int)Cond & 1) != 0; 00769 } 00770 00771 /// getUnorderedFlavor - This function returns 0 if the condition is always 00772 /// false if an operand is a NaN, 1 if the condition is always true if the 00773 /// operand is a NaN, and 2 if the condition is undefined if the operand is a 00774 /// NaN. 00775 inline unsigned getUnorderedFlavor(CondCode Cond) { 00776 return ((int)Cond >> 3) & 3; 00777 } 00778 00779 /// getSetCCInverse - Return the operation corresponding to !(X op Y), where 00780 /// 'op' is a valid SetCC operation. 00781 CondCode getSetCCInverse(CondCode Operation, bool isInteger); 00782 00783 /// getSetCCSwappedOperands - Return the operation corresponding to (Y op X) 00784 /// when given the operation for (X op Y). 00785 CondCode getSetCCSwappedOperands(CondCode Operation); 00786 00787 /// getSetCCOrOperation - Return the result of a logical OR between different 00788 /// comparisons of identical values: ((X op1 Y) | (X op2 Y)). This 00789 /// function returns SETCC_INVALID if it is not possible to represent the 00790 /// resultant comparison. 00791 CondCode getSetCCOrOperation(CondCode Op1, CondCode Op2, bool isInteger); 00792 00793 /// getSetCCAndOperation - Return the result of a logical AND between 00794 /// different comparisons of identical values: ((X op1 Y) & (X op2 Y)). This 00795 /// function returns SETCC_INVALID if it is not possible to represent the 00796 /// resultant comparison. 00797 CondCode getSetCCAndOperation(CondCode Op1, CondCode Op2, bool isInteger); 00798 00799 //===--------------------------------------------------------------------===// 00800 /// CvtCode enum - This enum defines the various converts CONVERT_RNDSAT 00801 /// supports. 00802 enum CvtCode { 00803 CVT_FF, /// Float from Float 00804 CVT_FS, /// Float from Signed 00805 CVT_FU, /// Float from Unsigned 00806 CVT_SF, /// Signed from Float 00807 CVT_UF, /// Unsigned from Float 00808 CVT_SS, /// Signed from Signed 00809 CVT_SU, /// Signed from Unsigned 00810 CVT_US, /// Unsigned from Signed 00811 CVT_UU, /// Unsigned from Unsigned 00812 CVT_INVALID /// Marker - Invalid opcode 00813 }; 00814 00815 } // end llvm::ISD namespace 00816 00817 } // end llvm namespace 00818 00819 #endif