Merge commit 989879f8fded from llvm git (by Paul Walker):

[Clang] Allow C++11 style initialisation of SVE types.

  Fixes https://github.com/llvm/llvm-project/issues/63223

  Differential Revision: https://reviews.llvm.org/D153560

Requested by:	andrew
MFC after:	3 days

(cherry picked from commit 641efdd10c)
This commit is contained in:
Dimitry Andric 2023-12-04 18:59:02 +01:00
parent 436f43d41c
commit 0bb3806932

View file

@ -1861,6 +1861,23 @@ Value *ScalarExprEmitter::VisitInitListExpr(InitListExpr *E) {
return Visit(E->getInit(0));
}
if (isa<llvm::ScalableVectorType>(VType)) {
if (NumInitElements == 0) {
// C++11 value-initialization for the vector.
return EmitNullValue(E->getType());
}
if (NumInitElements == 1) {
Expr *InitVector = E->getInit(0);
// Initialize from another scalable vector of the same type.
if (InitVector->getType() == E->getType())
return Visit(InitVector);
}
llvm_unreachable("Unexpected initialization of a scalable vector!");
}
unsigned ResElts = cast<llvm::FixedVectorType>(VType)->getNumElements();
// Loop over initializers collecting the Value for each, and remembering