summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMehdi Amini <mehdi.amini@apple.com>2015-08-25 01:21:09 +0000
committerMehdi Amini <mehdi.amini@apple.com>2015-08-25 01:21:09 +0000
commitf83b86544849588e761ed883f58b48432128586f (patch)
treed4b5676a502034192d4c05ccd9091ac1f1cd49f1
parent84b2e325d3b1986e6a824e453d8c9d6efc66e872 (diff)
downloadbcm5719-llvm-f83b86544849588e761ed883f58b48432128586f.tar.gz
bcm5719-llvm-f83b86544849588e761ed883f58b48432128586f.zip
Revert "Fix LLVM C API for DataLayout"
This reverts commit 433bfd94e4b7e3cc3f8b08f8513ce47817941b0c. Broke some bot, have to see why it passed locally. From: Mehdi Amini <mehdi.amini@apple.com> llvm-svn: 245917
-rw-r--r--llvm/include/llvm/Target/TargetMachine.h13
-rw-r--r--llvm/lib/Target/TargetMachineC.cpp30
2 files changed, 22 insertions, 21 deletions
diff --git a/llvm/include/llvm/Target/TargetMachine.h b/llvm/include/llvm/Target/TargetMachine.h
index 0060fb72caf..d707e7c0293 100644
--- a/llvm/include/llvm/Target/TargetMachine.h
+++ b/llvm/include/llvm/Target/TargetMachine.h
@@ -59,13 +59,6 @@ class PassManagerBase;
}
using legacy::PassManagerBase;
-extern "C" {
-// This function from the C API is deprecated. We still supports it using a
-// private method on the TargetMachine for now. But it needs to be friended and
-// so we forward declare it here.
-LLVMTargetDataRef LLVMGetTargetMachineData(LLVMTargetMachineRef T);
-}
-
//===----------------------------------------------------------------------===//
///
/// Primary interface to the complete machine description for the target
@@ -110,12 +103,6 @@ protected: // Can only create subclasses.
unsigned RequireStructuredCFG : 1;
- /// This API is here to support the C API, deprecated in 3.7 release.
- /// This should never be used outside of legacy existing client.
- const DataLayout &getDataLayout() const { return DL; }
- friend struct LLVMOpaqueTargetData * ::LLVMGetTargetMachineData(
- LLVMTargetMachineRef T);
-
public:
mutable TargetOptions Options;
diff --git a/llvm/lib/Target/TargetMachineC.cpp b/llvm/lib/Target/TargetMachineC.cpp
index 6255448a7e3..b2bd8fae423 100644
--- a/llvm/lib/Target/TargetMachineC.cpp
+++ b/llvm/lib/Target/TargetMachineC.cpp
@@ -32,14 +32,25 @@
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 reinterpret_cast<TargetMachine *>(P);
+ return P->Machine.get();
}
static Target *unwrap(LLVMTargetRef P) {
return reinterpret_cast<Target*>(P);
}
static LLVMTargetMachineRef wrap(const TargetMachine *P) {
- return reinterpret_cast<LLVMTargetMachineRef>(const_cast<TargetMachine *>(P));
+ return new LLVMOpaqueTargetMachine{ std::unique_ptr<TargetMachine>(const_cast<TargetMachine*>(P)), P->createDataLayout() };
}
static LLVMTargetRef wrap(const Target * P) {
return reinterpret_cast<LLVMTargetRef>(const_cast<Target*>(P));
@@ -68,16 +79,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;
}
@@ -144,7 +155,10 @@ LLVMTargetMachineRef LLVMCreateTargetMachine(LLVMTargetRef T,
CM, OL));
}
-void LLVMDisposeTargetMachine(LLVMTargetMachineRef T) { delete unwrap(T); }
+
+void LLVMDisposeTargetMachine(LLVMTargetMachineRef T) {
+ delete T;
+}
LLVMTargetRef LLVMGetTargetMachineTarget(LLVMTargetMachineRef T) {
const Target* target = &(unwrap(T)->getTarget());
@@ -166,9 +180,9 @@ char* LLVMGetTargetMachineFeatureString(LLVMTargetMachineRef T) {
return strdup(StringRep.c_str());
}
-/** Deprecated: use LLVMGetDataLayout(LLVMModuleRef M) instead. */
+/// @deprecated: see "struct LLVMOpaqueTargetMachine" description above
LLVMTargetDataRef LLVMGetTargetMachineData(LLVMTargetMachineRef T) {
- return wrap(&unwrap(T)->getDataLayout());
+ return wrap(&T->DL);
}
void LLVMSetTargetMachineAsmVerbosity(LLVMTargetMachineRef T,
OpenPOWER on IntegriCloud