[llvm-commits] [llvm] r78924 - in /llvm/trunk: include/llvm/Support/raw_ostream.h lib/Support/raw_ostream.cpp

Daniel Dunbar daniel at zuster.org
Thu Aug 13 10:55:14 PDT 2009


On Thu, Aug 13, 2009 at 10:41 AM, Dan Gohman<gohman at apple.com> wrote:
> Author: djg
> Date: Thu Aug 13 12:41:40 2009
> New Revision: 78924
>
> URL: http://llvm.org/viewvc/llvm-project?rev=78924&view=rev
> Log:
> Set raw_os_ostream, raw_string_ostream, and raw_svector_ostream to be
> unbuffered. std::ostream does its own buffering, and std::string and
> SmallVector both have allocation strategies intended to handle frequent
> appending.


Eek!

Did you profile the effects of this change? I expect that this
dramatically slows down these streams. One of the main values of being
buffered in raw_ostream is that we hit all the fast paths to quickly
output small strings. Making all of these strings unbuffered nullifies
several of these optimizations.

 - Daniel

> Modified:
>    llvm/trunk/include/llvm/Support/raw_ostream.h
>    llvm/trunk/lib/Support/raw_ostream.cpp
>
> Modified: llvm/trunk/include/llvm/Support/raw_ostream.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/raw_ostream.h?rev=78924&r1=78923&r2=78924&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/raw_ostream.h (original)
> +++ llvm/trunk/include/llvm/Support/raw_ostream.h Thu Aug 13 12:41:40 2009
> @@ -376,8 +376,7 @@
>   virtual uint64_t current_pos();
>
>  public:
> -  raw_os_ostream(std::ostream &O) : OS(O) {}
> -  ~raw_os_ostream();
> +  raw_os_ostream(std::ostream &O) : raw_ostream(true), OS(O) {}
>
>   /// tell - Return the current offset with the stream.
>   uint64_t tell();
> @@ -395,8 +394,7 @@
>   /// counting the bytes currently in the buffer.
>   virtual uint64_t current_pos() { return OS.size(); }
>  public:
> -  explicit raw_string_ostream(std::string &O) : OS(O) {}
> -  ~raw_string_ostream();
> +  explicit raw_string_ostream(std::string &O) : raw_ostream(true), OS(O) {}
>
>   /// tell - Return the current offset with the stream.
>   uint64_t tell() { return OS.size() + GetNumBytesInBuffer(); }
> @@ -422,8 +420,8 @@
>   /// counting the bytes currently in the buffer.
>   virtual uint64_t current_pos();
>  public:
> -  explicit raw_svector_ostream(SmallVectorImpl<char> &O) : OS(O) {}
> -  ~raw_svector_ostream();
> +  explicit raw_svector_ostream(SmallVectorImpl<char> &O)
> +    : raw_ostream(true), OS(O) {}
>
>   /// tell - Return the current offset with the stream.
>   uint64_t tell();
>
> Modified: llvm/trunk/lib/Support/raw_ostream.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/raw_ostream.cpp?rev=78924&r1=78923&r2=78924&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Support/raw_ostream.cpp (original)
> +++ llvm/trunk/lib/Support/raw_ostream.cpp Thu Aug 13 12:41:40 2009
> @@ -441,10 +441,6 @@
>  //  raw_os_ostream
>  //===----------------------------------------------------------------------===//
>
> -raw_os_ostream::~raw_os_ostream() {
> -  flush();
> -}
> -
>  void raw_os_ostream::write_impl(const char *Ptr, size_t Size) {
>   OS.write(Ptr, Size);
>  }
> @@ -459,10 +455,6 @@
>  //  raw_string_ostream
>  //===----------------------------------------------------------------------===//
>
> -raw_string_ostream::~raw_string_ostream() {
> -  flush();
> -}
> -
>  void raw_string_ostream::write_impl(const char *Ptr, size_t Size) {
>   OS.append(Ptr, Size);
>  }
> @@ -471,10 +463,6 @@
>  //  raw_svector_ostream
>  //===----------------------------------------------------------------------===//
>
> -raw_svector_ostream::~raw_svector_ostream() {
> -  flush();
> -}
> -
>  void raw_svector_ostream::write_impl(const char *Ptr, size_t Size) {
>   OS.append(Ptr, Ptr + Size);
>  }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>




More information about the llvm-commits mailing list