[llvm] [Support] Inline some raw_ostream methods (PR #97703)
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 4 11:52:32 PDT 2024
================
@@ -400,11 +411,36 @@ class raw_ostream {
//===--------------------------------------------------------------------===//
private:
/// Install the given buffer and mode.
- void SetBufferAndMode(char *BufferStart, size_t Size, BufferKind Mode);
+ void SetBufferAndMode(char *BufferStart, size_t Size, BufferKind Mode) {
+ assert(((Mode == BufferKind::Unbuffered && !BufferStart && Size == 0) ||
+ (Mode != BufferKind::Unbuffered && BufferStart && Size != 0)) &&
+ "stream must be unbuffered or have at least one byte");
+ // Make sure the current buffer is free of content (we can't flush here; the
+ // child buffer management logic will be in write_impl).
+ assert(GetNumBytesInBuffer() == 0 && "Current buffer is non-empty!");
+
+ if (BufferMode == BufferKind::InternalBuffer)
+ delete[] OutBufStart;
+ OutBufStart = BufferStart;
+ OutBufEnd = OutBufStart + Size;
+ OutBufCur = OutBufStart;
+ BufferMode = Mode;
+
+ assert(OutBufStart <= OutBufEnd && "Invalid size!");
+ }
/// Flush the current buffer, which is known to be non-empty. This outputs the
/// currently buffered data and resets the buffer to empty.
- void flush_nonempty();
+ void flush_nonempty() {
+ assert(OutBufCur > OutBufStart && "Invalid call to flush_nonempty.");
+ size_t Length = OutBufCur - OutBufStart;
+ OutBufCur = OutBufStart;
+ write_impl(OutBufStart, Length);
+ }
+
+ /// Slow path for writing when buffer is too small.
+ void writeSlow(unsigned char C);
----------------
MaskRay wrote:
`writeSlow` returning `*this` might allow tail call optimization, but I don't know whether it makes a difference on code size...
https://github.com/llvm/llvm-project/pull/97703
More information about the llvm-commits
mailing list