[llvm-commits] CVS: llvm/lib/CodeGen/LiveInterval.cpp MachineBasicBlock.cpp MachineInstr.cpp
Chris Lattner
clattner at apple.com
Fri Dec 15 17:58:24 PST 2006
On Dec 15, 2006, at 3:31 PM, Bill Wendling wrote:
> 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.
This is better, nice catch Bill!
-Chris
>
> -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
>>>
>>>
>>>
>>>
>>
>
> _______________________________________________
> 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