Skip to content

Commit f33ed38

Browse files
committed
Update and move test
1 parent f213f98 commit f33ed38

File tree

2 files changed

+56
-20
lines changed

2 files changed

+56
-20
lines changed

llvm/test/Transforms/LoopVectorize/AArch64/partial-reduce-chained.ll

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1031,26 +1031,6 @@ for.body: ; preds = %for.body.preheader,
10311031
}
10321032

10331033

1034-
define i40 @chained_partial_reduce_not_known_factor(i32 %a, i32 %b, i32 %N) {
1035-
entry:
1036-
br label %for.body
1037-
1038-
for.body:
1039-
%red = phi i40 [ 0, %entry ], [ %1, %for.body ]
1040-
%iv = phi i16 [ 0, %entry ], [ %iv.next, %for.body ]
1041-
%resize = sext i32 %a to i40
1042-
%resize4 = sext i32 %b to i40
1043-
%0 = or i40 %resize4, %resize
1044-
%1 = or i40 %red, %0
1045-
%iv.next = add i16 %iv, 1
1046-
%cmp = icmp slt i16 %iv, 1
1047-
br i1 %cmp, label %for.body, label %exit
1048-
1049-
exit:
1050-
%result.lcssa = phi i40 [ %1, %for.body ]
1051-
ret i40 %result.lcssa
1052-
}
1053-
10541034
attributes #0 = { vscale_range(1,16) }
10551035

10561036

llvm/test/Transforms/LoopVectorize/AArch64/partial-reduce-no-dotprod.ll

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,59 @@ for.body: ; preds = %for.body, %entry
5959
for.exit: ; preds = %for.body
6060
ret i32 %add
6161
}
62+
63+
; Test to ensure that we don't crash when evaluating an extend from a type
64+
; that is not a factor of the target type.
65+
define i40 @partial_reduce_not_known_factor(i32 %a, i32 %b, i16 %N) {
66+
; CHECK-LABEL: define i40 @partial_reduce_not_known_factor(
67+
; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]], i16 [[N:%.*]]) #[[ATTR0]] {
68+
; CHECK-NEXT: [[ENTRY:.*]]:
69+
; CHECK-NEXT: [[SMAX:%.*]] = call i16 @llvm.smax.i16(i16 [[N]], i16 0)
70+
; CHECK-NEXT: [[TMP0:%.*]] = zext nneg i16 [[SMAX]] to i32
71+
; CHECK-NEXT: [[TMP1:%.*]] = add nuw nsw i32 [[TMP0]], 1
72+
; CHECK-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i32 [[TMP1]], 4
73+
; CHECK-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]]
74+
; CHECK: [[VECTOR_PH]]:
75+
; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i32 [[TMP1]], 4
76+
; CHECK-NEXT: [[N_VEC:%.*]] = sub i32 [[TMP1]], [[N_MOD_VF]]
77+
; CHECK-NEXT: [[BROADCAST_SPLATINSERT:%.*]] = insertelement <2 x i32> poison, i32 [[B]], i64 0
78+
; CHECK-NEXT: [[BROADCAST_SPLAT:%.*]] = shufflevector <2 x i32> [[BROADCAST_SPLATINSERT]], <2 x i32> poison, <2 x i32> zeroinitializer
79+
; CHECK-NEXT: [[BROADCAST_SPLATINSERT1:%.*]] = insertelement <2 x i32> poison, i32 [[A]], i64 0
80+
; CHECK-NEXT: [[BROADCAST_SPLAT2:%.*]] = shufflevector <2 x i32> [[BROADCAST_SPLATINSERT1]], <2 x i32> poison, <2 x i32> zeroinitializer
81+
; CHECK-NEXT: [[TMP2:%.*]] = trunc i32 [[N_VEC]] to i16
82+
; CHECK-NEXT: [[TMP3:%.*]] = sext <2 x i32> [[BROADCAST_SPLAT2]] to <2 x i40>
83+
; CHECK-NEXT: [[TMP4:%.*]] = sext <2 x i32> [[BROADCAST_SPLAT]] to <2 x i40>
84+
; CHECK-NEXT: [[TMP5:%.*]] = or <2 x i40> [[TMP4]], [[TMP3]]
85+
; CHECK-NEXT: br label %[[VECTOR_BODY:.*]]
86+
; CHECK: [[VECTOR_BODY]]:
87+
; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
88+
; CHECK-NEXT: [[VEC_PHI:%.*]] = phi <2 x i40> [ zeroinitializer, %[[VECTOR_PH]] ], [ [[TMP6:%.*]], %[[VECTOR_BODY]] ]
89+
; CHECK-NEXT: [[VEC_PHI3:%.*]] = phi <2 x i40> [ zeroinitializer, %[[VECTOR_PH]] ], [ [[TMP8:%.*]], %[[VECTOR_BODY]] ]
90+
; CHECK-NEXT: [[TMP6]] = or <2 x i40> [[VEC_PHI]], [[TMP5]]
91+
; CHECK-NEXT: [[TMP8]] = or <2 x i40> [[VEC_PHI3]], [[TMP5]]
92+
; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 4
93+
; CHECK-NEXT: [[TMP7:%.*]] = icmp eq i32 [[INDEX_NEXT]], [[N_VEC]]
94+
; CHECK-NEXT: br i1 [[TMP7]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP4:![0-9]+]]
95+
; CHECK: [[MIDDLE_BLOCK]]:
96+
; CHECK-NEXT: [[BIN_RDX:%.*]] = or <2 x i40> [[TMP8]], [[TMP6]]
97+
; CHECK-NEXT: [[TMP9:%.*]] = call i40 @llvm.vector.reduce.or.v2i40(<2 x i40> [[BIN_RDX]])
98+
; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i32 [[TMP1]], [[N_VEC]]
99+
; CHECK-NEXT: br i1 [[CMP_N]], label %[[EXIT:.*]], label %[[SCALAR_PH]]
100+
entry:
101+
br label %for.body
102+
103+
for.body:
104+
%red = phi i40 [ 0, %entry ], [ %1, %for.body ]
105+
%iv = phi i16 [ 0, %entry ], [ %iv.next, %for.body ]
106+
%resize = sext i32 %a to i40
107+
%resize4 = sext i32 %b to i40
108+
%0 = or i40 %resize4, %resize
109+
%1 = or i40 %red, %0
110+
%iv.next = add i16 %iv, 1
111+
%cmp = icmp slt i16 %iv, %N
112+
br i1 %cmp, label %for.body, label %exit
113+
114+
exit:
115+
%result.lcssa = phi i40 [ %1, %for.body ]
116+
ret i40 %result.lcssa
117+
}

0 commit comments

Comments
 (0)