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