@@ -546,3 +546,37 @@ define i1 @test_scalable_ij(ptr %foo, i64 %i, i64 %j) {
546
546
%cmp = icmp ult ptr %gep1 , %gep2
547
547
ret i1 %cmp
548
548
}
549
+
550
+ define i1 @gep_nuw (ptr %p , i64 %a , i64 %b , i64 %c , i64 %d ) {
551
+ ; CHECK-LABEL: @gep_nuw(
552
+ ; CHECK-NEXT: [[GEP1_IDX:%.*]] = shl nuw i64 [[A:%.*]], 2
553
+ ; CHECK-NEXT: [[GEP1_IDX1:%.*]] = shl nuw i64 [[B:%.*]], 1
554
+ ; CHECK-NEXT: [[GEP1_OFFS:%.*]] = add nuw i64 [[GEP1_IDX]], [[GEP1_IDX1]]
555
+ ; CHECK-NEXT: [[GEP2_IDX:%.*]] = shl nuw i64 [[C:%.*]], 3
556
+ ; CHECK-NEXT: [[GEP2_IDX2:%.*]] = shl nuw i64 [[D:%.*]], 2
557
+ ; CHECK-NEXT: [[GEP2_OFFS:%.*]] = add nuw i64 [[GEP2_IDX]], [[GEP2_IDX2]]
558
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i64 [[GEP1_OFFS]], [[GEP2_OFFS]]
559
+ ; CHECK-NEXT: ret i1 [[CMP]]
560
+ ;
561
+ %gep1 = getelementptr nuw [2 x i16 ], ptr %p , i64 %a , i64 %b
562
+ %gep2 = getelementptr nuw [2 x i32 ], ptr %p , i64 %c , i64 %d
563
+ %cmp = icmp eq ptr %gep1 , %gep2
564
+ ret i1 %cmp
565
+ }
566
+
567
+ define i1 @gep_nusw (ptr %p , i64 %a , i64 %b , i64 %c , i64 %d ) {
568
+ ; CHECK-LABEL: @gep_nusw(
569
+ ; CHECK-NEXT: [[GEP1_IDX:%.*]] = shl nsw i64 [[A:%.*]], 2
570
+ ; CHECK-NEXT: [[GEP1_IDX1:%.*]] = shl nsw i64 [[B:%.*]], 1
571
+ ; CHECK-NEXT: [[GEP1_OFFS:%.*]] = add nsw i64 [[GEP1_IDX]], [[GEP1_IDX1]]
572
+ ; CHECK-NEXT: [[GEP2_IDX:%.*]] = shl nsw i64 [[C:%.*]], 3
573
+ ; CHECK-NEXT: [[GEP2_IDX2:%.*]] = shl nsw i64 [[D:%.*]], 2
574
+ ; CHECK-NEXT: [[GEP2_OFFS:%.*]] = add nsw i64 [[GEP2_IDX]], [[GEP2_IDX2]]
575
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i64 [[GEP1_OFFS]], [[GEP2_OFFS]]
576
+ ; CHECK-NEXT: ret i1 [[CMP]]
577
+ ;
578
+ %gep1 = getelementptr nusw [2 x i16 ], ptr %p , i64 %a , i64 %b
579
+ %gep2 = getelementptr nusw [2 x i32 ], ptr %p , i64 %c , i64 %d
580
+ %cmp = icmp eq ptr %gep1 , %gep2
581
+ ret i1 %cmp
582
+ }
0 commit comments