@@ -213,8 +213,8 @@ define void @test16(ptr %x, ptr %a, ptr %b, ptr %c) {
213
213
; CHECK-NEXT: [[X1:%.*]] = load float, ptr [[X:%.*]], align 4
214
214
; CHECK-NEXT: store float [[X1]], ptr [[A:%.*]], align 4
215
215
; CHECK-NEXT: store float [[X1]], ptr [[B:%.*]], align 4
216
- ; CHECK-NEXT: [[X2:%.*]] = load float, ptr [[X:%.* ]], align 4
217
- ; CHECK-NEXT: store float [[X2]], ptr [[B:%.* ]], align 4
216
+ ; CHECK-NEXT: [[X2:%.*]] = load float, ptr [[X]], align 4
217
+ ; CHECK-NEXT: store float [[X2]], ptr [[B]], align 4
218
218
; CHECK-NEXT: store float [[X2]], ptr [[C:%.*]], align 4
219
219
; CHECK-NEXT: ret void
220
220
;
@@ -238,8 +238,8 @@ define void @test16-vect(ptr %x, ptr %a, ptr %b, ptr %c) {
238
238
; CHECK-NEXT: [[X1:%.*]] = load <4 x i8>, ptr [[X:%.*]], align 4
239
239
; CHECK-NEXT: store <4 x i8> [[X1]], ptr [[A:%.*]], align 4
240
240
; CHECK-NEXT: store <4 x i8> [[X1]], ptr [[B:%.*]], align 4
241
- ; CHECK-NEXT: [[X2:%.*]] = load <4 x i8>, ptr [[X:%.* ]], align 4
242
- ; CHECK-NEXT: store <4 x i8> [[X2]], ptr [[B:%.* ]], align 4
241
+ ; CHECK-NEXT: [[X2:%.*]] = load <4 x i8>, ptr [[X]], align 4
242
+ ; CHECK-NEXT: store <4 x i8> [[X2]], ptr [[B]], align 4
243
243
; CHECK-NEXT: store <4 x i8> [[X2]], ptr [[C:%.*]], align 4
244
244
; CHECK-NEXT: ret void
245
245
;
@@ -353,8 +353,8 @@ define i64 @test21(ptr %P) {
353
353
354
354
define i64 @test22 (ptr %P ) {
355
355
; CHECK-LABEL: @test22(
356
- ; CHECK-NEXT: [[X:%.*]] = load i64, ptr [[P]], align 8
357
- ; CHECK-NEXT: [[Y:%.*]] = load ptr addrspace(1), ptr [[P:%.* ]], align 8
356
+ ; CHECK-NEXT: [[X:%.*]] = load i64, ptr [[P:%.* ]], align 8
357
+ ; CHECK-NEXT: [[Y:%.*]] = load ptr addrspace(1), ptr [[P]], align 8
358
358
; CHECK-NEXT: call void @use.p1(ptr addrspace(1) [[Y]])
359
359
; CHECK-NEXT: ret i64 [[X]]
360
360
;
@@ -369,8 +369,8 @@ declare void @use.v2.p1(<2 x ptr addrspace(1)>)
369
369
370
370
define <2 x i64 > @test23 (ptr %P ) {
371
371
; CHECK-LABEL: @test23(
372
- ; CHECK-NEXT: [[X:%.*]] = load <2 x i64>, ptr [[P]], align 16
373
- ; CHECK-NEXT: [[Y:%.*]] = load <2 x ptr>, ptr [[P:%.* ]], align 16
372
+ ; CHECK-NEXT: [[X:%.*]] = load <2 x i64>, ptr [[P:%.* ]], align 16
373
+ ; CHECK-NEXT: [[Y:%.*]] = load <2 x ptr>, ptr [[P]], align 16
374
374
; CHECK-NEXT: call void @use.v2.p0(<2 x ptr> [[Y]])
375
375
; CHECK-NEXT: ret <2 x i64> [[X]]
376
376
;
@@ -382,8 +382,8 @@ define <2 x i64> @test23(ptr %P) {
382
382
383
383
define <2 x i64 > @test24 (ptr %P ) {
384
384
; CHECK-LABEL: @test24(
385
- ; CHECK-NEXT: [[X:%.*]] = load <2 x i64>, ptr [[P]], align 16
386
- ; CHECK-NEXT: [[Y:%.*]] = load <2 x ptr addrspace(1)>, ptr [[P:%.* ]], align 16
385
+ ; CHECK-NEXT: [[X:%.*]] = load <2 x i64>, ptr [[P:%.* ]], align 16
386
+ ; CHECK-NEXT: [[Y:%.*]] = load <2 x ptr addrspace(1)>, ptr [[P]], align 16
387
387
; CHECK-NEXT: call void @use.v2.p1(<2 x ptr addrspace(1)> [[Y]])
388
388
; CHECK-NEXT: ret <2 x i64> [[X]]
389
389
;
@@ -392,3 +392,29 @@ define <2 x i64> @test24(ptr %P) {
392
392
call void @use.v2.p1 (<2 x ptr addrspace (1 )> %Y )
393
393
ret <2 x i64 > %X
394
394
}
395
+
396
+ define i16 @load_from_zero_with_dynamic_offset (i64 %idx ) {
397
+ ; CHECK-LABEL: @load_from_zero_with_dynamic_offset(
398
+ ; CHECK-NEXT: [[GEP:%.*]] = getelementptr i16, ptr @GLOBAL, i64 [[IDX:%.*]]
399
+ ; CHECK-NEXT: [[V:%.*]] = load i16, ptr [[GEP]], align 2
400
+ ; CHECK-NEXT: ret i16 [[V]]
401
+ ;
402
+ %gep = getelementptr i16 , ptr @GLOBAL , i64 %idx
403
+ %v = load i16 , ptr %gep
404
+ ret i16 %v
405
+ }
406
+
407
+ declare ptr @llvm.strip.invariant.group.p0 (ptr %p )
408
+
409
+ define i32 @load_via_strip_invariant_group () {
410
+ ; CHECK-LABEL: @load_via_strip_invariant_group(
411
+ ; CHECK-NEXT: [[A:%.*]] = call ptr @llvm.strip.invariant.group.p0(ptr nonnull @Y)
412
+ ; CHECK-NEXT: [[B:%.*]] = getelementptr i8, ptr [[A]], i64 8
413
+ ; CHECK-NEXT: [[D:%.*]] = load i32, ptr [[B]], align 4
414
+ ; CHECK-NEXT: ret i32 [[D]]
415
+ ;
416
+ %a = call ptr @llvm.strip.invariant.group.p0 (ptr @Y )
417
+ %b = getelementptr i8 , ptr %a , i64 8
418
+ %d = load i32 , ptr %b
419
+ ret i32 %d
420
+ }
0 commit comments