From fee31b3610b16005d577558ecdcfec2e994a8106 Mon Sep 17 00:00:00 2001 From: Robert Bocchino Date: Tue, 10 Jan 2006 19:04:39 +0000 Subject: [PATCH] Added bytecode support for the extractelement operation. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25178 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Bytecode/Reader/Reader.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/Bytecode/Reader/Reader.cpp b/lib/Bytecode/Reader/Reader.cpp index c97b9a824c8..5e6550215bf 100644 --- a/lib/Bytecode/Reader/Reader.cpp +++ b/lib/Bytecode/Reader/Reader.cpp @@ -717,6 +717,13 @@ void BytecodeReader::ParseInstruction(std::vector &Oprnds, Result = new VAArgInst(foo, getSanitizedType(Oprnds[1])); break; } + case Instruction::ExtractElement: { + if (Oprnds.size() != 2) + throw std::string("Invalid extractelement instruction!"); + Result = new ExtractElementInst(getValue(iType, Oprnds[0]), + getValue(Type::UIntTyID, Oprnds[1])); + break; + } case Instruction::Cast: Result = new CastInst(getValue(iType, Oprnds[0]), getSanitizedType(Oprnds[1])); @@ -1441,6 +1448,12 @@ Constant *BytecodeReader::ParseConstantValue(unsigned TypeID) { ArgVec[2]); if (Handler) Handler->handleConstantExpression(Opcode, ArgVec, Result); return Result; + } else if (Opcode == Instruction::ExtractElement) { + if (ArgVec.size() != 2) + error("ExtractElement instruction must have two arguments."); + Constant* Result = ConstantExpr::getExtractElement(ArgVec[0], ArgVec[1]); + if (Handler) Handler->handleConstantExpression(Opcode, ArgVec, Result); + return Result; } else { // All other 2-operand expressions Constant* Result = ConstantExpr::get(Opcode, ArgVec[0], ArgVec[1]); if (Handler) Handler->handleConstantExpression(Opcode, ArgVec, Result);