[llvm] r257751 - Revert "Assert that we have all use/users in the getters."
Michael Zolotukhin via llvm-commits
llvm-commits at lists.llvm.org
Thu Jan 14 01:02:45 PST 2016
Author: mzolotukhin
Date: Thu Jan 14 03:02:45 2016
New Revision: 257751
URL: http://llvm.org/viewvc/llvm-project?rev=257751&view=rev
Log:
Revert "Assert that we have all use/users in the getters."
This reverts commit fdb838f3f8a8b6896bbbd5285555874eb3b748eb.
Modified:
llvm/trunk/include/llvm/IR/Module.h
llvm/trunk/include/llvm/IR/Value.h
llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp
llvm/trunk/lib/IR/Module.cpp
llvm/trunk/lib/IR/Value.cpp
llvm/trunk/lib/IR/Verifier.cpp
llvm/trunk/tools/llvm-extract/llvm-extract.cpp
Modified: llvm/trunk/include/llvm/IR/Module.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/Module.h?rev=257751&r1=257750&r2=257751&view=diff
==============================================================================
--- llvm/trunk/include/llvm/IR/Module.h (original)
+++ llvm/trunk/include/llvm/IR/Module.h Thu Jan 14 03:02:45 2016
@@ -439,7 +439,6 @@ public:
void setMaterializer(GVMaterializer *GVM);
/// Retrieves the GVMaterializer, if any, for this Module.
GVMaterializer *getMaterializer() const { return Materializer.get(); }
- bool isMaterialized() const { return !getMaterializer(); }
/// Make sure the GlobalValue is fully read. If the module is corrupt, this
/// returns true and fills in the optional string with information about the
@@ -447,6 +446,7 @@ public:
std::error_code materialize(GlobalValue *GV);
/// Make sure all GlobalValues in this Module are fully read and clear the
+ /// Materializer. If the module is corrupt, this DOES NOT clear the old
/// Materializer.
std::error_code materializeAll();
Modified: llvm/trunk/include/llvm/IR/Value.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/Value.h?rev=257751&r1=257750&r2=257751&view=diff
==============================================================================
--- llvm/trunk/include/llvm/IR/Value.h (original)
+++ llvm/trunk/include/llvm/IR/Value.h Thu Jan 14 03:02:45 2016
@@ -273,91 +273,38 @@ public:
//----------------------------------------------------------------------
// Methods for handling the chain of uses of this Value.
//
- // Materializing a function can introduce new uses, so these methods come in
- // two variants:
- // The methods that start with materialized_ check the uses that are
- // currently known given which functions are materialized. Be very careful
- // when using them since you might not get all uses.
- // The methods that don't start with materialized_ assert that modules is
- // fully materialized.
-#ifdef NDEBUG
- void assertModuleIsMaterialized() const {}
-#else
- void assertModuleIsMaterialized() const;
-#endif
-
- bool use_empty() const {
- assertModuleIsMaterialized();
- return UseList == nullptr;
- }
+ bool use_empty() const { return UseList == nullptr; }
typedef use_iterator_impl<Use> use_iterator;
typedef use_iterator_impl<const Use> const_use_iterator;
- use_iterator materialized_use_begin() { return use_iterator(UseList); }
- const_use_iterator materialized_use_begin() const {
- return const_use_iterator(UseList);
- }
- use_iterator use_begin() {
- assertModuleIsMaterialized();
- return materialized_use_begin();
- }
- const_use_iterator use_begin() const {
- assertModuleIsMaterialized();
- return materialized_use_begin();
- }
+ use_iterator use_begin() { return use_iterator(UseList); }
+ const_use_iterator use_begin() const { return const_use_iterator(UseList); }
use_iterator use_end() { return use_iterator(); }
const_use_iterator use_end() const { return const_use_iterator(); }
- iterator_range<use_iterator> materialized_uses() {
- return make_range(materialized_use_begin(), use_end());
- }
- iterator_range<const_use_iterator> materialized_uses() const {
- return make_range(materialized_use_begin(), use_end());
- }
iterator_range<use_iterator> uses() {
- assertModuleIsMaterialized();
- return materialized_uses();
+ return make_range(use_begin(), use_end());
}
iterator_range<const_use_iterator> uses() const {
- assertModuleIsMaterialized();
- return materialized_uses();
+ return make_range(use_begin(), use_end());
}
- bool user_empty() const {
- assertModuleIsMaterialized();
- return UseList == nullptr;
- }
+ bool user_empty() const { return UseList == nullptr; }
typedef user_iterator_impl<User> user_iterator;
typedef user_iterator_impl<const User> const_user_iterator;
- user_iterator materialized_user_begin() { return user_iterator(UseList); }
- const_user_iterator materialized_user_begin() const {
- return const_user_iterator(UseList);
- }
- user_iterator user_begin() {
- assertModuleIsMaterialized();
- return materialized_user_begin();
- }
+ user_iterator user_begin() { return user_iterator(UseList); }
const_user_iterator user_begin() const {
- assertModuleIsMaterialized();
- return materialized_user_begin();
+ return const_user_iterator(UseList);
}
user_iterator user_end() { return user_iterator(); }
const_user_iterator user_end() const { return const_user_iterator(); }
- User *user_back() {
- assertModuleIsMaterialized();
- return *materialized_user_begin();
- }
- const User *user_back() const {
- assertModuleIsMaterialized();
- return *materialized_user_begin();
- }
+ User *user_back() { return *user_begin(); }
+ const User *user_back() const { return *user_begin(); }
iterator_range<user_iterator> users() {
- assertModuleIsMaterialized();
- return make_range(materialized_user_begin(), user_end());
+ return make_range(user_begin(), user_end());
}
iterator_range<const_user_iterator> users() const {
- assertModuleIsMaterialized();
- return make_range(materialized_user_begin(), user_end());
+ return make_range(user_begin(), user_end());
}
/// \brief Return true if there is exactly one user of this value.
Modified: llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp?rev=257751&r1=257750&r2=257751&view=diff
==============================================================================
--- llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp (original)
+++ llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp Thu Jan 14 03:02:45 2016
@@ -3022,7 +3022,7 @@ std::error_code BitcodeReader::parseUseL
V = ValueList[ID];
unsigned NumUses = 0;
SmallDenseMap<const Use *, unsigned, 16> Order;
- for (const Use &U : V->materialized_uses()) {
+ for (const Use &U : V->uses()) {
if (++NumUses > Record.size())
break;
Order[&U] = Record[NumUses - 1];
@@ -5267,8 +5267,7 @@ std::error_code BitcodeReader::materiali
// Upgrade any old intrinsic calls in the function.
for (auto &I : UpgradedIntrinsics) {
- for (auto UI = I.first->materialized_user_begin(), UE = I.first->user_end();
- UI != UE;) {
+ for (auto UI = I.first->user_begin(), UE = I.first->user_end(); UI != UE;) {
User *U = *UI;
++UI;
if (CallInst *CI = dyn_cast<CallInst>(U))
Modified: llvm/trunk/lib/IR/Module.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Module.cpp?rev=257751&r1=257750&r2=257751&view=diff
==============================================================================
--- llvm/trunk/lib/IR/Module.cpp (original)
+++ llvm/trunk/lib/IR/Module.cpp Thu Jan 14 03:02:45 2016
@@ -394,8 +394,10 @@ std::error_code Module::materialize(Glob
std::error_code Module::materializeAll() {
if (!Materializer)
return std::error_code();
- std::unique_ptr<GVMaterializer> M = std::move(Materializer);
- return M->materializeModule();
+ if (std::error_code EC = Materializer->materializeModule())
+ return EC;
+ Materializer.reset();
+ return std::error_code();
}
std::error_code Module::materializeMetadata() {
Modified: llvm/trunk/lib/IR/Value.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Value.cpp?rev=257751&r1=257750&r2=257751&view=diff
==============================================================================
--- llvm/trunk/lib/IR/Value.cpp (original)
+++ llvm/trunk/lib/IR/Value.cpp Thu Jan 14 03:02:45 2016
@@ -314,16 +314,6 @@ void Value::takeName(Value *V) {
}
#ifndef NDEBUG
-void Value::assertModuleIsMaterialized() const {
- const GlobalValue *GV = dyn_cast<GlobalValue>(this);
- if (!GV)
- return;
- const Module *M = GV->getParent();
- if (!M)
- return;
- assert(M->isMaterialized());
-}
-
static bool contains(SmallPtrSetImpl<ConstantExpr *> &Cache, ConstantExpr *Expr,
Constant *C) {
if (!Cache.insert(Expr).second)
Modified: llvm/trunk/lib/IR/Verifier.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Verifier.cpp?rev=257751&r1=257750&r2=257751&view=diff
==============================================================================
--- llvm/trunk/lib/IR/Verifier.cpp (original)
+++ llvm/trunk/lib/IR/Verifier.cpp Thu Jan 14 03:02:45 2016
@@ -1901,9 +1901,7 @@ void Verifier::visitFunction(const Funct
// If this function is actually an intrinsic, verify that it is only used in
// direct call/invokes, never having its "address taken".
- // Only do this if the module is materialized, otherwise we don't have all the
- // uses.
- if (F.getIntrinsicID() && F.getParent()->isMaterialized()) {
+ if (F.getIntrinsicID()) {
const User *U;
if (F.hasAddressTaken(&U))
Assert(0, "Invalid user of intrinsic instruction!", U);
Modified: llvm/trunk/tools/llvm-extract/llvm-extract.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-extract/llvm-extract.cpp?rev=257751&r1=257750&r2=257751&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-extract/llvm-extract.cpp (original)
+++ llvm/trunk/tools/llvm-extract/llvm-extract.cpp Thu Jan 14 03:02:45 2016
@@ -242,22 +242,13 @@ int main(int argc, char **argv) {
}
}
- {
- std::vector<GlobalValue *> Gvs(GVs.begin(), GVs.end());
- legacy::PassManager Extract;
- Extract.add(createGVExtractionPass(Gvs, DeleteFn));
- Extract.run(*M);
-
- // Now that we have all the GVs we want, mark the module as fully
- // materialized.
- // FIXME: should the GVExtractionPass handle this?
- M->materializeAll();
- }
-
// In addition to deleting all other functions, we also want to spiff it
// up a little bit. Do this now.
legacy::PassManager Passes;
+ std::vector<GlobalValue*> Gvs(GVs.begin(), GVs.end());
+
+ Passes.add(createGVExtractionPass(Gvs, DeleteFn));
if (!DeleteFn)
Passes.add(createGlobalDCEPass()); // Delete unreachable globals
Passes.add(createStripDeadDebugInfoPass()); // Remove dead debug info
More information about the llvm-commits
mailing list