================ @@ -1469,6 +1464,47 @@ void VPReplicateRecipe::print(raw_ostream &O, const Twine &Indent, } #endif +Value *VPScalarCastRecipe ::generate(VPTransformState &State, unsigned Part) { + assert(vputils::onlyFirstLaneUsed(this) && + "Codegen only implemented for first lane."); + switch (Opcode) { + case Instruction::SExt: + case Instruction::ZExt: + case Instruction::Trunc: { + Value *Op = State.get(getOperand(0), VPIteration(Part, 0)); + return State.Builder.CreateCast(Instruction::CastOps(Opcode), Op, ResultTy); + } + default: + llvm_unreachable("opcode not implemented yet"); + } +} + +void VPScalarCastRecipe ::execute(VPTransformState &State) { + bool UniformAcrossUFs = all_of(operands(), [](VPValue *Op) { ---------------- ayalz wrote:
```suggestion bool LoopInvariant = all_of(operands(), [](VPValue *Op) { ``` this checks more than uniformity across UFs. And if it is invariance we're checking, we can alternatively check if the recipe itself resides outside vector regions (e.g., has been LICM'd), rather than all of its operands. https://github.com/llvm/llvm-project/pull/78113 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits