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