diff options
Diffstat (limited to 'llvm/test/CodeGen/ARM')
-rw-r--r-- | llvm/test/CodeGen/ARM/arm-shrink-wrapping.ll | 2 | ||||
-rw-r--r-- | llvm/test/CodeGen/ARM/noreturn-csr-skip.mir | 51 |
2 files changed, 52 insertions, 1 deletions
diff --git a/llvm/test/CodeGen/ARM/arm-shrink-wrapping.ll b/llvm/test/CodeGen/ARM/arm-shrink-wrapping.ll index 1985ff9b4a2..c943f60c56d 100644 --- a/llvm/test/CodeGen/ARM/arm-shrink-wrapping.ll +++ b/llvm/test/CodeGen/ARM/arm-shrink-wrapping.ll @@ -327,7 +327,7 @@ declare void @somethingElse(...) ; DISABLE-NEXT: pop {r4, r7, pc} ; ; ENABLE-NEXT: bx lr -define i32 @loopInfoRestoreOutsideLoop(i32 %cond, i32 %N) "no-frame-pointer-elim"="true" #0 { +define i32 @loopInfoRestoreOutsideLoop(i32 %cond, i32 %N) "no-frame-pointer-elim"="true" nounwind { entry: %tobool = icmp eq i32 %cond, 0 br i1 %tobool, label %if.else, label %if.then diff --git a/llvm/test/CodeGen/ARM/noreturn-csr-skip.mir b/llvm/test/CodeGen/ARM/noreturn-csr-skip.mir new file mode 100644 index 00000000000..c3b9718ac9e --- /dev/null +++ b/llvm/test/CodeGen/ARM/noreturn-csr-skip.mir @@ -0,0 +1,51 @@ +# RUN: llc -mtriple thumbv7m-none-eabi -run-pass prologepilog %s -o - | FileCheck %s + +--- | + define void @throw() noreturn { unreachable } + + define void @ret() nounwind { ret void } + + define void @noret() noreturn nounwind { + start: + %p = alloca i32 + store i32 42, i32* %p + unreachable + } +... +--- +# This function may return by exception. Check that $r4 is saved and restored. +# CHECK-LABEL: name: throw +# CHECK: killed $r4 +# CHECK: def $r4 +name: throw +body: | + bb.0: + $r4 = IMPLICIT_DEF + tBX_RET 14, $noreg +--- +--- +# This function may return. Check that $r4 is saved and restored. +# CHECK-LABEL: name: ret +# CHECK: killed $r4 +# CHECK: def $r4 +name: ret +body: | + bb.0: + $r4 = IMPLICIT_DEF + tBX_RET 14, $noreg +--- +--- +# This function does not return. We need not save any CSR, but +# other stack adjustments in the prologue are still necessary. +# CHECK-LABEL: name: noret +# CHECK-NOT: killed $r4 +# CHECK-NOT: def $r4 +# CHECK: $sp = frame-setup +name: noret +stack: + - { id: 0, name: p, offset: 0, size: 4, alignment: 4, local-offset: -4 } +body: | + bb.0: + $r4 = IMPLICIT_DEF + tBX_RET 14, $noreg +--- |