- FIRST_MEMORY_INST(23)
-HANDLE_MEMORY_INST(23, Malloc, MallocInst) // Heap management instructions
-HANDLE_MEMORY_INST(24, Free , FreeInst )
-HANDLE_MEMORY_INST(25, Alloca, AllocaInst) // Stack management
-HANDLE_MEMORY_INST(26, Load , LoadInst ) // Memory manipulation instrs
-HANDLE_MEMORY_INST(27, Store , StoreInst )
-HANDLE_MEMORY_INST(28, GetElementPtr, GetElementPtrInst)
- LAST_MEMORY_INST(28)
+ FIRST_MEMORY_INST(22)
+HANDLE_MEMORY_INST(22, Malloc, MallocInst) // Heap management instructions
+HANDLE_MEMORY_INST(23, Free , FreeInst )
+HANDLE_MEMORY_INST(24, Alloca, AllocaInst) // Stack management
+HANDLE_MEMORY_INST(25, Load , LoadInst ) // Memory manipulation instrs
+HANDLE_MEMORY_INST(26, Store , StoreInst )
+HANDLE_MEMORY_INST(27, GetElementPtr, GetElementPtrInst)
+ LAST_MEMORY_INST(27)
+
+// Cast operators ...
+// NOTE: The order matters here because CastInst::isEliminableCastPair
+// NOTE: (see Instructions.cpp) encodes a table based on this ordering.
+ FIRST_CAST_INST(28)
+HANDLE_CAST_INST(28, Trunc , TruncInst ) // Truncate integers
+HANDLE_CAST_INST(29, ZExt , ZExtInst ) // Zero extend integers
+HANDLE_CAST_INST(30, SExt , SExtInst ) // Sign extend integers
+HANDLE_CAST_INST(31, FPToUI , FPToUIInst ) // floating point -> UInt
+HANDLE_CAST_INST(32, FPToSI , FPToSIInst ) // floating point -> SInt
+HANDLE_CAST_INST(33, UIToFP , UIToFPInst ) // UInt -> floating point
+HANDLE_CAST_INST(34, SIToFP , SIToFPInst ) // SInt -> floating point
+HANDLE_CAST_INST(35, FPTrunc , FPTruncInst ) // Truncate floating point
+HANDLE_CAST_INST(36, FPExt , FPExtInst ) // Extend floating point
+HANDLE_CAST_INST(37, PtrToInt, PtrToIntInst) // Pointer -> Integer
+HANDLE_CAST_INST(38, IntToPtr, IntToPtrInst) // Integer -> Pointer
+HANDLE_CAST_INST(39, BitCast , BitCastInst ) // Type cast
+ LAST_CAST_INST(39)