@@ -101,6 +101,107 @@ define i32 @loadCombine_4consecutive(ptr %p) {
101
101
ret i32 %o3
102
102
}
103
103
104
+ define i32 @loadCombine_4consecutive_commuted (ptr %p ) {
105
+ ; LE-LABEL: @loadCombine_4consecutive_commuted(
106
+ ; LE-NEXT: [[O3:%.*]] = load i32, ptr [[P:%.*]], align 1
107
+ ; LE-NEXT: ret i32 [[O3]]
108
+ ;
109
+ ; BE-LABEL: @loadCombine_4consecutive_commuted(
110
+ ; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
111
+ ; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
112
+ ; BE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
113
+ ; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1
114
+ ; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1
115
+ ; BE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1
116
+ ; BE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1
117
+ ; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32
118
+ ; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32
119
+ ; BE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32
120
+ ; BE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32
121
+ ; BE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8
122
+ ; BE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16
123
+ ; BE-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24
124
+ ; BE-NEXT: [[O1:%.*]] = or i32 [[S2]], [[S3]]
125
+ ; BE-NEXT: [[O2:%.*]] = or i32 [[S4]], [[O1]]
126
+ ; BE-NEXT: [[O3:%.*]] = or i32 [[E1]], [[O2]]
127
+ ; BE-NEXT: ret i32 [[O3]]
128
+ ;
129
+ %p1 = getelementptr i8 , ptr %p , i32 1
130
+ %p2 = getelementptr i8 , ptr %p , i32 2
131
+ %p3 = getelementptr i8 , ptr %p , i32 3
132
+ %l1 = load i8 , ptr %p
133
+ %l2 = load i8 , ptr %p1
134
+ %l3 = load i8 , ptr %p2
135
+ %l4 = load i8 , ptr %p3
136
+
137
+ %e1 = zext i8 %l1 to i32
138
+ %e2 = zext i8 %l2 to i32
139
+ %e3 = zext i8 %l3 to i32
140
+ %e4 = zext i8 %l4 to i32
141
+
142
+ %s2 = shl i32 %e2 , 8
143
+ %s3 = shl i32 %e3 , 16
144
+ %s4 = shl i32 %e4 , 24
145
+
146
+ %o1 = or i32 %s2 , %s3
147
+ %o2 = or i32 %s4 , %o1
148
+ %o3 = or i32 %e1 , %o2
149
+ ret i32 %o3
150
+ }
151
+
152
+ define i32 @loadCombine_4consecutive_multiuse (ptr %p ) {
153
+ ; LE-LABEL: @loadCombine_4consecutive_multiuse(
154
+ ; LE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 3
155
+ ; LE-NEXT: [[O3:%.*]] = load i32, ptr [[P]], align 1
156
+ ; LE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1
157
+ ; LE-NEXT: call void @use(i8 [[L4]])
158
+ ; LE-NEXT: ret i32 [[O3]]
159
+ ;
160
+ ; BE-LABEL: @loadCombine_4consecutive_multiuse(
161
+ ; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
162
+ ; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
163
+ ; BE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
164
+ ; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1
165
+ ; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1
166
+ ; BE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1
167
+ ; BE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1
168
+ ; BE-NEXT: call void @use(i8 [[L4]])
169
+ ; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32
170
+ ; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32
171
+ ; BE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32
172
+ ; BE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32
173
+ ; BE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8
174
+ ; BE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16
175
+ ; BE-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24
176
+ ; BE-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]]
177
+ ; BE-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]]
178
+ ; BE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[S4]]
179
+ ; BE-NEXT: ret i32 [[O3]]
180
+ ;
181
+ %p1 = getelementptr i8 , ptr %p , i32 1
182
+ %p2 = getelementptr i8 , ptr %p , i32 2
183
+ %p3 = getelementptr i8 , ptr %p , i32 3
184
+ %l1 = load i8 , ptr %p
185
+ %l2 = load i8 , ptr %p1
186
+ %l3 = load i8 , ptr %p2
187
+ %l4 = load i8 , ptr %p3
188
+ call void @use (i8 %l4 )
189
+
190
+ %e1 = zext i8 %l1 to i32
191
+ %e2 = zext i8 %l2 to i32
192
+ %e3 = zext i8 %l3 to i32
193
+ %e4 = zext i8 %l4 to i32
194
+
195
+ %s2 = shl i32 %e2 , 8
196
+ %s3 = shl i32 %e3 , 16
197
+ %s4 = shl i32 %e4 , 24
198
+
199
+ %o1 = or i32 %e1 , %s2
200
+ %o2 = or i32 %o1 , %s3
201
+ %o3 = or i32 %o2 , %s4
202
+ ret i32 %o3
203
+ }
204
+
104
205
define i32 @loadCombine_4consecutive_BE (ptr %p ) {
105
206
; LE-LABEL: @loadCombine_4consecutive_BE(
106
207
; LE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
0 commit comments