[LLVMbugs] [Bug 2035] New: Suboptimal code storing to a bitfield
bugzilla-daemon at cs.uiuc.edu
bugzilla-daemon at cs.uiuc.edu
Thu Feb 14 06:39:59 PST 2008
http://llvm.org/bugs/show_bug.cgi?id=2035
Summary: Suboptimal code storing to a bitfield
Product: new-bugs
Version: unspecified
Platform: PC
OS/Version: Linux
Status: NEW
Severity: normal
Priority: P2
Component: new bugs
AssignedTo: unassignedbugs at nondot.org
ReportedBy: sharparrow1 at yahoo.com
CC: llvmbugs at cs.uiuc.edu
Take the following code:
void x(struct {int a : 5, b : 5;} *c, int x) {c->a = x;}
llvm-gcc generates the following code sequence:
x:
movl 4(%esp), %eax
movw $65504, %cx
andw (%eax), %cx
movw $31, %dx
andw 8(%esp), %dx
orw %dx, %cx
movw %cx, (%eax)
ret
gcc generates a similar sequence. However, there is a straightforward sequence
that is two instructions shorter:
x:
movl 4(%esp), %eax
movw 8(%esp), %dx
xorw (%eax), %dx
andw $31, %dx
xorw %dx, (%eax)
ret
This doesn't actually save any logical operations, but it doesn't move stuff
around as much.
I'm not sure if this bug affects real code, since I just came up with it by
experimenting, but it doesn't seem like an unusual sort of construct. I'm also
not sure if it's actually worth using; it's quite possible I'm missing
something. That said, it seems like something interesting to investigate.
--
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
More information about the llvm-bugs
mailing list