@@ -622,16 +622,16 @@ while.end.i:
622622define i1 @recursiveGEP_withPtrSub1_notKnownNonEqual2 (ptr %val1 ) {
623623; CHECK-LABEL: @recursiveGEP_withPtrSub1_notKnownNonEqual2(
624624; CHECK-NEXT: entry:
625- ; CHECK-NEXT: [[TEST_VAL1:%.*]] = getelementptr inbounds i8, ptr [[VAL1:%.*]], i64 -1
626625; CHECK-NEXT: br label [[WHILE_COND_I:%.*]]
627626; CHECK: while.cond.i:
628- ; CHECK-NEXT: [[A_PN_I:%.*]] = phi ptr [ [[TEST_0_I:%.*]], [[WHILE_COND_I]] ], [ [[TEST_VAL1]], [[ENTRY:%.*]] ]
629- ; CHECK-NEXT: [[TEST_0_I]] = getelementptr inbounds i8, ptr [[A_PN_I]], i64 1
630- ; CHECK-NEXT: [[TMP0:%.*]] = load i8, ptr [[TEST_0_I]], align 2
627+ ; CHECK-NEXT: [[A_PN_I_IDX:%.*]] = phi i64 [ [[A_PN_I_ADD:%.*]], [[WHILE_COND_I]] ], [ -1, [[ENTRY:%.*]] ]
628+ ; CHECK-NEXT: [[A_PN_I_ADD]] = add nsw i64 [[A_PN_I_IDX]], 1
629+ ; CHECK-NEXT: [[TEST_0_I_PTR:%.*]] = getelementptr inbounds i8, ptr [[VAL1:%.*]], i64 [[A_PN_I_ADD]]
630+ ; CHECK-NEXT: [[TMP0:%.*]] = load i8, ptr [[TEST_0_I_PTR]], align 2
631631; CHECK-NEXT: [[CMP3_NOT_I:%.*]] = icmp eq i8 [[TMP0]], 0
632632; CHECK-NEXT: br i1 [[CMP3_NOT_I]], label [[WHILE_END_I:%.*]], label [[WHILE_COND_I]]
633633; CHECK: while.end.i:
634- ; CHECK-NEXT: [[BOOL:%.*]] = icmp eq ptr [[TEST_0_I ]], [[VAL1]]
634+ ; CHECK-NEXT: [[BOOL:%.*]] = icmp eq i64 [[A_PN_I_ADD ]], 0
635635; CHECK-NEXT: ret i1 [[BOOL]]
636636;
637637entry:
@@ -656,16 +656,16 @@ while.end.i:
656656define i1 @recursiveGEP_withPtrSub1_notKnownNonEqual3 (ptr %val1 ) {
657657; CHECK-LABEL: @recursiveGEP_withPtrSub1_notKnownNonEqual3(
658658; CHECK-NEXT: entry:
659- ; CHECK-NEXT: [[TEST_VAL1:%.*]] = getelementptr inbounds i8, ptr [[VAL1:%.*]], i64 5
660659; CHECK-NEXT: br label [[WHILE_COND_I:%.*]]
661660; CHECK: while.cond.i:
662- ; CHECK-NEXT: [[A_PN_I:%.*]] = phi ptr [ [[TEST_0_I:%.*]], [[WHILE_COND_I]] ], [ [[TEST_VAL1]], [[ENTRY:%.*]] ]
663- ; CHECK-NEXT: [[TEST_0_I]] = getelementptr inbounds i8, ptr [[A_PN_I]], i64 -1
664- ; CHECK-NEXT: [[TMP0:%.*]] = load i8, ptr [[TEST_0_I]], align 2
661+ ; CHECK-NEXT: [[A_PN_I_IDX:%.*]] = phi i64 [ [[A_PN_I_ADD:%.*]], [[WHILE_COND_I]] ], [ 5, [[ENTRY:%.*]] ]
662+ ; CHECK-NEXT: [[A_PN_I_ADD]] = add nsw i64 [[A_PN_I_IDX]], -1
663+ ; CHECK-NEXT: [[TEST_0_I_PTR:%.*]] = getelementptr inbounds i8, ptr [[VAL1:%.*]], i64 [[A_PN_I_ADD]]
664+ ; CHECK-NEXT: [[TMP0:%.*]] = load i8, ptr [[TEST_0_I_PTR]], align 2
665665; CHECK-NEXT: [[CMP3_NOT_I:%.*]] = icmp eq i8 [[TMP0]], 0
666666; CHECK-NEXT: br i1 [[CMP3_NOT_I]], label [[WHILE_END_I:%.*]], label [[WHILE_COND_I]]
667667; CHECK: while.end.i:
668- ; CHECK-NEXT: [[BOOL:%.*]] = icmp eq ptr [[TEST_0_I ]], [[VAL1]]
668+ ; CHECK-NEXT: [[BOOL:%.*]] = icmp eq i64 [[A_PN_I_ADD ]], 0
669669; CHECK-NEXT: ret i1 [[BOOL]]
670670;
671671entry:
@@ -692,13 +692,14 @@ define i1 @recursiveGEP_withPtrSub_maybeZero(ptr %val1) {
692692; CHECK-NEXT: entry:
693693; CHECK-NEXT: br label [[WHILE_COND_I:%.*]]
694694; CHECK: while.cond.i:
695- ; CHECK-NEXT: [[A_PN_I:%.*]] = phi ptr [ [[TEST_0_I:%.*]], [[WHILE_COND_I]] ], [ [[VAL1:%.*]], [[ENTRY:%.*]] ]
696- ; CHECK-NEXT: [[TMP0:%.*]] = load i8, ptr [[A_PN_I]], align 2
697- ; CHECK-NEXT: [[TEST_0_I]] = getelementptr inbounds i8, ptr [[A_PN_I]], i64 1
695+ ; CHECK-NEXT: [[A_PN_I_IDX:%.*]] = phi i64 [ [[A_PN_I_ADD:%.*]], [[WHILE_COND_I]] ], [ 0, [[ENTRY:%.*]] ]
696+ ; CHECK-NEXT: [[A_PN_I_PTR:%.*]] = getelementptr inbounds i8, ptr [[VAL1:%.*]], i64 [[A_PN_I_IDX]]
697+ ; CHECK-NEXT: [[TMP0:%.*]] = load i8, ptr [[A_PN_I_PTR]], align 2
698+ ; CHECK-NEXT: [[A_PN_I_ADD]] = add nuw nsw i64 [[A_PN_I_IDX]], 1
698699; CHECK-NEXT: [[CMP3_NOT_I:%.*]] = icmp eq i8 [[TMP0]], 0
699700; CHECK-NEXT: br i1 [[CMP3_NOT_I]], label [[WHILE_END_I:%.*]], label [[WHILE_COND_I]]
700701; CHECK: while.end.i:
701- ; CHECK-NEXT: [[BOOL:%.*]] = icmp eq ptr [[A_PN_I ]], [[VAL1]]
702+ ; CHECK-NEXT: [[BOOL:%.*]] = icmp eq i64 [[A_PN_I_IDX ]], 0
702703; CHECK-NEXT: ret i1 [[BOOL]]
703704;
704705entry:
@@ -963,13 +964,16 @@ define i1 @recursiveGEP_withPtrSub_scalableGEP_inbounds(ptr %val1) {
963964; CHECK-NEXT: entry:
964965; CHECK-NEXT: br label [[WHILE_COND_I:%.*]]
965966; CHECK: while.cond.i:
966- ; CHECK-NEXT: [[A_PN_I:%.*]] = phi ptr [ [[TEST_0_I:%.*]], [[WHILE_COND_I]] ], [ [[VAL1:%.*]], [[ENTRY:%.*]] ]
967- ; CHECK-NEXT: [[TEST_0_I]] = getelementptr inbounds <vscale x 16 x i8>, ptr [[A_PN_I]], i64 1
968- ; CHECK-NEXT: [[TMP0:%.*]] = load i8, ptr [[TEST_0_I]], align 1
969- ; CHECK-NEXT: [[CMP3_NOT_I:%.*]] = icmp eq i8 [[TMP0]], 0
967+ ; CHECK-NEXT: [[A_PN_I_IDX:%.*]] = phi i64 [ [[A_PN_I_IDX1:%.*]], [[WHILE_COND_I]] ], [ 0, [[ENTRY:%.*]] ]
968+ ; CHECK-NEXT: [[TMP0:%.*]] = call i64 @llvm.vscale.i64()
969+ ; CHECK-NEXT: [[TMP1:%.*]] = shl i64 [[TMP0]], 4
970+ ; CHECK-NEXT: [[A_PN_I_IDX1]] = add i64 [[A_PN_I_IDX]], [[TMP1]]
971+ ; CHECK-NEXT: [[TEST_0_I_PTR:%.*]] = getelementptr inbounds i8, ptr [[VAL1:%.*]], i64 [[A_PN_I_IDX1]]
972+ ; CHECK-NEXT: [[TMP2:%.*]] = load i8, ptr [[TEST_0_I_PTR]], align 1
973+ ; CHECK-NEXT: [[CMP3_NOT_I:%.*]] = icmp eq i8 [[TMP2]], 0
970974; CHECK-NEXT: br i1 [[CMP3_NOT_I]], label [[WHILE_END_I:%.*]], label [[WHILE_COND_I]]
971975; CHECK: while.end.i:
972- ; CHECK-NEXT: [[BOOL:%.*]] = icmp eq ptr [[TEST_0_I ]], [[VAL1]]
976+ ; CHECK-NEXT: [[BOOL:%.*]] = icmp eq i64 [[A_PN_I_IDX1 ]], 0
973977; CHECK-NEXT: ret i1 [[BOOL]]
974978;
975979entry:
0 commit comments