1 // Registers R0 - R3 have different names inside the LLVM MSP430 target code.
2 // Test that they are handled properly when used inside clobber lists.
3 // At the time of writing, llc silently ignores unknown register names.
4
5 // REQUIRES: msp430-registered-target
6 // RUN: %clang -target msp430 -c %s -mllvm -stop-after=finalize-isel -o- | FileCheck %s
7
test_function(void)8 void test_function(void) {
9 asm volatile(""
10 :
11 :
12 : "r0");
13 asm volatile(""
14 :
15 :
16 : "r1");
17 asm volatile(""
18 :
19 :
20 : "r2");
21 asm volatile(""
22 :
23 :
24 : "r3");
25 asm volatile(""
26 :
27 :
28 : "r4");
29 asm volatile(""
30 :
31 :
32 : "r5");
33 asm volatile(""
34 :
35 :
36 : "r6");
37 asm volatile(""
38 :
39 :
40 : "r7");
41 asm volatile(""
42 :
43 :
44 : "r8");
45 asm volatile(""
46 :
47 :
48 : "r9");
49 asm volatile(""
50 :
51 :
52 : "r10");
53 asm volatile(""
54 :
55 :
56 : "r11");
57 asm volatile(""
58 :
59 :
60 : "r12");
61 asm volatile(""
62 :
63 :
64 : "r13");
65 asm volatile(""
66 :
67 :
68 : "r14");
69 asm volatile(""
70 :
71 :
72 : "r15");
73 // CHECK: call void asm sideeffect "", "~{pc}"()
74 // CHECK: call void asm sideeffect "", "~{sp}"()
75 // CHECK: call void asm sideeffect "", "~{sr}"()
76 // CHECK: call void asm sideeffect "", "~{cg}"()
77 // CHECK: call void asm sideeffect "", "~{r4}"()
78 // CHECK: call void asm sideeffect "", "~{r5}"()
79 // CHECK: call void asm sideeffect "", "~{r6}"()
80 // CHECK: call void asm sideeffect "", "~{r7}"()
81 // CHECK: call void asm sideeffect "", "~{r8}"()
82 // CHECK: call void asm sideeffect "", "~{r9}"()
83 // CHECK: call void asm sideeffect "", "~{r10}"()
84 // CHECK: call void asm sideeffect "", "~{r11}"()
85 // CHECK: call void asm sideeffect "", "~{r12}"()
86 // CHECK: call void asm sideeffect "", "~{r13}"()
87 // CHECK: call void asm sideeffect "", "~{r14}"()
88 // CHECK: call void asm sideeffect "", "~{r15}"()
89 // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $pc
90 // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $sp
91 // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $sr
92 // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $cg
93 // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $r4
94 // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $r5
95 // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $r6
96 // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $r7
97 // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $r8
98 // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $r9
99 // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $r10
100 // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $r11
101 // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $r12
102 // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $r13
103 // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $r14
104 // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $r15
105 }
106