[LLVMbugs] [Bug 21807] New: Minor code difference building with/without -g
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Wed Dec 10 07:14:36 PST 2014
http://llvm.org/bugs/show_bug.cgi?id=21807
Bug ID: 21807
Summary: Minor code difference building with/without -g
Product: tools
Version: trunk
Hardware: PC
OS: Windows NT
Status: NEW
Severity: normal
Priority: P
Component: llc
Assignee: unassignedbugs at nondot.org
Reporter: russell_gallop at sn.scee.net
CC: llvmbugs at cs.uiuc.edu
Classification: Unclassified
Created attachment 13451
--> http://llvm.org/bugs/attachment.cgi?id=13451&action=edit
Original source and IR to reproduce
I've observed a small difference in the code generated from the attached cpp
differs depending on the -g flag. This is a non-functional change. I am using
revision 223924.
e.g.
# Without -g
clang -O2 -c test.cpp -o test.o
objdump -d test.o > test.od
# With -g
clang -O2 -c test.cpp -g -o testg.o
objdump -d testg.o > testg.od
# Compare
diff -I "file format" test.od testg.od
17,18c17,18
< 1b: 89 da mov %ebx,%edx
< 1d: 41 89 d8 mov %ebx,%r8d
---
> 1b: 41 89 d8 mov %ebx,%r8d
> 1e: 89 da mov %ebx,%edx
We've determined that with -g the machine scheduler uses a different scheduling
strategy based on the number of instructions in a schedule region.
The difference is likely because it does not exclude debug instructions from
the count. With the following patch we get the same instruction sequence
with/without -g.
diff --git a/lib/CodeGen/MachineScheduler.cpp
b/lib/CodeGen/MachineScheduler.cpp
index 261942f..cc8f3a0 100644
--- a/lib/CodeGen/MachineScheduler.cpp
+++ b/lib/CodeGen/MachineScheduler.cpp
@@ -430,9 +430,11 @@ void
MachineSchedulerBase::scheduleRegions(ScheduleDAGInstrs &Scheduler) {
// instruction stream until we find the nearest boundary.
unsigned NumRegionInstrs = 0;
MachineBasicBlock::iterator I = RegionEnd;
- for(;I != MBB->begin(); --I, --RemainingInstrs, ++NumRegionInstrs) {
+ for(;I != MBB->begin(); --I, --RemainingInstrs) {
if (isSchedBoundary(std::prev(I), MBB, MF, TII, IsPostRA))
break;
+ if (!I->isDebugValue())
+ ++NumRegionInstrs;
}
// Notify the scheduler of the region, even if we may skip scheduling
// it. Perhaps it still needs to be bundled.
The difference can also be seen with the attached IR:
llc test.ll
llc testg.ll
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20141210/05939598/attachment.html>
More information about the llvm-bugs
mailing list