Skip to content

Commit 987bfd9

Browse files
committed
Added identical test that use non-global ptr
1 parent 11090ab commit 987bfd9

File tree

1 file changed

+109
-0
lines changed

1 file changed

+109
-0
lines changed

llvm/test/Transforms/InstCombine/sub-gep.ll

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,115 @@ define i64 @negative_zext_ptrtoint_sub_ptrtoint_as2_nuw(i32 %offset) {
449449
ret i64 %D
450450
}
451451

452+
define i64 @ptrtoint_sub_zext_ptrtoint_as2_inbounds_local(ptr addrspace(2) %p, i32 %offset) {
453+
; CHECK-LABEL: @ptrtoint_sub_zext_ptrtoint_as2_inbounds_local(
454+
; CHECK-NEXT: [[A:%.*]] = getelementptr inbounds bfloat, ptr addrspace(2) [[P:%.*]], i32 [[OFFSET:%.*]]
455+
; CHECK-NEXT: [[B:%.*]] = ptrtoint ptr addrspace(2) [[A]] to i32
456+
; CHECK-NEXT: [[C:%.*]] = zext i32 [[B]] to i64
457+
; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr addrspace(2) [[P]] to i32
458+
; CHECK-NEXT: [[CC:%.*]] = zext i32 [[TMP1]] to i64
459+
; CHECK-NEXT: [[D:%.*]] = sub nsw i64 [[CC]], [[C]]
460+
; CHECK-NEXT: ret i64 [[D]]
461+
;
462+
%A = getelementptr inbounds bfloat, ptr addrspace(2) %p, i32 %offset
463+
%B = ptrtoint ptr addrspace(2) %A to i32
464+
%C = zext i32 %B to i64
465+
%CC = ptrtoint ptr addrspace(2) %p to i64
466+
%D = sub i64 %CC, %C
467+
ret i64 %D
468+
}
469+
470+
define i64 @zext_ptrtoint_sub_ptrtoint_as2_nusw_local(ptr addrspace(2) %p, i32 %offset) {
471+
; CHECK-LABEL: @zext_ptrtoint_sub_ptrtoint_as2_nusw_local(
472+
; CHECK-NEXT: [[A_IDX:%.*]] = shl nsw i32 [[OFFSET:%.*]], 1
473+
; CHECK-NEXT: [[D:%.*]] = sext i32 [[A_IDX]] to i64
474+
; CHECK-NEXT: ret i64 [[D]]
475+
;
476+
%A = getelementptr nusw bfloat, ptr addrspace(2) %p, i32 %offset
477+
%B = ptrtoint ptr addrspace(2) %A to i32
478+
%C = zext i32 %B to i64
479+
%CC = ptrtoint ptr addrspace(2) %p to i64
480+
%D = sub i64 %C, %CC
481+
ret i64 %D
482+
}
483+
484+
define i64 @zext_ptrtoint_sub_ptrtoint_as2_nuw_local(ptr addrspace(2) %p, i32 %offset) {
485+
; CHECK-LABEL: @zext_ptrtoint_sub_ptrtoint_as2_nuw_local(
486+
; CHECK-NEXT: [[A_IDX:%.*]] = shl nuw i32 [[OFFSET:%.*]], 1
487+
; CHECK-NEXT: [[D:%.*]] = zext i32 [[A_IDX]] to i64
488+
; CHECK-NEXT: ret i64 [[D]]
489+
;
490+
%A = getelementptr nuw bfloat, ptr addrspace(2) %p, i32 %offset
491+
%B = ptrtoint ptr addrspace(2) %A to i32
492+
%C = zext i32 %B to i64
493+
%CC = ptrtoint ptr addrspace(2) %p to i64
494+
%D = sub i64 %C, %CC
495+
ret i64 %D
496+
}
497+
498+
define i64 @zext_ptrtoint_sub_ptrtoint_as2_nusw_nuw_local(ptr addrspace(2) %p, i32 %offset) {
499+
; CHECK-LABEL: @zext_ptrtoint_sub_ptrtoint_as2_nusw_nuw_local(
500+
; CHECK-NEXT: [[A_IDX:%.*]] = shl nuw nsw i32 [[OFFSET:%.*]], 1
501+
; CHECK-NEXT: [[D:%.*]] = zext nneg i32 [[A_IDX]] to i64
502+
; CHECK-NEXT: ret i64 [[D]]
503+
;
504+
%A = getelementptr nusw nuw bfloat, ptr addrspace(2) %p, i32 %offset
505+
%B = ptrtoint ptr addrspace(2) %A to i32
506+
%C = zext i32 %B to i64
507+
%CC = ptrtoint ptr addrspace(2) %p to i64
508+
%D = sub i64 %C, %CC
509+
ret i64 %D
510+
}
511+
512+
define i64 @zext_ptrtoint_sub_zext_ptrtoint_as2_nusw_local(ptr addrspace(2) %p, i32 %offset) {
513+
; CHECK-LABEL: @zext_ptrtoint_sub_zext_ptrtoint_as2_nusw_local(
514+
; CHECK-NEXT: [[A_IDX:%.*]] = shl nsw i32 [[OFFSET:%.*]], 1
515+
; CHECK-NEXT: [[E:%.*]] = sext i32 [[A_IDX]] to i64
516+
; CHECK-NEXT: ret i64 [[E]]
517+
;
518+
%A = getelementptr nusw bfloat, ptr addrspace(2) %p, i32 %offset
519+
%B = ptrtoint ptr addrspace(2) %A to i32
520+
%C = zext i32 %B to i64
521+
%CC = ptrtoint ptr addrspace(2) %p to i32
522+
%D = zext i32 %CC to i64
523+
%E = sub i64 %C, %D
524+
ret i64 %E
525+
}
526+
527+
define i64 @zext_ptrtoint_sub_zext_ptrtoint_as2_nuw_local(ptr addrspace(2) %p, i32 %offset) {
528+
; CHECK-LABEL: @zext_ptrtoint_sub_zext_ptrtoint_as2_nuw_local(
529+
; CHECK-NEXT: [[A_IDX:%.*]] = shl nuw i32 [[OFFSET:%.*]], 1
530+
; CHECK-NEXT: [[E:%.*]] = zext i32 [[A_IDX]] to i64
531+
; CHECK-NEXT: ret i64 [[E]]
532+
;
533+
%A = getelementptr nuw bfloat, ptr addrspace(2) %p, i32 %offset
534+
%B = ptrtoint ptr addrspace(2) %A to i32
535+
%C = zext i32 %B to i64
536+
%CC = ptrtoint ptr addrspace(2) %p to i32
537+
%D = zext i32 %CC to i64
538+
%E = sub i64 %C, %D
539+
ret i64 %E
540+
}
541+
542+
define i64 @negative_zext_ptrtoint_sub_ptrtoint_as2_nuw_local(ptr addrspace(2) %p, i32 %offset) {
543+
; CHECK-LABEL: @negative_zext_ptrtoint_sub_ptrtoint_as2_nuw_local(
544+
; CHECK-NEXT: [[A:%.*]] = getelementptr nuw bfloat, ptr addrspace(2) [[P:%.*]], i32 [[OFFSET:%.*]]
545+
; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr addrspace(2) [[A]] to i32
546+
; CHECK-NEXT: [[B_MASK:%.*]] = and i32 [[TMP1]], 65535
547+
; CHECK-NEXT: [[C:%.*]] = zext nneg i32 [[B_MASK]] to i64
548+
; CHECK-NEXT: [[TMP2:%.*]] = ptrtoint ptr addrspace(2) [[P]] to i32
549+
; CHECK-NEXT: [[CC:%.*]] = zext i32 [[TMP2]] to i64
550+
; CHECK-NEXT: [[D:%.*]] = sub nsw i64 [[C]], [[CC]]
551+
; CHECK-NEXT: ret i64 [[D]]
552+
;
553+
%A = getelementptr nuw bfloat, ptr addrspace(2) %p, i32 %offset
554+
%B = ptrtoint ptr addrspace(2) %A to i16
555+
%C = zext i16 %B to i64
556+
%CC = ptrtoint ptr addrspace(2) %p to i64
557+
%D = sub i64 %C, %CC
558+
ret i64 %D
559+
}
560+
452561
define i64 @test30(ptr %foo, i64 %i, i64 %j) {
453562
; CHECK-LABEL: @test30(
454563
; CHECK-NEXT: [[GEP1_IDX:%.*]] = shl nsw i64 [[I:%.*]], 2

0 commit comments

Comments
 (0)