================ @@ -1693,6 +1693,22 @@ getBitTestAtomicOrdering(BitTest::InterlockingKind I) { llvm_unreachable("invalid interlocking"); } +static llvm::Value *EmitIntegerExpr(CodeGenFunction &CGF, const Expr *E) { + llvm::Value *ArgValue = CGF.EmitScalarExpr(E); + llvm::Type *ArgType = ArgValue->getType(); + + if (auto *VT = dyn_cast<llvm::FixedVectorType>(ArgType); + VT && VT->getElementType()->isIntegerTy(1)) { + llvm::Type *StorageType = CGF.ConvertTypeForMem(E->getType()); + ArgValue = CGF.emitBoolVecConversion( + ArgValue, StorageType->getPrimitiveSizeInBits(), "insertvec"); + ArgValue = CGF.Builder.CreateBitCast(ArgValue, StorageType); ---------------- jhuber6 wrote:
Yes, this is re-using the existing handling for it. But that's a good point about `clz`. We'll likely need to subtract the difference between the 'true' vector and the rounded up storage size. https://github.com/llvm/llvm-project/pull/154203 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits