@@ -164,3 +164,31 @@ define void @prop_align_negative_offset_2(ptr %v) {
164
164
%loadUnaligned = load float , ptr %v , align 4
165
165
ret void
166
166
}
167
+
168
+ define void @prop_align_negative_offset_3 (ptr %v ) {
169
+ ; CHECK-LABEL: define void @prop_align_negative_offset_3(
170
+ ; CHECK-SAME: ptr [[V:%.*]]) {
171
+ ; CHECK-NEXT: [[LOADALIGNED:%.*]] = load float, ptr [[V]], align 16
172
+ ; CHECK-NEXT: [[GEPNEGATIVE:%.*]] = getelementptr inbounds nuw i8, ptr [[V]], i64 -8
173
+ ; CHECK-NEXT: [[LOADUNALIGNED:%.*]] = load float, ptr [[GEPNEGATIVE]], align 8
174
+ ; CHECK-NEXT: ret void
175
+ ;
176
+ %loadAligned = load float , ptr %v , align 16
177
+ %gepNegative = getelementptr inbounds nuw i8 , ptr %v , i64 -8
178
+ %loadUnaligned = load float , ptr %gepNegative , align 4
179
+ ret void
180
+ }
181
+
182
+ define void @prop_align_negative_offset_4 (ptr %v ) {
183
+ ; CHECK-LABEL: define void @prop_align_negative_offset_4(
184
+ ; CHECK-SAME: ptr [[V:%.*]]) {
185
+ ; CHECK-NEXT: [[LOADALIGNED:%.*]] = load float, ptr [[V]], align 16
186
+ ; CHECK-NEXT: [[GEPNEGATIVE:%.*]] = getelementptr inbounds nuw i8, ptr [[V]], i64 -20
187
+ ; CHECK-NEXT: [[LOADUNALIGNED:%.*]] = load float, ptr [[GEPNEGATIVE]], align 4
188
+ ; CHECK-NEXT: ret void
189
+ ;
190
+ %loadAligned = load float , ptr %v , align 16
191
+ %gepNegative = getelementptr inbounds nuw i8 , ptr %v , i64 -20
192
+ %loadUnaligned = load float , ptr %gepNegative , align 4
193
+ ret void
194
+ }
0 commit comments