[PATCH] D82582: [SVE] Remove calls to VectorType::getNumElements from clang
This revision was automatically updated to reflect the committed changes. Closed by commit rG19e883fc5988: [SVE] Remove calls to VectorType::getNumElements from clang (authored by ctetreau). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D82582/new/ https://reviews.llvm.org/D82582 Files: clang/lib/CodeGen/CGAtomic.cpp clang/lib/CodeGen/CGBuiltin.cpp clang/lib/CodeGen/CGExpr.cpp clang/lib/CodeGen/CGExprScalar.cpp clang/lib/CodeGen/SwiftCallingConv.cpp Index: clang/lib/CodeGen/SwiftCallingConv.cpp === --- clang/lib/CodeGen/SwiftCallingConv.cpp +++ clang/lib/CodeGen/SwiftCallingConv.cpp @@ -320,9 +320,12 @@ // If we have a vector type, split it. if (auto vecTy = dyn_cast_or_null(type)) { auto eltTy = vecTy->getElementType(); -CharUnits eltSize = (end - begin) / vecTy->getNumElements(); +CharUnits eltSize = +(end - begin) / cast(vecTy)->getNumElements(); assert(eltSize == getTypeStoreSize(CGM, eltTy)); -for (unsigned i = 0, e = vecTy->getNumElements(); i != e; ++i) { +for (unsigned i = 0, + e = cast(vecTy)->getNumElements(); + i != e; ++i) { addEntry(eltTy, begin, begin + eltSize); begin += eltSize; } @@ -674,8 +677,9 @@ bool swiftcall::isLegalVectorType(CodeGenModule , CharUnits vectorSize, llvm::VectorType *vectorTy) { - return isLegalVectorType(CGM, vectorSize, vectorTy->getElementType(), - vectorTy->getNumElements()); + return isLegalVectorType( + CGM, vectorSize, vectorTy->getElementType(), + cast(vectorTy)->getNumElements()); } bool swiftcall::isLegalVectorType(CodeGenModule , CharUnits vectorSize, @@ -688,7 +692,7 @@ std::pair swiftcall::splitLegalVectorType(CodeGenModule , CharUnits vectorSize, llvm::VectorType *vectorTy) { - auto numElts = vectorTy->getNumElements(); + auto numElts = cast(vectorTy)->getNumElements(); auto eltTy = vectorTy->getElementType(); // Try to split the vector type in half. @@ -710,7 +714,7 @@ } // Try to split the vector into legal subvectors. - auto numElts = origVectorTy->getNumElements(); + auto numElts = cast(origVectorTy)->getNumElements(); auto eltTy = origVectorTy->getElementType(); assert(numElts != 1); Index: clang/lib/CodeGen/CGExprScalar.cpp === --- clang/lib/CodeGen/CGExprScalar.cpp +++ clang/lib/CodeGen/CGExprScalar.cpp @@ -1320,7 +1320,7 @@ "Splatted expr doesn't match with vector element type?"); // Splat the element across to all elements -unsigned NumElements = cast(DstTy)->getNumElements(); +unsigned NumElements = cast(DstTy)->getNumElements(); return Builder.CreateVectorSplat(NumElements, Src, "splat"); } @@ -1553,12 +1553,12 @@ Value *RHS = CGF.EmitScalarExpr(E->getExpr(1)); Value *Mask; -llvm::VectorType *LTy = cast(LHS->getType()); +auto *LTy = cast(LHS->getType()); unsigned LHSElts = LTy->getNumElements(); Mask = RHS; -llvm::VectorType *MTy = cast(Mask->getType()); +auto *MTy = cast(Mask->getType()); // Mask off the high bits of each shuffle index. Value *MaskBits = @@ -1763,7 +1763,7 @@ return Visit(E->getInit(0)); } - unsigned ResElts = VType->getNumElements(); + unsigned ResElts = cast(VType)->getNumElements(); // Loop over initializers collecting the Value for each, and remembering // whether the source was swizzle (ExtVectorElementExpr). This will allow @@ -1787,7 +1787,8 @@ if (isa(IE)) { llvm::ExtractElementInst *EI = cast(Init); -if (EI->getVectorOperandType()->getNumElements() == ResElts) { +if (cast(EI->getVectorOperandType()) +->getNumElements() == ResElts) { llvm::ConstantInt *C = cast(EI->getIndexOperand()); Value *LHS = nullptr, *RHS = nullptr; if (CurIdx == 0) { @@ -1825,7 +1826,7 @@ continue; } -unsigned InitElts = VVT->getNumElements(); +unsigned InitElts = cast(VVT)->getNumElements(); // If the initializer is an ExtVecEltExpr (a swizzle), and the swizzle's // input is the same width as the vector being constructed, generate an @@ -1834,7 +1835,7 @@ if (isa(IE)) { llvm::ShuffleVectorInst *SVI = cast(Init); Value *SVOp = SVI->getOperand(0); - llvm::VectorType *OpTy = cast(SVOp->getType()); + auto *OpTy = cast(SVOp->getType()); if (OpTy->getNumElements() == ResElts) { for (unsigned j = 0; j != CurIdx; ++j) { @@ -2170,7 +2171,7 @@ llvm::Type *DstTy = ConvertType(DestTy); Value *Elt = Visit(const_cast(E)); // Splat the element across to all elements -unsigned NumElements = cast(DstTy)->getNumElements(); +unsigned NumElements =
[PATCH] D82582: [SVE] Remove calls to VectorType::getNumElements from clang
RKSimon accepted this revision. RKSimon added a comment. This revision is now accepted and ready to land. LGTM Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D82582/new/ https://reviews.llvm.org/D82582 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D82582: [SVE] Remove calls to VectorType::getNumElements from clang
ctetreau updated this revision to Diff 287755. ctetreau marked 4 inline comments as done. ctetreau added a comment. address code review issues, rebase Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D82582/new/ https://reviews.llvm.org/D82582 Files: clang/lib/CodeGen/CGAtomic.cpp clang/lib/CodeGen/CGBuiltin.cpp clang/lib/CodeGen/CGExpr.cpp clang/lib/CodeGen/CGExprScalar.cpp clang/lib/CodeGen/SwiftCallingConv.cpp Index: clang/lib/CodeGen/SwiftCallingConv.cpp === --- clang/lib/CodeGen/SwiftCallingConv.cpp +++ clang/lib/CodeGen/SwiftCallingConv.cpp @@ -320,9 +320,12 @@ // If we have a vector type, split it. if (auto vecTy = dyn_cast_or_null(type)) { auto eltTy = vecTy->getElementType(); -CharUnits eltSize = (end - begin) / vecTy->getNumElements(); +CharUnits eltSize = +(end - begin) / cast(vecTy)->getNumElements(); assert(eltSize == getTypeStoreSize(CGM, eltTy)); -for (unsigned i = 0, e = vecTy->getNumElements(); i != e; ++i) { +for (unsigned i = 0, + e = cast(vecTy)->getNumElements(); + i != e; ++i) { addEntry(eltTy, begin, begin + eltSize); begin += eltSize; } @@ -674,8 +677,9 @@ bool swiftcall::isLegalVectorType(CodeGenModule , CharUnits vectorSize, llvm::VectorType *vectorTy) { - return isLegalVectorType(CGM, vectorSize, vectorTy->getElementType(), - vectorTy->getNumElements()); + return isLegalVectorType( + CGM, vectorSize, vectorTy->getElementType(), + cast(vectorTy)->getNumElements()); } bool swiftcall::isLegalVectorType(CodeGenModule , CharUnits vectorSize, @@ -688,7 +692,7 @@ std::pair swiftcall::splitLegalVectorType(CodeGenModule , CharUnits vectorSize, llvm::VectorType *vectorTy) { - auto numElts = vectorTy->getNumElements(); + auto numElts = cast(vectorTy)->getNumElements(); auto eltTy = vectorTy->getElementType(); // Try to split the vector type in half. @@ -710,7 +714,7 @@ } // Try to split the vector into legal subvectors. - auto numElts = origVectorTy->getNumElements(); + auto numElts = cast(origVectorTy)->getNumElements(); auto eltTy = origVectorTy->getElementType(); assert(numElts != 1); Index: clang/lib/CodeGen/CGExprScalar.cpp === --- clang/lib/CodeGen/CGExprScalar.cpp +++ clang/lib/CodeGen/CGExprScalar.cpp @@ -1320,7 +1320,7 @@ "Splatted expr doesn't match with vector element type?"); // Splat the element across to all elements -unsigned NumElements = cast(DstTy)->getNumElements(); +unsigned NumElements = cast(DstTy)->getNumElements(); return Builder.CreateVectorSplat(NumElements, Src, "splat"); } @@ -1553,12 +1553,12 @@ Value *RHS = CGF.EmitScalarExpr(E->getExpr(1)); Value *Mask; -llvm::VectorType *LTy = cast(LHS->getType()); +auto *LTy = cast(LHS->getType()); unsigned LHSElts = LTy->getNumElements(); Mask = RHS; -llvm::VectorType *MTy = cast(Mask->getType()); +auto *MTy = cast(Mask->getType()); // Mask off the high bits of each shuffle index. Value *MaskBits = @@ -1763,7 +1763,7 @@ return Visit(E->getInit(0)); } - unsigned ResElts = VType->getNumElements(); + unsigned ResElts = cast(VType)->getNumElements(); // Loop over initializers collecting the Value for each, and remembering // whether the source was swizzle (ExtVectorElementExpr). This will allow @@ -1787,7 +1787,8 @@ if (isa(IE)) { llvm::ExtractElementInst *EI = cast(Init); -if (EI->getVectorOperandType()->getNumElements() == ResElts) { +if (cast(EI->getVectorOperandType()) +->getNumElements() == ResElts) { llvm::ConstantInt *C = cast(EI->getIndexOperand()); Value *LHS = nullptr, *RHS = nullptr; if (CurIdx == 0) { @@ -1825,7 +1826,7 @@ continue; } -unsigned InitElts = VVT->getNumElements(); +unsigned InitElts = cast(VVT)->getNumElements(); // If the initializer is an ExtVecEltExpr (a swizzle), and the swizzle's // input is the same width as the vector being constructed, generate an @@ -1834,7 +1835,7 @@ if (isa(IE)) { llvm::ShuffleVectorInst *SVI = cast(Init); Value *SVOp = SVI->getOperand(0); - llvm::VectorType *OpTy = cast(SVOp->getType()); + auto *OpTy = cast(SVOp->getType()); if (OpTy->getNumElements() == ResElts) { for (unsigned j = 0; j != CurIdx; ++j) { @@ -2170,7 +2171,7 @@ llvm::Type *DstTy = ConvertType(DestTy); Value *Elt = Visit(const_cast(E)); // Splat the element across to all elements -unsigned NumElements = cast(DstTy)->getNumElements(); +unsigned NumElements = cast(DstTy)->getNumElements(); return
[PATCH] D82582: [SVE] Remove calls to VectorType::getNumElements from clang
ctetreau marked 8 inline comments as done. ctetreau added inline comments. Comment at: clang/lib/CodeGen/CGExpr.cpp:1765 } auto *VectorTy = dyn_cast( cast(Addr.getPointer()->getType())->getElementType()); c-rhodes wrote: > cast here that would be a behavior change because of the dyn_cast. Comment at: clang/lib/CodeGen/CGExpr.cpp:1799 llvm::Type *SrcTy = Value->getType(); auto *VecTy = dyn_cast(SrcTy); // Handle vec3 special. c-rhodes wrote: > cast here that would be a behavior change because of the dyn_cast Comment at: clang/lib/CodeGen/CGExpr.cpp:2214 if (const VectorType *VTy = Dst.getType()->getAs()) { unsigned NumSrcElts = VTy->getNumElements(); unsigned NumDstElts = c-rhodes wrote: > missed one here this VTy is a clang::VectorType Comment at: clang/lib/CodeGen/SwiftCallingConv.cpp:321 // If we have a vector type, split it. if (auto vecTy = dyn_cast_or_null(type)) { auto eltTy = vecTy->getElementType(); c-rhodes wrote: > cast here this would be a behavior change due to dyn_cast Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D82582/new/ https://reviews.llvm.org/D82582 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D82582: [SVE] Remove calls to VectorType::getNumElements from clang
ctetreau updated this revision to Diff 284926. ctetreau added a comment. rebase Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D82582/new/ https://reviews.llvm.org/D82582 Files: clang/lib/CodeGen/CGAtomic.cpp clang/lib/CodeGen/CGBuiltin.cpp clang/lib/CodeGen/CGExpr.cpp clang/lib/CodeGen/CGExprScalar.cpp clang/lib/CodeGen/SwiftCallingConv.cpp Index: clang/lib/CodeGen/SwiftCallingConv.cpp === --- clang/lib/CodeGen/SwiftCallingConv.cpp +++ clang/lib/CodeGen/SwiftCallingConv.cpp @@ -320,9 +320,12 @@ // If we have a vector type, split it. if (auto vecTy = dyn_cast_or_null(type)) { auto eltTy = vecTy->getElementType(); -CharUnits eltSize = (end - begin) / vecTy->getNumElements(); +CharUnits eltSize = +(end - begin) / cast(vecTy)->getNumElements(); assert(eltSize == getTypeStoreSize(CGM, eltTy)); -for (unsigned i = 0, e = vecTy->getNumElements(); i != e; ++i) { +for (unsigned i = 0, + e = cast(vecTy)->getNumElements(); + i != e; ++i) { addEntry(eltTy, begin, begin + eltSize); begin += eltSize; } @@ -674,8 +677,9 @@ bool swiftcall::isLegalVectorType(CodeGenModule , CharUnits vectorSize, llvm::VectorType *vectorTy) { - return isLegalVectorType(CGM, vectorSize, vectorTy->getElementType(), - vectorTy->getNumElements()); + return isLegalVectorType( + CGM, vectorSize, vectorTy->getElementType(), + cast(vectorTy)->getNumElements()); } bool swiftcall::isLegalVectorType(CodeGenModule , CharUnits vectorSize, @@ -688,7 +692,7 @@ std::pair swiftcall::splitLegalVectorType(CodeGenModule , CharUnits vectorSize, llvm::VectorType *vectorTy) { - auto numElts = vectorTy->getNumElements(); + auto numElts = cast(vectorTy)->getNumElements(); auto eltTy = vectorTy->getElementType(); // Try to split the vector type in half. @@ -710,7 +714,7 @@ } // Try to split the vector into legal subvectors. - auto numElts = origVectorTy->getNumElements(); + auto numElts = cast(origVectorTy)->getNumElements(); auto eltTy = origVectorTy->getElementType(); assert(numElts != 1); Index: clang/lib/CodeGen/CGExprScalar.cpp === --- clang/lib/CodeGen/CGExprScalar.cpp +++ clang/lib/CodeGen/CGExprScalar.cpp @@ -1323,7 +1323,7 @@ "Splatted expr doesn't match with vector element type?"); // Splat the element across to all elements -unsigned NumElements = cast(DstTy)->getNumElements(); +unsigned NumElements = cast(DstTy)->getNumElements(); return Builder.CreateVectorSplat(NumElements, Src, "splat"); } @@ -1630,7 +1630,7 @@ Value *RHS = CGF.EmitScalarExpr(E->getExpr(1)); Value *Mask; -llvm::VectorType *LTy = cast(LHS->getType()); +auto *LTy = cast(LHS->getType()); unsigned LHSElts = LTy->getNumElements(); Mask = RHS; @@ -1648,10 +1648,12 @@ // n = extract mask i // x = extract val n // newv = insert newv, x, i -auto *RTy = llvm::FixedVectorType::get(LTy->getElementType(), - MTy->getNumElements()); +auto *RTy = llvm::FixedVectorType::get( +LTy->getElementType(), +cast(MTy)->getNumElements()); Value* NewV = llvm::UndefValue::get(RTy); -for (unsigned i = 0, e = MTy->getNumElements(); i != e; ++i) { +for (unsigned i = 0, e = cast(MTy)->getNumElements(); + i != e; ++i) { Value *IIndx = llvm::ConstantInt::get(CGF.SizeTy, i); Value *Indx = Builder.CreateExtractElement(Mask, IIndx, "shuf_idx"); @@ -1840,7 +1842,7 @@ return Visit(E->getInit(0)); } - unsigned ResElts = VType->getNumElements(); + unsigned ResElts = cast(VType)->getNumElements(); // Loop over initializers collecting the Value for each, and remembering // whether the source was swizzle (ExtVectorElementExpr). This will allow @@ -1864,7 +1866,8 @@ if (isa(IE)) { llvm::ExtractElementInst *EI = cast(Init); -if (EI->getVectorOperandType()->getNumElements() == ResElts) { +if (cast(EI->getVectorOperandType()) +->getNumElements() == ResElts) { llvm::ConstantInt *C = cast(EI->getIndexOperand()); Value *LHS = nullptr, *RHS = nullptr; if (CurIdx == 0) { @@ -1902,7 +1905,7 @@ continue; } -unsigned InitElts = VVT->getNumElements(); +unsigned InitElts = cast(VVT)->getNumElements(); // If the initializer is an ExtVecEltExpr (a swizzle), and the swizzle's // input is the same width as the vector being constructed, generate an @@ -1911,7 +1914,7 @@ if (isa(IE)) { llvm::ShuffleVectorInst *SVI = cast(Init); Value *SVOp = SVI->getOperand(0); - llvm::VectorType *OpTy =
[PATCH] D82582: [SVE] Remove calls to VectorType::getNumElements from clang
ctetreau planned changes to this revision. ctetreau added a comment. I plan to investigate the changes proposed by @c-rhodes. I'm a bit swamped right now so it may take a bit. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D82582/new/ https://reviews.llvm.org/D82582 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D82582: [SVE] Remove calls to VectorType::getNumElements from clang
c-rhodes added a comment. there's a few places the `getNumElements` calls can be fixed by getting the initial cast right Comment at: clang/lib/CodeGen/CGBuiltin.cpp:5986 case NEON::BI__builtin_neon_vqrdmulh_lane_v: { auto *RTy = cast(Ty); if (BuiltinID == NEON::BI__builtin_neon_vqdmulhq_lane_v || cast here Comment at: clang/lib/CodeGen/CGBuiltin.cpp:9872 case NEON::BI__builtin_neon_vfma_laneq_v: { llvm::VectorType *VTy = cast(Ty); // v1f64 fma should be mapped to Neon scalar f64 fma cast here Comment at: clang/lib/CodeGen/CGExpr.cpp:1765 } auto *VectorTy = dyn_cast( cast(Addr.getPointer()->getType())->getElementType()); cast here Comment at: clang/lib/CodeGen/CGExpr.cpp:1799 llvm::Type *SrcTy = Value->getType(); auto *VecTy = dyn_cast(SrcTy); // Handle vec3 special. cast here Comment at: clang/lib/CodeGen/CGExpr.cpp:2214 if (const VectorType *VTy = Dst.getType()->getAs()) { unsigned NumSrcElts = VTy->getNumElements(); unsigned NumDstElts = missed one here Comment at: clang/lib/CodeGen/CGExprScalar.cpp:1638 llvm::VectorType *MTy = cast(Mask->getType()); cast here Comment at: clang/lib/CodeGen/SwiftCallingConv.cpp:321 // If we have a vector type, split it. if (auto vecTy = dyn_cast_or_null(type)) { auto eltTy = vecTy->getElementType(); cast here Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D82582/new/ https://reviews.llvm.org/D82582 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D82582: [SVE] Remove calls to VectorType::getNumElements from clang
ctetreau updated this revision to Diff 280254. ctetreau added a comment. address code review issues Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D82582/new/ https://reviews.llvm.org/D82582 Files: clang/lib/CodeGen/CGAtomic.cpp clang/lib/CodeGen/CGBuiltin.cpp clang/lib/CodeGen/CGExpr.cpp clang/lib/CodeGen/CGExprScalar.cpp clang/lib/CodeGen/SwiftCallingConv.cpp Index: clang/lib/CodeGen/SwiftCallingConv.cpp === --- clang/lib/CodeGen/SwiftCallingConv.cpp +++ clang/lib/CodeGen/SwiftCallingConv.cpp @@ -320,9 +320,12 @@ // If we have a vector type, split it. if (auto vecTy = dyn_cast_or_null(type)) { auto eltTy = vecTy->getElementType(); -CharUnits eltSize = (end - begin) / vecTy->getNumElements(); +CharUnits eltSize = +(end - begin) / cast(vecTy)->getNumElements(); assert(eltSize == getTypeStoreSize(CGM, eltTy)); -for (unsigned i = 0, e = vecTy->getNumElements(); i != e; ++i) { +for (unsigned i = 0, + e = cast(vecTy)->getNumElements(); + i != e; ++i) { addEntry(eltTy, begin, begin + eltSize); begin += eltSize; } @@ -674,8 +677,9 @@ bool swiftcall::isLegalVectorType(CodeGenModule , CharUnits vectorSize, llvm::VectorType *vectorTy) { - return isLegalVectorType(CGM, vectorSize, vectorTy->getElementType(), - vectorTy->getNumElements()); + return isLegalVectorType( + CGM, vectorSize, vectorTy->getElementType(), + cast(vectorTy)->getNumElements()); } bool swiftcall::isLegalVectorType(CodeGenModule , CharUnits vectorSize, @@ -688,7 +692,7 @@ std::pair swiftcall::splitLegalVectorType(CodeGenModule , CharUnits vectorSize, llvm::VectorType *vectorTy) { - auto numElts = vectorTy->getNumElements(); + auto numElts = cast(vectorTy)->getNumElements(); auto eltTy = vectorTy->getElementType(); // Try to split the vector type in half. @@ -710,7 +714,7 @@ } // Try to split the vector into legal subvectors. - auto numElts = origVectorTy->getNumElements(); + auto numElts = cast(origVectorTy)->getNumElements(); auto eltTy = origVectorTy->getElementType(); assert(numElts != 1); Index: clang/lib/CodeGen/CGExprScalar.cpp === --- clang/lib/CodeGen/CGExprScalar.cpp +++ clang/lib/CodeGen/CGExprScalar.cpp @@ -1323,7 +1323,7 @@ "Splatted expr doesn't match with vector element type?"); // Splat the element across to all elements -unsigned NumElements = cast(DstTy)->getNumElements(); +unsigned NumElements = cast(DstTy)->getNumElements(); return Builder.CreateVectorSplat(NumElements, Src, "splat"); } @@ -1630,7 +1630,7 @@ Value *RHS = CGF.EmitScalarExpr(E->getExpr(1)); Value *Mask; -llvm::VectorType *LTy = cast(LHS->getType()); +auto *LTy = cast(LHS->getType()); unsigned LHSElts = LTy->getNumElements(); Mask = RHS; @@ -1648,10 +1648,12 @@ // n = extract mask i // x = extract val n // newv = insert newv, x, i -auto *RTy = llvm::FixedVectorType::get(LTy->getElementType(), - MTy->getNumElements()); +auto *RTy = llvm::FixedVectorType::get( +LTy->getElementType(), +cast(MTy)->getNumElements()); Value* NewV = llvm::UndefValue::get(RTy); -for (unsigned i = 0, e = MTy->getNumElements(); i != e; ++i) { +for (unsigned i = 0, e = cast(MTy)->getNumElements(); + i != e; ++i) { Value *IIndx = llvm::ConstantInt::get(CGF.SizeTy, i); Value *Indx = Builder.CreateExtractElement(Mask, IIndx, "shuf_idx"); @@ -1840,7 +1842,7 @@ return Visit(E->getInit(0)); } - unsigned ResElts = VType->getNumElements(); + unsigned ResElts = cast(VType)->getNumElements(); // Loop over initializers collecting the Value for each, and remembering // whether the source was swizzle (ExtVectorElementExpr). This will allow @@ -1864,7 +1866,8 @@ if (isa(IE)) { llvm::ExtractElementInst *EI = cast(Init); -if (EI->getVectorOperandType()->getNumElements() == ResElts) { +if (cast(EI->getVectorOperandType()) +->getNumElements() == ResElts) { llvm::ConstantInt *C = cast(EI->getIndexOperand()); Value *LHS = nullptr, *RHS = nullptr; if (CurIdx == 0) { @@ -1902,7 +1905,7 @@ continue; } -unsigned InitElts = VVT->getNumElements(); +unsigned InitElts = cast(VVT)->getNumElements(); // If the initializer is an ExtVecEltExpr (a swizzle), and the swizzle's // input is the same width as the vector being constructed, generate an @@ -1911,7 +1914,7 @@ if (isa(IE)) { llvm::ShuffleVectorInst *SVI = cast(Init); Value *SVOp = SVI->getOperand(0); -
[PATCH] D82582: [SVE] Remove calls to VectorType::getNumElements from clang
ctetreau marked an inline comment as done. ctetreau added inline comments. Comment at: clang/lib/CodeGen/CGBuiltin.cpp:5612-5613 llvm::VectorType *VTy = GetNeonType(this, Type, HasLegalHalfType, false, AllowBFloatArgsAndRet); llvm::Type *Ty = VTy; c-rhodes wrote: > Is there a reason you can't do a single cast here? GetNeonType should probably just return a FixedVectorType. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D82582/new/ https://reviews.llvm.org/D82582 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D82582: [SVE] Remove calls to VectorType::getNumElements from clang
c-rhodes added inline comments. Comment at: clang/lib/CodeGen/CGBuiltin.cpp:5612-5613 llvm::VectorType *VTy = GetNeonType(this, Type, HasLegalHalfType, false, AllowBFloatArgsAndRet); llvm::Type *Ty = VTy; Is there a reason you can't do a single cast here? Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D82582/new/ https://reviews.llvm.org/D82582 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D82582: [SVE] Remove calls to VectorType::getNumElements from clang
ctetreau updated this revision to Diff 279370. ctetreau added a comment. rebase Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D82582/new/ https://reviews.llvm.org/D82582 Files: clang/lib/CodeGen/CGAtomic.cpp clang/lib/CodeGen/CGBuiltin.cpp clang/lib/CodeGen/CGExpr.cpp clang/lib/CodeGen/CGExprScalar.cpp clang/lib/CodeGen/SwiftCallingConv.cpp Index: clang/lib/CodeGen/SwiftCallingConv.cpp === --- clang/lib/CodeGen/SwiftCallingConv.cpp +++ clang/lib/CodeGen/SwiftCallingConv.cpp @@ -320,9 +320,12 @@ // If we have a vector type, split it. if (auto vecTy = dyn_cast_or_null(type)) { auto eltTy = vecTy->getElementType(); -CharUnits eltSize = (end - begin) / vecTy->getNumElements(); +CharUnits eltSize = +(end - begin) / cast(vecTy)->getNumElements(); assert(eltSize == getTypeStoreSize(CGM, eltTy)); -for (unsigned i = 0, e = vecTy->getNumElements(); i != e; ++i) { +for (unsigned i = 0, + e = cast(vecTy)->getNumElements(); + i != e; ++i) { addEntry(eltTy, begin, begin + eltSize); begin += eltSize; } @@ -674,8 +677,9 @@ bool swiftcall::isLegalVectorType(CodeGenModule , CharUnits vectorSize, llvm::VectorType *vectorTy) { - return isLegalVectorType(CGM, vectorSize, vectorTy->getElementType(), - vectorTy->getNumElements()); + return isLegalVectorType( + CGM, vectorSize, vectorTy->getElementType(), + cast(vectorTy)->getNumElements()); } bool swiftcall::isLegalVectorType(CodeGenModule , CharUnits vectorSize, @@ -688,7 +692,7 @@ std::pair swiftcall::splitLegalVectorType(CodeGenModule , CharUnits vectorSize, llvm::VectorType *vectorTy) { - auto numElts = vectorTy->getNumElements(); + auto numElts = cast(vectorTy)->getNumElements(); auto eltTy = vectorTy->getElementType(); // Try to split the vector type in half. @@ -710,7 +714,7 @@ } // Try to split the vector into legal subvectors. - auto numElts = origVectorTy->getNumElements(); + auto numElts = cast(origVectorTy)->getNumElements(); auto eltTy = origVectorTy->getElementType(); assert(numElts != 1); Index: clang/lib/CodeGen/CGExprScalar.cpp === --- clang/lib/CodeGen/CGExprScalar.cpp +++ clang/lib/CodeGen/CGExprScalar.cpp @@ -1323,7 +1323,7 @@ "Splatted expr doesn't match with vector element type?"); // Splat the element across to all elements -unsigned NumElements = cast(DstTy)->getNumElements(); +unsigned NumElements = cast(DstTy)->getNumElements(); return Builder.CreateVectorSplat(NumElements, Src, "splat"); } @@ -1630,7 +1630,7 @@ Value *RHS = CGF.EmitScalarExpr(E->getExpr(1)); Value *Mask; -llvm::VectorType *LTy = cast(LHS->getType()); +auto *LTy = cast(LHS->getType()); unsigned LHSElts = LTy->getNumElements(); Mask = RHS; @@ -1648,10 +1648,12 @@ // n = extract mask i // x = extract val n // newv = insert newv, x, i -auto *RTy = llvm::FixedVectorType::get(LTy->getElementType(), - MTy->getNumElements()); +auto *RTy = llvm::FixedVectorType::get( +LTy->getElementType(), +cast(MTy)->getNumElements()); Value* NewV = llvm::UndefValue::get(RTy); -for (unsigned i = 0, e = MTy->getNumElements(); i != e; ++i) { +for (unsigned i = 0, e = cast(MTy)->getNumElements(); + i != e; ++i) { Value *IIndx = llvm::ConstantInt::get(CGF.SizeTy, i); Value *Indx = Builder.CreateExtractElement(Mask, IIndx, "shuf_idx"); @@ -1840,7 +1842,7 @@ return Visit(E->getInit(0)); } - unsigned ResElts = VType->getNumElements(); + unsigned ResElts = cast(VType)->getNumElements(); // Loop over initializers collecting the Value for each, and remembering // whether the source was swizzle (ExtVectorElementExpr). This will allow @@ -1864,7 +1866,8 @@ if (isa(IE)) { llvm::ExtractElementInst *EI = cast(Init); -if (EI->getVectorOperandType()->getNumElements() == ResElts) { +if (cast(EI->getVectorOperandType()) +->getNumElements() == ResElts) { llvm::ConstantInt *C = cast(EI->getIndexOperand()); Value *LHS = nullptr, *RHS = nullptr; if (CurIdx == 0) { @@ -1902,7 +1905,7 @@ continue; } -unsigned InitElts = VVT->getNumElements(); +unsigned InitElts = cast(VVT)->getNumElements(); // If the initializer is an ExtVecEltExpr (a swizzle), and the swizzle's // input is the same width as the vector being constructed, generate an @@ -1911,7 +1914,7 @@ if (isa(IE)) { llvm::ShuffleVectorInst *SVI = cast(Init); Value *SVOp = SVI->getOperand(0); - llvm::VectorType *OpTy =
[PATCH] D82582: [SVE] Remove calls to VectorType::getNumElements from clang
ctetreau created this revision. Herald added subscribers: cfe-commits, psnobl, rkruppe, tschuett. Herald added a reviewer: efriedma. Herald added a project: clang. ctetreau added a child revision: D78127: [SVE] Mark VectorType::getNumElements() deprecated. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D82582 Files: clang/lib/CodeGen/CGAtomic.cpp clang/lib/CodeGen/CGBuiltin.cpp clang/lib/CodeGen/CGExpr.cpp clang/lib/CodeGen/CGExprScalar.cpp clang/lib/CodeGen/SwiftCallingConv.cpp Index: clang/lib/CodeGen/SwiftCallingConv.cpp === --- clang/lib/CodeGen/SwiftCallingConv.cpp +++ clang/lib/CodeGen/SwiftCallingConv.cpp @@ -320,9 +320,12 @@ // If we have a vector type, split it. if (auto vecTy = dyn_cast_or_null(type)) { auto eltTy = vecTy->getElementType(); -CharUnits eltSize = (end - begin) / vecTy->getNumElements(); +CharUnits eltSize = +(end - begin) / cast(vecTy)->getNumElements(); assert(eltSize == getTypeStoreSize(CGM, eltTy)); -for (unsigned i = 0, e = vecTy->getNumElements(); i != e; ++i) { +for (unsigned i = 0, + e = cast(vecTy)->getNumElements(); + i != e; ++i) { addEntry(eltTy, begin, begin + eltSize); begin += eltSize; } @@ -674,8 +677,9 @@ bool swiftcall::isLegalVectorType(CodeGenModule , CharUnits vectorSize, llvm::VectorType *vectorTy) { - return isLegalVectorType(CGM, vectorSize, vectorTy->getElementType(), - vectorTy->getNumElements()); + return isLegalVectorType( + CGM, vectorSize, vectorTy->getElementType(), + cast(vectorTy)->getNumElements()); } bool swiftcall::isLegalVectorType(CodeGenModule , CharUnits vectorSize, @@ -688,7 +692,7 @@ std::pair swiftcall::splitLegalVectorType(CodeGenModule , CharUnits vectorSize, llvm::VectorType *vectorTy) { - auto numElts = vectorTy->getNumElements(); + auto numElts = cast(vectorTy)->getNumElements(); auto eltTy = vectorTy->getElementType(); // Try to split the vector type in half. @@ -710,7 +714,7 @@ } // Try to split the vector into legal subvectors. - auto numElts = origVectorTy->getNumElements(); + auto numElts = cast(origVectorTy)->getNumElements(); auto eltTy = origVectorTy->getElementType(); assert(numElts != 1); Index: clang/lib/CodeGen/CGExprScalar.cpp === --- clang/lib/CodeGen/CGExprScalar.cpp +++ clang/lib/CodeGen/CGExprScalar.cpp @@ -1323,7 +1323,7 @@ "Splatted expr doesn't match with vector element type?"); // Splat the element across to all elements -unsigned NumElements = cast(DstTy)->getNumElements(); +unsigned NumElements = cast(DstTy)->getNumElements(); return Builder.CreateVectorSplat(NumElements, Src, "splat"); } @@ -1630,7 +1630,7 @@ Value *RHS = CGF.EmitScalarExpr(E->getExpr(1)); Value *Mask; -llvm::VectorType *LTy = cast(LHS->getType()); +auto *LTy = cast(LHS->getType()); unsigned LHSElts = LTy->getNumElements(); Mask = RHS; @@ -1648,10 +1648,12 @@ // n = extract mask i // x = extract val n // newv = insert newv, x, i -auto *RTy = llvm::FixedVectorType::get(LTy->getElementType(), - MTy->getNumElements()); +auto *RTy = llvm::FixedVectorType::get( +LTy->getElementType(), +cast(MTy)->getNumElements()); Value* NewV = llvm::UndefValue::get(RTy); -for (unsigned i = 0, e = MTy->getNumElements(); i != e; ++i) { +for (unsigned i = 0, e = cast(MTy)->getNumElements(); + i != e; ++i) { Value *IIndx = llvm::ConstantInt::get(CGF.SizeTy, i); Value *Indx = Builder.CreateExtractElement(Mask, IIndx, "shuf_idx"); @@ -1840,7 +1842,7 @@ return Visit(E->getInit(0)); } - unsigned ResElts = VType->getNumElements(); + unsigned ResElts = cast(VType)->getNumElements(); // Loop over initializers collecting the Value for each, and remembering // whether the source was swizzle (ExtVectorElementExpr). This will allow @@ -1864,7 +1866,8 @@ if (isa(IE)) { llvm::ExtractElementInst *EI = cast(Init); -if (EI->getVectorOperandType()->getNumElements() == ResElts) { +if (cast(EI->getVectorOperandType()) +->getNumElements() == ResElts) { llvm::ConstantInt *C = cast(EI->getIndexOperand()); Value *LHS = nullptr, *RHS = nullptr; if (CurIdx == 0) { @@ -1902,7 +1905,7 @@ continue; } -unsigned InitElts = VVT->getNumElements(); +unsigned InitElts = cast(VVT)->getNumElements(); // If the initializer is an ExtVecEltExpr (a swizzle), and the swizzle's // input is the same width as the vector being constructed, generate an @@ -1911,7 +1914,7 @@ if (isa(IE)) {