Bjorn De Sutter
2012-Nov-26 14:00 UTC
[LLVMdev] strange dbgs() behavior: unable to print floats in machine backend
Hi,
I am trying to debug my backend, and observe very strange behavior with dbgs():
In the IfConverter, I have added two debugging lines that print floating-point
numbers for the sake of demonstration that such printing works fine.
bool MeetIfcvtSizeLimit(MachineBasicBlock &BB,
unsigned Cycle, unsigned Extra,
const BranchProbability &Prediction) const {
dbgs() << "OOPS " << 1.14 <<
"\n";
bool flag = Cycle > 0 &&
TII->isProfitableToIfCvt(BB, Cycle, Extra,
Prediction);
dbgs() << "OOPS " << 1.15 <<
"\n";
return flag;
}
This method invokes the backend method
bool ADRESInstrInfo::isProfitableToIfCvt(MachineBasicBlock &MBB, unsigned
NumCycles, unsigned ExtraPredCycles,
const BranchProbability
&Probability) const {
dbgs() << "OOPS " << 1.16 << "\n";
}
This invocation works as it should (verified with gdb). But when I execute this
code fragment, I get
OOPS 1.140000e+00
OOPS %physreg1
OOPS 1.150000e+00
So suddenly in the machine backend, the dbgs() ostream (which is still the very
same ostream as in the IfConverter, I checked the address with gdb) prints
floating point numbers as if they are physical registers. Any idea what is going
on or how I can force floating-point numbers to be printed in the backend code?
I want to do that to tune my if-predication heuristics ...
By the way, when I step through the isProfitableToIfCvt method, rather than
invoking a <<-operator in an ostream class, the constructor of the Twine
class is invoked ...
Thanks,
Bjorn De Sutter
Computer Systems Lab
Ghent University
Reasonably Related Threads
- [LLVMdev] strange dbgs() behavior: unable to print floats in machine backend
- [LLVMdev] strange dbgs() behavior: unable to print floats in machine backend
- [LLVMdev] strange dbgs() behavior: unable to print floats in machine backend
- help with plot layout
- [LLVMdev] Out of tree targets: Possibly additional API to implement for out of tree targets using the IfConverter
