xref: /llvm-project/llvm/test/CodeGen/MSP430/asm-clobbers.ll (revision 9a9c6b8e7587d0459393024e793e299c96bde0d2)
1; RUN: llc < %s | FileCheck %s
2
3target datalayout = "e-m:e-p:16:16-i32:16:32-a:16-n8:16"
4target triple = "msp430---elf"
5
6define void @test_no_clobber() {
7entry:
8; CHECK-LABEL: test_no_clobber
9; CHECK-NOT: push
10  call void asm sideeffect "", ""()
11; CHECK-NOT: pop
12  ret void
13; CHECK: -- End function
14}
15
16define void @test_1() {
17entry:
18; CHECK-LABEL: test_1:
19; CHECK: push r4
20; CHECK: .cfi_def_cfa_offset 4
21; CHECK: push r6
22; CHECK: .cfi_def_cfa_offset 6
23; CHECK: push r8
24; CHECK: .cfi_def_cfa_offset 8
25; CHECK: .cfi_offset r4, -4
26; CHECK: .cfi_offset r6, -6
27; CHECK: .cfi_offset r8, -8
28  call void asm sideeffect "", "~{r4},~{r6},~{r8}"()
29; CHECK: pop r8
30; CHECK: .cfi_def_cfa_offset 6
31; CHECK: pop r6
32; CHECK: .cfi_def_cfa_offset 4
33; CHECK: pop r4
34; CHECK: .cfi_def_cfa_offset 2
35; CHECK: .cfi_restore r4
36; CHECK: .cfi_restore r6
37; CHECK: .cfi_restore r8
38  ret void
39}
40
41define void @test_2() {
42entry:
43; CHECK-LABEL: test_2:
44; CHECK: push  r5
45; CHECK: .cfi_def_cfa_offset 4
46; CHECK: push  r7
47; CHECK: .cfi_def_cfa_offset 6
48; CHECK: push  r9
49; CHECK: .cfi_def_cfa_offset 8
50; CHECK: .cfi_offset r5, -4
51; CHECK: .cfi_offset r7, -6
52; CHECK: .cfi_offset r9, -8
53  call void asm sideeffect "", "~{r5},~{r7},~{r9}"()
54; CHECK: pop r9
55; CHECK: .cfi_def_cfa_offset 6
56; CHECK: pop r7
57; CHECK: .cfi_def_cfa_offset 4
58; CHECK: pop r5
59; CHECK: .cfi_def_cfa_offset 2
60; CHECK: .cfi_restore r5
61; CHECK: .cfi_restore r7
62; CHECK: .cfi_restore r9
63  ret void
64}
65
66; The r10 register is special because the sequence
67;   pop r10
68;   ret
69; can be replaced with
70;   jmp __mspabi_func_epilog_1
71; or other such function (depending on previous instructions).
72; Still, it is not replaced *yet*.
73define void @test_r10() {
74entry:
75; CHECK-LABEL: test_r10:
76; CHECK: push r10
77; CHECK: .cfi_def_cfa_offset 4
78; CHECK: .cfi_offset r10, -4
79  call void asm sideeffect "", "~{r10}"()
80; CHECK: pop r10
81; CHECK: .cfi_def_cfa_offset 2
82; CHECK: .cfi_restore r10
83  ret void
84}
85