@@ -882,6 +882,58 @@ exit:
882
882
ret void
883
883
}
884
884
885
+ define i16 @print_first_order_recurrence_and_result (ptr %ptr ) {
886
+ ; CHECK-LABEL: 'print_first_order_recurrence_and_result'
887
+ ; CHECK: VPlan 'Initial VPlan for VF={4},UF>=1' {
888
+ ; CHECK-NEXT: Live-in vp<[[VFxUF:%.+]]> = VF * UF
889
+ ; CHECK-NEXT: Live-in vp<[[VTC:%.+]]> = vector-trip-count
890
+ ; CHECK-NEXT: Live-in ir<1000> = original trip-count
891
+ ; CHECK-EMPTY:
892
+ ; CHECK-NEXT: vector.ph:
893
+ ; CHECK-NEXT: Successor(s): vector loop
894
+ ; CHECK-EMPTY:
895
+ ; CHECK-NEXT: <x1> vector loop: {
896
+ ; CHECK-NEXT: vector.body:
897
+ ; CHECK-NEXT: EMIT vp<[[CAN_IV:%.+]]> = CANONICAL-INDUCTION
898
+ ; CHECK-NEXT: FIRST-ORDER-RECURRENCE-PHI ir<%for.1> = phi ir<22>, ir<%for.1.next>
899
+ ; CHECK-NEXT: vp<[[STEPS:%.+]]> = SCALAR-STEPS vp<[[CAN_IV]]>, ir<1>
900
+ ; CHECK-NEXT: CLONE ir<%gep.ptr> = getelementptr inbounds ir<%ptr>, vp<[[STEPS]]>
901
+ ; CHECK-NEXT: vp<[[VEC_PTR:%.+]]> = vector-pointer ir<%gep.ptr>
902
+ ; CHECK-NEXT: WIDEN ir<%for.1.next> = load vp<[[VEC_PTR]]>
903
+ ; CHECK-NEXT: EMIT vp<[[FOR1_SPLICE:%.+]]> = first-order splice ir<%for.1>, ir<%for.1.next>
904
+ ; CHECK-NEXT: WIDEN ir<%add> = add vp<[[FOR1_SPLICE]]>, ir<1>
905
+ ; CHECK-NEXT: vp<[[VEC_PTR2:%.+]]> = vector-pointer ir<%gep.ptr>
906
+ ; CHECK-NEXT: WIDEN store vp<[[VEC_PTR2]]>, ir<%add>
907
+ ; CHECK-NEXT: EMIT vp<[[CAN_IV_NEXT:%.+]]> = add nuw vp<[[CAN_IV]]>, vp<[[VFxUF]]>
908
+ ; CHECK-NEXT: EMIT branch-on-count vp<[[CAN_IV_NEXT]]>, vp<[[VTC]]>
909
+ ; CHECK-NEXT: No successors
910
+ ; CHECK-NEXT: }
911
+ ; CHECK-NEXT: Successor(s): middle.block
912
+ ; CHECK-EMPTY:
913
+ ; CHECK-NEXT: middle.block:
914
+ ; CHECK-NEXT: No successors
915
+ ; CHECK-EMPTY:
916
+ ; CHECK-NEXT: Live-out i16 %for.1.lcssa = vp<[[FOR1_SPLICE]]>
917
+ ; CHECK-NEXT: }
918
+ ;
919
+ entry:
920
+ br label %loop
921
+
922
+ loop:
923
+ %for.1 = phi i16 [ 22 , %entry ], [ %for.1.next , %loop ]
924
+ %iv = phi i64 [ 0 , %entry ], [ %iv.next , %loop ]
925
+ %iv.next = add nuw nsw i64 %iv , 1
926
+ %gep.ptr = getelementptr inbounds i16 , ptr %ptr , i64 %iv
927
+ %for.1.next = load i16 , ptr %gep.ptr , align 2
928
+ %add = add i16 %for.1 , 1
929
+ store i16 %add , ptr %gep.ptr
930
+ %exitcond.not = icmp eq i64 %iv.next , 1000
931
+ br i1 %exitcond.not , label %exit , label %loop
932
+
933
+ exit:
934
+ ret i16 %for.1
935
+ }
936
+
885
937
!llvm.dbg.cu = !{!0 }
886
938
!llvm.module.flags = !{!3 , !4 }
887
939
0 commit comments