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