aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMehdi Amini <mehdi.amini@apple.com>2015-08-26 18:22:34 +0000
committerMehdi Amini <mehdi.amini@apple.com>2015-08-26 18:22:34 +0000
commitb5d8b27fc8b78366cae192704f02dde6454122c4 (patch)
tree194878ba51ba109aeb0e67ebbf63cf8282061016 /llvm/lib/Target/TargetMachineC.cpp
parentSkip test which is causing ERRORs in dotest.py after r237053 (diff)
downloadllvm-project-b5d8b27fc8b78366cae192704f02dde6454122c4.tar.gz
llvm-project-b5d8b27fc8b78366cae192704f02dde6454122c4.tar.bz2
llvm-project-b5d8b27fc8b78366cae192704f02dde6454122c4.zip
Fix LLVM C API for DataLayout
We removed access to the DataLayout on the TargetMachine and deprecated the C API function LLVMGetTargetMachineData() in r243114. However the way I tried to be backward compatible was broken: I changed the wrapper of the TargetMachine to be a structure that includes the DataLayout as well. However the TargetMachine is also wrapped by the ExecutionEngine, in the more classic way. A client using the TargetMachine wrapped by the ExecutionEngine and trying to get the DataLayout would break. It seems tricky to solve the problem completely in the C API implementation. This patch tries to address this backward compatibility in a more lighter way in the C++ API. The C API is restored in its original state and the removed C++ API is reintroduced, but privately. The C API is friended to the TargetMachine and should be the only consumer for this API. Reviewers: ributzka Differential Revision: http://reviews.llvm.org/D12263 From: Mehdi Amini <mehdi.amini@apple.com> llvm-svn: 246044
Diffstat (limited to 'llvm/lib/Target/TargetMachineC.cpp')
-rw-r--r--llvm/lib/Target/TargetMachineC.cpp30
1 files changed, 8 insertions, 22 deletions
diff --git a/llvm/lib/Target/TargetMachineC.cpp b/llvm/lib/Target/TargetMachineC.cpp
index b2bd8fae423e..6255448a7e3c 100644
--- a/llvm/lib/Target/TargetMachineC.cpp
+++ b/llvm/lib/Target/TargetMachineC.cpp
@@ -32,25 +32,14 @@
using namespace llvm;
-
-// The TargetMachine uses to offer access to a DataLayout member. This is reflected
-// in the C API. For backward compatibility reason, this structure allows to keep
-// a DataLayout member accessible to C client that have a handle to a
-// LLVMTargetMachineRef.
-struct LLVMOpaqueTargetMachine {
- std::unique_ptr<TargetMachine> Machine;
- DataLayout DL;
-};
-
-
static TargetMachine *unwrap(LLVMTargetMachineRef P) {
- return P->Machine.get();
+ return reinterpret_cast<TargetMachine *>(P);
}
static Target *unwrap(LLVMTargetRef P) {
return reinterpret_cast<Target*>(P);
}
static LLVMTargetMachineRef wrap(const TargetMachine *P) {
- return new LLVMOpaqueTargetMachine{ std::unique_ptr<TargetMachine>(const_cast<TargetMachine*>(P)), P->createDataLayout() };
+ return reinterpret_cast<LLVMTargetMachineRef>(const_cast<TargetMachine *>(P));
}
static LLVMTargetRef wrap(const Target * P) {
return reinterpret_cast<LLVMTargetRef>(const_cast<Target*>(P));
@@ -79,16 +68,16 @@ LLVMTargetRef LLVMGetTargetFromName(const char *Name) {
LLVMBool LLVMGetTargetFromTriple(const char* TripleStr, LLVMTargetRef *T,
char **ErrorMessage) {
std::string Error;
-
+
*T = wrap(TargetRegistry::lookupTarget(TripleStr, Error));
-
+
if (!*T) {
if (ErrorMessage)
*ErrorMessage = strdup(Error.c_str());
return 1;
}
-
+
return 0;
}
@@ -155,10 +144,7 @@ LLVMTargetMachineRef LLVMCreateTargetMachine(LLVMTargetRef T,
CM, OL));
}
-
-void LLVMDisposeTargetMachine(LLVMTargetMachineRef T) {
- delete T;
-}
+void LLVMDisposeTargetMachine(LLVMTargetMachineRef T) { delete unwrap(T); }
LLVMTargetRef LLVMGetTargetMachineTarget(LLVMTargetMachineRef T) {
const Target* target = &(unwrap(T)->getTarget());
@@ -180,9 +166,9 @@ char* LLVMGetTargetMachineFeatureString(LLVMTargetMachineRef T) {
return strdup(StringRep.c_str());
}
-/// @deprecated: see "struct LLVMOpaqueTargetMachine" description above
+/** Deprecated: use LLVMGetDataLayout(LLVMModuleRef M) instead. */
LLVMTargetDataRef LLVMGetTargetMachineData(LLVMTargetMachineRef T) {
- return wrap(&T->DL);
+ return wrap(&unwrap(T)->getDataLayout());
}
void LLVMSetTargetMachineAsmVerbosity(LLVMTargetMachineRef T,