summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGabor Greif <ggreif@gmail.com>2010-07-26 18:48:07 +0000
committerGabor Greif <ggreif@gmail.com>2010-07-26 18:48:07 +0000
commited79dcb1ab323ef64faef0988bbb3a6892ea5716 (patch)
treebeeb9af089509deedef156f834e1010c51bc8d38
parentaa7f66ba6798ea946baa622b55679597dab60742 (diff)
downloadbcm5719-llvm-ed79dcb1ab323ef64faef0988bbb3a6892ea5716.tar.gz
bcm5719-llvm-ed79dcb1ab323ef64faef0988bbb3a6892ea5716.zip
re-commit r109220, the compile error has already been fixed
Simplifying use_iterators by dereferencing is not a good idea. The codebase does not depend in this any more, and it may introduce hidden runtime cost. If you get compile errors, please dereference your iterator before passing to cast<> (and friends). Also: please consider caching the result of operator* and reusing that instead of dereferencing many times. llvm-svn: 109425
-rw-r--r--llvm/docs/ReleaseNotes.html5
-rw-r--r--llvm/include/llvm/Use.h24
2 files changed, 5 insertions, 24 deletions
diff --git a/llvm/docs/ReleaseNotes.html b/llvm/docs/ReleaseNotes.html
index 61aca32610a..01a39a7ce07 100644
--- a/llvm/docs/ReleaseNotes.html
+++ b/llvm/docs/ReleaseNotes.html
@@ -318,6 +318,11 @@ expose new optimization opportunities:</p>
To be portable across releases, resort to <tt>CallSite</tt> and the
high-level accessors, such as <tt>getCalledValue</tt> and <tt>setUnwindDest</tt>.
</li>
+<li>
+ You can no longer pass use_iterators directly to cast<> (and similar), because
+ these routines tend to perform costly dereference operations more than once. You
+ have to dereference the iterators yourself and pass them in.
+</li>
</ul>
diff --git a/llvm/include/llvm/Use.h b/llvm/include/llvm/Use.h
index 2759338f42a..e1ebc6a51be 100644
--- a/llvm/include/llvm/Use.h
+++ b/llvm/include/llvm/Use.h
@@ -210,30 +210,6 @@ public:
unsigned getOperandNo() const;
};
-
-template<> struct simplify_type<value_use_iterator<User> > {
- typedef User* SimpleType;
-
- static SimpleType getSimplifiedValue(const value_use_iterator<User> &Val) {
- return *Val;
- }
-};
-
-template<> struct simplify_type<const value_use_iterator<User> >
- : public simplify_type<value_use_iterator<User> > {};
-
-template<> struct simplify_type<value_use_iterator<const User> > {
- typedef const User* SimpleType;
-
- static SimpleType getSimplifiedValue(const
- value_use_iterator<const User> &Val) {
- return *Val;
- }
-};
-
-template<> struct simplify_type<const value_use_iterator<const User> >
- : public simplify_type<value_use_iterator<const User> > {};
-
} // End llvm namespace
#endif
OpenPOWER on IntegriCloud