[PatternInit] Explicitly allow implicit truncation

It's okay if the pattern value gets truncated here, it's a splat.
This commit is contained in:
Nikita Popov 2025-12-15 13:12:10 +01:00
parent 744552d870
commit 857748d4af

View File

@ -37,7 +37,8 @@ llvm::Constant *clang::CodeGen::initializationPatternFor(CodeGenModule &CGM,
unsigned BitWidth =
cast<llvm::IntegerType>(Ty->getScalarType())->getBitWidth();
if (BitWidth <= 64)
return llvm::ConstantInt::get(Ty, IntValue);
return llvm::ConstantInt::get(Ty, IntValue, /*IsSigned=*/false,
/*ImplicitTrunc=*/true);
return llvm::ConstantInt::get(
Ty, llvm::APInt::getSplat(BitWidth, llvm::APInt(64, IntValue)));
}
@ -48,7 +49,8 @@ llvm::Constant *clang::CodeGen::initializationPatternFor(CodeGenModule &CGM,
if (PtrWidth > 64)
llvm_unreachable("pattern initialization of unsupported pointer width");
llvm::Type *IntTy = llvm::IntegerType::get(CGM.getLLVMContext(), PtrWidth);
auto *Int = llvm::ConstantInt::get(IntTy, IntValue);
auto *Int = llvm::ConstantInt::get(IntTy, IntValue, /*IsSigned=*/false,
/*ImplicitTrunc=*/true);
return llvm::ConstantExpr::getIntToPtr(Int, PtrTy);
}
if (Ty->isFPOrFPVectorTy()) {