[llvm-commits] [llvm] r110799 - in /llvm/trunk: lib/Target/ARM/ARMISelLowering.cpp lib/Target/ARM/ARMISelLowering.h test/CodeGen/ARM/select.ll

Stephen Canon scanon at apple.com
Thu Aug 19 16:23:24 PDT 2010


On Aug 19, 2010, at 4:18 PM, Bill Wendling wrote:

> 
> On Aug 19, 2010, at 3:58 PM, John Tytgat wrote:
> 
>> In message <20100811084316.8A1092A6C12C at llvm.org> you wrote:
>> 
>>> Author: void
>>> Date: Wed Aug 11 03:43:16 2010
>>> New Revision: 110799
>>> 
>>> URL: http://llvm.org/viewvc/llvm-project?rev=110799&view=rev
>>> Log:
>>> Consider this code snippet:
>>> 
>>> float t1(int argc) {
>>> return (argc == 1123) ? 1.234f : 2.38213f;
>>> }
>>> [...]
>>> 
>>> Now we generate this, which looks optimal to me:
>>> 
>>> _t1:
>>> movw   r1, #1123
>>> movs   r2, #0
>>> cmp    r0, r1
>>> adr    r0, #LCPI0_0
>>> it     eq
>>> moveq  r2, #4
>>> ldr    r0, [r0, r2]
>>> bx     lr
>>> .align  2
>>> LCPI0_0:
>>> .long   1075344593  @ float 2.382130e+00
>>> .long   1067316150  @ float 1.234000e+00
>> 
>> I don't know enough about Thumb to be sure (much more familiar with ARM)
>> but can't this be made more compact/faster using SUB instead of CMP
>> eliminating the MOV Rx, #0 ?
>> 
>> _t1:
>> movw   r1, #1123
>> subs   r2, r0, r1
>> adr    r0, #LCPI0_0
>> it     ne
>> movne  r2, #4
>> ldr    r0, [r0, r2]
>> bx     lr
>> .align  2
>> LCPI0_0:
>> .long   1067316150  @ float 1.234000e+00
>> .long   1075344593  @ float 2.382130e+00
>> 
> Steve Canon pointed out that this is optimal:
> 
> _t1:
> 	movw 	r1, 	#1123
> 	adr		r2,	#LCPI0_0
> 	cmp		r0,	r1
> 	it		eq
> 	addeq	r2,	r2,	#4
> 	ldr		r0,	[r2]
> 	bx		lr
> 
> Essentially, folding the offset increment into the 'it' block.

Not "optimal", I don't think, but I haven't had a chance to come up with something more clever =)

You could use a speculative load to avoid a stall on some dual-issue cores, but that's too something-or-other by half.

_t1:
	movw 	r1, 	#1123
	adr		r2,	#LCPI0_0
	cmp		r0,	r1
	ldr		r0,	[r2], #4
	it		eq
	ldreq	r0,	[r2]
	bx		lr

- Steve



More information about the llvm-commits mailing list