Back to home page

EIC code displayed by LXR

 
 

    


Warning, /include/llvm/IR/Instruction.def is written in an unsupported language. File is not indexed.

0001 //===-- llvm/Instruction.def - File that describes Instructions -*- C++ -*-===//
0002 //
0003 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
0004 // See https://llvm.org/LICENSE.txt for license information.
0005 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
0006 //
0007 //===----------------------------------------------------------------------===//
0008 //
0009 // This file contains descriptions of the various LLVM instructions.  This is
0010 // used as a central place for enumerating the different instructions and
0011 // should eventually be the place to put comments about the instructions.
0012 //
0013 //===----------------------------------------------------------------------===//
0014 
0015 // NOTE: NO INCLUDE GUARD DESIRED!
0016 
0017 // Provide definitions of macros so that users of this file do not have to
0018 // define everything to use it...
0019 //
0020 #ifndef FIRST_TERM_INST
0021 #define FIRST_TERM_INST(num)
0022 #endif
0023 #ifndef HANDLE_TERM_INST
0024 #ifndef HANDLE_INST
0025 #define HANDLE_TERM_INST(num, opcode, Class)
0026 #else
0027 #define HANDLE_TERM_INST(num, opcode, Class) HANDLE_INST(num, opcode, Class)
0028 #endif
0029 #endif
0030 #ifndef LAST_TERM_INST
0031 #define LAST_TERM_INST(num)
0032 #endif
0033 
0034 #ifndef FIRST_UNARY_INST
0035 #define FIRST_UNARY_INST(num)
0036 #endif
0037 #ifndef HANDLE_UNARY_INST
0038 #ifndef HANDLE_INST
0039 #define HANDLE_UNARY_INST(num, opcode, instclass)
0040 #else
0041 #define HANDLE_UNARY_INST(num, opcode, Class) HANDLE_INST(num, opcode, Class)
0042 #endif
0043 #endif
0044 #ifndef LAST_UNARY_INST
0045 #define LAST_UNARY_INST(num)
0046 #endif
0047 
0048 #ifndef FIRST_BINARY_INST
0049 #define FIRST_BINARY_INST(num)
0050 #endif
0051 #ifndef HANDLE_BINARY_INST
0052 #ifndef HANDLE_INST
0053 #define HANDLE_BINARY_INST(num, opcode, instclass)
0054 #else
0055 #define HANDLE_BINARY_INST(num, opcode, Class) HANDLE_INST(num, opcode, Class)
0056 #endif
0057 #endif
0058 #ifndef LAST_BINARY_INST
0059 #define LAST_BINARY_INST(num)
0060 #endif
0061 
0062 #ifndef FIRST_MEMORY_INST
0063 #define FIRST_MEMORY_INST(num)
0064 #endif
0065 #ifndef HANDLE_MEMORY_INST
0066 #ifndef HANDLE_INST
0067 #define HANDLE_MEMORY_INST(num, opcode, Class)
0068 #else
0069 #define HANDLE_MEMORY_INST(num, opcode, Class) HANDLE_INST(num, opcode, Class)
0070 #endif
0071 #endif
0072 #ifndef LAST_MEMORY_INST
0073 #define LAST_MEMORY_INST(num)
0074 #endif
0075 
0076 #ifndef FIRST_CAST_INST
0077 #define FIRST_CAST_INST(num)
0078 #endif
0079 #ifndef HANDLE_CAST_INST
0080 #ifndef HANDLE_INST
0081 #define HANDLE_CAST_INST(num, opcode, Class)
0082 #else
0083 #define HANDLE_CAST_INST(num, opcode, Class) HANDLE_INST(num, opcode, Class)
0084 #endif
0085 #endif
0086 #ifndef LAST_CAST_INST
0087 #define LAST_CAST_INST(num)
0088 #endif
0089 
0090 #ifndef FIRST_FUNCLETPAD_INST
0091 #define FIRST_FUNCLETPAD_INST(num)
0092 #endif
0093 #ifndef HANDLE_FUNCLETPAD_INST
0094 #ifndef HANDLE_INST
0095 #define HANDLE_FUNCLETPAD_INST(num, opcode, Class)
0096 #else
0097 #define HANDLE_FUNCLETPAD_INST(num, opcode, Class) HANDLE_INST(num, opcode, Class)
0098 #endif
0099 #endif
0100 #ifndef LAST_FUNCLETPAD_INST
0101 #define LAST_FUNCLETPAD_INST(num)
0102 #endif
0103 
0104 #ifndef FIRST_OTHER_INST
0105 #define FIRST_OTHER_INST(num)
0106 #endif
0107 #ifndef HANDLE_OTHER_INST
0108 #ifndef HANDLE_INST
0109 #define HANDLE_OTHER_INST(num, opcode, Class)
0110 #else
0111 #define HANDLE_OTHER_INST(num, opcode, Class) HANDLE_INST(num, opcode, Class)
0112 #endif
0113 #endif
0114 #ifndef LAST_OTHER_INST
0115 #define LAST_OTHER_INST(num)
0116 #endif
0117 
0118 #ifndef HANDLE_USER_INST
0119 #define HANDLE_USER_INST(num, opc, Class) HANDLE_OTHER_INST(num, opc, Class)
0120 #endif
0121 
0122 // Terminator Instructions - These instructions are used to terminate a basic
0123 // block of the program.   Every basic block must end with one of these
0124 // instructions for it to be a well formed basic block.
0125 //
0126  FIRST_TERM_INST  ( 1)
0127 HANDLE_TERM_INST  ( 1, Ret           , ReturnInst)
0128 HANDLE_TERM_INST  ( 2, Br            , BranchInst)
0129 HANDLE_TERM_INST  ( 3, Switch        , SwitchInst)
0130 HANDLE_TERM_INST  ( 4, IndirectBr    , IndirectBrInst)
0131 HANDLE_TERM_INST  ( 5, Invoke        , InvokeInst)
0132 HANDLE_TERM_INST  ( 6, Resume        , ResumeInst)
0133 HANDLE_TERM_INST  ( 7, Unreachable   , UnreachableInst)
0134 HANDLE_TERM_INST  ( 8, CleanupRet    , CleanupReturnInst)
0135 HANDLE_TERM_INST  ( 9, CatchRet      , CatchReturnInst)
0136 HANDLE_TERM_INST  (10, CatchSwitch   , CatchSwitchInst)
0137 HANDLE_TERM_INST  (11, CallBr        , CallBrInst) // A call-site terminator
0138   LAST_TERM_INST  (11)
0139 
0140 // Standard unary operators...
0141  FIRST_UNARY_INST(12)
0142 HANDLE_UNARY_INST(12, FNeg  , UnaryOperator)
0143   LAST_UNARY_INST(12)
0144 
0145 // Standard binary operators...
0146  FIRST_BINARY_INST(13)
0147 HANDLE_BINARY_INST(13, Add  , BinaryOperator)
0148 HANDLE_BINARY_INST(14, FAdd , BinaryOperator)
0149 HANDLE_BINARY_INST(15, Sub  , BinaryOperator)
0150 HANDLE_BINARY_INST(16, FSub , BinaryOperator)
0151 HANDLE_BINARY_INST(17, Mul  , BinaryOperator)
0152 HANDLE_BINARY_INST(18, FMul , BinaryOperator)
0153 HANDLE_BINARY_INST(19, UDiv , BinaryOperator)
0154 HANDLE_BINARY_INST(20, SDiv , BinaryOperator)
0155 HANDLE_BINARY_INST(21, FDiv , BinaryOperator)
0156 HANDLE_BINARY_INST(22, URem , BinaryOperator)
0157 HANDLE_BINARY_INST(23, SRem , BinaryOperator)
0158 HANDLE_BINARY_INST(24, FRem , BinaryOperator)
0159 
0160 // Logical operators (integer operands)
0161 HANDLE_BINARY_INST(25, Shl  , BinaryOperator) // Shift left  (logical)
0162 HANDLE_BINARY_INST(26, LShr , BinaryOperator) // Shift right (logical)
0163 HANDLE_BINARY_INST(27, AShr , BinaryOperator) // Shift right (arithmetic)
0164 HANDLE_BINARY_INST(28, And  , BinaryOperator)
0165 HANDLE_BINARY_INST(29, Or   , BinaryOperator)
0166 HANDLE_BINARY_INST(30, Xor  , BinaryOperator)
0167   LAST_BINARY_INST(30)
0168 
0169 // Memory operators...
0170  FIRST_MEMORY_INST(31)
0171 HANDLE_MEMORY_INST(31, Alloca, AllocaInst)  // Stack management
0172 HANDLE_MEMORY_INST(32, Load  , LoadInst  )  // Memory manipulation instrs
0173 HANDLE_MEMORY_INST(33, Store , StoreInst )
0174 HANDLE_MEMORY_INST(34, GetElementPtr, GetElementPtrInst)
0175 HANDLE_MEMORY_INST(35, Fence , FenceInst )
0176 HANDLE_MEMORY_INST(36, AtomicCmpXchg , AtomicCmpXchgInst )
0177 HANDLE_MEMORY_INST(37, AtomicRMW , AtomicRMWInst )
0178   LAST_MEMORY_INST(37)
0179 
0180 // Cast operators ...
0181 // NOTE: The order matters here because CastInst::isEliminableCastPair
0182 // NOTE: (see Instructions.cpp) encodes a table based on this ordering.
0183  FIRST_CAST_INST(38)
0184 HANDLE_CAST_INST(38, Trunc   , TruncInst   )  // Truncate integers
0185 HANDLE_CAST_INST(39, ZExt    , ZExtInst    )  // Zero extend integers
0186 HANDLE_CAST_INST(40, SExt    , SExtInst    )  // Sign extend integers
0187 HANDLE_CAST_INST(41, FPToUI  , FPToUIInst  )  // floating point -> UInt
0188 HANDLE_CAST_INST(42, FPToSI  , FPToSIInst  )  // floating point -> SInt
0189 HANDLE_CAST_INST(43, UIToFP  , UIToFPInst  )  // UInt -> floating point
0190 HANDLE_CAST_INST(44, SIToFP  , SIToFPInst  )  // SInt -> floating point
0191 HANDLE_CAST_INST(45, FPTrunc , FPTruncInst )  // Truncate floating point
0192 HANDLE_CAST_INST(46, FPExt   , FPExtInst   )  // Extend floating point
0193 HANDLE_CAST_INST(47, PtrToInt, PtrToIntInst)  // Pointer -> Integer
0194 HANDLE_CAST_INST(48, IntToPtr, IntToPtrInst)  // Integer -> Pointer
0195 HANDLE_CAST_INST(49, BitCast , BitCastInst )  // Type cast
0196 HANDLE_CAST_INST(50, AddrSpaceCast, AddrSpaceCastInst)  // addrspace cast
0197   LAST_CAST_INST(50)
0198 
0199  FIRST_FUNCLETPAD_INST(51)
0200 HANDLE_FUNCLETPAD_INST(51, CleanupPad, CleanupPadInst)
0201 HANDLE_FUNCLETPAD_INST(52, CatchPad  , CatchPadInst)
0202   LAST_FUNCLETPAD_INST(52)
0203 
0204 // Other operators...
0205  FIRST_OTHER_INST(53)
0206 HANDLE_OTHER_INST(53, ICmp   , ICmpInst   )  // Integer comparison instruction
0207 HANDLE_OTHER_INST(54, FCmp   , FCmpInst   )  // Floating point comparison instr.
0208 HANDLE_OTHER_INST(55, PHI    , PHINode    )  // PHI node instruction
0209 HANDLE_OTHER_INST(56, Call   , CallInst   )  // Call a function
0210 HANDLE_OTHER_INST(57, Select , SelectInst )  // select instruction
0211 HANDLE_USER_INST (58, UserOp1, Instruction)  // May be used internally in a pass
0212 HANDLE_USER_INST (59, UserOp2, Instruction)  // Internal to passes only
0213 HANDLE_OTHER_INST(60, VAArg  , VAArgInst  )  // vaarg instruction
0214 HANDLE_OTHER_INST(61, ExtractElement, ExtractElementInst)// extract from vector
0215 HANDLE_OTHER_INST(62, InsertElement, InsertElementInst)  // insert into vector
0216 HANDLE_OTHER_INST(63, ShuffleVector, ShuffleVectorInst)  // shuffle two vectors.
0217 HANDLE_OTHER_INST(64, ExtractValue, ExtractValueInst)// extract from aggregate
0218 HANDLE_OTHER_INST(65, InsertValue, InsertValueInst)  // insert into aggregate
0219 HANDLE_OTHER_INST(66, LandingPad, LandingPadInst)  // Landing pad instruction.
0220 HANDLE_OTHER_INST(67, Freeze, FreezeInst) // Freeze instruction.
0221   LAST_OTHER_INST(67)
0222 
0223 #undef  FIRST_TERM_INST
0224 #undef HANDLE_TERM_INST
0225 #undef   LAST_TERM_INST
0226 
0227 #undef  FIRST_UNARY_INST
0228 #undef HANDLE_UNARY_INST
0229 #undef   LAST_UNARY_INST
0230 
0231 #undef  FIRST_BINARY_INST
0232 #undef HANDLE_BINARY_INST
0233 #undef   LAST_BINARY_INST
0234 
0235 #undef  FIRST_MEMORY_INST
0236 #undef HANDLE_MEMORY_INST
0237 #undef   LAST_MEMORY_INST
0238 
0239 #undef  FIRST_CAST_INST
0240 #undef HANDLE_CAST_INST
0241 #undef   LAST_CAST_INST
0242 
0243 #undef  FIRST_FUNCLETPAD_INST
0244 #undef HANDLE_FUNCLETPAD_INST
0245 #undef   LAST_FUNCLETPAD_INST
0246 
0247 #undef  FIRST_OTHER_INST
0248 #undef HANDLE_OTHER_INST
0249 #undef   LAST_OTHER_INST
0250 
0251 #undef HANDLE_USER_INST
0252 
0253 #ifdef HANDLE_INST
0254 #undef HANDLE_INST
0255 #endif