@@ -78,73 +78,3 @@ for.body:
7878for.cond.cleanup:
7979 ret void
8080}
81-
82- define void @vector_reverse_f32(ptr nocapture noundef writeonly %A, ptr nocapture noundef readonly %B, i32 noundef signext %n) {
83- ; CHECK: VPlan 'Initial VPlan for VF={vscale x 1,vscale x 2,vscale x 4},UF>=1' {
84- ; CHECK-NEXT: Live-in vp<[[VF:%.+]]> = VF
85- ; CHECK-NEXT: Live-in vp<[[VFxUF:%.+]]> = VF * UF
86- ; CHECK-NEXT: Live-in vp<[[VTC:%.+]]> = vector-trip-count
87- ; CHECK-NEXT: vp<[[OTC:%.+]]> = original trip-count
88- ; CHECK-EMPTY:
89- ; CHECK-NEXT: ir-bb<entry>:
90- ; CHECK-NEXT: EMIT vp<[[OTC]]> = EXPAND SCEV (1 + (-1 * (1 umin %n))<nuw><nsw> + %n)
91- ; CHECK-NEXT: Successor(s): scalar.ph, vector.ph
92- ; CHECK-EMPTY:
93- ; CHECK-NEXT: vector.ph:
94- ; CHECK-NEXT: vp<[[RESUME_IV_A:%.+]]> = DERIVED-IV ir<%n> + vp<[[VTC]]> * ir<-1>
95- ; CHECK-NEXT: vp<[[RESUME_IV_B:%.+]]> = DERIVED-IV ir<%n> + vp<[[VTC]]> * ir<-1>
96- ; CHECK-NEXT: Successor(s): vector loop
97- ; CHECK-EMPTY:
98- ; CHECK-NEXT: <x1> vector loop: {
99- ; CHECK-NEXT: vector.body:
100- ; CHECK-NEXT: EMIT vp<[[INDUCTION:%.+]]> = CANONICAL-INDUCTION ir<0>, vp<[[INDEX_NEXT:%.+]]>
101- ; CHECK-NEXT: vp<[[DERIVED_IV:%.+]]> = DERIVED-IV ir<%n> + vp<[[INDUCTION]]> * ir<-1>
102- ; CHECK-NEXT: vp<[[SCALAR_STEPS:%.+]]> = SCALAR-STEPS vp<[[DERIVED_IV]]>, ir<-1>, vp<[[VF]]>
103- ; CHECK-NEXT: CLONE ir<[[IDX:%.+]]> = add nsw vp<[[SCALAR_STEPS]]>, ir<-1>
104- ; CHECK-NEXT: CLONE ir<[[IDX_PROM:%.+]]> = zext ir<[[IDX]]>
105- ; CHECK-NEXT: CLONE ir<[[ARRAY_IDX_B:%.+]]> = getelementptr inbounds ir<[[B:%.+]]>, ir<[[IDX_PROM]]>
106- ; CHECK-NEXT: vp<[[VEC_END_PTR_B:%.+]]> = vector-end-pointer inbounds ir<[[ARRAY_IDX_B]]>, vp<[[VF]]>
107- ; CHECK-NEXT: WIDEN ir<[[VAL_B:%.+]]> = load vp<[[VEC_END_PTR_B]]>
108- ; CHECK-NEXT: WIDEN ir<[[ADD_RESULT:%.+]]> = fadd ir<[[VAL_B]]>, ir<1.000000e+00>
109- ; CHECK-NEXT: CLONE ir<[[ARRAY_IDX_A:%.+]]> = getelementptr inbounds ir<[[A:%.+]]>, ir<[[IDX_PROM]]>
110- ; CHECK-NEXT: vp<[[VEC_END_PTR_A:%.+]]> = vector-end-pointer inbounds ir<[[ARRAY_IDX_A]]>, vp<[[VF]]>
111- ; CHECK-NEXT: WIDEN store vp<[[VEC_END_PTR_A]]>, ir<[[ADD_RESULT]]>
112- ; CHECK-NEXT: EMIT vp<[[INDEX_NEXT]]> = add nuw vp<[[INDUCTION]]>, vp<[[VFxUF]]>
113- ; CHECK-NEXT: EMIT branch-on-count vp<[[INDEX_NEXT]]>, vp<[[VTC]]>
114- ; CHECK-NEXT: No successors
115- ; CHECK-NEXT: }
116- ; CHECK-NEXT: Successor(s): middle.block
117- ; CHECK-EMPTY:
118- ; CHECK-NEXT: middle.block:
119- ; CHECK-NEXT: EMIT vp<[[CMP:%.+]]> = icmp eq vp<[[OTC]]>, vp<[[VTC]]>
120- ; CHECK-NEXT: EMIT branch-on-cond vp<[[CMP]]>
121- ; CHECK-NEXT: Successor(s): ir-bb<for.cond.cleanup>, scalar.ph
122- ; CHECK-EMPTY:
123- ; CHECK-NEXT: ir-bb<for.cond.cleanup>:
124- ; CHECK-NEXT: No successors
125- ; CHECK-EMPTY:
126- ; CHECK-NEXT: scalar.ph:
127- ; CHECK-NEXT: EMIT-SCALAR vp<%bc.resume.val> = phi [ vp<[[RESUME_IV_A]]>, middle.block ], [ ir<%n>, ir-bb<entry> ]
128- ; CHECK-NEXT: EMIT-SCALAR vp<%bc.resume.val>.1 = phi [ vp<[[RESUME_IV_B]]>, middle.block ], [ ir<%n>, ir-bb<entry> ]
129- ; CHECK-NEXT: Successor(s): ir-bb<for.body>
130- ;
131- entry:
132- br label %for.body
133-
134- for.body:
135- %indvars.iv = phi i32 [ %n, %entry ], [ %indvars.iv.next, %for.body ]
136- %i.0.in8 = phi i32 [ %n, %entry ], [ %i.0, %for.body ]
137- %i.0 = add nsw i32 %i.0.in8, -1
138- %idxprom = zext i32 %i.0 to i64
139- %arrayidx = getelementptr inbounds float, ptr %B, i64 %idxprom
140- %1 = load float, ptr %arrayidx, align 4
141- %conv1 = fadd float %1, 1.000000e+00
142- %arrayidx3 = getelementptr inbounds float, ptr %A, i64 %idxprom
143- store float %conv1, ptr %arrayidx3, align 4
144- %cmp = icmp ugt i32 %indvars.iv, 1
145- %indvars.iv.next = add nsw i32 %indvars.iv, -1
146- br i1 %cmp, label %for.body, label %for.cond.cleanup
147-
148- for.cond.cleanup:
149- ret void
150- }
0 commit comments