
When converting this test to opaque pointers, we get a register move between the call and the inline asm. However, the test comment specifically says that there should be nothing between them. As far as I can tell, this is fine, both in that the inline asm doesn't use the relevant registers, but also more generally because the inline asm doesn't declare any clobbers, so really LLVM can do whatever, side effects or not. The test was added by 618ce3e85ed1c68e89dc696b7c9ab94a6a910797 with only a reference to Apple's internal issue tracker. Differential Revision: https://reviews.llvm.org/D147512
31 lines
1012 B
LLVM
31 lines
1012 B
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
|
|
; RUN: llc -fast-isel < %s | FileCheck %s
|
|
target datalayout = "e-m:o-p:32:32-i1:8:32-i8:8:32-i16:16:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32"
|
|
target triple = "thumbv7-apple-ios5.0.0"
|
|
|
|
%0 = type opaque
|
|
|
|
; Make sure that there are no unexpected instructions between the call to bar
|
|
; and the inline asm.
|
|
define void @test_inline_asm_sideeffect(ptr %call) {
|
|
; CHECK-LABEL: test_inline_asm_sideeffect:
|
|
; CHECK: @ %bb.0:
|
|
; CHECK-NEXT: push {r4, r7, lr}
|
|
; CHECK-NEXT: add r7, sp, #4
|
|
; CHECK-NEXT: mov r4, r0
|
|
; CHECK-NEXT: bl _bar
|
|
; CHECK-NEXT: mov r0, r4
|
|
; CHECK-NEXT: @ InlineAsm Start
|
|
; CHECK-NEXT: mov r7, r7 @ marker
|
|
; CHECK-NEXT: @ InlineAsm End
|
|
; CHECK-NEXT: bl _foo
|
|
; CHECK-NEXT: pop {r4, r7, pc}
|
|
call void @bar()
|
|
call void asm sideeffect "mov\09r7, r7\09\09@ marker", ""()
|
|
%1 = call ptr @foo(ptr %call)
|
|
ret void
|
|
}
|
|
|
|
declare ptr @foo(ptr)
|
|
declare void @bar()
|