[PATCH] D39053: [Bitfield] Add more cases to making the bitfield a separate location

Mandeep Singh Grang via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Apr 20 12:17:10 PDT 2018


mgrang added a comment.

Here is a test case which improves with this patch (for RISCV target). It is able to detect load/store halfword for size 16 bitfields.

  struct st {
    int a:1;
    int b:8;
    int c:11;
    int d:12;
    int e:16;
    int f:16;
    int g:16;
  } S;
  
  void foo(int x) {
    S.e = x;
  }

GCC:

  00000000 <foo>:
     0:	000007b7          	lui	x15,0x0
     4:	00a79223          	sh	x10,4(x15) # 4 <foo+0x4>
     8:	00008067          	jalr	x0,0(x1)

LLVM without this patch:

  00000000 <foo>:
     0:	000105b7          	lui	x11,0x10
     4:	fff58593          	addi	x11,x11,-1 # ffff <foo+0xffff>
     8:	00b57533          	and	x10,x10,x11
     c:	000005b7          	lui	x11,0x0
    10:	00058593          	addi	x11,x11,0 # 0 <foo>
    14:	0045a603          	lw	x12,4(x11)
    18:	ffff06b7          	lui	x13,0xffff0
    1c:	00d67633          	and	x12,x12,x13
    20:	00a66533          	or	x10,x12,x10
    24:	00a5a223          	sw	x10,4(x11)
    28:	00008067          	jalr	x0,0(x1)

LLVM with this patch:

  00000000 <foo>:
     0:	000005b7          	lui	x11,0x0
     4:	00058593          	addi	x11,x11,0 # 0 <foo>
     8:	00a59223          	sh	x10,4(x11)
     c:	00008067          	jalr	x0,0(x1)




https://reviews.llvm.org/D39053





More information about the cfe-commits mailing list