Skip to content

Commit 346cdad

Browse files
HanKuanChenyuxuanchen1997
authored andcommitted
[SLP][REVEC] Make Instruction::Call support vector instructions. (#99317)
1 parent f9ebdb0 commit 346cdad

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13499,7 +13499,7 @@ Value *BoUpSLP::vectorizeTree(TreeEntry *E, bool PostponedPHIs) {
1349913499
}
1350013500
ScalarArg = CEI->getArgOperand(I);
1350113501
if (cast<VectorType>(OpVec->getType())->getElementType() !=
13502-
ScalarArg->getType() &&
13502+
ScalarArg->getType()->getScalarType() &&
1350313503
It == MinBWs.end()) {
1350413504
auto *CastTy =
1350513505
getWidenedType(ScalarArg->getType(), VecTy->getNumElements());

llvm/test/Transforms/SLPVectorizer/revec.ll

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,23 @@ entry:
3838
store <4 x i32> %add.i65, ptr %arrayidx42, align 4
3939
ret void
4040
}
41+
42+
define void @test2(ptr %in, ptr %out) {
43+
; CHECK-LABEL: @test2(
44+
; CHECK-NEXT: entry:
45+
; CHECK-NEXT: [[TMP0:%.*]] = load <16 x i16>, ptr [[IN:%.*]], align 2
46+
; CHECK-NEXT: [[TMP1:%.*]] = call <16 x i16> @llvm.sadd.sat.v16i16(<16 x i16> [[TMP0]], <16 x i16> [[TMP0]])
47+
; CHECK-NEXT: store <16 x i16> [[TMP1]], ptr [[OUT:%.*]], align 2
48+
; CHECK-NEXT: ret void
49+
;
50+
entry:
51+
%0 = getelementptr i16, ptr %in, i64 8
52+
%1 = load <8 x i16>, ptr %in, align 2
53+
%2 = load <8 x i16>, ptr %0, align 2
54+
%3 = call <8 x i16> @llvm.sadd.sat.v8i16(<8 x i16> %1, <8 x i16> %1)
55+
%4 = call <8 x i16> @llvm.sadd.sat.v8i16(<8 x i16> %2, <8 x i16> %2)
56+
%5 = getelementptr i16, ptr %out, i64 8
57+
store <8 x i16> %3, ptr %out, align 2
58+
store <8 x i16> %4, ptr %5, align 2
59+
ret void
60+
}

0 commit comments

Comments
 (0)