From aff492c6fd2f337d0811ed73fb9e266f16b79e8f Mon Sep 17 00:00:00 2001 From: Peter Zotov Date: Fri, 17 Oct 2014 01:02:34 +0000 Subject: [PATCH] [LLVM-C] Add LLVMInstructionClone. llvm-svn: 220007 --- llvm/include/llvm-c/Core.h | 10 ++++++++++ llvm/lib/IR/Core.cpp | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/llvm/include/llvm-c/Core.h b/llvm/include/llvm-c/Core.h index bfbc632..4f9da09 100644 --- a/llvm/include/llvm-c/Core.h +++ b/llvm/include/llvm-c/Core.h @@ -2409,6 +2409,16 @@ LLVMOpcode LLVMGetInstructionOpcode(LLVMValueRef Inst); LLVMIntPredicate LLVMGetICmpPredicate(LLVMValueRef Inst); /** + * Create a copy of 'this' instruction that is identical in all ways + * except the following: + * * The instruction has no parent + * * The instruction has no name + * + * @see llvm::Instruction::clone() + */ +LLVMValueRef LLVMInstructionClone(LLVMValueRef Inst); + +/** * @defgroup LLVMCCoreValueInstructionCall Call Sites and Invocations * * Functions in this group apply to instructions that refer to call diff --git a/llvm/lib/IR/Core.cpp b/llvm/lib/IR/Core.cpp index acf63a3..f1e1342 100644 --- a/llvm/lib/IR/Core.cpp +++ b/llvm/lib/IR/Core.cpp @@ -1888,6 +1888,12 @@ LLVMOpcode LLVMGetInstructionOpcode(LLVMValueRef Inst) { return (LLVMOpcode)0; } +LLVMValueRef LLVMInstructionClone(LLVMValueRef Inst) { + if (Instruction *C = dyn_cast(unwrap(Inst))) + return wrap(C->clone()); + return nullptr; +} + /*--.. Call and invoke instructions ........................................--*/ unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr) { -- 2.7.4