| ; RUN: llc -o - %s | FileCheck %s |
| ; RUN: llc -global-isel -verify-machineinstrs -o - %s | FileCheck %s |
| target triple="aarch64--" |
| |
| declare void @somefunc() |
| define preserve_mostcc void @test_ccmismatch_notail() { |
| ; Ensure that no tail call is used here, as the called function somefunc does |
| ; not preserve enough registers for preserve_mostcc. |
| ; CHECK-LABEL: test_ccmismatch_notail: |
| ; CHECK-NOT: b somefunc |
| ; CHECK: bl somefunc |
| tail call void @somefunc() |
| ret void |
| } |
| |
| declare preserve_mostcc void @some_preserve_most_func() |
| define void @test_ccmismatch_tail() { |
| ; We can perform a tail call here, because some_preserve_most_func preserves |
| ; all registers necessary for test_ccmismatch_tail. |
| ; CHECK-LABEL: test_ccmismatch_tail: |
| ; CHECK-NOT: bl some_preserve_most_func |
| ; CHECK: b some_preserve_most_func |
| tail call preserve_mostcc void @some_preserve_most_func() |
| ret void |
| } |