From 6ffcfe02df556f2d6e5c40c1a1eb3f99f5877489 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Fri, 13 Jan 2017 06:26:18 +0000 Subject: [PATCH] [IR] Don't call assertModuleIsMaterialized in release builds Summary: To fix a release vs debug build linking error, r259695 made the body of assertModuleIsMaterialized empty if Value.cpp gets compiled in a release build. This way any code compiled as a debug build can still link against a release version of the function. This patch takes this a step farther and removes all calls to it from Value.h in any code that includes it in a relase build. This shrinks the opt binary on my macbook build by 17240 bytes. Reviewers: rafael Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D28191 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291883 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/IR/Value.h | 10 +++++++++- lib/IR/Value.cpp | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/include/llvm/IR/Value.h b/include/llvm/IR/Value.h index bdafbbf58cc..9c91f4e07e3 100644 --- a/include/llvm/IR/Value.h +++ b/include/llvm/IR/Value.h @@ -294,7 +294,15 @@ public: // when using them since you might not get all uses. // The methods that don't start with materialized_ assert that modules is // fully materialized. - void assertModuleIsMaterialized() const; + void assertModuleIsMaterializedImpl() const; + // This indirection exists so we can keep assertModuleIsMaterializedImpl() + // around in release builds of Value.cpp to be linked with other code built + // in debug mode. But this avoids calling it in any of the release built code. + void assertModuleIsMaterialized() const { +#ifndef NDEBUG + assertModuleIsMaterializedImpl(); +#endif + } bool use_empty() const { assertModuleIsMaterialized(); diff --git a/lib/IR/Value.cpp b/lib/IR/Value.cpp index 91a999b5800..d86d7fc1164 100644 --- a/lib/IR/Value.cpp +++ b/lib/IR/Value.cpp @@ -320,7 +320,7 @@ void Value::takeName(Value *V) { ST->reinsertValue(this); } -void Value::assertModuleIsMaterialized() const { +void Value::assertModuleIsMaterializedImpl() const { #ifndef NDEBUG const GlobalValue *GV = dyn_cast(this); if (!GV) -- 2.40.0