44define void @phi_pointers (ptr %a , ptr %b , i8 zeroext %M , i8 zeroext %N ) {
55; CHECK-LABEL: @phi_pointers(
66; CHECK-NEXT: entry:
7- ; CHECK-NEXT: [[TMP0:%.*]] = zext i8 [[M:%.*]] to i32
8- ; CHECK-NEXT: [[TMP1:%.*]] = zext i8 [[N:%.*]] to i32
9- ; CHECK-NEXT: [[ADD:%.*]] = add nuw i32 [[TMP0]], 1
10- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[ADD]], 1
11- ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[ADD]], [[TMP1]]
7+ ; CHECK-NEXT: [[ADD:%.*]] = add nuw i8 [[M:%.*]], 1
8+ ; CHECK-NEXT: [[AND:%.*]] = and i8 [[ADD]], 1
9+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[ADD]], [[N:%.*]]
1210; CHECK-NEXT: [[BASE:%.*]] = select i1 [[CMP]], ptr [[A:%.*]], ptr [[B:%.*]]
1311; CHECK-NEXT: [[OTHER:%.*]] = select i1 [[CMP]], ptr [[B]], ptr [[B]]
1412; CHECK-NEXT: br label [[LOOP:%.*]]
1513; CHECK: loop:
1614; CHECK-NEXT: [[PTR:%.*]] = phi ptr [ [[BASE]], [[ENTRY:%.*]] ], [ [[GEP:%.*]], [[LOOP]] ]
17- ; CHECK-NEXT: [[IDX:%.*]] = phi i32 [ [[AND]], [[ENTRY]] ], [ [[INC:%.*]], [[LOOP]] ]
15+ ; CHECK-NEXT: [[IDX:%.*]] = phi i8 [ [[AND]], [[ENTRY]] ], [ [[INC:%.*]], [[LOOP]] ]
1816; CHECK-NEXT: [[LOAD:%.*]] = load i16, ptr [[PTR]], align 2
19- ; CHECK-NEXT: [[INC]] = add nuw nsw i32 [[IDX]], 1
20- ; CHECK-NEXT: [[GEP]] = getelementptr inbounds i16, ptr [[PTR]], i32 [[INC]]
17+ ; CHECK-NEXT: [[INC]] = add nuw nsw i8 [[IDX]], 1
18+ ; CHECK-NEXT: [[GEP]] = getelementptr inbounds i16, ptr [[PTR]], i8 [[INC]]
2119; CHECK-NEXT: [[COND:%.*]] = icmp eq ptr [[GEP]], [[OTHER]]
2220; CHECK-NEXT: br i1 [[COND]], label [[EXIT:%.*]], label [[LOOP]]
2321; CHECK: exit:
4745define void @phi_pointers_null (ptr %a , ptr %b , i8 zeroext %M , i8 zeroext %N ) {
4846; CHECK-LABEL: @phi_pointers_null(
4947; CHECK-NEXT: entry:
50- ; CHECK-NEXT: [[TMP0:%.*]] = zext i8 [[M:%.*]] to i32
51- ; CHECK-NEXT: [[TMP1:%.*]] = zext i8 [[N:%.*]] to i32
52- ; CHECK-NEXT: [[ADD:%.*]] = add nuw i32 [[TMP0]], 1
53- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[ADD]], 1
54- ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[ADD]], [[TMP1]]
48+ ; CHECK-NEXT: [[ADD:%.*]] = add nuw i8 [[M:%.*]], 1
49+ ; CHECK-NEXT: [[AND:%.*]] = and i8 [[ADD]], 1
50+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[ADD]], [[N:%.*]]
5551; CHECK-NEXT: [[BASE:%.*]] = select i1 [[CMP]], ptr [[A:%.*]], ptr [[B:%.*]]
5652; CHECK-NEXT: [[OTHER:%.*]] = select i1 [[CMP]], ptr [[B]], ptr [[B]]
5753; CHECK-NEXT: [[CMP_1:%.*]] = icmp eq ptr [[BASE]], [[OTHER]]
@@ -60,13 +56,13 @@ define void @phi_pointers_null(ptr %a, ptr %b, i8 zeroext %M, i8 zeroext %N) {
6056; CHECK-NEXT: br label [[LOOP]]
6157; CHECK: loop:
6258; CHECK-NEXT: [[PTR:%.*]] = phi ptr [ [[BASE]], [[ENTRY:%.*]] ], [ null, [[FAIL]] ], [ [[GEP:%.*]], [[IF_THEN:%.*]] ]
63- ; CHECK-NEXT: [[IDX:%.*]] = phi i32 [ [[AND]], [[ENTRY]] ], [ 0, [[FAIL]] ], [ [[INC:%.*]], [[IF_THEN]] ]
59+ ; CHECK-NEXT: [[IDX:%.*]] = phi i8 [ [[AND]], [[ENTRY]] ], [ 0, [[FAIL]] ], [ [[INC:%.*]], [[IF_THEN]] ]
6460; CHECK-NEXT: [[UNDEF:%.*]] = icmp eq ptr [[PTR]], undef
6561; CHECK-NEXT: br i1 [[UNDEF]], label [[EXIT:%.*]], label [[IF_THEN]]
6662; CHECK: if.then:
6763; CHECK-NEXT: [[LOAD:%.*]] = load i16, ptr [[PTR]], align 2
68- ; CHECK-NEXT: [[INC]] = add nuw nsw i32 [[IDX]], 1
69- ; CHECK-NEXT: [[GEP]] = getelementptr inbounds i16, ptr [[PTR]], i32 [[INC]]
64+ ; CHECK-NEXT: [[INC]] = add nuw nsw i8 [[IDX]], 1
65+ ; CHECK-NEXT: [[GEP]] = getelementptr inbounds i16, ptr [[PTR]], i8 [[INC]]
7066; CHECK-NEXT: [[COND:%.*]] = icmp eq ptr [[GEP]], [[OTHER]]
7167; CHECK-NEXT: br i1 [[COND]], label [[EXIT]], label [[LOOP]]
7268; CHECK: exit:
0 commit comments