Skip to content

Commit 9b81db7

Browse files
authored
[RISCV] Use source element type for the zero constant in IR for vwcvt intrinsic. (#148023)
The vwcvt intrinsic produces a vwadd with a scalar 0 for the RHS. We should be using the element type of the source so that the 0 needs to be widened. The i32->i64 vwcvt previously failed on RV32 because the legalization code doesn't expect to see an i64 type.
1 parent 57194ac commit 9b81db7

File tree

9 files changed

+361
-361
lines changed

9 files changed

+361
-361
lines changed

clang/include/clang/Basic/riscv_vector.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,7 @@ multiclass RVVPseudoVWCVTBuiltin<string IR, string MName, string type_range,
499499
if (PolicyAttrs & RVV_VTA)
500500
Ops.insert(Ops.begin(), llvm::PoisonValue::get(ResultType));
501501
}
502-
auto ElemTy = cast<llvm::VectorType>(ResultType)->getElementType();
502+
auto ElemTy = cast<llvm::VectorType>(Ops[1]->getType())->getElementType();
503503
Ops.insert(Ops.begin() + 2, llvm::Constant::getNullValue(ElemTy));
504504
if (IsMasked) {
505505
Ops.push_back(ConstantInt::get(Ops.back()->getType(), PolicyAttrs));

clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vwcvt.c

Lines changed: 30 additions & 30 deletions
Large diffs are not rendered by default.

clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vwcvtu.c

Lines changed: 30 additions & 30 deletions
Large diffs are not rendered by default.

clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vwcvt.c

Lines changed: 30 additions & 30 deletions
Large diffs are not rendered by default.

clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vwcvtu.c

Lines changed: 30 additions & 30 deletions
Large diffs are not rendered by default.

clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vwcvt.c

Lines changed: 60 additions & 60 deletions
Large diffs are not rendered by default.

clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vwcvtu.c

Lines changed: 60 additions & 60 deletions
Large diffs are not rendered by default.

clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vwcvt.c

Lines changed: 60 additions & 60 deletions
Large diffs are not rendered by default.

clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vwcvtu.c

Lines changed: 60 additions & 60 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)