@@ -836,3 +836,69 @@ loop:
836
836
exit:
837
837
ret void
838
838
}
839
+
840
+ define void @update_multiple_users (i16* noalias %src , i8* noalias %dst , i1 %c ) {
841
+ ; CHECK-LABEL: LV: Checking a loop in "update_multiple_users"
842
+ ; CHECK: VPlan 'Initial VPlan for VF={2},UF>=1' {
843
+ ; CHECK-NEXT: loop.header:
844
+ ; CHECK-NEXT: WIDEN-INDUCTION %iv = phi 0, %iv.next
845
+ ; CHECK-NEXT: Successor(s): loop.then
846
+ ; CHECK-EMPTY:
847
+ ; CHECK-NEXT: loop.then:
848
+ ; CHECK-NEXT: Successor(s): loop.then.0
849
+ ; CHECK-EMPTY:
850
+ ; CHECK-NEXT: loop.then.0:
851
+ ; CHECK-NEXT: Successor(s): pred.store
852
+ ; CHECK-EMPTY:
853
+ ; CHECK-NEXT: <xVFxUF> pred.store: {
854
+ ; CHECK-NEXT: pred.store.entry:
855
+ ; CHECK-NEXT: BRANCH-ON-MASK ir<%c>
856
+ ; CHECK-NEXT: Successor(s): pred.store.if, pred.store.continue
857
+ ; CHECK-NEXT: CondBit: ir<%c>
858
+ ; CHECK-EMPTY:
859
+ ; CHECK-NEXT: pred.store.if:
860
+ ; CHECK-NEXT: REPLICATE ir<%l1> = load ir<%src>
861
+ ; CHECK-NEXT: REPLICATE ir<%cmp> = icmp ir<%l1>, ir<0>
862
+ ; CHECK-NEXT: REPLICATE ir<%l2> = trunc ir<%l1>
863
+ ; CHECK-NEXT: REPLICATE ir<%sel> = select ir<%cmp>, ir<5>, ir<%l2>
864
+ ; CHECK-NEXT: REPLICATE store ir<%sel>, ir<%dst>
865
+ ; CHECK-NEXT: Successor(s): pred.store.continue
866
+ ; CHECK-EMPTY:
867
+ ; CHECK-NEXT: pred.store.continue:
868
+ ; CHECK-NEXT: PHI-PREDICATED-INSTRUCTION vp<%6> = ir<%l1>
869
+ ; CHECK-NEXT: No successors
870
+ ; CHECK-NEXT: }
871
+ ; CHECK-NEXT: Successor(s): loop.then.1
872
+ ; CHECK-EMPTY:
873
+ ; CHECK-NEXT: loop.then.1:
874
+ ; CHECK-NEXT: WIDEN ir<%sext.l1> = sext vp<%6>
875
+ ; CHECK-NEXT: Successor(s): loop.latch
876
+ ; CHECK-EMPTY:
877
+ ; CHECK-NEXT: loop.latch:
878
+ ; CHECK-NEXT: No successors
879
+ ; CHECK-NEXT: }
880
+ ;
881
+ entry:
882
+ br label %loop.header
883
+
884
+ loop.header:
885
+ %iv = phi i64 [ 0 , %entry ], [ %iv.next , %loop.latch ]
886
+ br i1 %c , label %loop.then , label %loop.latch
887
+
888
+ loop.then:
889
+ %l1 = load i16 , i16* %src , align 2
890
+ %l2 = trunc i16 %l1 to i8
891
+ %cmp = icmp eq i16 %l1 , 0
892
+ %sel = select i1 %cmp , i8 5 , i8 %l2
893
+ store i8 %sel , i8* %dst , align 1
894
+ %sext.l1 = sext i16 %l1 to i32
895
+ br label %loop.latch
896
+
897
+ loop.latch:
898
+ %iv.next = add nsw i64 %iv , 1
899
+ %ec = icmp eq i64 %iv.next , 999
900
+ br i1 %ec , label %exit , label %loop.header
901
+
902
+ exit:
903
+ ret void
904
+ }
0 commit comments