@@ -164,3 +164,31 @@ define void @prop_align_negative_offset_2(ptr %v) {
164164 %loadUnaligned = load float , ptr %v , align 4
165165 ret void
166166}
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