123c95345SAnna Welker; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2*438ffdb8SDavid Green; RUN: opt -loop-vectorize -S -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve.fp,mve4beat -dce -instcombine --simplifycfg -simplifycfg-require-and-preserve-domtree=1 -tail-predication=disabled < %s | FileCheck %s
323c95345SAnna Welker
423c95345SAnna Welkertarget datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
523c95345SAnna Welkertarget triple = "thumbv8.1m.main-none-none-eabi"
623c95345SAnna Welker
723c95345SAnna Welkerdefine hidden void @pointer_phi_v4i32_add1(i32* noalias nocapture readonly %A, i32* noalias nocapture %B, i32 %s, i32%y) {
823c95345SAnna Welker; CHECK-LABEL: @pointer_phi_v4i32_add1(
923c95345SAnna Welker; CHECK-NEXT:  entry:
10e6ad9ef4SPhilip Reames; CHECK-NEXT:    [[BROADCAST_SPLATINSERT:%.*]] = insertelement <4 x i32> poison, i32 [[Y:%.*]], i64 0
11278aa65cSJuneyoung Lee; CHECK-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <4 x i32> [[BROADCAST_SPLATINSERT]], <4 x i32> poison, <4 x i32> zeroinitializer
1223c95345SAnna Welker; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
1323c95345SAnna Welker; CHECK:       vector.body:
1423c95345SAnna Welker; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
1523c95345SAnna Welker; CHECK-NEXT:    [[NEXT_GEP:%.*]] = getelementptr i32, i32* [[A:%.*]], i32 [[INDEX]]
1623c95345SAnna Welker; CHECK-NEXT:    [[NEXT_GEP4:%.*]] = getelementptr i32, i32* [[B:%.*]], i32 [[INDEX]]
1723c95345SAnna Welker; CHECK-NEXT:    [[TMP0:%.*]] = bitcast i32* [[NEXT_GEP]] to <4 x i32>*
1823c95345SAnna Welker; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i32>, <4 x i32>* [[TMP0]], align 4
1923c95345SAnna Welker; CHECK-NEXT:    [[TMP1:%.*]] = add nsw <4 x i32> [[WIDE_LOAD]], [[BROADCAST_SPLAT]]
2023c95345SAnna Welker; CHECK-NEXT:    [[TMP2:%.*]] = bitcast i32* [[NEXT_GEP4]] to <4 x i32>*
2123c95345SAnna Welker; CHECK-NEXT:    store <4 x i32> [[TMP1]], <4 x i32>* [[TMP2]], align 4
2223c2f2e6SFlorian Hahn; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 4
2323c95345SAnna Welker; CHECK-NEXT:    [[TMP3:%.*]] = icmp eq i32 [[INDEX_NEXT]], 1000
2423c2f2e6SFlorian Hahn; CHECK-NEXT:    br i1 [[TMP3]], label [[END:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
2523c95345SAnna Welker; CHECK:       end:
2623c95345SAnna Welker; CHECK-NEXT:    ret void
2723c95345SAnna Welker;
2823c95345SAnna Welkerentry:
2923c95345SAnna Welker  br label %for.body
3023c95345SAnna Welkerfor.body:
3123c95345SAnna Welker  %A.addr.09 = phi i32* [ %add.ptr, %for.body ], [ %A, %entry ]
3223c95345SAnna Welker  %i.08 = phi i32 [ %inc, %for.body ], [ 0, %entry ]
3323c95345SAnna Welker  %B.addr.07 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %entry ]
3423c95345SAnna Welker  %0 = load i32, i32* %A.addr.09, align 4
3523c95345SAnna Welker  %add.ptr = getelementptr inbounds i32, i32* %A.addr.09, i32 1
3623c95345SAnna Welker  %add = add nsw i32 %0, %y
3723c95345SAnna Welker  store i32 %add, i32* %B.addr.07, align 4
3823c95345SAnna Welker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.07, i32 1
3923c95345SAnna Welker  %inc = add nuw nsw i32 %i.08, 1
4023c95345SAnna Welker  %exitcond = icmp eq i32 %inc, 1000
4123c95345SAnna Welker  br i1 %exitcond, label %end, label %for.body
4223c95345SAnna Welkerend:
4323c95345SAnna Welker  ret void
4423c95345SAnna Welker}
4523c95345SAnna Welker
4623c95345SAnna Welkerdefine hidden void @pointer_phi_v4i32_add2(i32* noalias nocapture readonly %A, i32* noalias nocapture %B, i32 %y) {
4723c95345SAnna Welker; CHECK-LABEL: @pointer_phi_v4i32_add2(
4823c95345SAnna Welker; CHECK-NEXT:  entry:
4923c95345SAnna Welker; CHECK-NEXT:    [[IND_END:%.*]] = getelementptr i32, i32* [[A:%.*]], i32 1992
5023c95345SAnna Welker; CHECK-NEXT:    [[IND_END3:%.*]] = getelementptr i32, i32* [[B:%.*]], i32 996
51e6ad9ef4SPhilip Reames; CHECK-NEXT:    [[BROADCAST_SPLATINSERT:%.*]] = insertelement <4 x i32> poison, i32 [[Y:%.*]], i64 0
52278aa65cSJuneyoung Lee; CHECK-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <4 x i32> [[BROADCAST_SPLATINSERT]], <4 x i32> poison, <4 x i32> zeroinitializer
5323c95345SAnna Welker; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
5423c95345SAnna Welker; CHECK:       vector.body:
5523c95345SAnna Welker; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
5623c95345SAnna Welker; CHECK-NEXT:    [[TMP0:%.*]] = shl i32 [[INDEX]], 1
5723c95345SAnna Welker; CHECK-NEXT:    [[NEXT_GEP:%.*]] = getelementptr i32, i32* [[A]], i32 [[TMP0]]
5823c95345SAnna Welker; CHECK-NEXT:    [[NEXT_GEP4:%.*]] = getelementptr i32, i32* [[B]], i32 [[INDEX]]
5923c95345SAnna Welker; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i32* [[NEXT_GEP]] to <8 x i32>*
6023c95345SAnna Welker; CHECK-NEXT:    [[WIDE_VEC:%.*]] = load <8 x i32>, <8 x i32>* [[TMP1]], align 4
61278aa65cSJuneyoung Lee; CHECK-NEXT:    [[STRIDED_VEC:%.*]] = shufflevector <8 x i32> [[WIDE_VEC]], <8 x i32> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
6223c95345SAnna Welker; CHECK-NEXT:    [[TMP2:%.*]] = add nsw <4 x i32> [[STRIDED_VEC]], [[BROADCAST_SPLAT]]
6323c95345SAnna Welker; CHECK-NEXT:    [[TMP3:%.*]] = bitcast i32* [[NEXT_GEP4]] to <4 x i32>*
6423c95345SAnna Welker; CHECK-NEXT:    store <4 x i32> [[TMP2]], <4 x i32>* [[TMP3]], align 4
6523c2f2e6SFlorian Hahn; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 4
6623c95345SAnna Welker; CHECK-NEXT:    [[TMP4:%.*]] = icmp eq i32 [[INDEX_NEXT]], 996
6723c2f2e6SFlorian Hahn; CHECK-NEXT:    br i1 [[TMP4]], label [[FOR_BODY:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP2:![0-9]+]]
6823c95345SAnna Welker; CHECK:       for.body:
6923c95345SAnna Welker; CHECK-NEXT:    [[A_ADDR_09:%.*]] = phi i32* [ [[ADD_PTR:%.*]], [[FOR_BODY]] ], [ [[IND_END]], [[VECTOR_BODY]] ]
7023c95345SAnna Welker; CHECK-NEXT:    [[I_08:%.*]] = phi i32 [ [[INC:%.*]], [[FOR_BODY]] ], [ 996, [[VECTOR_BODY]] ]
7123c95345SAnna Welker; CHECK-NEXT:    [[B_ADDR_07:%.*]] = phi i32* [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ], [ [[IND_END3]], [[VECTOR_BODY]] ]
7223c95345SAnna Welker; CHECK-NEXT:    [[TMP5:%.*]] = load i32, i32* [[A_ADDR_09]], align 4
7323c95345SAnna Welker; CHECK-NEXT:    [[ADD_PTR]] = getelementptr inbounds i32, i32* [[A_ADDR_09]], i32 2
7423c95345SAnna Welker; CHECK-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP5]], [[Y]]
7523c95345SAnna Welker; CHECK-NEXT:    store i32 [[ADD]], i32* [[B_ADDR_07]], align 4
7623c95345SAnna Welker; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds i32, i32* [[B_ADDR_07]], i32 1
7723c95345SAnna Welker; CHECK-NEXT:    [[INC]] = add nuw nsw i32 [[I_08]], 1
7823c95345SAnna Welker; CHECK-NEXT:    [[EXITCOND:%.*]] = icmp eq i32 [[INC]], 1000
7923c2f2e6SFlorian Hahn; CHECK-NEXT:    br i1 [[EXITCOND]], label [[END:%.*]], label [[FOR_BODY]], !llvm.loop [[LOOP3:![0-9]+]]
8023c95345SAnna Welker; CHECK:       end:
8123c95345SAnna Welker; CHECK-NEXT:    ret void
8223c95345SAnna Welker;
8323c95345SAnna Welkerentry:
8423c95345SAnna Welker  br label %for.body
8523c95345SAnna Welkerfor.body:
8623c95345SAnna Welker  %A.addr.09 = phi i32* [ %add.ptr, %for.body ], [ %A, %entry ]
8723c95345SAnna Welker  %i.08 = phi i32 [ %inc, %for.body ], [ 0, %entry ]
8823c95345SAnna Welker  %B.addr.07 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %entry ]
8923c95345SAnna Welker  %0 = load i32, i32* %A.addr.09, align 4
9023c95345SAnna Welker  %add.ptr = getelementptr inbounds i32, i32* %A.addr.09, i32 2
9123c95345SAnna Welker  %add = add nsw i32 %0, %y
9223c95345SAnna Welker  store i32 %add, i32* %B.addr.07, align 4
9323c95345SAnna Welker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.07, i32 1
9423c95345SAnna Welker  %inc = add nuw nsw i32 %i.08, 1
9523c95345SAnna Welker  %exitcond = icmp eq i32 %inc, 1000
9623c95345SAnna Welker  br i1 %exitcond, label %end, label %for.body
9723c95345SAnna Welkerend:
9823c95345SAnna Welker  ret void
9923c95345SAnna Welker}
10023c95345SAnna Welker
10123c95345SAnna Welkerdefine hidden void @pointer_phi_v4i32_add3(i32* noalias nocapture readonly %A, i32* noalias nocapture %B, i32 %y) {
10223c95345SAnna Welker; CHECK-LABEL: @pointer_phi_v4i32_add3(
10323c95345SAnna Welker; CHECK-NEXT:  entry:
10423c95345SAnna Welker; CHECK-NEXT:    [[IND_END:%.*]] = getelementptr i32, i32* [[A:%.*]], i32 2988
10523c95345SAnna Welker; CHECK-NEXT:    [[IND_END3:%.*]] = getelementptr i32, i32* [[B:%.*]], i32 996
106e6ad9ef4SPhilip Reames; CHECK-NEXT:    [[BROADCAST_SPLATINSERT:%.*]] = insertelement <4 x i32> poison, i32 [[Y:%.*]], i64 0
107278aa65cSJuneyoung Lee; CHECK-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <4 x i32> [[BROADCAST_SPLATINSERT]], <4 x i32> poison, <4 x i32> zeroinitializer
10823c95345SAnna Welker; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
10923c95345SAnna Welker; CHECK:       vector.body:
11023c95345SAnna Welker; CHECK-NEXT:    [[POINTER_PHI:%.*]] = phi i32* [ [[A]], [[ENTRY:%.*]] ], [ [[PTR_IND:%.*]], [[VECTOR_BODY]] ]
11123c95345SAnna Welker; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
11223c95345SAnna Welker; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr i32, i32* [[POINTER_PHI]], <4 x i32> <i32 0, i32 3, i32 6, i32 9>
11323c95345SAnna Welker; CHECK-NEXT:    [[NEXT_GEP:%.*]] = getelementptr i32, i32* [[B]], i32 [[INDEX]]
11423c95345SAnna Welker; CHECK-NEXT:    [[WIDE_MASKED_GATHER:%.*]] = call <4 x i32> @llvm.masked.gather.v4i32.v4p0i32(<4 x i32*> [[TMP0]], i32 4, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i32> undef)
11523c95345SAnna Welker; CHECK-NEXT:    [[TMP1:%.*]] = add nsw <4 x i32> [[WIDE_MASKED_GATHER]], [[BROADCAST_SPLAT]]
11623c95345SAnna Welker; CHECK-NEXT:    [[TMP2:%.*]] = bitcast i32* [[NEXT_GEP]] to <4 x i32>*
11723c95345SAnna Welker; CHECK-NEXT:    store <4 x i32> [[TMP1]], <4 x i32>* [[TMP2]], align 4
11823c2f2e6SFlorian Hahn; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 4
11923c95345SAnna Welker; CHECK-NEXT:    [[PTR_IND]] = getelementptr i32, i32* [[POINTER_PHI]], i32 12
12065c4d619SFlorian Hahn; CHECK-NEXT:    [[TMP3:%.*]] = icmp eq i32 [[INDEX_NEXT]], 996
12123c2f2e6SFlorian Hahn; CHECK-NEXT:    br i1 [[TMP3]], label [[FOR_BODY:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP5:![0-9]+]]
12223c95345SAnna Welker; CHECK:       for.body:
12323c95345SAnna Welker; CHECK-NEXT:    [[A_ADDR_09:%.*]] = phi i32* [ [[ADD_PTR:%.*]], [[FOR_BODY]] ], [ [[IND_END]], [[VECTOR_BODY]] ]
12423c95345SAnna Welker; CHECK-NEXT:    [[I_08:%.*]] = phi i32 [ [[INC:%.*]], [[FOR_BODY]] ], [ 996, [[VECTOR_BODY]] ]
12523c95345SAnna Welker; CHECK-NEXT:    [[B_ADDR_07:%.*]] = phi i32* [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ], [ [[IND_END3]], [[VECTOR_BODY]] ]
12623c95345SAnna Welker; CHECK-NEXT:    [[TMP4:%.*]] = load i32, i32* [[A_ADDR_09]], align 4
12723c95345SAnna Welker; CHECK-NEXT:    [[ADD_PTR]] = getelementptr inbounds i32, i32* [[A_ADDR_09]], i32 3
12823c95345SAnna Welker; CHECK-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP4]], [[Y]]
12923c95345SAnna Welker; CHECK-NEXT:    store i32 [[ADD]], i32* [[B_ADDR_07]], align 4
13023c95345SAnna Welker; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds i32, i32* [[B_ADDR_07]], i32 1
13123c95345SAnna Welker; CHECK-NEXT:    [[INC]] = add nuw nsw i32 [[I_08]], 1
13223c95345SAnna Welker; CHECK-NEXT:    [[EXITCOND:%.*]] = icmp eq i32 [[INC]], 1000
13323c2f2e6SFlorian Hahn; CHECK-NEXT:    br i1 [[EXITCOND]], label [[END:%.*]], label [[FOR_BODY]], !llvm.loop [[LOOP6:![0-9]+]]
13423c95345SAnna Welker; CHECK:       end:
13523c95345SAnna Welker; CHECK-NEXT:    ret void
13623c95345SAnna Welker;
13723c95345SAnna Welkerentry:
13823c95345SAnna Welker  br label %for.body
13923c95345SAnna Welkerfor.body:
14023c95345SAnna Welker  %A.addr.09 = phi i32* [ %add.ptr, %for.body ], [ %A, %entry ]
14123c95345SAnna Welker  %i.08 = phi i32 [ %inc, %for.body ], [ 0, %entry ]
14223c95345SAnna Welker  %B.addr.07 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %entry ]
14323c95345SAnna Welker  %0 = load i32, i32* %A.addr.09, align 4
14423c95345SAnna Welker  %add.ptr = getelementptr inbounds i32, i32* %A.addr.09, i32 3
14523c95345SAnna Welker  %add = add nsw i32 %0, %y
14623c95345SAnna Welker  store i32 %add, i32* %B.addr.07, align 4
14723c95345SAnna Welker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.07, i32 1
14823c95345SAnna Welker  %inc = add nuw nsw i32 %i.08, 1
14923c95345SAnna Welker  %exitcond = icmp eq i32 %inc, 1000
15023c95345SAnna Welker  br i1 %exitcond, label %end, label %for.body
15123c95345SAnna Welkerend:
15223c95345SAnna Welker  ret void
15323c95345SAnna Welker}
15423c95345SAnna Welker
15523c95345SAnna Welkerdefine hidden void @pointer_phi_v8i16_add1(i16* noalias nocapture readonly %A, i16* noalias nocapture %B, i32 %y) {
15623c95345SAnna Welker; CHECK-LABEL: @pointer_phi_v8i16_add1(
15723c95345SAnna Welker; CHECK-NEXT:  entry:
15823c95345SAnna Welker; CHECK-NEXT:    [[TMP0:%.*]] = trunc i32 [[Y:%.*]] to i16
159e6ad9ef4SPhilip Reames; CHECK-NEXT:    [[BROADCAST_SPLATINSERT:%.*]] = insertelement <8 x i16> poison, i16 [[TMP0]], i64 0
160278aa65cSJuneyoung Lee; CHECK-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <8 x i16> [[BROADCAST_SPLATINSERT]], <8 x i16> poison, <8 x i32> zeroinitializer
16123c95345SAnna Welker; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
16223c95345SAnna Welker; CHECK:       vector.body:
16323c95345SAnna Welker; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
16423c95345SAnna Welker; CHECK-NEXT:    [[NEXT_GEP:%.*]] = getelementptr i16, i16* [[A:%.*]], i32 [[INDEX]]
16523c95345SAnna Welker; CHECK-NEXT:    [[NEXT_GEP4:%.*]] = getelementptr i16, i16* [[B:%.*]], i32 [[INDEX]]
16623c95345SAnna Welker; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i16* [[NEXT_GEP]] to <8 x i16>*
16723c95345SAnna Welker; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <8 x i16>, <8 x i16>* [[TMP1]], align 2
16823c95345SAnna Welker; CHECK-NEXT:    [[TMP2:%.*]] = add <8 x i16> [[WIDE_LOAD]], [[BROADCAST_SPLAT]]
16923c95345SAnna Welker; CHECK-NEXT:    [[TMP3:%.*]] = bitcast i16* [[NEXT_GEP4]] to <8 x i16>*
17023c95345SAnna Welker; CHECK-NEXT:    store <8 x i16> [[TMP2]], <8 x i16>* [[TMP3]], align 2
17123c2f2e6SFlorian Hahn; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 8
17223c95345SAnna Welker; CHECK-NEXT:    [[TMP4:%.*]] = icmp eq i32 [[INDEX_NEXT]], 1000
17323c2f2e6SFlorian Hahn; CHECK-NEXT:    br i1 [[TMP4]], label [[END:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP7:![0-9]+]]
17423c95345SAnna Welker; CHECK:       end:
17523c95345SAnna Welker; CHECK-NEXT:    ret void
17623c95345SAnna Welker;
17723c95345SAnna Welkerentry:
17823c95345SAnna Welker  %0 = trunc i32 %y to i16
17923c95345SAnna Welker  br label %for.body
18023c95345SAnna Welkerfor.body:                                         ; preds = %for.body, %for.body.lr.ph
18123c95345SAnna Welker  %A.addr.011 = phi i16* [ %A, %entry ], [ %add.ptr, %for.body ]
18223c95345SAnna Welker  %i.010 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
18323c95345SAnna Welker  %B.addr.09 = phi i16* [ %B, %entry ], [ %incdec.ptr, %for.body ]
18423c95345SAnna Welker  %l1 = load i16, i16* %A.addr.011, align 2
18523c95345SAnna Welker  %add.ptr = getelementptr inbounds i16, i16* %A.addr.011, i32 1
18623c95345SAnna Welker  %conv1 = add i16 %l1, %0
18723c95345SAnna Welker  store i16 %conv1, i16* %B.addr.09, align 2
18823c95345SAnna Welker  %incdec.ptr = getelementptr inbounds i16, i16* %B.addr.09, i32 1
18923c95345SAnna Welker  %inc = add nuw nsw i32 %i.010, 1
19023c95345SAnna Welker  %exitcond = icmp eq i32 %inc, 1000
19123c95345SAnna Welker  br i1 %exitcond, label %end, label %for.body
19223c95345SAnna Welkerend:
19323c95345SAnna Welker  ret void
19423c95345SAnna Welker}
19523c95345SAnna Welker
19623c95345SAnna Welkerdefine hidden void @pointer_phi_v8i16_add2(i16* noalias nocapture readonly %A, i16* noalias nocapture %B, i32 %y) {
19723c95345SAnna Welker; CHECK-LABEL: @pointer_phi_v8i16_add2(
19823c95345SAnna Welker; CHECK-NEXT:  entry:
19923c95345SAnna Welker; CHECK-NEXT:    [[TMP0:%.*]] = trunc i32 [[Y:%.*]] to i16
20023c95345SAnna Welker; CHECK-NEXT:    [[IND_END:%.*]] = getelementptr i16, i16* [[A:%.*]], i32 1984
20123c95345SAnna Welker; CHECK-NEXT:    [[IND_END3:%.*]] = getelementptr i16, i16* [[B:%.*]], i32 992
202e6ad9ef4SPhilip Reames; CHECK-NEXT:    [[BROADCAST_SPLATINSERT:%.*]] = insertelement <8 x i16> poison, i16 [[TMP0]], i64 0
203278aa65cSJuneyoung Lee; CHECK-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <8 x i16> [[BROADCAST_SPLATINSERT]], <8 x i16> poison, <8 x i32> zeroinitializer
20423c95345SAnna Welker; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
20523c95345SAnna Welker; CHECK:       vector.body:
20623c95345SAnna Welker; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
20723c95345SAnna Welker; CHECK-NEXT:    [[TMP1:%.*]] = shl i32 [[INDEX]], 1
20823c95345SAnna Welker; CHECK-NEXT:    [[NEXT_GEP:%.*]] = getelementptr i16, i16* [[A]], i32 [[TMP1]]
20923c95345SAnna Welker; CHECK-NEXT:    [[NEXT_GEP4:%.*]] = getelementptr i16, i16* [[B]], i32 [[INDEX]]
21023c95345SAnna Welker; CHECK-NEXT:    [[TMP2:%.*]] = bitcast i16* [[NEXT_GEP]] to <16 x i16>*
21123c95345SAnna Welker; CHECK-NEXT:    [[WIDE_VEC:%.*]] = load <16 x i16>, <16 x i16>* [[TMP2]], align 2
212278aa65cSJuneyoung Lee; CHECK-NEXT:    [[STRIDED_VEC:%.*]] = shufflevector <16 x i16> [[WIDE_VEC]], <16 x i16> poison, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
21323c95345SAnna Welker; CHECK-NEXT:    [[TMP3:%.*]] = add <8 x i16> [[STRIDED_VEC]], [[BROADCAST_SPLAT]]
21423c95345SAnna Welker; CHECK-NEXT:    [[TMP4:%.*]] = bitcast i16* [[NEXT_GEP4]] to <8 x i16>*
21523c95345SAnna Welker; CHECK-NEXT:    store <8 x i16> [[TMP3]], <8 x i16>* [[TMP4]], align 2
21623c2f2e6SFlorian Hahn; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 8
21723c95345SAnna Welker; CHECK-NEXT:    [[TMP5:%.*]] = icmp eq i32 [[INDEX_NEXT]], 992
21823c2f2e6SFlorian Hahn; CHECK-NEXT:    br i1 [[TMP5]], label [[FOR_BODY:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP8:![0-9]+]]
21923c95345SAnna Welker; CHECK:       for.body:
22023c95345SAnna Welker; CHECK-NEXT:    [[A_ADDR_011:%.*]] = phi i16* [ [[ADD_PTR:%.*]], [[FOR_BODY]] ], [ [[IND_END]], [[VECTOR_BODY]] ]
22123c95345SAnna Welker; CHECK-NEXT:    [[I_010:%.*]] = phi i32 [ [[INC:%.*]], [[FOR_BODY]] ], [ 992, [[VECTOR_BODY]] ]
22223c95345SAnna Welker; CHECK-NEXT:    [[B_ADDR_09:%.*]] = phi i16* [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ], [ [[IND_END3]], [[VECTOR_BODY]] ]
22323c95345SAnna Welker; CHECK-NEXT:    [[L1:%.*]] = load i16, i16* [[A_ADDR_011]], align 2
22423c95345SAnna Welker; CHECK-NEXT:    [[ADD_PTR]] = getelementptr inbounds i16, i16* [[A_ADDR_011]], i32 2
22523c95345SAnna Welker; CHECK-NEXT:    [[CONV1:%.*]] = add i16 [[L1]], [[TMP0]]
22623c95345SAnna Welker; CHECK-NEXT:    store i16 [[CONV1]], i16* [[B_ADDR_09]], align 2
22723c95345SAnna Welker; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds i16, i16* [[B_ADDR_09]], i32 1
22823c95345SAnna Welker; CHECK-NEXT:    [[INC]] = add nuw nsw i32 [[I_010]], 1
22923c95345SAnna Welker; CHECK-NEXT:    [[EXITCOND:%.*]] = icmp eq i32 [[INC]], 1000
23023c2f2e6SFlorian Hahn; CHECK-NEXT:    br i1 [[EXITCOND]], label [[END:%.*]], label [[FOR_BODY]], !llvm.loop [[LOOP9:![0-9]+]]
23123c95345SAnna Welker; CHECK:       end:
23223c95345SAnna Welker; CHECK-NEXT:    ret void
23323c95345SAnna Welker;
23423c95345SAnna Welkerentry:
23523c95345SAnna Welker  %0 = trunc i32 %y to i16
23623c95345SAnna Welker  br label %for.body
23723c95345SAnna Welkerfor.body:                                         ; preds = %for.body, %for.body.lr.ph
23823c95345SAnna Welker  %A.addr.011 = phi i16* [ %A, %entry ], [ %add.ptr, %for.body ]
23923c95345SAnna Welker  %i.010 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
24023c95345SAnna Welker  %B.addr.09 = phi i16* [ %B, %entry ], [ %incdec.ptr, %for.body ]
24123c95345SAnna Welker  %l1 = load i16, i16* %A.addr.011, align 2
24223c95345SAnna Welker  %add.ptr = getelementptr inbounds i16, i16* %A.addr.011, i32 2
24323c95345SAnna Welker  %conv1 = add i16 %l1, %0
24423c95345SAnna Welker  store i16 %conv1, i16* %B.addr.09, align 2
24523c95345SAnna Welker  %incdec.ptr = getelementptr inbounds i16, i16* %B.addr.09, i32 1
24623c95345SAnna Welker  %inc = add nuw nsw i32 %i.010, 1
24723c95345SAnna Welker  %exitcond = icmp eq i32 %inc, 1000
24823c95345SAnna Welker  br i1 %exitcond, label %end, label %for.body
24923c95345SAnna Welkerend:
25023c95345SAnna Welker  ret void
25123c95345SAnna Welker}
25223c95345SAnna Welker
25323c95345SAnna Welkerdefine hidden void @pointer_phi_v8i16_add3(i16* noalias nocapture readonly %A, i16* noalias nocapture %B, i32 %y) {
25423c95345SAnna Welker; CHECK-LABEL: @pointer_phi_v8i16_add3(
25523c95345SAnna Welker; CHECK-NEXT:  entry:
25623c95345SAnna Welker; CHECK-NEXT:    [[TMP0:%.*]] = trunc i32 [[Y:%.*]] to i16
25723c95345SAnna Welker; CHECK-NEXT:    br label [[FOR_BODY:%.*]]
25823c95345SAnna Welker; CHECK:       for.body:
25923c95345SAnna Welker; CHECK-NEXT:    [[A_ADDR_011:%.*]] = phi i16* [ [[A:%.*]], [[ENTRY:%.*]] ], [ [[ADD_PTR:%.*]], [[FOR_BODY]] ]
26023c95345SAnna Welker; CHECK-NEXT:    [[I_010:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[INC:%.*]], [[FOR_BODY]] ]
26123c95345SAnna Welker; CHECK-NEXT:    [[B_ADDR_09:%.*]] = phi i16* [ [[B:%.*]], [[ENTRY]] ], [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ]
26223c95345SAnna Welker; CHECK-NEXT:    [[L1:%.*]] = load i16, i16* [[A_ADDR_011]], align 2
26323c95345SAnna Welker; CHECK-NEXT:    [[ADD_PTR]] = getelementptr inbounds i16, i16* [[A_ADDR_011]], i32 3
26423c95345SAnna Welker; CHECK-NEXT:    [[CONV1:%.*]] = add i16 [[L1]], [[TMP0]]
26523c95345SAnna Welker; CHECK-NEXT:    store i16 [[CONV1]], i16* [[B_ADDR_09]], align 2
26623c95345SAnna Welker; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds i16, i16* [[B_ADDR_09]], i32 1
26723c95345SAnna Welker; CHECK-NEXT:    [[INC]] = add nuw nsw i32 [[I_010]], 1
26823c95345SAnna Welker; CHECK-NEXT:    [[EXITCOND:%.*]] = icmp eq i32 [[INC]], 1000
26923c95345SAnna Welker; CHECK-NEXT:    br i1 [[EXITCOND]], label [[END:%.*]], label [[FOR_BODY]]
27023c95345SAnna Welker; CHECK:       end:
27123c95345SAnna Welker; CHECK-NEXT:    ret void
27223c95345SAnna Welker;
27323c95345SAnna Welkerentry:
27423c95345SAnna Welker  %0 = trunc i32 %y to i16
27523c95345SAnna Welker  br label %for.body
27623c95345SAnna Welkerfor.body:                                         ; preds = %for.body, %for.body.lr.ph
27723c95345SAnna Welker  %A.addr.011 = phi i16* [ %A, %entry ], [ %add.ptr, %for.body ]
27823c95345SAnna Welker  %i.010 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
27923c95345SAnna Welker  %B.addr.09 = phi i16* [ %B, %entry ], [ %incdec.ptr, %for.body ]
28023c95345SAnna Welker  %l1 = load i16, i16* %A.addr.011, align 2
28123c95345SAnna Welker  %add.ptr = getelementptr inbounds i16, i16* %A.addr.011, i32 3
28223c95345SAnna Welker  %conv1 = add i16 %l1, %0
28323c95345SAnna Welker  store i16 %conv1, i16* %B.addr.09, align 2
28423c95345SAnna Welker  %incdec.ptr = getelementptr inbounds i16, i16* %B.addr.09, i32 1
28523c95345SAnna Welker  %inc = add nuw nsw i32 %i.010, 1
28623c95345SAnna Welker  %exitcond = icmp eq i32 %inc, 1000
28723c95345SAnna Welker  br i1 %exitcond, label %end, label %for.body
28823c95345SAnna Welkerend:
28923c95345SAnna Welker  ret void
29023c95345SAnna Welker}
29123c95345SAnna Welker
29223c95345SAnna Welkerdefine hidden void @pointer_phi_v16i8_add1(i8* noalias nocapture readonly %A, i8* noalias nocapture %B, i32 %y) {
29323c95345SAnna Welker; CHECK-LABEL: @pointer_phi_v16i8_add1(
29423c95345SAnna Welker; CHECK-NEXT:  entry:
29523c95345SAnna Welker; CHECK-NEXT:    [[TMP0:%.*]] = trunc i32 [[Y:%.*]] to i8
29623c95345SAnna Welker; CHECK-NEXT:    [[IND_END:%.*]] = getelementptr i8, i8* [[A:%.*]], i32 992
29723c95345SAnna Welker; CHECK-NEXT:    [[IND_END3:%.*]] = getelementptr i8, i8* [[B:%.*]], i32 992
298e6ad9ef4SPhilip Reames; CHECK-NEXT:    [[BROADCAST_SPLATINSERT:%.*]] = insertelement <16 x i8> poison, i8 [[TMP0]], i64 0
299278aa65cSJuneyoung Lee; CHECK-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <16 x i8> [[BROADCAST_SPLATINSERT]], <16 x i8> poison, <16 x i32> zeroinitializer
30023c95345SAnna Welker; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
30123c95345SAnna Welker; CHECK:       vector.body:
30223c95345SAnna Welker; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
30323c95345SAnna Welker; CHECK-NEXT:    [[NEXT_GEP:%.*]] = getelementptr i8, i8* [[A]], i32 [[INDEX]]
30423c95345SAnna Welker; CHECK-NEXT:    [[NEXT_GEP4:%.*]] = getelementptr i8, i8* [[B]], i32 [[INDEX]]
30523c95345SAnna Welker; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i8* [[NEXT_GEP]] to <16 x i8>*
30623c95345SAnna Welker; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <16 x i8>, <16 x i8>* [[TMP1]], align 1
30723c95345SAnna Welker; CHECK-NEXT:    [[TMP2:%.*]] = add <16 x i8> [[WIDE_LOAD]], [[BROADCAST_SPLAT]]
30823c95345SAnna Welker; CHECK-NEXT:    [[TMP3:%.*]] = bitcast i8* [[NEXT_GEP4]] to <16 x i8>*
30923c95345SAnna Welker; CHECK-NEXT:    store <16 x i8> [[TMP2]], <16 x i8>* [[TMP3]], align 1
31023c2f2e6SFlorian Hahn; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 16
31123c95345SAnna Welker; CHECK-NEXT:    [[TMP4:%.*]] = icmp eq i32 [[INDEX_NEXT]], 992
31223c2f2e6SFlorian Hahn; CHECK-NEXT:    br i1 [[TMP4]], label [[FOR_BODY:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP10:![0-9]+]]
31323c95345SAnna Welker; CHECK:       for.body:
31423c95345SAnna Welker; CHECK-NEXT:    [[A_ADDR_010:%.*]] = phi i8* [ [[ADD_PTR:%.*]], [[FOR_BODY]] ], [ [[IND_END]], [[VECTOR_BODY]] ]
31523c95345SAnna Welker; CHECK-NEXT:    [[I_09:%.*]] = phi i32 [ [[INC:%.*]], [[FOR_BODY]] ], [ 992, [[VECTOR_BODY]] ]
31623c95345SAnna Welker; CHECK-NEXT:    [[B_ADDR_08:%.*]] = phi i8* [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ], [ [[IND_END3]], [[VECTOR_BODY]] ]
31723c95345SAnna Welker; CHECK-NEXT:    [[TMP5:%.*]] = load i8, i8* [[A_ADDR_010]], align 1
31823c95345SAnna Welker; CHECK-NEXT:    [[ADD_PTR]] = getelementptr inbounds i8, i8* [[A_ADDR_010]], i32 1
31923c95345SAnna Welker; CHECK-NEXT:    [[CONV1:%.*]] = add i8 [[TMP5]], [[TMP0]]
32023c95345SAnna Welker; CHECK-NEXT:    store i8 [[CONV1]], i8* [[B_ADDR_08]], align 1
32123c95345SAnna Welker; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds i8, i8* [[B_ADDR_08]], i32 1
32223c95345SAnna Welker; CHECK-NEXT:    [[INC]] = add nuw nsw i32 [[I_09]], 1
32323c95345SAnna Welker; CHECK-NEXT:    [[EXITCOND:%.*]] = icmp eq i32 [[INC]], 1000
32423c2f2e6SFlorian Hahn; CHECK-NEXT:    br i1 [[EXITCOND]], label [[END:%.*]], label [[FOR_BODY]], !llvm.loop [[LOOP11:![0-9]+]]
32523c95345SAnna Welker; CHECK:       end:
32623c95345SAnna Welker; CHECK-NEXT:    ret void
32723c95345SAnna Welker;
32823c95345SAnna Welkerentry:
32923c95345SAnna Welker  %0 = trunc i32 %y to i8
33023c95345SAnna Welker  br label %for.body
33123c95345SAnna Welker
33223c95345SAnna Welkerfor.body:
33323c95345SAnna Welker  %A.addr.010 = phi i8* [ %A, %entry ], [ %add.ptr, %for.body ]
33423c95345SAnna Welker  %i.09 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
33523c95345SAnna Welker  %B.addr.08 = phi i8* [ %B, %entry ], [ %incdec.ptr, %for.body ]
33623c95345SAnna Welker  %1 = load i8, i8* %A.addr.010, align 1
33723c95345SAnna Welker  %add.ptr = getelementptr inbounds i8, i8* %A.addr.010, i32 1
33823c95345SAnna Welker  %conv1 = add i8 %1, %0
33923c95345SAnna Welker  store i8 %conv1, i8* %B.addr.08, align 1
34023c95345SAnna Welker  %incdec.ptr = getelementptr inbounds i8, i8* %B.addr.08, i32 1
34123c95345SAnna Welker  %inc = add nuw nsw i32 %i.09, 1
34223c95345SAnna Welker  %exitcond = icmp eq i32 %inc, 1000
34323c95345SAnna Welker  br i1 %exitcond, label %end, label %for.body
34423c95345SAnna Welkerend:
34523c95345SAnna Welker  ret void
34623c95345SAnna Welker}
34723c95345SAnna Welker
34823c95345SAnna Welkerdefine hidden void @pointer_phi_v16i8_add2(i8* noalias nocapture readonly %A, i8* noalias nocapture %B, i32 %y) {
34923c95345SAnna Welker; CHECK-LABEL: @pointer_phi_v16i8_add2(
35023c95345SAnna Welker; CHECK-NEXT:  entry:
35123c95345SAnna Welker; CHECK-NEXT:    [[TMP0:%.*]] = trunc i32 [[Y:%.*]] to i8
35223c95345SAnna Welker; CHECK-NEXT:    [[IND_END:%.*]] = getelementptr i8, i8* [[A:%.*]], i32 1984
35323c95345SAnna Welker; CHECK-NEXT:    [[IND_END3:%.*]] = getelementptr i8, i8* [[B:%.*]], i32 992
354e6ad9ef4SPhilip Reames; CHECK-NEXT:    [[BROADCAST_SPLATINSERT:%.*]] = insertelement <16 x i8> poison, i8 [[TMP0]], i64 0
355278aa65cSJuneyoung Lee; CHECK-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <16 x i8> [[BROADCAST_SPLATINSERT]], <16 x i8> poison, <16 x i32> zeroinitializer
35623c95345SAnna Welker; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
35723c95345SAnna Welker; CHECK:       vector.body:
35823c95345SAnna Welker; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
35923c95345SAnna Welker; CHECK-NEXT:    [[TMP1:%.*]] = shl i32 [[INDEX]], 1
36023c95345SAnna Welker; CHECK-NEXT:    [[NEXT_GEP:%.*]] = getelementptr i8, i8* [[A]], i32 [[TMP1]]
36123c95345SAnna Welker; CHECK-NEXT:    [[NEXT_GEP4:%.*]] = getelementptr i8, i8* [[B]], i32 [[INDEX]]
36223c95345SAnna Welker; CHECK-NEXT:    [[TMP2:%.*]] = bitcast i8* [[NEXT_GEP]] to <32 x i8>*
36323c95345SAnna Welker; CHECK-NEXT:    [[WIDE_VEC:%.*]] = load <32 x i8>, <32 x i8>* [[TMP2]], align 1
364278aa65cSJuneyoung Lee; CHECK-NEXT:    [[STRIDED_VEC:%.*]] = shufflevector <32 x i8> [[WIDE_VEC]], <32 x i8> poison, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
36523c95345SAnna Welker; CHECK-NEXT:    [[TMP3:%.*]] = add <16 x i8> [[STRIDED_VEC]], [[BROADCAST_SPLAT]]
36623c95345SAnna Welker; CHECK-NEXT:    [[TMP4:%.*]] = bitcast i8* [[NEXT_GEP4]] to <16 x i8>*
36723c95345SAnna Welker; CHECK-NEXT:    store <16 x i8> [[TMP3]], <16 x i8>* [[TMP4]], align 1
36823c2f2e6SFlorian Hahn; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 16
36923c95345SAnna Welker; CHECK-NEXT:    [[TMP5:%.*]] = icmp eq i32 [[INDEX_NEXT]], 992
37023c2f2e6SFlorian Hahn; CHECK-NEXT:    br i1 [[TMP5]], label [[FOR_BODY:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP12:![0-9]+]]
37123c95345SAnna Welker; CHECK:       for.body:
37223c95345SAnna Welker; CHECK-NEXT:    [[A_ADDR_010:%.*]] = phi i8* [ [[ADD_PTR:%.*]], [[FOR_BODY]] ], [ [[IND_END]], [[VECTOR_BODY]] ]
37323c95345SAnna Welker; CHECK-NEXT:    [[I_09:%.*]] = phi i32 [ [[INC:%.*]], [[FOR_BODY]] ], [ 992, [[VECTOR_BODY]] ]
37423c95345SAnna Welker; CHECK-NEXT:    [[B_ADDR_08:%.*]] = phi i8* [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ], [ [[IND_END3]], [[VECTOR_BODY]] ]
37523c95345SAnna Welker; CHECK-NEXT:    [[TMP6:%.*]] = load i8, i8* [[A_ADDR_010]], align 1
37623c95345SAnna Welker; CHECK-NEXT:    [[ADD_PTR]] = getelementptr inbounds i8, i8* [[A_ADDR_010]], i32 2
37723c95345SAnna Welker; CHECK-NEXT:    [[CONV1:%.*]] = add i8 [[TMP6]], [[TMP0]]
37823c95345SAnna Welker; CHECK-NEXT:    store i8 [[CONV1]], i8* [[B_ADDR_08]], align 1
37923c95345SAnna Welker; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds i8, i8* [[B_ADDR_08]], i32 1
38023c95345SAnna Welker; CHECK-NEXT:    [[INC]] = add nuw nsw i32 [[I_09]], 1
38123c95345SAnna Welker; CHECK-NEXT:    [[EXITCOND:%.*]] = icmp eq i32 [[INC]], 1000
38223c2f2e6SFlorian Hahn; CHECK-NEXT:    br i1 [[EXITCOND]], label [[END:%.*]], label [[FOR_BODY]], !llvm.loop [[LOOP13:![0-9]+]]
38323c95345SAnna Welker; CHECK:       end:
38423c95345SAnna Welker; CHECK-NEXT:    ret void
38523c95345SAnna Welker;
38623c95345SAnna Welkerentry:
38723c95345SAnna Welker  %0 = trunc i32 %y to i8
38823c95345SAnna Welker  br label %for.body
38923c95345SAnna Welker
39023c95345SAnna Welkerfor.body:
39123c95345SAnna Welker  %A.addr.010 = phi i8* [ %A, %entry ], [ %add.ptr, %for.body ]
39223c95345SAnna Welker  %i.09 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
39323c95345SAnna Welker  %B.addr.08 = phi i8* [ %B, %entry ], [ %incdec.ptr, %for.body ]
39423c95345SAnna Welker  %1 = load i8, i8* %A.addr.010, align 1
39523c95345SAnna Welker  %add.ptr = getelementptr inbounds i8, i8* %A.addr.010, i32 2
39623c95345SAnna Welker  %conv1 = add i8 %1, %0
39723c95345SAnna Welker  store i8 %conv1, i8* %B.addr.08, align 1
39823c95345SAnna Welker  %incdec.ptr = getelementptr inbounds i8, i8* %B.addr.08, i32 1
39923c95345SAnna Welker  %inc = add nuw nsw i32 %i.09, 1
40023c95345SAnna Welker  %exitcond = icmp eq i32 %inc, 1000
40123c95345SAnna Welker  br i1 %exitcond, label %end, label %for.body
40223c95345SAnna Welkerend:
40323c95345SAnna Welker  ret void
40423c95345SAnna Welker}
40523c95345SAnna Welker
40623c95345SAnna Welkerdefine hidden void @pointer_phi_v16i8_add3(i8* noalias nocapture readonly %A, i8* noalias nocapture %B, i32 %y) {
40723c95345SAnna Welker; CHECK-LABEL: @pointer_phi_v16i8_add3(
40823c95345SAnna Welker; CHECK-NEXT:  entry:
40923c95345SAnna Welker; CHECK-NEXT:    [[TMP0:%.*]] = trunc i32 [[Y:%.*]] to i8
41023c95345SAnna Welker; CHECK-NEXT:    br label [[FOR_BODY:%.*]]
41123c95345SAnna Welker; CHECK:       for.body:
41223c95345SAnna Welker; CHECK-NEXT:    [[A_ADDR_010:%.*]] = phi i8* [ [[A:%.*]], [[ENTRY:%.*]] ], [ [[ADD_PTR:%.*]], [[FOR_BODY]] ]
41323c95345SAnna Welker; CHECK-NEXT:    [[I_09:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[INC:%.*]], [[FOR_BODY]] ]
41423c95345SAnna Welker; CHECK-NEXT:    [[B_ADDR_08:%.*]] = phi i8* [ [[B:%.*]], [[ENTRY]] ], [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ]
41523c95345SAnna Welker; CHECK-NEXT:    [[TMP1:%.*]] = load i8, i8* [[A_ADDR_010]], align 1
41623c95345SAnna Welker; CHECK-NEXT:    [[ADD_PTR]] = getelementptr inbounds i8, i8* [[A_ADDR_010]], i32 3
41723c95345SAnna Welker; CHECK-NEXT:    [[CONV1:%.*]] = add i8 [[TMP1]], [[TMP0]]
41823c95345SAnna Welker; CHECK-NEXT:    store i8 [[CONV1]], i8* [[B_ADDR_08]], align 1
41923c95345SAnna Welker; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds i8, i8* [[B_ADDR_08]], i32 1
42023c95345SAnna Welker; CHECK-NEXT:    [[INC]] = add nuw nsw i32 [[I_09]], 1
42123c95345SAnna Welker; CHECK-NEXT:    [[EXITCOND:%.*]] = icmp eq i32 [[INC]], 1000
42223c95345SAnna Welker; CHECK-NEXT:    br i1 [[EXITCOND]], label [[END:%.*]], label [[FOR_BODY]]
42323c95345SAnna Welker; CHECK:       end:
42423c95345SAnna Welker; CHECK-NEXT:    ret void
42523c95345SAnna Welker;
42623c95345SAnna Welkerentry:
42723c95345SAnna Welker  %0 = trunc i32 %y to i8
42823c95345SAnna Welker  br label %for.body
42923c95345SAnna Welker
43023c95345SAnna Welkerfor.body:
43123c95345SAnna Welker  %A.addr.010 = phi i8* [ %A, %entry ], [ %add.ptr, %for.body ]
43223c95345SAnna Welker  %i.09 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
43323c95345SAnna Welker  %B.addr.08 = phi i8* [ %B, %entry ], [ %incdec.ptr, %for.body ]
43423c95345SAnna Welker  %1 = load i8, i8* %A.addr.010, align 1
43523c95345SAnna Welker  %add.ptr = getelementptr inbounds i8, i8* %A.addr.010, i32 3
43623c95345SAnna Welker  %conv1 = add i8 %1, %0
43723c95345SAnna Welker  store i8 %conv1, i8* %B.addr.08, align 1
43823c95345SAnna Welker  %incdec.ptr = getelementptr inbounds i8, i8* %B.addr.08, i32 1
43923c95345SAnna Welker  %inc = add nuw nsw i32 %i.09, 1
44023c95345SAnna Welker  %exitcond = icmp eq i32 %inc, 1000
44123c95345SAnna Welker  br i1 %exitcond, label %end, label %for.body
44223c95345SAnna Welkerend:
44323c95345SAnna Welker  ret void
44423c95345SAnna Welker}
44523c95345SAnna Welker
44623c95345SAnna Welkerdefine hidden void @pointer_phi_v4f32_add1(float* noalias nocapture readonly %A, float* noalias nocapture %B, float %y) {
44723c95345SAnna Welker; CHECK-LABEL: @pointer_phi_v4f32_add1(
44823c95345SAnna Welker; CHECK-NEXT:  entry:
449e6ad9ef4SPhilip Reames; CHECK-NEXT:    [[BROADCAST_SPLATINSERT:%.*]] = insertelement <4 x float> poison, float [[Y:%.*]], i64 0
450278aa65cSJuneyoung Lee; CHECK-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <4 x float> [[BROADCAST_SPLATINSERT]], <4 x float> poison, <4 x i32> zeroinitializer
45123c95345SAnna Welker; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
45223c95345SAnna Welker; CHECK:       vector.body:
45323c95345SAnna Welker; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
45423c95345SAnna Welker; CHECK-NEXT:    [[NEXT_GEP:%.*]] = getelementptr float, float* [[A:%.*]], i32 [[INDEX]]
45523c95345SAnna Welker; CHECK-NEXT:    [[NEXT_GEP4:%.*]] = getelementptr float, float* [[B:%.*]], i32 [[INDEX]]
45623c95345SAnna Welker; CHECK-NEXT:    [[TMP0:%.*]] = bitcast float* [[NEXT_GEP]] to <4 x float>*
45723c95345SAnna Welker; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x float>, <4 x float>* [[TMP0]], align 4
45823c95345SAnna Welker; CHECK-NEXT:    [[TMP1:%.*]] = fadd fast <4 x float> [[WIDE_LOAD]], [[BROADCAST_SPLAT]]
45923c95345SAnna Welker; CHECK-NEXT:    [[TMP2:%.*]] = bitcast float* [[NEXT_GEP4]] to <4 x float>*
46023c95345SAnna Welker; CHECK-NEXT:    store <4 x float> [[TMP1]], <4 x float>* [[TMP2]], align 4
46123c2f2e6SFlorian Hahn; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 4
46223c95345SAnna Welker; CHECK-NEXT:    [[TMP3:%.*]] = icmp eq i32 [[INDEX_NEXT]], 1000
46323c2f2e6SFlorian Hahn; CHECK-NEXT:    br i1 [[TMP3]], label [[END:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP14:![0-9]+]]
46423c95345SAnna Welker; CHECK:       end:
46523c95345SAnna Welker; CHECK-NEXT:    ret void
46623c95345SAnna Welker;
46723c95345SAnna Welkerentry:
46823c95345SAnna Welker  br label %for.body
46923c95345SAnna Welkerfor.body:
47023c95345SAnna Welker  %A.addr.09 = phi float* [ %add.ptr, %for.body ], [ %A, %entry ]
47123c95345SAnna Welker  %i.08 = phi i32 [ %inc, %for.body ], [ 0, %entry ]
47223c95345SAnna Welker  %B.addr.07 = phi float* [ %incdec.ptr, %for.body ], [ %B, %entry ]
47323c95345SAnna Welker  %0 = load float, float* %A.addr.09, align 4
47423c95345SAnna Welker  %add.ptr = getelementptr inbounds float, float* %A.addr.09, i32 1
47523c95345SAnna Welker  %add = fadd fast float %0, %y
47623c95345SAnna Welker  store float %add, float* %B.addr.07, align 4
47723c95345SAnna Welker  %incdec.ptr = getelementptr inbounds float, float* %B.addr.07, i32 1
47823c95345SAnna Welker  %inc = add nuw nsw i32 %i.08, 1
47923c95345SAnna Welker  %exitcond = icmp eq i32 %inc, 1000
48023c95345SAnna Welker  br i1 %exitcond, label %end, label %for.body
48123c95345SAnna Welkerend:
48223c95345SAnna Welker  ret void
48323c95345SAnna Welker}
48423c95345SAnna Welker
48523c95345SAnna Welkerdefine hidden void @pointer_phi_v4f32_add2(float* noalias nocapture readonly %A, float* noalias nocapture %B, float %y) {
48623c95345SAnna Welker; CHECK-LABEL: @pointer_phi_v4f32_add2(
48723c95345SAnna Welker; CHECK-NEXT:  entry:
48823c95345SAnna Welker; CHECK-NEXT:    [[IND_END:%.*]] = getelementptr float, float* [[A:%.*]], i32 1992
48923c95345SAnna Welker; CHECK-NEXT:    [[IND_END3:%.*]] = getelementptr float, float* [[B:%.*]], i32 996
490e6ad9ef4SPhilip Reames; CHECK-NEXT:    [[BROADCAST_SPLATINSERT:%.*]] = insertelement <4 x float> poison, float [[Y:%.*]], i64 0
491278aa65cSJuneyoung Lee; CHECK-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <4 x float> [[BROADCAST_SPLATINSERT]], <4 x float> poison, <4 x i32> zeroinitializer
49223c95345SAnna Welker; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
49323c95345SAnna Welker; CHECK:       vector.body:
49423c95345SAnna Welker; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
49523c95345SAnna Welker; CHECK-NEXT:    [[TMP0:%.*]] = shl i32 [[INDEX]], 1
49623c95345SAnna Welker; CHECK-NEXT:    [[NEXT_GEP:%.*]] = getelementptr float, float* [[A]], i32 [[TMP0]]
49723c95345SAnna Welker; CHECK-NEXT:    [[NEXT_GEP4:%.*]] = getelementptr float, float* [[B]], i32 [[INDEX]]
49823c95345SAnna Welker; CHECK-NEXT:    [[TMP1:%.*]] = bitcast float* [[NEXT_GEP]] to <8 x float>*
49923c95345SAnna Welker; CHECK-NEXT:    [[WIDE_VEC:%.*]] = load <8 x float>, <8 x float>* [[TMP1]], align 4
500278aa65cSJuneyoung Lee; CHECK-NEXT:    [[STRIDED_VEC:%.*]] = shufflevector <8 x float> [[WIDE_VEC]], <8 x float> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
50123c95345SAnna Welker; CHECK-NEXT:    [[TMP2:%.*]] = fadd fast <4 x float> [[STRIDED_VEC]], [[BROADCAST_SPLAT]]
50223c95345SAnna Welker; CHECK-NEXT:    [[TMP3:%.*]] = bitcast float* [[NEXT_GEP4]] to <4 x float>*
50323c95345SAnna Welker; CHECK-NEXT:    store <4 x float> [[TMP2]], <4 x float>* [[TMP3]], align 4
50423c2f2e6SFlorian Hahn; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 4
50523c95345SAnna Welker; CHECK-NEXT:    [[TMP4:%.*]] = icmp eq i32 [[INDEX_NEXT]], 996
50623c2f2e6SFlorian Hahn; CHECK-NEXT:    br i1 [[TMP4]], label [[FOR_BODY:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP15:![0-9]+]]
50723c95345SAnna Welker; CHECK:       for.body:
50823c95345SAnna Welker; CHECK-NEXT:    [[A_ADDR_09:%.*]] = phi float* [ [[ADD_PTR:%.*]], [[FOR_BODY]] ], [ [[IND_END]], [[VECTOR_BODY]] ]
50923c95345SAnna Welker; CHECK-NEXT:    [[I_08:%.*]] = phi i32 [ [[INC:%.*]], [[FOR_BODY]] ], [ 996, [[VECTOR_BODY]] ]
51023c95345SAnna Welker; CHECK-NEXT:    [[B_ADDR_07:%.*]] = phi float* [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ], [ [[IND_END3]], [[VECTOR_BODY]] ]
51123c95345SAnna Welker; CHECK-NEXT:    [[TMP5:%.*]] = load float, float* [[A_ADDR_09]], align 4
51223c95345SAnna Welker; CHECK-NEXT:    [[ADD_PTR]] = getelementptr inbounds float, float* [[A_ADDR_09]], i32 2
51323c95345SAnna Welker; CHECK-NEXT:    [[ADD:%.*]] = fadd fast float [[TMP5]], [[Y]]
51423c95345SAnna Welker; CHECK-NEXT:    store float [[ADD]], float* [[B_ADDR_07]], align 4
51523c95345SAnna Welker; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds float, float* [[B_ADDR_07]], i32 1
51623c95345SAnna Welker; CHECK-NEXT:    [[INC]] = add nuw nsw i32 [[I_08]], 1
51723c95345SAnna Welker; CHECK-NEXT:    [[EXITCOND:%.*]] = icmp eq i32 [[INC]], 1000
51823c2f2e6SFlorian Hahn; CHECK-NEXT:    br i1 [[EXITCOND]], label [[END:%.*]], label [[FOR_BODY]], !llvm.loop [[LOOP16:![0-9]+]]
51923c95345SAnna Welker; CHECK:       end:
52023c95345SAnna Welker; CHECK-NEXT:    ret void
52123c95345SAnna Welker;
52223c95345SAnna Welkerentry:
52323c95345SAnna Welker  br label %for.body
52423c95345SAnna Welkerfor.body:
52523c95345SAnna Welker  %A.addr.09 = phi float* [ %add.ptr, %for.body ], [ %A, %entry ]
52623c95345SAnna Welker  %i.08 = phi i32 [ %inc, %for.body ], [ 0, %entry ]
52723c95345SAnna Welker  %B.addr.07 = phi float* [ %incdec.ptr, %for.body ], [ %B, %entry ]
52823c95345SAnna Welker  %0 = load float, float* %A.addr.09, align 4
52923c95345SAnna Welker  %add.ptr = getelementptr inbounds float, float* %A.addr.09, i32 2
53023c95345SAnna Welker  %add = fadd fast float %0, %y
53123c95345SAnna Welker  store float %add, float* %B.addr.07, align 4
53223c95345SAnna Welker  %incdec.ptr = getelementptr inbounds float, float* %B.addr.07, i32 1
53323c95345SAnna Welker  %inc = add nuw nsw i32 %i.08, 1
53423c95345SAnna Welker  %exitcond = icmp eq i32 %inc, 1000
53523c95345SAnna Welker  br i1 %exitcond, label %end, label %for.body
53623c95345SAnna Welkerend:
53723c95345SAnna Welker  ret void
53823c95345SAnna Welker}
53923c95345SAnna Welker
54023c95345SAnna Welkerdefine hidden void @pointer_phi_v4f32_add3(float* noalias nocapture readonly %A, float* noalias nocapture %B, float %y) {
54123c95345SAnna Welker; CHECK-LABEL: @pointer_phi_v4f32_add3(
54223c95345SAnna Welker; CHECK-NEXT:  entry:
54323c95345SAnna Welker; CHECK-NEXT:    [[IND_END:%.*]] = getelementptr float, float* [[A:%.*]], i32 2988
54423c95345SAnna Welker; CHECK-NEXT:    [[IND_END3:%.*]] = getelementptr float, float* [[B:%.*]], i32 996
545e6ad9ef4SPhilip Reames; CHECK-NEXT:    [[BROADCAST_SPLATINSERT:%.*]] = insertelement <4 x float> poison, float [[Y:%.*]], i64 0
546278aa65cSJuneyoung Lee; CHECK-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <4 x float> [[BROADCAST_SPLATINSERT]], <4 x float> poison, <4 x i32> zeroinitializer
54723c95345SAnna Welker; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
54823c95345SAnna Welker; CHECK:       vector.body:
54923c95345SAnna Welker; CHECK-NEXT:    [[POINTER_PHI:%.*]] = phi float* [ [[A]], [[ENTRY:%.*]] ], [ [[PTR_IND:%.*]], [[VECTOR_BODY]] ]
55023c95345SAnna Welker; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
55123c95345SAnna Welker; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr float, float* [[POINTER_PHI]], <4 x i32> <i32 0, i32 3, i32 6, i32 9>
55223c95345SAnna Welker; CHECK-NEXT:    [[NEXT_GEP:%.*]] = getelementptr float, float* [[B]], i32 [[INDEX]]
55323c95345SAnna Welker; CHECK-NEXT:    [[WIDE_MASKED_GATHER:%.*]] = call <4 x float> @llvm.masked.gather.v4f32.v4p0f32(<4 x float*> [[TMP0]], i32 4, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x float> undef)
55423c95345SAnna Welker; CHECK-NEXT:    [[TMP1:%.*]] = fadd fast <4 x float> [[WIDE_MASKED_GATHER]], [[BROADCAST_SPLAT]]
55523c95345SAnna Welker; CHECK-NEXT:    [[TMP2:%.*]] = bitcast float* [[NEXT_GEP]] to <4 x float>*
55623c95345SAnna Welker; CHECK-NEXT:    store <4 x float> [[TMP1]], <4 x float>* [[TMP2]], align 4
55723c2f2e6SFlorian Hahn; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 4
55823c95345SAnna Welker; CHECK-NEXT:    [[PTR_IND]] = getelementptr float, float* [[POINTER_PHI]], i32 12
55965c4d619SFlorian Hahn; CHECK-NEXT:    [[TMP3:%.*]] = icmp eq i32 [[INDEX_NEXT]], 996
56023c2f2e6SFlorian Hahn; CHECK-NEXT:    br i1 [[TMP3]], label [[FOR_BODY:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP17:![0-9]+]]
56123c95345SAnna Welker; CHECK:       for.body:
56223c95345SAnna Welker; CHECK-NEXT:    [[A_ADDR_09:%.*]] = phi float* [ [[ADD_PTR:%.*]], [[FOR_BODY]] ], [ [[IND_END]], [[VECTOR_BODY]] ]
56323c95345SAnna Welker; CHECK-NEXT:    [[I_08:%.*]] = phi i32 [ [[INC:%.*]], [[FOR_BODY]] ], [ 996, [[VECTOR_BODY]] ]
56423c95345SAnna Welker; CHECK-NEXT:    [[B_ADDR_07:%.*]] = phi float* [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ], [ [[IND_END3]], [[VECTOR_BODY]] ]
56523c95345SAnna Welker; CHECK-NEXT:    [[TMP4:%.*]] = load float, float* [[A_ADDR_09]], align 4
56623c95345SAnna Welker; CHECK-NEXT:    [[ADD_PTR]] = getelementptr inbounds float, float* [[A_ADDR_09]], i32 3
56723c95345SAnna Welker; CHECK-NEXT:    [[ADD:%.*]] = fadd fast float [[TMP4]], [[Y]]
56823c95345SAnna Welker; CHECK-NEXT:    store float [[ADD]], float* [[B_ADDR_07]], align 4
56923c95345SAnna Welker; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds float, float* [[B_ADDR_07]], i32 1
57023c95345SAnna Welker; CHECK-NEXT:    [[INC]] = add nuw nsw i32 [[I_08]], 1
57123c95345SAnna Welker; CHECK-NEXT:    [[EXITCOND:%.*]] = icmp eq i32 [[INC]], 1000
57223c2f2e6SFlorian Hahn; CHECK-NEXT:    br i1 [[EXITCOND]], label [[END:%.*]], label [[FOR_BODY]], !llvm.loop [[LOOP18:![0-9]+]]
57323c95345SAnna Welker; CHECK:       end:
57423c95345SAnna Welker; CHECK-NEXT:    ret void
57523c95345SAnna Welker;
57623c95345SAnna Welkerentry:
57723c95345SAnna Welker  br label %for.body
57823c95345SAnna Welkerfor.body:
57923c95345SAnna Welker  %A.addr.09 = phi float* [ %add.ptr, %for.body ], [ %A, %entry ]
58023c95345SAnna Welker  %i.08 = phi i32 [ %inc, %for.body ], [ 0, %entry ]
58123c95345SAnna Welker  %B.addr.07 = phi float* [ %incdec.ptr, %for.body ], [ %B, %entry ]
58223c95345SAnna Welker  %0 = load float, float* %A.addr.09, align 4
58323c95345SAnna Welker  %add.ptr = getelementptr inbounds float, float* %A.addr.09, i32 3
58423c95345SAnna Welker  %add = fadd fast float %0, %y
58523c95345SAnna Welker  store float %add, float* %B.addr.07, align 4
58623c95345SAnna Welker  %incdec.ptr = getelementptr inbounds float, float* %B.addr.07, i32 1
58723c95345SAnna Welker  %inc = add nuw nsw i32 %i.08, 1
58823c95345SAnna Welker  %exitcond = icmp eq i32 %inc, 1000
58923c95345SAnna Welker  br i1 %exitcond, label %end, label %for.body
59023c95345SAnna Welkerend:
59123c95345SAnna Welker  ret void
59223c95345SAnna Welker}
59323c95345SAnna Welker
59423c95345SAnna Welkerdefine hidden void @pointer_phi_v4half_add1(half* noalias nocapture readonly %A, half* noalias nocapture %B, half %y) {
59523c95345SAnna Welker; CHECK-LABEL: @pointer_phi_v4half_add1(
59623c95345SAnna Welker; CHECK-NEXT:  entry:
597e6ad9ef4SPhilip Reames; CHECK-NEXT:    [[BROADCAST_SPLATINSERT:%.*]] = insertelement <8 x half> poison, half [[Y:%.*]], i64 0
598278aa65cSJuneyoung Lee; CHECK-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <8 x half> [[BROADCAST_SPLATINSERT]], <8 x half> poison, <8 x i32> zeroinitializer
59923c95345SAnna Welker; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
60023c95345SAnna Welker; CHECK:       vector.body:
60123c95345SAnna Welker; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
60223c95345SAnna Welker; CHECK-NEXT:    [[NEXT_GEP:%.*]] = getelementptr half, half* [[A:%.*]], i32 [[INDEX]]
60323c95345SAnna Welker; CHECK-NEXT:    [[NEXT_GEP4:%.*]] = getelementptr half, half* [[B:%.*]], i32 [[INDEX]]
60423c95345SAnna Welker; CHECK-NEXT:    [[TMP0:%.*]] = bitcast half* [[NEXT_GEP]] to <8 x half>*
60523c95345SAnna Welker; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <8 x half>, <8 x half>* [[TMP0]], align 4
60623c95345SAnna Welker; CHECK-NEXT:    [[TMP1:%.*]] = fadd fast <8 x half> [[WIDE_LOAD]], [[BROADCAST_SPLAT]]
60723c95345SAnna Welker; CHECK-NEXT:    [[TMP2:%.*]] = bitcast half* [[NEXT_GEP4]] to <8 x half>*
60823c95345SAnna Welker; CHECK-NEXT:    store <8 x half> [[TMP1]], <8 x half>* [[TMP2]], align 4
60923c2f2e6SFlorian Hahn; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 8
61023c95345SAnna Welker; CHECK-NEXT:    [[TMP3:%.*]] = icmp eq i32 [[INDEX_NEXT]], 1000
61123c2f2e6SFlorian Hahn; CHECK-NEXT:    br i1 [[TMP3]], label [[END:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP19:![0-9]+]]
61223c95345SAnna Welker; CHECK:       end:
61323c95345SAnna Welker; CHECK-NEXT:    ret void
61423c95345SAnna Welker;
61523c95345SAnna Welkerentry:
61623c95345SAnna Welker  br label %for.body
61723c95345SAnna Welkerfor.body:
61823c95345SAnna Welker  %A.addr.09 = phi half* [ %add.ptr, %for.body ], [ %A, %entry ]
61923c95345SAnna Welker  %i.08 = phi i32 [ %inc, %for.body ], [ 0, %entry ]
62023c95345SAnna Welker  %B.addr.07 = phi half* [ %incdec.ptr, %for.body ], [ %B, %entry ]
62123c95345SAnna Welker  %0 = load half, half* %A.addr.09, align 4
62223c95345SAnna Welker  %add.ptr = getelementptr inbounds half, half* %A.addr.09, i32 1
62323c95345SAnna Welker  %add = fadd fast half %0, %y
62423c95345SAnna Welker  store half %add, half* %B.addr.07, align 4
62523c95345SAnna Welker  %incdec.ptr = getelementptr inbounds half, half* %B.addr.07, i32 1
62623c95345SAnna Welker  %inc = add nuw nsw i32 %i.08, 1
62723c95345SAnna Welker  %exitcond = icmp eq i32 %inc, 1000
62823c95345SAnna Welker  br i1 %exitcond, label %end, label %for.body
62923c95345SAnna Welkerend:
63023c95345SAnna Welker  ret void
63123c95345SAnna Welker}
63223c95345SAnna Welker
63323c95345SAnna Welkerdefine hidden void @pointer_phi_v4half_add2(half* noalias nocapture readonly %A, half* noalias nocapture %B, half %y) {
63423c95345SAnna Welker; CHECK-LABEL: @pointer_phi_v4half_add2(
63523c95345SAnna Welker; CHECK-NEXT:  entry:
63623c95345SAnna Welker; CHECK-NEXT:    [[IND_END:%.*]] = getelementptr half, half* [[A:%.*]], i32 1984
63723c95345SAnna Welker; CHECK-NEXT:    [[IND_END3:%.*]] = getelementptr half, half* [[B:%.*]], i32 992
638e6ad9ef4SPhilip Reames; CHECK-NEXT:    [[BROADCAST_SPLATINSERT:%.*]] = insertelement <8 x half> poison, half [[Y:%.*]], i64 0
639278aa65cSJuneyoung Lee; CHECK-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <8 x half> [[BROADCAST_SPLATINSERT]], <8 x half> poison, <8 x i32> zeroinitializer
64023c95345SAnna Welker; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
64123c95345SAnna Welker; CHECK:       vector.body:
64223c95345SAnna Welker; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
64323c95345SAnna Welker; CHECK-NEXT:    [[TMP0:%.*]] = shl i32 [[INDEX]], 1
64423c95345SAnna Welker; CHECK-NEXT:    [[NEXT_GEP:%.*]] = getelementptr half, half* [[A]], i32 [[TMP0]]
64523c95345SAnna Welker; CHECK-NEXT:    [[NEXT_GEP4:%.*]] = getelementptr half, half* [[B]], i32 [[INDEX]]
64623c95345SAnna Welker; CHECK-NEXT:    [[TMP1:%.*]] = bitcast half* [[NEXT_GEP]] to <16 x half>*
64723c95345SAnna Welker; CHECK-NEXT:    [[WIDE_VEC:%.*]] = load <16 x half>, <16 x half>* [[TMP1]], align 4
648278aa65cSJuneyoung Lee; CHECK-NEXT:    [[STRIDED_VEC:%.*]] = shufflevector <16 x half> [[WIDE_VEC]], <16 x half> poison, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
64923c95345SAnna Welker; CHECK-NEXT:    [[TMP2:%.*]] = fadd fast <8 x half> [[STRIDED_VEC]], [[BROADCAST_SPLAT]]
65023c95345SAnna Welker; CHECK-NEXT:    [[TMP3:%.*]] = bitcast half* [[NEXT_GEP4]] to <8 x half>*
65123c95345SAnna Welker; CHECK-NEXT:    store <8 x half> [[TMP2]], <8 x half>* [[TMP3]], align 4
65223c2f2e6SFlorian Hahn; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 8
65323c95345SAnna Welker; CHECK-NEXT:    [[TMP4:%.*]] = icmp eq i32 [[INDEX_NEXT]], 992
65423c2f2e6SFlorian Hahn; CHECK-NEXT:    br i1 [[TMP4]], label [[FOR_BODY:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP20:![0-9]+]]
65523c95345SAnna Welker; CHECK:       for.body:
65623c95345SAnna Welker; CHECK-NEXT:    [[A_ADDR_09:%.*]] = phi half* [ [[ADD_PTR:%.*]], [[FOR_BODY]] ], [ [[IND_END]], [[VECTOR_BODY]] ]
65723c95345SAnna Welker; CHECK-NEXT:    [[I_08:%.*]] = phi i32 [ [[INC:%.*]], [[FOR_BODY]] ], [ 992, [[VECTOR_BODY]] ]
65823c95345SAnna Welker; CHECK-NEXT:    [[B_ADDR_07:%.*]] = phi half* [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ], [ [[IND_END3]], [[VECTOR_BODY]] ]
65923c95345SAnna Welker; CHECK-NEXT:    [[TMP5:%.*]] = load half, half* [[A_ADDR_09]], align 4
66023c95345SAnna Welker; CHECK-NEXT:    [[ADD_PTR]] = getelementptr inbounds half, half* [[A_ADDR_09]], i32 2
66123c95345SAnna Welker; CHECK-NEXT:    [[ADD:%.*]] = fadd fast half [[TMP5]], [[Y]]
66223c95345SAnna Welker; CHECK-NEXT:    store half [[ADD]], half* [[B_ADDR_07]], align 4
66323c95345SAnna Welker; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds half, half* [[B_ADDR_07]], i32 1
66423c95345SAnna Welker; CHECK-NEXT:    [[INC]] = add nuw nsw i32 [[I_08]], 1
66523c95345SAnna Welker; CHECK-NEXT:    [[EXITCOND:%.*]] = icmp eq i32 [[INC]], 1000
66623c2f2e6SFlorian Hahn; CHECK-NEXT:    br i1 [[EXITCOND]], label [[END:%.*]], label [[FOR_BODY]], !llvm.loop [[LOOP21:![0-9]+]]
66723c95345SAnna Welker; CHECK:       end:
66823c95345SAnna Welker; CHECK-NEXT:    ret void
66923c95345SAnna Welker;
67023c95345SAnna Welkerentry:
67123c95345SAnna Welker  br label %for.body
67223c95345SAnna Welkerfor.body:
67323c95345SAnna Welker  %A.addr.09 = phi half* [ %add.ptr, %for.body ], [ %A, %entry ]
67423c95345SAnna Welker  %i.08 = phi i32 [ %inc, %for.body ], [ 0, %entry ]
67523c95345SAnna Welker  %B.addr.07 = phi half* [ %incdec.ptr, %for.body ], [ %B, %entry ]
67623c95345SAnna Welker  %0 = load half, half* %A.addr.09, align 4
67723c95345SAnna Welker  %add.ptr = getelementptr inbounds half, half* %A.addr.09, i32 2
67823c95345SAnna Welker  %add = fadd fast half %0, %y
67923c95345SAnna Welker  store half %add, half* %B.addr.07, align 4
68023c95345SAnna Welker  %incdec.ptr = getelementptr inbounds half, half* %B.addr.07, i32 1
68123c95345SAnna Welker  %inc = add nuw nsw i32 %i.08, 1
68223c95345SAnna Welker  %exitcond = icmp eq i32 %inc, 1000
68323c95345SAnna Welker  br i1 %exitcond, label %end, label %for.body
68423c95345SAnna Welkerend:
68523c95345SAnna Welker  ret void
68623c95345SAnna Welker}
68723c95345SAnna Welker
68823c95345SAnna Welkerdefine hidden void @pointer_phi_v4half_add3(half* noalias nocapture readonly %A, half* noalias nocapture %B, half %y) {
68923c95345SAnna Welker; CHECK-LABEL: @pointer_phi_v4half_add3(
69023c95345SAnna Welker; CHECK-NEXT:  entry:
691a2e0312cSDavid Green; CHECK-NEXT:    [[IND_END:%.*]] = getelementptr half, half* [[A:%.*]], i32 2976
692a2e0312cSDavid Green; CHECK-NEXT:    [[IND_END3:%.*]] = getelementptr half, half* [[B:%.*]], i32 992
693e6ad9ef4SPhilip Reames; CHECK-NEXT:    [[BROADCAST_SPLATINSERT:%.*]] = insertelement <8 x half> poison, half [[Y:%.*]], i64 0
694a2e0312cSDavid Green; CHECK-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <8 x half> [[BROADCAST_SPLATINSERT]], <8 x half> poison, <8 x i32> zeroinitializer
695a2e0312cSDavid Green; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
696a2e0312cSDavid Green; CHECK:       vector.body:
697a2e0312cSDavid Green; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
698a2e0312cSDavid Green; CHECK-NEXT:    [[TMP0:%.*]] = mul i32 [[INDEX]], 3
699a2e0312cSDavid Green; CHECK-NEXT:    [[NEXT_GEP:%.*]] = getelementptr half, half* [[A]], i32 [[TMP0]]
700a2e0312cSDavid Green; CHECK-NEXT:    [[NEXT_GEP4:%.*]] = getelementptr half, half* [[B]], i32 [[INDEX]]
701a2e0312cSDavid Green; CHECK-NEXT:    [[TMP1:%.*]] = bitcast half* [[NEXT_GEP]] to <24 x half>*
702a2e0312cSDavid Green; CHECK-NEXT:    [[WIDE_VEC:%.*]] = load <24 x half>, <24 x half>* [[TMP1]], align 4
703a2e0312cSDavid Green; CHECK-NEXT:    [[STRIDED_VEC:%.*]] = shufflevector <24 x half> [[WIDE_VEC]], <24 x half> poison, <8 x i32> <i32 0, i32 3, i32 6, i32 9, i32 12, i32 15, i32 18, i32 21>
704a2e0312cSDavid Green; CHECK-NEXT:    [[TMP2:%.*]] = fadd fast <8 x half> [[STRIDED_VEC]], [[BROADCAST_SPLAT]]
705a2e0312cSDavid Green; CHECK-NEXT:    [[TMP3:%.*]] = bitcast half* [[NEXT_GEP4]] to <8 x half>*
706a2e0312cSDavid Green; CHECK-NEXT:    store <8 x half> [[TMP2]], <8 x half>* [[TMP3]], align 4
70723c2f2e6SFlorian Hahn; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 8
708a2e0312cSDavid Green; CHECK-NEXT:    [[TMP4:%.*]] = icmp eq i32 [[INDEX_NEXT]], 992
70923c2f2e6SFlorian Hahn; CHECK-NEXT:    br i1 [[TMP4]], label [[FOR_BODY:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP22:![0-9]+]]
71023c95345SAnna Welker; CHECK:       for.body:
711a2e0312cSDavid Green; CHECK-NEXT:    [[A_ADDR_09:%.*]] = phi half* [ [[ADD_PTR:%.*]], [[FOR_BODY]] ], [ [[IND_END]], [[VECTOR_BODY]] ]
712a2e0312cSDavid Green; CHECK-NEXT:    [[I_08:%.*]] = phi i32 [ [[INC:%.*]], [[FOR_BODY]] ], [ 992, [[VECTOR_BODY]] ]
713a2e0312cSDavid Green; CHECK-NEXT:    [[B_ADDR_07:%.*]] = phi half* [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ], [ [[IND_END3]], [[VECTOR_BODY]] ]
714a2e0312cSDavid Green; CHECK-NEXT:    [[TMP5:%.*]] = load half, half* [[A_ADDR_09]], align 4
71523c95345SAnna Welker; CHECK-NEXT:    [[ADD_PTR]] = getelementptr inbounds half, half* [[A_ADDR_09]], i32 3
716a2e0312cSDavid Green; CHECK-NEXT:    [[ADD:%.*]] = fadd fast half [[TMP5]], [[Y]]
71723c95345SAnna Welker; CHECK-NEXT:    store half [[ADD]], half* [[B_ADDR_07]], align 4
71823c95345SAnna Welker; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds half, half* [[B_ADDR_07]], i32 1
71923c95345SAnna Welker; CHECK-NEXT:    [[INC]] = add nuw nsw i32 [[I_08]], 1
72023c95345SAnna Welker; CHECK-NEXT:    [[EXITCOND:%.*]] = icmp eq i32 [[INC]], 1000
72123c2f2e6SFlorian Hahn; CHECK-NEXT:    br i1 [[EXITCOND]], label [[END:%.*]], label [[FOR_BODY]], !llvm.loop [[LOOP23:![0-9]+]]
72223c95345SAnna Welker; CHECK:       end:
72323c95345SAnna Welker; CHECK-NEXT:    ret void
72423c95345SAnna Welker;
72523c95345SAnna Welkerentry:
72623c95345SAnna Welker  br label %for.body
72723c95345SAnna Welkerfor.body:
72823c95345SAnna Welker  %A.addr.09 = phi half* [ %add.ptr, %for.body ], [ %A, %entry ]
72923c95345SAnna Welker  %i.08 = phi i32 [ %inc, %for.body ], [ 0, %entry ]
73023c95345SAnna Welker  %B.addr.07 = phi half* [ %incdec.ptr, %for.body ], [ %B, %entry ]
73123c95345SAnna Welker  %0 = load half, half* %A.addr.09, align 4
73223c95345SAnna Welker  %add.ptr = getelementptr inbounds half, half* %A.addr.09, i32 3
73323c95345SAnna Welker  %add = fadd fast half %0, %y
73423c95345SAnna Welker  store half %add, half* %B.addr.07, align 4
73523c95345SAnna Welker  %incdec.ptr = getelementptr inbounds half, half* %B.addr.07, i32 1
73623c95345SAnna Welker  %inc = add nuw nsw i32 %i.08, 1
73723c95345SAnna Welker  %exitcond = icmp eq i32 %inc, 1000
73823c95345SAnna Welker  br i1 %exitcond, label %end, label %for.body
73923c95345SAnna Welkerend:
74023c95345SAnna Welker  ret void
74123c95345SAnna Welker}
74223c95345SAnna Welker
74323c95345SAnna Welker!0 = distinct !{!0, !1}
74423c95345SAnna Welker!1 = !{!"llvm.loop.interleave.count", i32 2}
74523c95345SAnna Welker
74623c95345SAnna Welkerdefine hidden void @pointer_phi_v4i32_uf2(i32* noalias nocapture readonly %A, i32* noalias nocapture %B, i32 %n, i32 %y) {
74723c95345SAnna Welker; CHECK-LABEL: @pointer_phi_v4i32_uf2(
74823c95345SAnna Welker; CHECK-NEXT:  entry:
74923c95345SAnna Welker; CHECK-NEXT:    [[IND_END:%.*]] = getelementptr i32, i32* [[A:%.*]], i32 59952
75023c95345SAnna Welker; CHECK-NEXT:    [[IND_END3:%.*]] = getelementptr i32, i32* [[B:%.*]], i32 9992
751e6ad9ef4SPhilip Reames; CHECK-NEXT:    [[BROADCAST_SPLATINSERT:%.*]] = insertelement <4 x i32> poison, i32 [[Y:%.*]], i64 0
752278aa65cSJuneyoung Lee; CHECK-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <4 x i32> [[BROADCAST_SPLATINSERT]], <4 x i32> poison, <4 x i32> zeroinitializer
753e6ad9ef4SPhilip Reames; CHECK-NEXT:    [[BROADCAST_SPLATINSERT6:%.*]] = insertelement <4 x i32> poison, i32 [[Y]], i64 0
754278aa65cSJuneyoung Lee; CHECK-NEXT:    [[BROADCAST_SPLAT7:%.*]] = shufflevector <4 x i32> [[BROADCAST_SPLATINSERT6]], <4 x i32> poison, <4 x i32> zeroinitializer
75523c95345SAnna Welker; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
75623c95345SAnna Welker; CHECK:       vector.body:
75723c95345SAnna Welker; CHECK-NEXT:    [[POINTER_PHI:%.*]] = phi i32* [ [[A]], [[ENTRY:%.*]] ], [ [[PTR_IND:%.*]], [[VECTOR_BODY]] ]
75823c95345SAnna Welker; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
75923c95345SAnna Welker; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr i32, i32* [[POINTER_PHI]], <4 x i32> <i32 0, i32 6, i32 12, i32 18>
76023c95345SAnna Welker; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr i32, i32* [[POINTER_PHI]], <4 x i32> <i32 24, i32 30, i32 36, i32 42>
76123c95345SAnna Welker; CHECK-NEXT:    [[NEXT_GEP:%.*]] = getelementptr i32, i32* [[B]], i32 [[INDEX]]
76223c95345SAnna Welker; CHECK-NEXT:    [[WIDE_MASKED_GATHER:%.*]] = call <4 x i32> @llvm.masked.gather.v4i32.v4p0i32(<4 x i32*> [[TMP0]], i32 4, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i32> undef)
76323c95345SAnna Welker; CHECK-NEXT:    [[WIDE_MASKED_GATHER5:%.*]] = call <4 x i32> @llvm.masked.gather.v4i32.v4p0i32(<4 x i32*> [[TMP1]], i32 4, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i32> undef)
76423c95345SAnna Welker; CHECK-NEXT:    [[TMP2:%.*]] = add nsw <4 x i32> [[WIDE_MASKED_GATHER]], [[BROADCAST_SPLAT]]
76523c95345SAnna Welker; CHECK-NEXT:    [[TMP3:%.*]] = add nsw <4 x i32> [[WIDE_MASKED_GATHER5]], [[BROADCAST_SPLAT7]]
76623c95345SAnna Welker; CHECK-NEXT:    [[TMP4:%.*]] = bitcast i32* [[NEXT_GEP]] to <4 x i32>*
76723c95345SAnna Welker; CHECK-NEXT:    store <4 x i32> [[TMP2]], <4 x i32>* [[TMP4]], align 4
76823c95345SAnna Welker; CHECK-NEXT:    [[TMP5:%.*]] = getelementptr i32, i32* [[NEXT_GEP]], i32 4
76923c95345SAnna Welker; CHECK-NEXT:    [[TMP6:%.*]] = bitcast i32* [[TMP5]] to <4 x i32>*
77023c95345SAnna Welker; CHECK-NEXT:    store <4 x i32> [[TMP3]], <4 x i32>* [[TMP6]], align 4
77123c2f2e6SFlorian Hahn; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 8
77223c95345SAnna Welker; CHECK-NEXT:    [[PTR_IND]] = getelementptr i32, i32* [[POINTER_PHI]], i32 48
77365c4d619SFlorian Hahn; CHECK-NEXT:    [[TMP7:%.*]] = icmp eq i32 [[INDEX_NEXT]], 9992
77423c2f2e6SFlorian Hahn; CHECK-NEXT:    br i1 [[TMP7]], label [[FOR_BODY:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP24:![0-9]+]]
77523c95345SAnna Welker; CHECK:       for.cond.cleanup:
77623c95345SAnna Welker; CHECK-NEXT:    ret void
77723c95345SAnna Welker; CHECK:       for.body:
77823c95345SAnna Welker; CHECK-NEXT:    [[A_ADDR_08:%.*]] = phi i32* [ [[ADD_PTR:%.*]], [[FOR_BODY]] ], [ [[IND_END]], [[VECTOR_BODY]] ]
77923c95345SAnna Welker; CHECK-NEXT:    [[I_07:%.*]] = phi i32 [ [[INC:%.*]], [[FOR_BODY]] ], [ 9992, [[VECTOR_BODY]] ]
78023c95345SAnna Welker; CHECK-NEXT:    [[B_ADDR_06:%.*]] = phi i32* [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ], [ [[IND_END3]], [[VECTOR_BODY]] ]
78123c95345SAnna Welker; CHECK-NEXT:    [[TMP8:%.*]] = load i32, i32* [[A_ADDR_08]], align 4
78223c95345SAnna Welker; CHECK-NEXT:    [[ADD_PTR]] = getelementptr inbounds i32, i32* [[A_ADDR_08]], i32 6
78323c95345SAnna Welker; CHECK-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP8]], [[Y]]
78423c95345SAnna Welker; CHECK-NEXT:    store i32 [[ADD]], i32* [[B_ADDR_06]], align 4
78523c95345SAnna Welker; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds i32, i32* [[B_ADDR_06]], i32 1
78623c95345SAnna Welker; CHECK-NEXT:    [[INC]] = add nuw nsw i32 [[I_07]], 1
78723c95345SAnna Welker; CHECK-NEXT:    [[EXITCOND:%.*]] = icmp eq i32 [[INC]], 10000
78823c2f2e6SFlorian Hahn; CHECK-NEXT:    br i1 [[EXITCOND]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY]], !llvm.loop [[LOOP25:![0-9]+]]
78923c95345SAnna Welker;
79023c95345SAnna Welker
79123c95345SAnna Welkerentry:
79223c95345SAnna Welker  br label %for.body
79323c95345SAnna Welker
79423c95345SAnna Welkerfor.cond.cleanup:
79523c95345SAnna Welker  ret void
79623c95345SAnna Welker
79723c95345SAnna Welkerfor.body:
79823c95345SAnna Welker  %A.addr.08 = phi i32* [ %A, %entry ], [ %add.ptr, %for.body ]
79923c95345SAnna Welker  %i.07 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
80023c95345SAnna Welker  %B.addr.06 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
80123c95345SAnna Welker  %0 = load i32, i32* %A.addr.08, align 4
80223c95345SAnna Welker  %add.ptr = getelementptr inbounds i32, i32* %A.addr.08, i32 6
80323c95345SAnna Welker  %add = add nsw i32 %0, %y
80423c95345SAnna Welker  store i32 %add, i32* %B.addr.06, align 4
80523c95345SAnna Welker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.06, i32 1
80623c95345SAnna Welker  %inc = add nuw nsw i32 %i.07, 1
80723c95345SAnna Welker  %exitcond = icmp eq i32 %inc, 10000
80823c95345SAnna Welker  br i1 %exitcond, label %for.cond.cleanup, label %for.body, !llvm.loop !0
80923c95345SAnna Welker}
81023c95345SAnna Welker
81123c95345SAnna Welker!2 = distinct !{!2, !3}
81223c95345SAnna Welker!3 = !{!"llvm.loop.interleave.count", i32 4}
81323c95345SAnna Welker
81423c95345SAnna Welkerdefine hidden void @pointer_phi_v4i32_uf4(i32* noalias nocapture readonly %A, i32* noalias nocapture %B, i32 %n, i32 %y) {
81523c95345SAnna Welker; CHECK-LABEL: @pointer_phi_v4i32_uf4(
81623c95345SAnna Welker; CHECK-NEXT:  entry:
81723c95345SAnna Welker; CHECK-NEXT:    [[IND_END:%.*]] = getelementptr i32, i32* [[A:%.*]], i32 59904
81823c95345SAnna Welker; CHECK-NEXT:    [[IND_END3:%.*]] = getelementptr i32, i32* [[B:%.*]], i32 9984
819e6ad9ef4SPhilip Reames; CHECK-NEXT:    [[BROADCAST_SPLATINSERT:%.*]] = insertelement <4 x i32> poison, i32 [[Y:%.*]], i64 0
820278aa65cSJuneyoung Lee; CHECK-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <4 x i32> [[BROADCAST_SPLATINSERT]], <4 x i32> poison, <4 x i32> zeroinitializer
821e6ad9ef4SPhilip Reames; CHECK-NEXT:    [[BROADCAST_SPLATINSERT10:%.*]] = insertelement <4 x i32> poison, i32 [[Y]], i64 0
822278aa65cSJuneyoung Lee; CHECK-NEXT:    [[BROADCAST_SPLAT11:%.*]] = shufflevector <4 x i32> [[BROADCAST_SPLATINSERT10]], <4 x i32> poison, <4 x i32> zeroinitializer
823e6ad9ef4SPhilip Reames; CHECK-NEXT:    [[BROADCAST_SPLATINSERT12:%.*]] = insertelement <4 x i32> poison, i32 [[Y]], i64 0
824278aa65cSJuneyoung Lee; CHECK-NEXT:    [[BROADCAST_SPLAT13:%.*]] = shufflevector <4 x i32> [[BROADCAST_SPLATINSERT12]], <4 x i32> poison, <4 x i32> zeroinitializer
825e6ad9ef4SPhilip Reames; CHECK-NEXT:    [[BROADCAST_SPLATINSERT14:%.*]] = insertelement <4 x i32> poison, i32 [[Y]], i64 0
826278aa65cSJuneyoung Lee; CHECK-NEXT:    [[BROADCAST_SPLAT15:%.*]] = shufflevector <4 x i32> [[BROADCAST_SPLATINSERT14]], <4 x i32> poison, <4 x i32> zeroinitializer
82723c95345SAnna Welker; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
82823c95345SAnna Welker; CHECK:       vector.body:
82923c95345SAnna Welker; CHECK-NEXT:    [[POINTER_PHI:%.*]] = phi i32* [ [[A]], [[ENTRY:%.*]] ], [ [[PTR_IND:%.*]], [[VECTOR_BODY]] ]
83023c95345SAnna Welker; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
83123c95345SAnna Welker; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr i32, i32* [[POINTER_PHI]], <4 x i32> <i32 0, i32 6, i32 12, i32 18>
83223c95345SAnna Welker; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr i32, i32* [[POINTER_PHI]], <4 x i32> <i32 24, i32 30, i32 36, i32 42>
83323c95345SAnna Welker; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr i32, i32* [[POINTER_PHI]], <4 x i32> <i32 48, i32 54, i32 60, i32 66>
83423c95345SAnna Welker; CHECK-NEXT:    [[TMP3:%.*]] = getelementptr i32, i32* [[POINTER_PHI]], <4 x i32> <i32 72, i32 78, i32 84, i32 90>
83523c95345SAnna Welker; CHECK-NEXT:    [[NEXT_GEP:%.*]] = getelementptr i32, i32* [[B]], i32 [[INDEX]]
83623c95345SAnna Welker; CHECK-NEXT:    [[WIDE_MASKED_GATHER:%.*]] = call <4 x i32> @llvm.masked.gather.v4i32.v4p0i32(<4 x i32*> [[TMP0]], i32 4, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i32> undef)
83723c95345SAnna Welker; CHECK-NEXT:    [[WIDE_MASKED_GATHER7:%.*]] = call <4 x i32> @llvm.masked.gather.v4i32.v4p0i32(<4 x i32*> [[TMP1]], i32 4, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i32> undef)
83823c95345SAnna Welker; CHECK-NEXT:    [[WIDE_MASKED_GATHER8:%.*]] = call <4 x i32> @llvm.masked.gather.v4i32.v4p0i32(<4 x i32*> [[TMP2]], i32 4, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i32> undef)
83923c95345SAnna Welker; CHECK-NEXT:    [[WIDE_MASKED_GATHER9:%.*]] = call <4 x i32> @llvm.masked.gather.v4i32.v4p0i32(<4 x i32*> [[TMP3]], i32 4, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i32> undef)
84023c95345SAnna Welker; CHECK-NEXT:    [[TMP4:%.*]] = add nsw <4 x i32> [[WIDE_MASKED_GATHER]], [[BROADCAST_SPLAT]]
84123c95345SAnna Welker; CHECK-NEXT:    [[TMP5:%.*]] = add nsw <4 x i32> [[WIDE_MASKED_GATHER7]], [[BROADCAST_SPLAT11]]
84223c95345SAnna Welker; CHECK-NEXT:    [[TMP6:%.*]] = add nsw <4 x i32> [[WIDE_MASKED_GATHER8]], [[BROADCAST_SPLAT13]]
84323c95345SAnna Welker; CHECK-NEXT:    [[TMP7:%.*]] = add nsw <4 x i32> [[WIDE_MASKED_GATHER9]], [[BROADCAST_SPLAT15]]
84423c95345SAnna Welker; CHECK-NEXT:    [[TMP8:%.*]] = bitcast i32* [[NEXT_GEP]] to <4 x i32>*
84523c95345SAnna Welker; CHECK-NEXT:    store <4 x i32> [[TMP4]], <4 x i32>* [[TMP8]], align 4
84623c95345SAnna Welker; CHECK-NEXT:    [[TMP9:%.*]] = getelementptr i32, i32* [[NEXT_GEP]], i32 4
84723c95345SAnna Welker; CHECK-NEXT:    [[TMP10:%.*]] = bitcast i32* [[TMP9]] to <4 x i32>*
84823c95345SAnna Welker; CHECK-NEXT:    store <4 x i32> [[TMP5]], <4 x i32>* [[TMP10]], align 4
84923c95345SAnna Welker; CHECK-NEXT:    [[TMP11:%.*]] = getelementptr i32, i32* [[NEXT_GEP]], i32 8
85023c95345SAnna Welker; CHECK-NEXT:    [[TMP12:%.*]] = bitcast i32* [[TMP11]] to <4 x i32>*
85123c95345SAnna Welker; CHECK-NEXT:    store <4 x i32> [[TMP6]], <4 x i32>* [[TMP12]], align 4
85223c95345SAnna Welker; CHECK-NEXT:    [[TMP13:%.*]] = getelementptr i32, i32* [[NEXT_GEP]], i32 12
85323c95345SAnna Welker; CHECK-NEXT:    [[TMP14:%.*]] = bitcast i32* [[TMP13]] to <4 x i32>*
85423c95345SAnna Welker; CHECK-NEXT:    store <4 x i32> [[TMP7]], <4 x i32>* [[TMP14]], align 4
85523c2f2e6SFlorian Hahn; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 16
85623c95345SAnna Welker; CHECK-NEXT:    [[PTR_IND]] = getelementptr i32, i32* [[POINTER_PHI]], i32 96
85765c4d619SFlorian Hahn; CHECK-NEXT:    [[TMP15:%.*]] = icmp eq i32 [[INDEX_NEXT]], 9984
85823c2f2e6SFlorian Hahn; CHECK-NEXT:    br i1 [[TMP15]], label [[FOR_BODY:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP26:![0-9]+]]
85923c95345SAnna Welker; CHECK:       for.cond.cleanup:
86023c95345SAnna Welker; CHECK-NEXT:    ret void
86123c95345SAnna Welker; CHECK:       for.body:
86223c95345SAnna Welker; CHECK-NEXT:    [[A_ADDR_08:%.*]] = phi i32* [ [[ADD_PTR:%.*]], [[FOR_BODY]] ], [ [[IND_END]], [[VECTOR_BODY]] ]
86323c95345SAnna Welker; CHECK-NEXT:    [[I_07:%.*]] = phi i32 [ [[INC:%.*]], [[FOR_BODY]] ], [ 9984, [[VECTOR_BODY]] ]
86423c95345SAnna Welker; CHECK-NEXT:    [[B_ADDR_06:%.*]] = phi i32* [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ], [ [[IND_END3]], [[VECTOR_BODY]] ]
86523c95345SAnna Welker; CHECK-NEXT:    [[TMP16:%.*]] = load i32, i32* [[A_ADDR_08]], align 4
86623c95345SAnna Welker; CHECK-NEXT:    [[ADD_PTR]] = getelementptr inbounds i32, i32* [[A_ADDR_08]], i32 6
86723c95345SAnna Welker; CHECK-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP16]], [[Y]]
86823c95345SAnna Welker; CHECK-NEXT:    store i32 [[ADD]], i32* [[B_ADDR_06]], align 4
86923c95345SAnna Welker; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds i32, i32* [[B_ADDR_06]], i32 1
87023c95345SAnna Welker; CHECK-NEXT:    [[INC]] = add nuw nsw i32 [[I_07]], 1
87123c95345SAnna Welker; CHECK-NEXT:    [[EXITCOND:%.*]] = icmp eq i32 [[INC]], 10000
87223c2f2e6SFlorian Hahn; CHECK-NEXT:    br i1 [[EXITCOND]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY]], !llvm.loop [[LOOP27:![0-9]+]]
87323c95345SAnna Welker;
87423c95345SAnna Welkerentry:
87523c95345SAnna Welker  br label %for.body
87623c95345SAnna Welker
87723c95345SAnna Welkerfor.cond.cleanup:
87823c95345SAnna Welker  ret void
87923c95345SAnna Welker
88023c95345SAnna Welkerfor.body:
88123c95345SAnna Welker  %A.addr.08 = phi i32* [ %A, %entry ], [ %add.ptr, %for.body ]
88223c95345SAnna Welker  %i.07 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
88323c95345SAnna Welker  %B.addr.06 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
88423c95345SAnna Welker  %0 = load i32, i32* %A.addr.08, align 4
88523c95345SAnna Welker  %add.ptr = getelementptr inbounds i32, i32* %A.addr.08, i32 6
88623c95345SAnna Welker  %add = add nsw i32 %0, %y
88723c95345SAnna Welker  store i32 %add, i32* %B.addr.06, align 4
88823c95345SAnna Welker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.06, i32 1
88923c95345SAnna Welker  %inc = add nuw nsw i32 %i.07, 1
89023c95345SAnna Welker  %exitcond = icmp eq i32 %inc, 10000
89123c95345SAnna Welker  br i1 %exitcond, label %for.cond.cleanup, label %for.body, !llvm.loop !2
89223c95345SAnna Welker}
89323c95345SAnna Welker
89423c95345SAnna Welkerdefine hidden void @mult_ptr_iv(i8* noalias nocapture readonly %x, i8* noalias nocapture %z) {
89523c95345SAnna Welker; CHECK-LABEL: @mult_ptr_iv(
89623c95345SAnna Welker; CHECK-NEXT:  entry:
897a74941daSFlorian Hahn; CHECK-NEXT:    [[SCEVGEP:%.*]] = getelementptr i8, i8* [[Z:%.*]], i32 3000
898a74941daSFlorian Hahn; CHECK-NEXT:    [[SCEVGEP1:%.*]] = getelementptr i8, i8* [[X:%.*]], i32 3000
899a74941daSFlorian Hahn; CHECK-NEXT:    [[BOUND0:%.*]] = icmp ugt i8* [[SCEVGEP1]], [[Z]]
900a74941daSFlorian Hahn; CHECK-NEXT:    [[BOUND1:%.*]] = icmp ugt i8* [[SCEVGEP]], [[X]]
901a74941daSFlorian Hahn; CHECK-NEXT:    [[FOUND_CONFLICT:%.*]] = and i1 [[BOUND0]], [[BOUND1]]
902a74941daSFlorian Hahn; CHECK-NEXT:    br i1 [[FOUND_CONFLICT]], label [[FOR_BODY:%.*]], label [[VECTOR_PH:%.*]]
903a74941daSFlorian Hahn; CHECK:       vector.ph:
904a74941daSFlorian Hahn; CHECK-NEXT:    [[IND_END:%.*]] = getelementptr i8, i8* [[X]], i32 3000
905a74941daSFlorian Hahn; CHECK-NEXT:    [[IND_END3:%.*]] = getelementptr i8, i8* [[Z]], i32 3000
90623c95345SAnna Welker; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]]
90723c95345SAnna Welker; CHECK:       vector.body:
908a74941daSFlorian Hahn; CHECK-NEXT:    [[POINTER_PHI:%.*]] = phi i8* [ [[X]], [[VECTOR_PH]] ], [ [[PTR_IND:%.*]], [[VECTOR_BODY]] ]
909a74941daSFlorian Hahn; CHECK-NEXT:    [[POINTER_PHI5:%.*]] = phi i8* [ [[Z]], [[VECTOR_PH]] ], [ [[PTR_IND6:%.*]], [[VECTOR_BODY]] ]
910a74941daSFlorian Hahn; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
91123c95345SAnna Welker; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr i8, i8* [[POINTER_PHI]], <4 x i32> <i32 0, i32 3, i32 6, i32 9>
912a74941daSFlorian Hahn; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr i8, i8* [[POINTER_PHI5]], <4 x i32> <i32 0, i32 3, i32 6, i32 9>
91323c95345SAnna Welker; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr inbounds i8, <4 x i8*> [[TMP0]], i32 1
914a2e0312cSDavid Green; CHECK-NEXT:    [[WIDE_MASKED_GATHER:%.*]] = call <4 x i8> @llvm.masked.gather.v4i8.v4p0i8(<4 x i8*> [[TMP0]], i32 1, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i8> undef), !alias.scope !28
91523c95345SAnna Welker; CHECK-NEXT:    [[TMP3:%.*]] = getelementptr inbounds i8, <4 x i8*> [[TMP0]], i32 2
916a2e0312cSDavid Green; CHECK-NEXT:    [[WIDE_MASKED_GATHER7:%.*]] = call <4 x i8> @llvm.masked.gather.v4i8.v4p0i8(<4 x i8*> [[TMP2]], i32 1, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i8> undef), !alias.scope !28
917a2e0312cSDavid Green; CHECK-NEXT:    [[WIDE_MASKED_GATHER8:%.*]] = call <4 x i8> @llvm.masked.gather.v4i8.v4p0i8(<4 x i8*> [[TMP3]], i32 1, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i8> undef), !alias.scope !28
91823c95345SAnna Welker; CHECK-NEXT:    [[TMP4:%.*]] = mul <4 x i8> [[WIDE_MASKED_GATHER]], <i8 10, i8 10, i8 10, i8 10>
919a74941daSFlorian Hahn; CHECK-NEXT:    [[TMP5:%.*]] = mul <4 x i8> [[WIDE_MASKED_GATHER]], [[WIDE_MASKED_GATHER7]]
920a74941daSFlorian Hahn; CHECK-NEXT:    [[TMP6:%.*]] = mul <4 x i8> [[WIDE_MASKED_GATHER]], [[WIDE_MASKED_GATHER8]]
92123c95345SAnna Welker; CHECK-NEXT:    [[TMP7:%.*]] = getelementptr inbounds i8, <4 x i8*> [[TMP1]], i32 1
922a2e0312cSDavid Green; CHECK-NEXT:    call void @llvm.masked.scatter.v4i8.v4p0i8(<4 x i8> [[TMP4]], <4 x i8*> [[TMP1]], i32 1, <4 x i1> <i1 true, i1 true, i1 true, i1 true>), !alias.scope !31, !noalias !28
92323c95345SAnna Welker; CHECK-NEXT:    [[TMP8:%.*]] = getelementptr inbounds i8, <4 x i8*> [[TMP1]], i32 2
924a2e0312cSDavid Green; CHECK-NEXT:    call void @llvm.masked.scatter.v4i8.v4p0i8(<4 x i8> [[TMP5]], <4 x i8*> [[TMP7]], i32 1, <4 x i1> <i1 true, i1 true, i1 true, i1 true>), !alias.scope !31, !noalias !28
925a2e0312cSDavid Green; CHECK-NEXT:    call void @llvm.masked.scatter.v4i8.v4p0i8(<4 x i8> [[TMP6]], <4 x i8*> [[TMP8]], i32 1, <4 x i1> <i1 true, i1 true, i1 true, i1 true>), !alias.scope !31, !noalias !28
92623c2f2e6SFlorian Hahn; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 4
92723c95345SAnna Welker; CHECK-NEXT:    [[PTR_IND]] = getelementptr i8, i8* [[POINTER_PHI]], i32 12
928a74941daSFlorian Hahn; CHECK-NEXT:    [[PTR_IND6]] = getelementptr i8, i8* [[POINTER_PHI5]], i32 12
92965c4d619SFlorian Hahn; CHECK-NEXT:    [[TMP9:%.*]] = icmp eq i32 [[INDEX_NEXT]], 1000
93023c2f2e6SFlorian Hahn; CHECK-NEXT:    br i1 [[TMP9]], label [[END:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP33:![0-9]+]]
931a74941daSFlorian Hahn; CHECK:       for.body:
932a74941daSFlorian Hahn; CHECK-NEXT:    [[X_ADDR_050:%.*]] = phi i8* [ [[INCDEC_PTR2:%.*]], [[FOR_BODY]] ], [ [[X]], [[ENTRY:%.*]] ]
933a74941daSFlorian Hahn; CHECK-NEXT:    [[Z_ADDR_049:%.*]] = phi i8* [ [[INCDEC_PTR34:%.*]], [[FOR_BODY]] ], [ [[Z]], [[ENTRY]] ]
934a74941daSFlorian Hahn; CHECK-NEXT:    [[I_048:%.*]] = phi i32 [ [[INC:%.*]], [[FOR_BODY]] ], [ 0, [[ENTRY]] ]
935a74941daSFlorian Hahn; CHECK-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds i8, i8* [[X_ADDR_050]], i32 1
936a74941daSFlorian Hahn; CHECK-NEXT:    [[TMP10:%.*]] = load i8, i8* [[X_ADDR_050]], align 1
937a74941daSFlorian Hahn; CHECK-NEXT:    [[INCDEC_PTR1:%.*]] = getelementptr inbounds i8, i8* [[X_ADDR_050]], i32 2
938a74941daSFlorian Hahn; CHECK-NEXT:    [[TMP11:%.*]] = load i8, i8* [[INCDEC_PTR]], align 1
939a74941daSFlorian Hahn; CHECK-NEXT:    [[INCDEC_PTR2]] = getelementptr inbounds i8, i8* [[X_ADDR_050]], i32 3
940a74941daSFlorian Hahn; CHECK-NEXT:    [[TMP12:%.*]] = load i8, i8* [[INCDEC_PTR1]], align 1
941a74941daSFlorian Hahn; CHECK-NEXT:    [[MUL:%.*]] = mul i8 [[TMP10]], 10
942a74941daSFlorian Hahn; CHECK-NEXT:    [[MUL1:%.*]] = mul i8 [[TMP10]], [[TMP11]]
943a74941daSFlorian Hahn; CHECK-NEXT:    [[MUL2:%.*]] = mul i8 [[TMP10]], [[TMP12]]
944a74941daSFlorian Hahn; CHECK-NEXT:    [[INCDEC_PTR32:%.*]] = getelementptr inbounds i8, i8* [[Z_ADDR_049]], i32 1
945a74941daSFlorian Hahn; CHECK-NEXT:    store i8 [[MUL]], i8* [[Z_ADDR_049]], align 1
946a74941daSFlorian Hahn; CHECK-NEXT:    [[INCDEC_PTR33:%.*]] = getelementptr inbounds i8, i8* [[Z_ADDR_049]], i32 2
947a74941daSFlorian Hahn; CHECK-NEXT:    store i8 [[MUL1]], i8* [[INCDEC_PTR32]], align 1
948a74941daSFlorian Hahn; CHECK-NEXT:    [[INCDEC_PTR34]] = getelementptr inbounds i8, i8* [[Z_ADDR_049]], i32 3
949a74941daSFlorian Hahn; CHECK-NEXT:    store i8 [[MUL2]], i8* [[INCDEC_PTR33]], align 1
950a74941daSFlorian Hahn; CHECK-NEXT:    [[INC]] = add nuw i32 [[I_048]], 1
951a74941daSFlorian Hahn; CHECK-NEXT:    [[EXITCOND:%.*]] = icmp eq i32 [[INC]], 1000
95223c2f2e6SFlorian Hahn; CHECK-NEXT:    br i1 [[EXITCOND]], label [[END]], label [[FOR_BODY]], !llvm.loop [[LOOP34:![0-9]+]]
95323c95345SAnna Welker; CHECK:       end:
95423c95345SAnna Welker; CHECK-NEXT:    ret void
95523c95345SAnna Welker;
95623c95345SAnna Welkerentry:
95723c95345SAnna Welker  br label %for.body
95823c95345SAnna Welker
95923c95345SAnna Welkerfor.body:
96023c95345SAnna Welker  %x.addr.050 = phi i8* [ %incdec.ptr2, %for.body ], [ %x, %entry ]
96123c95345SAnna Welker  %z.addr.049 = phi i8* [ %incdec.ptr34, %for.body ], [ %z, %entry ]
96223c95345SAnna Welker  %i.048 = phi i32 [ %inc, %for.body ], [ 0, %entry ]
96323c95345SAnna Welker  %incdec.ptr = getelementptr inbounds i8, i8* %x.addr.050, i32 1
96423c95345SAnna Welker  %0 = load i8, i8* %x.addr.050, align 1
96523c95345SAnna Welker  %incdec.ptr1 = getelementptr inbounds i8, i8* %x.addr.050, i32 2
96623c95345SAnna Welker  %1 = load i8, i8* %incdec.ptr, align 1
96723c95345SAnna Welker  %incdec.ptr2 = getelementptr inbounds i8, i8* %x.addr.050, i32 3
96823c95345SAnna Welker  %2 = load i8, i8* %incdec.ptr1, align 1
96923c95345SAnna Welker  %conv = zext i8 %0 to i32
97023c95345SAnna Welker  %mul = mul nuw nsw i32 %conv, 10
97123c95345SAnna Welker  %conv1 = zext i8 %1 to i32
97223c95345SAnna Welker  %conv2 = zext i8 %2 to i32
97323c95345SAnna Welker  %mul1 = mul nuw nsw i32 %conv, %conv1
97423c95345SAnna Welker  %mul2 = mul nuw nsw i32 %conv, %conv2
97523c95345SAnna Welker  %conv3 = trunc i32 %mul to i8
97623c95345SAnna Welker  %conv4 = trunc i32 %mul1 to i8
97723c95345SAnna Welker  %conv5 = trunc i32 %mul2 to i8
97823c95345SAnna Welker  %incdec.ptr32 = getelementptr inbounds i8, i8* %z.addr.049, i32 1
97923c95345SAnna Welker  store i8 %conv3, i8* %z.addr.049, align 1
98023c95345SAnna Welker  %incdec.ptr33 = getelementptr inbounds i8, i8* %z.addr.049, i32 2
98123c95345SAnna Welker  store i8 %conv4, i8* %incdec.ptr32, align 1
98223c95345SAnna Welker  %incdec.ptr34 = getelementptr inbounds i8, i8* %z.addr.049, i32 3
98323c95345SAnna Welker  store i8 %conv5, i8* %incdec.ptr33, align 1
98423c95345SAnna Welker  %inc = add nuw i32 %i.048, 1
98523c95345SAnna Welker  %exitcond = icmp eq i32 %inc, 1000
98623c95345SAnna Welker  br i1 %exitcond, label %end, label %for.body
98723c95345SAnna Welker
98823c95345SAnna Welkerend:
98923c95345SAnna Welker  ret void
99023c95345SAnna Welker}
991