diff options
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/CodeGen/ARM/atomic-cmpxchg.ll | 7 | ||||
| -rw-r--r-- | llvm/test/CodeGen/Thumb/copy_thumb.ll | 38 |
2 files changed, 43 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] diff --git a/llvm/test/CodeGen/Thumb/copy_thumb.ll b/llvm/test/CodeGen/Thumb/copy_thumb.ll new file mode 100644 index 00000000000..528f54bd84e --- /dev/null +++ b/llvm/test/CodeGen/Thumb/copy_thumb.ll @@ -0,0 +1,38 @@ +; RUN: llc -mtriple=armv4-none--eabi < %s | FileCheck %s --check-prefix=CHECK-LOLOMOV +; RUN: llc -mtriple=armv4t-none--eabi < %s | FileCheck %s --check-prefix=CHECK-LOLOMOV +; RUN: llc -mtriple=armv5-none--eabi < %s | FileCheck %s --check-prefix=CHECK-LOLOMOV +; RUN: llc -mtriple=armv6-none--eabi < %s | FileCheck %s --check-prefix=CHECK-LOLOMOV +; RUN: llc -mtriple=armv7-none--eabi < %s | FileCheck %s --check-prefix=CHECK-LOLOMOV +; RUN: llc -mtriple=thumbv6-none--eabi < %s | FileCheck %s --check-prefix=CHECK-LOLOMOV +; RUN: llc -mtriple=thumbv7-none--eabi < %s | FileCheck %s --check-prefix=CHECK-LOLOMOV +; CHECK-LOLOMOV-LABEL: foo +; CHECK-LOLOMOV: mov [[TMP:r[0-7]]], [[SRC1:r[01]]] +; CHECK-LOLOMOV-NEXT: mov [[SRC1]], [[SRC2:r[01]]] +; CHECK-LOLOMOV-NEXT: mov [[SRC2]], [[TMP]] +; CHECK-LOLOMOV-LABEL: bar +; CHECK-LOLOMOV-LABEL: fnend +; +; 'MOV lo, lo' in Thumb mode produces undefined results on pre-v6 hardware +; RUN: llc -mtriple=thumbv4t-none--eabi < %s | FileCheck %s --check-prefix=CHECK-NOLOLOMOV +; RUN: llc -mtriple=thumbv5-none--eabi < %s | FileCheck %s --check-prefix=CHECK-NOLOLOMOV +; CHECK-NOLOLOMOV-LABEL: foo +; CHECK-NOLOLOMOV-NOT: mov [[TMP:r[0-7]]], [[SRC1:r[01]]] +; CHECK-NOLOLOMOV: push {[[SRC1:r[01]]]} +; CHECK-NOLOLOMOV-NEXT: pop {[[TMP:r[0-7]]]} +; CHECK-NOLOLOMOV-NOT: mov [[TMP:r[0-7]]], [[SRC1:r[01]]] +; CHECK-NOLOLOMOV: push {[[SRC2:r[01]]]} +; CHECK-NOLOLOMOV-NEXT: pop {[[SRC1]]} +; CHECK-NOLOLOMOV-NOT: mov [[TMP:r[0-7]]], [[SRC1:r[01]]] +; CHECK-NOLOLOMOV: push {[[TMP]]} +; CHECK-NOLOLOMOV-NEXT: pop {[[SRC2]]} +; CHECK-NOLOLOMOV-LABEL: bar +; CHECK-NOLOLOMOV-LABEL: fnend + +declare void @bar(i32, i32) + +define void @foo(i32 %a, i32 %b) { +entry: + call void @bar(i32 %b, i32 %a); + ret void +} + |

