1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
; RUN: llc -mtriple=avr -filetype=asm -O1 < %s | FileCheck %s
define void @check60(ptr %1) {
; CHECK-LABEL: check60:
; CHECK-NEXT: %bb.0
; CHECK-NEXT: ldi r18, 0
; CHECK-NEXT: ldi r19, 0
; CHECK-NEXT: mov r30, r24
; CHECK-NEXT: mov r31, r25
; CHECK-NEXT: std Z+63, r19
; CHECK-NEXT: std Z+62, r18
; CHECK-NEXT: ldi r24, 210
; CHECK-NEXT: ldi r25, 4
; CHECK-NEXT: std Z+61, r25
; CHECK-NEXT: std Z+60, r24
; CHECK-NEXT: ret
bb0:
%2 = getelementptr i8, ptr %1, i8 60
store i32 1234, ptr %2
ret void
}
define void @check61(ptr %1) {
; CHECK-LABEL: check61:
; CHECK-NEXT: %bb.0
; CHECK-NEXT: ldi r18, 210
; CHECK-NEXT: ldi r19, 4
; CHECK-NEXT: mov r30, r24
; CHECK-NEXT: mov r31, r25
; CHECK-NEXT: std Z+62, r19
; CHECK-NEXT: std Z+61, r18
; CHECK-NEXT: adiw r24, 63
; CHECK-NEXT: ldi r18, 0
; CHECK-NEXT: ldi r19, 0
; CHECK-NEXT: mov r30, r24
; CHECK-NEXT: mov r31, r25
; CHECK-NEXT: std Z+1, r19
; CHECK-NEXT: st Z, r18
bb0:
%2 = getelementptr i8, ptr %1, i8 61
store i32 1234, ptr %2
ret void
}
define void @check62(ptr %1) {
; CHECK-LABEL: check62:
; CHECK-NEXT: %bb.0
; CHECK-NEXT: ldi r18, 210
; CHECK-NEXT: ldi r19, 4
; CHECK-NEXT: mov r30, r24
; CHECK-NEXT: mov r31, r25
; CHECK-NEXT: std Z+63, r19
; CHECK-NEXT: std Z+62, r18
; CHECK-NEXT: adiw r24, 62
; CHECK-NEXT: ldi r18, 0
; CHECK-NEXT: ldi r19, 0
; CHECK-NEXT: mov r30, r24
; CHECK-NEXT: mov r31, r25
; CHECK-NEXT: std Z+3, r19
; CHECK-NEXT: std Z+2, r18
; CHECK-NEXT: ret
bb0:
%2 = getelementptr i8, ptr %1, i8 62
store i32 1234, ptr %2
ret void
}
define void @check63(ptr %1) {
; CHECK-LABEL: check63:
; CHECK-NEXT: %bb.0
; CHECK-NEXT: adiw r24, 63
; CHECK-NEXT: ldi r18, 0
; CHECK-NEXT: ldi r19, 0
; CHECK-NEXT: mov r30, r24
; CHECK-NEXT: mov r31, r25
; CHECK-NEXT: std Z+3, r19
; CHECK-NEXT: std Z+2, r18
; CHECK-NEXT: ldi r24, 210
; CHECK-NEXT: ldi r25, 4
; CHECK-NEXT: std Z+1, r25
; CHECK-NEXT: st Z, r24
; CHECK-NEXT: ret
bb0:
%2 = getelementptr i8, ptr %1, i8 63
store i32 1234, ptr %2
ret void
}
define void @check64(ptr %1) {
; CHECK-LABEL: check64:
; CHECK-NEXT: %bb.0
; CHECK-NEXT: subi r24, 192
; CHECK-NEXT: sbci r25, 255
; CHECK-NEXT: ldi r18, 0
; CHECK-NEXT: ldi r19, 0
; CHECK-NEXT: mov r30, r24
; CHECK-NEXT: mov r31, r25
; CHECK-NEXT: std Z+3, r19
; CHECK-NEXT: std Z+2, r18
; CHECK-NEXT: ldi r24, 210
; CHECK-NEXT: ldi r25, 4
; CHECK-NEXT: std Z+1, r25
; CHECK-NEXT: st Z, r24
; CHECK-NEXT: ret
bb0:
%2 = getelementptr i8, ptr %1, i8 64
store i32 1234, ptr %2
ret void
}
define void @check65(ptr %1) {
; CHECK-LABEL: check65:
; CHECK-NEXT: %bb.0
; CHECK-NEXT: subi r24, 191
; CHECK-NEXT: sbci r25, 255
; CHECK-NEXT: ldi r18, 0
; CHECK-NEXT: ldi r19, 0
; CHECK-NEXT: mov r30, r24
; CHECK-NEXT: mov r31, r25
; CHECK-NEXT: std Z+3, r19
; CHECK-NEXT: std Z+2, r18
; CHECK-NEXT: ldi r24, 210
; CHECK-NEXT: ldi r25, 4
; CHECK-NEXT: std Z+1, r25
; CHECK-NEXT: st Z, r24
; CHECK-NEXT: ret
bb0:
%2 = getelementptr i8, ptr %1, i8 65
store i32 1234, ptr %2
ret void
}
|