Stepan Dyatkovskiy
2011-Oct-28 09:00 UTC
[LLVMdev] [LLVM, llvm-diff] Question about FunctionDifferenceEngine and DiffConsumer::printValue
Hi all.
I found next code when switch instruction differs:
Engine.logf("right switch has extra case %r") << CaseValue;
Where CaseValue is a ConstantInt object. Looking how logf works I found
that it invokes DiffConsumer::printValue method for CaseValue. And here
I found that CaseValue itself will never printed. On first look how
DiffConsumer::printValue works it seems that for all constants "object
numbering" should be printed:
out << '%' << ctxt.RNumbering[V]; // V = CaseValue in our
case.
// RNumbering is instance of
DenseMap<Value*,unsigned>.
Then I look into DiffConsumer.cpp, ComputeNumbering method that fills
RNumbering and LNumbering. Well, numbering computed for function
arguments, basic blocks and instructions only.
It means that for Constants "%0" will be printed always. If so, I
propose to add case for constants in DiffConsumer::printValue method,
that will print constant itself.
Regards,
Stepan.
John McCall
2011-Oct-29 08:24 UTC
[LLVMdev] [LLVM, llvm-diff] Question about FunctionDifferenceEngine and DiffConsumer::printValue
On Oct 28, 2011, at 2:00 AM, Stepan Dyatkovskiy wrote:> I found next code when switch instruction differs: > > Engine.logf("right switch has extra case %r") << CaseValue; > > Where CaseValue is a ConstantInt object. Looking how logf works I found > that it invokes DiffConsumer::printValue method for CaseValue. And here > I found that CaseValue itself will never printed. On first look how > DiffConsumer::printValue works it seems that for all constants "object > numbering" should be printed: > > out << '%' << ctxt.RNumbering[V]; // V = CaseValue in our case. > // RNumbering is instance of > DenseMap<Value*,unsigned>. > > Then I look into DiffConsumer.cpp, ComputeNumbering method that fills > RNumbering and LNumbering. Well, numbering computed for function > arguments, basic blocks and instructions only. > > It means that for Constants "%0" will be printed always. If so, I > propose to add case for constants in DiffConsumer::printValue method, > that will print constant itself.Patches welcome! John.
Stepan Dyatkovskiy
2011-Oct-31 09:29 UTC
[LLVMdev] [LLVM, llvm-diff] Question about FunctionDifferenceEngine and DiffConsumer::printValue
Hi, Please find the attached patch for review. -Stepan. John McCall wrote:> On Oct 28, 2011, at 2:00 AM, Stepan Dyatkovskiy wrote: >> I found next code when switch instruction differs: >> >> Engine.logf("right switch has extra case %r")<< CaseValue; >> >> Where CaseValue is a ConstantInt object. Looking how logf works I found >> that it invokes DiffConsumer::printValue method for CaseValue. And here >> I found that CaseValue itself will never printed. On first look how >> DiffConsumer::printValue works it seems that for all constants "object >> numbering" should be printed: >> >> out<< '%'<< ctxt.RNumbering[V]; // V = CaseValue in our case. >> // RNumbering is instance of >> DenseMap<Value*,unsigned>. >> >> Then I look into DiffConsumer.cpp, ComputeNumbering method that fills >> RNumbering and LNumbering. Well, numbering computed for function >> arguments, basic blocks and instructions only. >> >> It means that for Constants "%0" will be printed always. If so, I >> propose to add case for constants in DiffConsumer::printValue method, >> that will print constant itself. > > Patches welcome! > > John.-------------- next part -------------- A non-text attachment was scrubbed... Name: diffeng.patch Type: text/x-patch Size: 957 bytes Desc: not available URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20111031/d9301cc0/attachment.bin>
Reasonably Related Threads
- [LLVMdev] [LLVM, llvm-diff] Question about FunctionDifferenceEngine and DiffConsumer::printValue
- [LLVMdev] [LLVM, llvm-diff] Question about FunctionDifferenceEngine and DiffConsumer::printValue
- [LLVMdev] [LLVM, llvm-diff] Question about FunctionDifferenceEngine and DiffConsumer::printValue
- 'unique' error message is printed despite silent=TRUE (PR#13547)
- [LLVMdev] Build failure