[llvm] [RISC-V][GISEL] Select G_BITCAST for scalable vectors (PR #101486)
Michael Maitland via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 23 14:40:05 PDT 2024
================
@@ -785,6 +786,26 @@ void RISCVInstructionSelector::preISelLower(MachineInstr &MI,
replacePtrWithInt(MI.getOperand(1), MIB, MRI);
MI.setDesc(TII.get(TargetOpcode::G_AND));
MRI.setType(DstReg, sXLen);
+ break;
+ }
+ case TargetOpcode::G_LOAD: {
+ Register DstReg = MI.getOperand(0).getReg();
+ const LLT DstTy = MRI.getType(DstReg);
+ if (!(DstTy.isVector() && DstTy.getElementType().isPointer()))
+ break;
+ const LLT sXLen = LLT::scalar(STI.getXLen());
+ MRI.setType(DstReg, LLT::scalable_vector(DstTy.getElementCount().getKnownMinValue(), sXLen));
+ break;
+ }
+ case TargetOpcode::G_STORE: {
+ MachineOperand &SrcOp = MI.getOperand(0);
+ const LLT SrcTy = MRI.getType(SrcOp.getReg());
+ if (!(SrcTy.isVector() && SrcTy.getElementType().isPointer()))
+ break;
+ const LLT sXLen = LLT::scalar(STI.getXLen());
+ auto Copy = MIB.buildCopy(LLT::scalable_vector(SrcTy.getElementCount().getKnownMinValue(), sXLen), SrcOp);
----------------
michaelmaitland wrote:
Why do we do a copy instead of changing the store's vector pointer element type to vector of sXLen type?
https://github.com/llvm/llvm-project/pull/101486
More information about the llvm-commits
mailing list