diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2019-01-19 10:01:25 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2019-01-19 10:01:25 +0000 |
commit | d8e91e46262bc44006913e6796843909f1ac7bcd (patch) | |
tree | 7d0c143d9b38190e0fa0180805389da22cd834c5 /lib/ExecutionEngine/Interpreter | |
parent | b7eb8e35e481a74962664b63dfb09483b200209a (diff) |
Notes
Diffstat (limited to 'lib/ExecutionEngine/Interpreter')
-rw-r--r-- | lib/ExecutionEngine/Interpreter/Execution.cpp | 13 | ||||
-rw-r--r-- | lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp | 8 |
2 files changed, 9 insertions, 12 deletions
diff --git a/lib/ExecutionEngine/Interpreter/Execution.cpp b/lib/ExecutionEngine/Interpreter/Execution.cpp index 39cf6d4a32a3..98dca1102759 100644 --- a/lib/ExecutionEngine/Interpreter/Execution.cpp +++ b/lib/ExecutionEngine/Interpreter/Execution.cpp @@ -1778,17 +1778,14 @@ void Interpreter::visitExtractElementInst(ExtractElementInst &I) { void Interpreter::visitInsertElementInst(InsertElementInst &I) { ExecutionContext &SF = ECStack.back(); - Type *Ty = I.getType(); - - if(!(Ty->isVectorTy()) ) - llvm_unreachable("Unhandled dest type for insertelement instruction"); + VectorType *Ty = cast<VectorType>(I.getType()); GenericValue Src1 = getOperandValue(I.getOperand(0), SF); GenericValue Src2 = getOperandValue(I.getOperand(1), SF); GenericValue Src3 = getOperandValue(I.getOperand(2), SF); GenericValue Dest; - Type *TyContained = Ty->getContainedType(0); + Type *TyContained = Ty->getElementType(); const unsigned indx = unsigned(Src3.IntVal.getZExtValue()); Dest.AggregateVal = Src1.AggregateVal; @@ -1814,9 +1811,7 @@ void Interpreter::visitInsertElementInst(InsertElementInst &I) { void Interpreter::visitShuffleVectorInst(ShuffleVectorInst &I){ ExecutionContext &SF = ECStack.back(); - Type *Ty = I.getType(); - if(!(Ty->isVectorTy())) - llvm_unreachable("Unhandled dest type for shufflevector instruction"); + VectorType *Ty = cast<VectorType>(I.getType()); GenericValue Src1 = getOperandValue(I.getOperand(0), SF); GenericValue Src2 = getOperandValue(I.getOperand(1), SF); @@ -1827,7 +1822,7 @@ void Interpreter::visitShuffleVectorInst(ShuffleVectorInst &I){ // bytecode can't contain different types for src1 and src2 for a // shufflevector instruction. - Type *TyContained = Ty->getContainedType(0); + Type *TyContained = Ty->getElementType(); unsigned src1Size = (unsigned)Src1.AggregateVal.size(); unsigned src2Size = (unsigned)Src2.AggregateVal.size(); unsigned src3Size = (unsigned)Src3.AggregateVal.size(); diff --git a/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp b/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp index 64dca930722e..334fcacf8078 100644 --- a/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp +++ b/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp @@ -103,8 +103,9 @@ static ExFunc lookupFunction(const Function *F) { // composite function name should be. std::string ExtName = "lle_"; FunctionType *FT = F->getFunctionType(); - for (unsigned i = 0, e = FT->getNumContainedTypes(); i != e; ++i) - ExtName += getTypeID(FT->getContainedType(i)); + ExtName += getTypeID(FT->getReturnType()); + for (Type *T : FT->params()) + ExtName += getTypeID(T); ExtName += ("_" + F->getName()).str(); sys::ScopedLock Writer(*FunctionsLock); @@ -227,7 +228,8 @@ static bool ffiInvoke(RawFunc Fn, Function *F, ArrayRef<GenericValue> ArgVals, Type *RetTy = FTy->getReturnType(); ffi_type *rtype = ffiTypeFor(RetTy); - if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, NumArgs, rtype, &args[0]) == FFI_OK) { + if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, NumArgs, rtype, args.data()) == + FFI_OK) { SmallVector<uint8_t, 128> ret; if (RetTy->getTypeID() != Type::VoidTyID) ret.resize(TD.getTypeStoreSize(RetTy)); |