Commit Graph

20 Commits

Author SHA1 Message Date
Bill Wendling
de2b151dbf Consider this code snippet:
float t1(int argc) {
  return (argc == 1123) ? 1.234f : 2.38213f;
}

We would generate truly awful code on ARM (those with a weak stomach should look
away):

_t1:
  movw   r1, #1123
  movs   r2, #1
  movs   r3, #0
  cmp    r0, r1
  mov.w  r0, #0
  it     eq
  moveq  r0, r2
  movs   r1, #4
  cmp    r0, #0
  it     ne
  movne  r3, r1
  adr    r0, #LCPI1_0
  ldr    r0, [r0, r3]
  bx     lr

The problem was that legalization was creating a cascade of SELECT_CC nodes, for
for the comparison of "argc == 1123" which was fed into a SELECT node for the ?:
statement which was itself converted to a SELECT_CC node. This is because the
ARM back-end doesn't have custom lowering for SELECT nodes, so it used the
default "Expand".

I added a fairly simple "LowerSELECT" to the ARM back-end. It takes care of this
testcase, but can obviously be expanded to include more cases.

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



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110799 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-11 08:43:16 +00:00
Jim Grosbach
e5165490b7 Use Unified Assembly Syntax for the ARM backend.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86494 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-09 00:11:35 +00:00
Bob Wilson
e8e72be33a Convert some ARM tests with lots of greps to use FileCheck.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83651 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-09 17:20:46 +00:00
Dan Gohman
fce288fc91 Eliminate more uses of llvm-as and llvm-dis.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81293 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-09 00:09:15 +00:00
Evan Cheng
9f76ed5127 Move thumb and thumb2 tests into separate directories.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74068 91177308-0d34-0410-b5e6-96231b3b80d8
2009-06-24 06:36:07 +00:00
Dan Gohman
28beeeac4d Convert tests using "| wc -l | grep ..." to use the count script.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41097 91177308-0d34-0410-b5e6-96231b3b80d8
2007-08-15 13:36:28 +00:00
Reid Spencer
1c0c94d6df For PR1319: Upgrade to use new test harness
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36076 91177308-0d34-0410-b5e6-96231b3b80d8
2007-04-15 19:11:47 +00:00
Evan Cheng
0430a8df0e -march=arm -enable-thumb => -march=thumb
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34522 91177308-0d34-0410-b5e6-96231b3b80d8
2007-02-23 03:15:39 +00:00
Reid Spencer
e3ff5ada8a For PR761:
Remove "target endian/pointersize" or add "target datalayout" to make
the test parse properly or set the datalayout because defaults changes.

For PR645:
Make global names use the @ prefix.

For llvm-upgrade changes:
Fix test cases or completely remove use of llvm-upgrade for test cases
that cannot survive the new renaming or upgrade capabilities.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33533 91177308-0d34-0410-b5e6-96231b3b80d8
2007-01-26 08:25:06 +00:00
Evan Cheng
02b985c50f ARM test cases contributed by Apple.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33354 91177308-0d34-0410-b5e6-96231b3b80d8
2007-01-19 09:20:23 +00:00
Reid Spencer
69ccadd753 Use the llvm-upgrade program to upgrade llvm assembly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32115 91177308-0d34-0410-b5e6-96231b3b80d8
2006-12-02 04:23:10 +00:00
Rafael Espindola
ebdabda708 more condition codes
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30567 91177308-0d34-0410-b5e6-96231b3b80d8
2006-09-21 13:06:26 +00:00
Rafael Espindola
e246fd953e fix select.ll to always test a select node
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30187 91177308-0d34-0410-b5e6-96231b3b80d8
2006-09-08 12:52:50 +00:00
Rafael Espindola
5c2aa0a4d8 implement unconditional branches
fix select.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30186 91177308-0d34-0410-b5e6-96231b3b80d8
2006-09-08 12:47:03 +00:00
Chris Lattner
81fe06a112 This fails
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30148 91177308-0d34-0410-b5e6-96231b3b80d8
2006-09-07 17:43:59 +00:00
Rafael Espindola
d520dd7a24 run llc with -march=arm in select.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29821 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-22 16:19:54 +00:00
Chris Lattner
0af617fa32 This passes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29813 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-22 06:43:24 +00:00
Reid Spencer
20486a5fc7 Use the correct syntax.
Note to self: test before committing things!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29810 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-22 05:40:51 +00:00
Reid Spencer
d989e6dcc9 Add a simple RUN line so this doesn't always fail. XFAIL this until
Rafael can get a chance to fix it.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29809 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-22 05:37:43 +00:00
Rafael Espindola
3c000bf817 initial support for select
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29802 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-21 22:00:32 +00:00