Add a TargetMachine hook that verifies DataLayout compatibility
authorMehdi Amini <mehdi.amini@apple.com>
Thu, 30 Jul 2015 20:33:18 +0000 (20:33 +0000)
committerMehdi Amini <mehdi.amini@apple.com>
Thu, 30 Jul 2015 20:33:18 +0000 (20:33 +0000)
Summary: Also provide the associated assertion when CodeGen starts.

Reviewers: echristo

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D11654

From: Mehdi Amini <mehdi.amini@apple.com>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243682 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Target/TargetMachine.h
lib/CodeGen/MachineFunction.cpp

index bc8537c0daa74acd48956045f7d33b40e26325e4..d707e7c029303166369a48dc84b7a8db16ddedba 100644 (file)
@@ -133,6 +133,15 @@ public:
   /// Create a DataLayout.
   const DataLayout createDataLayout() const { return DL; }
 
+  /// Test if a DataLayout if compatible with the CodeGen for this target.
+  ///
+  /// The LLVM Module owns a DataLayout that is used for the target independent
+  /// optimizations and code generation. This hook provides a target specific
+  /// check on the validity of this DataLayout.
+  bool isCompatibleDataLayout(const DataLayout &Candidate) const {
+    return DL == Candidate;
+  }
+
   /// Get the pointer size for this target.
   ///
   /// This is the only time the DataLayout in the TargetMachine is used.
index 0a8309eb2f2d6781e17ba08a97ee5ef6266f47cd..bd6f8771e7b46afbb578f1d944450bafe4ebd8f1 100644 (file)
@@ -85,6 +85,10 @@ MachineFunction::MachineFunction(const Function *F, const TargetMachine &TM,
 
   FunctionNumber = FunctionNum;
   JumpTableInfo = nullptr;
+
+  assert(TM.isCompatibleDataLayout(getDataLayout()) &&
+         "Can't create a MachineFunction using a Module with a "
+         "Target-incompatible DataLayout attached\n");
 }
 
 MachineFunction::~MachineFunction() {