|
@@ -11984,10 +11984,15 @@ SpirvEmitter::doUnaryExprOrTypeTraitExpr(const UnaryExprOrTypeTraitExpr *expr) {
|
|
return nullptr;
|
|
return nullptr;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (auto *constExpr = tryToEvaluateAsConst(expr)) {
|
|
|
|
+ constExpr->setRValue();
|
|
|
|
+ return constExpr;
|
|
|
|
+ }
|
|
|
|
+
|
|
AlignmentSizeCalculator alignmentCalc(astContext, spirvOptions);
|
|
AlignmentSizeCalculator alignmentCalc(astContext, spirvOptions);
|
|
uint32_t size = 0, stride = 0;
|
|
uint32_t size = 0, stride = 0;
|
|
std::tie(std::ignore, size) = alignmentCalc.getAlignmentAndSize(
|
|
std::tie(std::ignore, size) = alignmentCalc.getAlignmentAndSize(
|
|
- expr->getArgumentType(), SpirvLayoutRule::Void,
|
|
|
|
|
|
+ expr->getArgumentType(), SpirvLayoutRule::Scalar,
|
|
/*isRowMajor*/ llvm::None, &stride);
|
|
/*isRowMajor*/ llvm::None, &stride);
|
|
auto *sizeConst = spvBuilder.getConstantInt(astContext.UnsignedIntTy,
|
|
auto *sizeConst = spvBuilder.getConstantInt(astContext.UnsignedIntTy,
|
|
llvm::APInt(32, size));
|
|
llvm::APInt(32, size));
|