[llvm-commits] CVS: llvm/lib/CodeGen/LiveInterval.cpp MachineBasicBlock.cpp MachineInstr.cpp

Bill Wendling isanbard at gmail.com
Fri Dec 15 15:31:52 PST 2006


That's reasonable. So then a better solution would be to keep  
everything in the .h file, but change operator<<(OStream&) to call  
the "print()" function directly. So something like this:

#include <iosfwd>

// ...

OStream& operator<<(OStream &OS, const MachineBasicBlock &MBB) {
   if (*OS.stream()) MBB->print(*OS.stream());
   return OS;
}

I'm still working on a nice way of implementing something like this:

template <typename StreamTy>
class BaseStream {
   StreamTy *stream;
public:
   operator StreamTy () { return *stream; }
};

but I'm having problems figuring out the "null" stream semantics  
(right now, it uses "stream = 0" as an indication that it's "null").  
But the above hack should suffice in the meantime.

-bw

On Dec 15, 2006, at 3:16 PM, Jeff Cohen wrote:

> Chris asked me to not include <ostream> from header files, and to  
> move stuff out of the header files if possible to make it so.
>
> Bill Wendling wrote:
>> Hold on. If you make these non-inlined, then the only chance for  
>> the compiler to remove potentially dead code (when o.stream() ==  
>> 0) is through link time optimizations. Because this is still  
>> compiled by GCC right now, this won't be done and debug outputs  
>> will still be in the code. That is, they won't output anything,  
>> but the call will still be there.
>>
>> -bw
>>
>> On Dec 15, 2006, at 2:57 PM, Jeff Cohen wrote:
>>
>>>
>>>
>>> Changes in directory llvm/lib/CodeGen:
>>>
>>> LiveInterval.cpp updated: 1.40 -> 1.41
>>> MachineBasicBlock.cpp updated: 1.36 -> 1.37
>>> MachineInstr.cpp updated: 1.138 -> 1.139
>>> ---
>>> Log message:
>>>
>>> An even better unbreakage...
>>>
>>> ---
>>> Diffs of the changes:  (+24 -0)
>>>
>>>  LiveInterval.cpp      |    7 +++++++
>>>  MachineBasicBlock.cpp |    5 +++++
>>>  MachineInstr.cpp      |   12 ++++++++++++
>>>  3 files changed, 24 insertions(+)
>>>
>>>
>>> Index: llvm/lib/CodeGen/LiveInterval.cpp
>>> diff -u llvm/lib/CodeGen/LiveInterval.cpp:1.40 llvm/lib/CodeGen/ 
>>> LiveInterval.cpp:1.41
>>> --- llvm/lib/CodeGen/LiveInterval.cpp:1.40    Wed Dec  6 19:30:31  
>>> 2006
>>> +++ llvm/lib/CodeGen/LiveInterval.cpp    Fri Dec 15 16:57:14 2006
>>> @@ -24,6 +24,7 @@
>>>  #include "llvm/Target/MRegisterInfo.h"
>>>  #include <algorithm>
>>>  #include <map>
>>> +#include <ostream>
>>>  using namespace llvm;
>>>
>>>  // An example for liveAt():
>>> @@ -509,3 +510,9 @@
>>>  void LiveInterval::dump() const {
>>>    cerr << *this << "\n";
>>>  }
>>> +
>>> +
>>> +OStream& llvm::operator<<(OStream& os, const LiveRange &LR) {
>>> +  if (os.stream()) *os.stream() << LR;
>>> +  return os;
>>> +}
>>>
>>>
>>> Index: llvm/lib/CodeGen/MachineBasicBlock.cpp
>>> diff -u llvm/lib/CodeGen/MachineBasicBlock.cpp:1.36 llvm/lib/ 
>>> CodeGen/MachineBasicBlock.cpp:1.37
>>> --- llvm/lib/CodeGen/MachineBasicBlock.cpp:1.36    Thu Dec  7  
>>> 14:28:15 2006
>>> +++ llvm/lib/CodeGen/MachineBasicBlock.cpp    Fri Dec 15 16:57:14  
>>> 2006
>>> @@ -31,6 +31,11 @@
>>>    return OS;
>>>  }
>>>
>>> +OStream& llvm::operator<<(OStream &OS, const MachineBasicBlock  
>>> &MBB) {
>>> +  if (OS.stream()) *OS.stream() << MBB;
>>> +  return OS;
>>> +}
>>> +
>>>  // MBBs start out as #-1. When a MBB is added to a  
>>> MachineFunction, it
>>>  // gets the next available unique MBB number. If it is removed  
>>> from a
>>>  // MachineFunction, it goes back to being #-1.
>>>
>>>
>>> Index: llvm/lib/CodeGen/MachineInstr.cpp
>>> diff -u llvm/lib/CodeGen/MachineInstr.cpp:1.138 llvm/lib/CodeGen/ 
>>> MachineInstr.cpp:1.139
>>> --- llvm/lib/CodeGen/MachineInstr.cpp:1.138    Wed Dec  6  
>>> 19:30:31 2006
>>> +++ llvm/lib/CodeGen/MachineInstr.cpp    Fri Dec 15 16:57:14 2006
>>> @@ -18,6 +18,7 @@
>>>  #include "llvm/Target/MRegisterInfo.h"
>>>  #include "llvm/Support/LeakDetector.h"
>>>  #include "llvm/Support/Streams.h"
>>> +#include <ostream>
>>>  using namespace llvm;
>>>
>>>  /// MachineInstr ctor - This constructor creates a dummy  
>>> MachineInstr with
>>> @@ -363,3 +364,14 @@
>>>
>>>    return OS;
>>>  }
>>> +
>>> +OStream& llvm::operator<<(OStream& os, const MachineInstr&  
>>> minstr) {
>>> +  if (os.stream()) *os.stream() << minstr;
>>> +  return os;
>>> +}
>>> +
>>> +OStream& llvm::operator<<(OStream& os, const MachineOperand& mop) {
>>> +  if (os.stream()) *os.stream() << mop;
>>> +  return os;
>>> +}
>>> +
>>>
>>>
>>>
>>> _______________________________________________
>>> 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