1249259Sdim//===-- llvm/Instruction.def - File that describes Instructions -*- C++ -*-===// 2249259Sdim// 3249259Sdim// The LLVM Compiler Infrastructure 4249259Sdim// 5249259Sdim// This file is distributed under the University of Illinois Open Source 6249259Sdim// License. See LICENSE.TXT for details. 7249259Sdim// 8249259Sdim//===----------------------------------------------------------------------===// 9249259Sdim// 10249259Sdim// This file contains descriptions of the various LLVM instructions. This is 11249259Sdim// used as a central place for enumerating the different instructions and 12249259Sdim// should eventually be the place to put comments about the instructions. 13249259Sdim// 14249259Sdim//===----------------------------------------------------------------------===// 15249259Sdim 16249259Sdim// NOTE: NO INCLUDE GUARD DESIRED! 17249259Sdim 18249259Sdim// Provide definitions of macros so that users of this file do not have to 19249259Sdim// define everything to use it... 20249259Sdim// 21249259Sdim#ifndef FIRST_TERM_INST 22249259Sdim#define FIRST_TERM_INST(num) 23249259Sdim#endif 24249259Sdim#ifndef HANDLE_TERM_INST 25249259Sdim#ifndef HANDLE_INST 26249259Sdim#define HANDLE_TERM_INST(num, opcode, Class) 27249259Sdim#else 28249259Sdim#define HANDLE_TERM_INST(num, opcode, Class) HANDLE_INST(num, opcode, Class) 29249259Sdim#endif 30249259Sdim#endif 31249259Sdim#ifndef LAST_TERM_INST 32249259Sdim#define LAST_TERM_INST(num) 33249259Sdim#endif 34249259Sdim 35249259Sdim#ifndef FIRST_BINARY_INST 36249259Sdim#define FIRST_BINARY_INST(num) 37249259Sdim#endif 38249259Sdim#ifndef HANDLE_BINARY_INST 39249259Sdim#ifndef HANDLE_INST 40249259Sdim#define HANDLE_BINARY_INST(num, opcode, instclass) 41249259Sdim#else 42249259Sdim#define HANDLE_BINARY_INST(num, opcode, Class) HANDLE_INST(num, opcode, Class) 43249259Sdim#endif 44249259Sdim#endif 45249259Sdim#ifndef LAST_BINARY_INST 46249259Sdim#define LAST_BINARY_INST(num) 47249259Sdim#endif 48249259Sdim 49249259Sdim#ifndef FIRST_MEMORY_INST 50249259Sdim#define FIRST_MEMORY_INST(num) 51249259Sdim#endif 52249259Sdim#ifndef HANDLE_MEMORY_INST 53249259Sdim#ifndef HANDLE_INST 54249259Sdim#define HANDLE_MEMORY_INST(num, opcode, Class) 55249259Sdim#else 56249259Sdim#define HANDLE_MEMORY_INST(num, opcode, Class) HANDLE_INST(num, opcode, Class) 57249259Sdim#endif 58249259Sdim#endif 59249259Sdim#ifndef LAST_MEMORY_INST 60249259Sdim#define LAST_MEMORY_INST(num) 61249259Sdim#endif 62249259Sdim 63249259Sdim#ifndef FIRST_CAST_INST 64249259Sdim#define FIRST_CAST_INST(num) 65249259Sdim#endif 66249259Sdim#ifndef HANDLE_CAST_INST 67249259Sdim#ifndef HANDLE_INST 68249259Sdim#define HANDLE_CAST_INST(num, opcode, Class) 69249259Sdim#else 70249259Sdim#define HANDLE_CAST_INST(num, opcode, Class) HANDLE_INST(num, opcode, Class) 71249259Sdim#endif 72249259Sdim#endif 73249259Sdim#ifndef LAST_CAST_INST 74249259Sdim#define LAST_CAST_INST(num) 75249259Sdim#endif 76249259Sdim 77249259Sdim#ifndef FIRST_OTHER_INST 78249259Sdim#define FIRST_OTHER_INST(num) 79249259Sdim#endif 80249259Sdim#ifndef HANDLE_OTHER_INST 81249259Sdim#ifndef HANDLE_INST 82249259Sdim#define HANDLE_OTHER_INST(num, opcode, Class) 83249259Sdim#else 84249259Sdim#define HANDLE_OTHER_INST(num, opcode, Class) HANDLE_INST(num, opcode, Class) 85249259Sdim#endif 86249259Sdim#endif 87249259Sdim#ifndef LAST_OTHER_INST 88249259Sdim#define LAST_OTHER_INST(num) 89249259Sdim#endif 90249259Sdim 91249259Sdim 92249259Sdim// Terminator Instructions - These instructions are used to terminate a basic 93249259Sdim// block of the program. Every basic block must end with one of these 94249259Sdim// instructions for it to be a well formed basic block. 95249259Sdim// 96249259Sdim FIRST_TERM_INST ( 1) 97249259SdimHANDLE_TERM_INST ( 1, Ret , ReturnInst) 98249259SdimHANDLE_TERM_INST ( 2, Br , BranchInst) 99249259SdimHANDLE_TERM_INST ( 3, Switch , SwitchInst) 100249259SdimHANDLE_TERM_INST ( 4, IndirectBr , IndirectBrInst) 101249259SdimHANDLE_TERM_INST ( 5, Invoke , InvokeInst) 102249259SdimHANDLE_TERM_INST ( 6, Resume , ResumeInst) 103249259SdimHANDLE_TERM_INST ( 7, Unreachable, UnreachableInst) 104249259Sdim LAST_TERM_INST ( 7) 105249259Sdim 106249259Sdim// Standard binary operators... 107249259Sdim FIRST_BINARY_INST( 8) 108249259SdimHANDLE_BINARY_INST( 8, Add , BinaryOperator) 109249259SdimHANDLE_BINARY_INST( 9, FAdd , BinaryOperator) 110249259SdimHANDLE_BINARY_INST(10, Sub , BinaryOperator) 111249259SdimHANDLE_BINARY_INST(11, FSub , BinaryOperator) 112249259SdimHANDLE_BINARY_INST(12, Mul , BinaryOperator) 113249259SdimHANDLE_BINARY_INST(13, FMul , BinaryOperator) 114249259SdimHANDLE_BINARY_INST(14, UDiv , BinaryOperator) 115249259SdimHANDLE_BINARY_INST(15, SDiv , BinaryOperator) 116249259SdimHANDLE_BINARY_INST(16, FDiv , BinaryOperator) 117249259SdimHANDLE_BINARY_INST(17, URem , BinaryOperator) 118249259SdimHANDLE_BINARY_INST(18, SRem , BinaryOperator) 119249259SdimHANDLE_BINARY_INST(19, FRem , BinaryOperator) 120249259Sdim 121249259Sdim// Logical operators (integer operands) 122249259SdimHANDLE_BINARY_INST(20, Shl , BinaryOperator) // Shift left (logical) 123249259SdimHANDLE_BINARY_INST(21, LShr , BinaryOperator) // Shift right (logical) 124249259SdimHANDLE_BINARY_INST(22, AShr , BinaryOperator) // Shift right (arithmetic) 125249259SdimHANDLE_BINARY_INST(23, And , BinaryOperator) 126249259SdimHANDLE_BINARY_INST(24, Or , BinaryOperator) 127249259SdimHANDLE_BINARY_INST(25, Xor , BinaryOperator) 128249259Sdim LAST_BINARY_INST(25) 129249259Sdim 130249259Sdim// Memory operators... 131249259Sdim FIRST_MEMORY_INST(26) 132249259SdimHANDLE_MEMORY_INST(26, Alloca, AllocaInst) // Stack management 133249259SdimHANDLE_MEMORY_INST(27, Load , LoadInst ) // Memory manipulation instrs 134249259SdimHANDLE_MEMORY_INST(28, Store , StoreInst ) 135249259SdimHANDLE_MEMORY_INST(29, GetElementPtr, GetElementPtrInst) 136249259SdimHANDLE_MEMORY_INST(30, Fence , FenceInst ) 137249259SdimHANDLE_MEMORY_INST(31, AtomicCmpXchg , AtomicCmpXchgInst ) 138249259SdimHANDLE_MEMORY_INST(32, AtomicRMW , AtomicRMWInst ) 139249259Sdim LAST_MEMORY_INST(32) 140249259Sdim 141249259Sdim// Cast operators ... 142249259Sdim// NOTE: The order matters here because CastInst::isEliminableCastPair 143249259Sdim// NOTE: (see Instructions.cpp) encodes a table based on this ordering. 144249259Sdim FIRST_CAST_INST(33) 145249259SdimHANDLE_CAST_INST(33, Trunc , TruncInst ) // Truncate integers 146249259SdimHANDLE_CAST_INST(34, ZExt , ZExtInst ) // Zero extend integers 147249259SdimHANDLE_CAST_INST(35, SExt , SExtInst ) // Sign extend integers 148249259SdimHANDLE_CAST_INST(36, FPToUI , FPToUIInst ) // floating point -> UInt 149249259SdimHANDLE_CAST_INST(37, FPToSI , FPToSIInst ) // floating point -> SInt 150249259SdimHANDLE_CAST_INST(38, UIToFP , UIToFPInst ) // UInt -> floating point 151249259SdimHANDLE_CAST_INST(39, SIToFP , SIToFPInst ) // SInt -> floating point 152249259SdimHANDLE_CAST_INST(40, FPTrunc , FPTruncInst ) // Truncate floating point 153249259SdimHANDLE_CAST_INST(41, FPExt , FPExtInst ) // Extend floating point 154249259SdimHANDLE_CAST_INST(42, PtrToInt, PtrToIntInst) // Pointer -> Integer 155249259SdimHANDLE_CAST_INST(43, IntToPtr, IntToPtrInst) // Integer -> Pointer 156249259SdimHANDLE_CAST_INST(44, BitCast , BitCastInst ) // Type cast 157263508SdimHANDLE_CAST_INST(45, AddrSpaceCast, AddrSpaceCastInst) // addrspace cast 158263508Sdim LAST_CAST_INST(45) 159249259Sdim 160249259Sdim// Other operators... 161263508Sdim FIRST_OTHER_INST(46) 162263508SdimHANDLE_OTHER_INST(46, ICmp , ICmpInst ) // Integer comparison instruction 163263508SdimHANDLE_OTHER_INST(47, FCmp , FCmpInst ) // Floating point comparison instr. 164263508SdimHANDLE_OTHER_INST(48, PHI , PHINode ) // PHI node instruction 165263508SdimHANDLE_OTHER_INST(49, Call , CallInst ) // Call a function 166263508SdimHANDLE_OTHER_INST(50, Select , SelectInst ) // select instruction 167263508SdimHANDLE_OTHER_INST(51, UserOp1, Instruction) // May be used internally in a pass 168263508SdimHANDLE_OTHER_INST(52, UserOp2, Instruction) // Internal to passes only 169263508SdimHANDLE_OTHER_INST(53, VAArg , VAArgInst ) // vaarg instruction 170263508SdimHANDLE_OTHER_INST(54, ExtractElement, ExtractElementInst)// extract from vector 171263508SdimHANDLE_OTHER_INST(55, InsertElement, InsertElementInst) // insert into vector 172263508SdimHANDLE_OTHER_INST(56, ShuffleVector, ShuffleVectorInst) // shuffle two vectors. 173263508SdimHANDLE_OTHER_INST(57, ExtractValue, ExtractValueInst)// extract from aggregate 174263508SdimHANDLE_OTHER_INST(58, InsertValue, InsertValueInst) // insert into aggregate 175263508SdimHANDLE_OTHER_INST(59, LandingPad, LandingPadInst) // Landing pad instruction. 176263508Sdim LAST_OTHER_INST(59) 177249259Sdim 178249259Sdim#undef FIRST_TERM_INST 179249259Sdim#undef HANDLE_TERM_INST 180249259Sdim#undef LAST_TERM_INST 181249259Sdim 182249259Sdim#undef FIRST_BINARY_INST 183249259Sdim#undef HANDLE_BINARY_INST 184249259Sdim#undef LAST_BINARY_INST 185249259Sdim 186249259Sdim#undef FIRST_MEMORY_INST 187249259Sdim#undef HANDLE_MEMORY_INST 188249259Sdim#undef LAST_MEMORY_INST 189249259Sdim 190249259Sdim#undef FIRST_CAST_INST 191249259Sdim#undef HANDLE_CAST_INST 192249259Sdim#undef LAST_CAST_INST 193249259Sdim 194249259Sdim#undef FIRST_OTHER_INST 195249259Sdim#undef HANDLE_OTHER_INST 196249259Sdim#undef LAST_OTHER_INST 197249259Sdim 198249259Sdim#ifdef HANDLE_INST 199249259Sdim#undef HANDLE_INST 200249259Sdim#endif 201