From cb76f395d7ab8e872ce20c7585260c42f740e794 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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220007 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm-c/Core.h | 10 ++++++++++ lib/IR/Core.cpp | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/include/llvm-c/Core.h b/include/llvm-c/Core.h index bfbc6322902..4f9da09a6d8 100644 --- a/include/llvm-c/Core.h +++ b/include/llvm-c/Core.h @@ -2408,6 +2408,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 * diff --git a/lib/IR/Core.cpp b/lib/IR/Core.cpp index acf63a36d26..f1e134233e6 100644 --- a/lib/IR/Core.cpp +++ b/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) {