[PATCH] D15256: ARM: Better codegen for 64-bit compares.

Peter Collingbourne via llvm-commits llvm-commits at lists.llvm.org
Fri Dec 4 19:30:32 PST 2015


pcc created this revision.
pcc added reviewers: rengolin, hans.
pcc added subscribers: llvm-commits, mkuper, DavidKreitzer.
Herald added subscribers: rengolin, aemerson.

This introduces a custom lowering for ISD::SETCCE (introduced in r253572)
that allows us to emit a short code sequence for 64-bit compares.

Before:

	push	{r7, lr}
	cmp	r0, r2
	mov.w	r0, #0
	mov.w	r12, #0
	it	hs
	movhs	r0, #1
	cmp	r1, r3
	it	ge
	movge.w	r12, #1
	it	eq
	moveq	r12, r0
	cmp.w	r12, #0
	bne	.LBB1_2
@ BB#1:                                 @ %bb1
	bl	f
	pop	{r7, pc}
.LBB1_2:                                @ %bb2
	bl	g
	pop	{r7, pc}

After:

	push	{r7, lr}
	subs	r0, r0, r2
	sbcs.w	r0, r1, r3
	bge	.LBB1_2
@ BB#1:                                 @ %bb1
	bl	f
	pop	{r7, pc}
.LBB1_2:                                @ %bb2
	bl	g
	pop	{r7, pc}

Saves around 80KB in Chromium's libchrome.so.

Some notes on this patch:

- I don't much like the ARMISD::BRCOND and ARMISD::CMOV combines I
  introduced (nothing else needs them). However, they are necessary in
  order to avoid poor codegen, and they seem similar to existing combines
  in other backends (e.g. X86 combines (brcond (cmp (setcc Compare))) to
  (brcond Compare)).

- No support for Thumb-1. This is in principle possible, but we'd need
  to implement ARMISD::SUBE for Thumb-1.

http://reviews.llvm.org/D15256

Files:
  lib/Target/ARM/ARMISelLowering.cpp
  lib/Target/ARM/ARMISelLowering.h
  test/CodeGen/ARM/atomic-64bit.ll
  test/CodeGen/ARM/atomic-ops-v8.ll
  test/CodeGen/ARM/wide-compares.ll

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D15256.41972.patch
Type: text/x-patch
Size: 22619 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151205/5d7a3036/attachment.bin>


More information about the llvm-commits mailing list