| ; RUN: llc < %s | FileCheck %s |
| |
| target datalayout = "e-m:e-p:16:16-i32:16:32-a:16-n8:16" |
| target triple = "msp430---elf" |
| |
| define void @test_no_clobber() { |
| entry: |
| ; CHECK-LABEL: test_no_clobber |
| ; CHECK-NOT: push |
| call void asm sideeffect "", ""() |
| ; CHECK-NOT: pop |
| ret void |
| ; CHECK: -- End function |
| } |
| |
| define void @test_1() { |
| entry: |
| ; CHECK-LABEL: test_1: |
| ; CHECK: push r8 |
| ; CHECK: push r6 |
| ; CHECK: push r4 |
| call void asm sideeffect "", "~{r4},~{r6},~{r8}"() |
| ; CHECK: pop r4 |
| ; CHECK: pop r6 |
| ; CHECK: pop r8 |
| ret void |
| } |
| |
| define void @test_2() { |
| entry: |
| ; CHECK-LABEL: test_2: |
| ; CHECK: push r9 |
| ; CHECK: push r7 |
| ; CHECK: push r5 |
| call void asm sideeffect "", "~{r5},~{r7},~{r9}"() |
| ; CHECK: pop r5 |
| ; CHECK: pop r7 |
| ; CHECK: pop r9 |
| ret void |
| } |
| |
| ; The r10 register is special because the sequence |
| ; pop r10 |
| ; ret |
| ; can be replaced with |
| ; jmp __mspabi_func_epilog_1 |
| ; or other such function (depending on previous instructions). |
| ; Still, it is not replaced *yet*. |
| define void @test_r10() { |
| entry: |
| ; CHECK-LABEL: test_r10: |
| ; CHECK: push r10 |
| call void asm sideeffect "", "~{r10}"() |
| ; CHECK: pop r10 |
| ret void |
| } |