diff options
| author | Jonathan Roelofs <jonathan@codesourcery.com> | 2014-08-20 23:38:50 +0000 |
|---|---|---|
| committer | Jonathan Roelofs <jonathan@codesourcery.com> | 2014-08-20 23:38:50 +0000 |
| commit | 44937d98a30c5ad8b6fdcdfece07228b159fbf24 (patch) | |
| tree | 9cfb09eadc8d22e548f35bb74445e887c1a2488f /llvm/test/CodeGen/ARM | |
| parent | a56749064a34b8416e7ddbf01fb930488d7f22d6 (diff) | |
| download | bcm5719-llvm-44937d98a30c5ad8b6fdcdfece07228b159fbf24.tar.gz bcm5719-llvm-44937d98a30c5ad8b6fdcdfece07228b159fbf24.zip | |
Lower thumbv4t & thumbv5 lo->lo copies through a push-pop sequence
On pre-v6 hardware, 'MOV lo, lo' gives undefined results, so such copies need to
be avoided. This patch trades simplicity for implementation time at the expense
of performance... As they say: correctness first, then performance.
See http://lists.cs.uiuc.edu/pipermail/llvmdev/2014-August/075998.html for a few
ideas on how to make this better.
llvm-svn: 216138
Diffstat (limited to 'llvm/test/CodeGen/ARM')
| -rw-r--r-- | llvm/test/CodeGen/ARM/atomic-cmpxchg.ll | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/llvm/test/CodeGen/ARM/atomic-cmpxchg.ll b/llvm/test/CodeGen/ARM/atomic-cmpxchg.ll index 4b79fa25145..84790be6d60 100644 --- a/llvm/test/CodeGen/ARM/atomic-cmpxchg.ll +++ b/llvm/test/CodeGen/ARM/atomic-cmpxchg.ll @@ -20,12 +20,15 @@ entry: ; CHECK-THUMB-LABEL: test_cmpxchg_res_i8 ; CHECK-THUMB: bl __sync_val_compare_and_swap_1 -; CHECK-THUMB: mov [[R1:r[0-9]+]], r0 +; CHECK-THUMB-NOT: mov [[R1:r[0-7]]], r0 +; CHECK-THUMB: push {r0} +; CHECK-THUMB: pop {[[R1:r[0-7]]]} ; CHECK-THUMB: movs r0, #1 ; CHECK-THUMB: movs [[R2:r[0-9]+]], #0 ; CHECK-THUMB: cmp [[R1]], {{r[0-9]+}} ; CHECK-THU<B: beq -; CHECK-THUMB: mov r0, [[R2]] +; CHECK-THUMB: push {[[R2]]} +; CHECK-THUMB: pop {r0} ; CHECK-ARMV7-LABEL: test_cmpxchg_res_i8 ; CHECK-ARMV7: ldrexb [[R3:r[0-9]+]], [r0] |

