blob: a7c8f6e75f0fbee7fe851f852f3fe35bff577ae1 [file] [log] [blame]
Dylan McKay19d95332017-02-22 22:41:13 +00001; RUN: llc < %s -march=avr -no-integrated-as | FileCheck %s
Dylan McKayd8a603c2016-12-10 11:49:07 +00002; XFAIL: *
3
4; Multibyte references
5
6; CHECK-LABEL: multibyte_i16
7define void @multibyte_i16(i16 %a) {
8entry:
9; CHECK: instr r24 r25
10 call void asm sideeffect "instr ${0:A} ${0:B}", "r"(i16 %a)
11; CHECK: instr r25 r24
12 call void asm sideeffect "instr ${0:B} ${0:A}", "r"(i16 %a)
13 ret void
14}
15
16; CHECK-LABEL: multibyte_i32
17define void @multibyte_i32(i32 %a) {
18entry:
19; CHECK: instr r22 r23 r24 r25
20 call void asm sideeffect "instr ${0:A} ${0:B} ${0:C} ${0:D}", "r"(i32 %a)
21; CHECK: instr r25 r24 r23 r22
22 call void asm sideeffect "instr ${0:D} ${0:C} ${0:B} ${0:A}", "r"(i32 %a)
23 ret void
24}
25
26; CHECK-LABEL: multibyte_alternative_name
27define void @multibyte_alternative_name(i16* %p) {
28entry:
29; CHECK: instr Z
30 call void asm sideeffect "instr ${0:a}", "e" (i16* %p)
31 ret void
32}
33
34; CHECK-LABEL: multibyte_a_i32
35define void @multibyte_a_i32() {
36entry:
37 %a = alloca i32
38 %0 = load i32, i32* %a
39; CHECK: instr r20 r21 r22 r23
40 call void asm sideeffect "instr ${0:A} ${0:B} ${0:C} ${0:D}", "a"(i32 %0)
41 ret void
42}
43
44@c = internal global i32 0
45
46; CHECK-LABEL: multibyte_b_i32
47define void @multibyte_b_i32() {
48entry:
49 %0 = load i32, i32* @c
50; CHECK: instr r28 r29 r30 r31
51 call void asm sideeffect "instr ${0:A} ${0:B} ${0:C} ${0:D}", "b"(i32 %0)
52 ret void
53}
54
55; CHECK-LABEL: multibyte_d_i32
56define void @multibyte_d_i32() {
57entry:
58 %a = alloca i32
59 %0 = load i32, i32* %a
60; CHECK: instr r18 r19 r24 r25
61 call void asm sideeffect "instr ${0:A} ${0:B} ${0:C} ${0:D}", "d"(i32 %0)
62 ret void
63}
64
65; CHECK-LABEL: multibyte_e_i32
66define void @multibyte_e_i32() {
67entry:
68 %a = alloca i32
69 %0 = load i32, i32* %a
70; CHECK: instr r26 r27 r30 r31
71 call void asm sideeffect "instr ${0:A} ${0:B} ${0:C} ${0:D}", "e"(i32 %0)
72 ret void
73}
74
75; CHECK-LABEL: multibyte_l_i32
76define void @multibyte_l_i32() {
77entry:
78 %a = alloca i32
79 %0 = load i32, i32* %a
80; CHECK: instr r12 r13 r14 r15
81 call void asm sideeffect "instr ${0:A} ${0:B} ${0:C} ${0:D}", "l"(i32 %0)
82 ret void
83}
84
85; CHECK-LABEL: multibyte_a_i16
86define void @multibyte_a_i16() {
87entry:
88 %a = alloca i16
89 %0 = load i16, i16* %a
90; CHECK: instr r22 r23
91 call void asm sideeffect "instr ${0:A} ${0:B}", "a"(i16 %0)
92 ret void
93}
94
95; CHECK-LABEL: multibyte_b_i16
96define void @multibyte_b_i16() {
97entry:
98 %a = alloca i16
99 %0 = load i16, i16* %a
100; CHECK: instr r30 r31
101 call void asm sideeffect "instr ${0:A} ${0:B}", "b"(i16 %0)
102 ret void
103}
104
105; CHECK-LABEL: multibyte_d_i16
106define void @multibyte_d_i16() {
107entry:
108 %a = alloca i16
109 %0 = load i16, i16* %a
110; CHECK: instr r24 r25
111 call void asm sideeffect "instr ${0:A} ${0:B}", "d"(i16 %0)
112 ret void
113}
114
115; CHECK-LABEL: multibyte_e_i16
116define void @multibyte_e_i16() {
117entry:
118 %a = alloca i16
119 %0 = load i16, i16* %a
120; CHECK: instr r30 r31
121 call void asm sideeffect "instr ${0:A} ${0:B}", "e"(i16 %0)
122 ret void
123}
124
125; CHECK-LABEL: multibyte_l_i16
126define void @multibyte_l_i16() {
127entry:
128 %a = alloca i16
129 %0 = load i16, i16* %a
130; CHECK: instr r14 r15
131 call void asm sideeffect "instr ${0:A} ${0:B}", "l"(i16 %0)
132 ret void
133}
134
135