[llvm-commits] [llvm] r109425 - in /llvm/trunk: docs/ReleaseNotes.html include/llvm/Use.h

Gabor Greif ggreif at gmail.com
Mon Jul 26 11:48:07 PDT 2010


Author: ggreif
Date: Mon Jul 26 13:48:07 2010
New Revision: 109425

URL: http://llvm.org/viewvc/llvm-project?rev=109425&view=rev
Log:
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.

Modified:
    llvm/trunk/docs/ReleaseNotes.html
    llvm/trunk/include/llvm/Use.h

Modified: llvm/trunk/docs/ReleaseNotes.html
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/ReleaseNotes.html?rev=109425&r1=109424&r2=109425&view=diff
==============================================================================
--- llvm/trunk/docs/ReleaseNotes.html (original)
+++ llvm/trunk/docs/ReleaseNotes.html Mon Jul 26 13:48:07 2010
@@ -318,6 +318,11 @@
   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>
 

Modified: llvm/trunk/include/llvm/Use.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Use.h?rev=109425&r1=109424&r2=109425&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Use.h (original)
+++ llvm/trunk/include/llvm/Use.h Mon Jul 26 13:48:07 2010
@@ -210,30 +210,6 @@
   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





More information about the llvm-commits mailing list