diff --git a/llvm/lib/Target/RISCV/RISCVVXRMRegister.cpp b/llvm/lib/Target/RISCV/RISCVVXRMRegister.cpp --- a/llvm/lib/Target/RISCV/RISCVVXRMRegister.cpp +++ b/llvm/lib/Target/RISCV/RISCVVXRMRegister.cpp @@ -7,37 +7,167 @@ // //===----------------------------------------------------------------------===// // -// This file implements a function pass that inserts SwapVXRM/WriteVXRM -// instructions where needed. +// This file implements a function pass that inserts WriteVXRMImm +// for rvv pseudos with a static round mode operand. // -// The pass consists of a single pass over each basic block looking for VXRM -// usage that requires a WriteVXRM to be inserted. +// To work with the intrinsics that have SideEffects, it checks if there are +// any VXRM uses in the given MachineFunction. +// If there is any, it runs emitWriteVXRMLocal instead which always saves +// incoming VCSR value and restores it for InlineAsms and VXRM users, // -// To work with the intrinsics that have SideEffects, we always keep the -// incoming VCSR value which contains VXRM and VXSAT, and recover it for Calls, -// InlineAsms, VXRM users and those which RoundModeOperand is specified as -// RISCVVXRndMode::DYN. +// For functions without dynamic mode, the pass consists of 3 phases: // -// This can be enhanced later if the ABI specifies it is volatile across calls. -// -// TODO: Future enhancements to this pass will take into account VXRM from -// predecessors. +// Phase 1 collects static round mode changes in each basic block +// Phase 2 propogates the round mode state to successor blocks, +// and hoists the round mode if the folowing conditions meet: +// 1. The basic block is a loop header. +// 2. The loop has a preheader. +// 3. Incoming round mode from all backedges are the same. +// 4. Incoming round mode is the required round mode of the header +// Phase 3 emits WriteVXRMImm, and assumes the incoming VXRM value based on the +// information from Phase 2. // //===----------------------------------------------------------------------===// #include "RISCV.h" #include "RISCVSubtarget.h" +#include "llvm/CodeGen/MachineDominators.h" #include "llvm/CodeGen/MachineFunctionPass.h" +#include "llvm/CodeGen/MachineLoopInfo.h" using namespace llvm; #define DEBUG_TYPE "riscv-insert-writevxrm" #define RISCV_INSERT_WRITEVXRM_NAME "RISCV Insert required VXRM values" namespace { +class VXRMInfo { + unsigned VXRMImm; + + enum : uint8_t { + Uninitialized, + VXRMIsStatic, + Unknown, + } State = Uninitialized; + +public: + VXRMInfo() : VXRMImm(0) {} + + static VXRMInfo getUnknown() { + VXRMInfo Info; + Info.setUnknown(); + return Info; + } + + bool isValid() const { return State != Uninitialized; } + void setUnknown() { State = Unknown; } + bool isUnknown() const { return State == Unknown; } + + bool isStatic() const { return State == VXRMIsStatic; } + + void setVXRMImm(unsigned Imm) { + assert(Imm < RISCVVXRndMode::DYN); + VXRMImm = Imm; + State = VXRMIsStatic; + } + unsigned getVXRMImm() const { + assert(isStatic()); + return VXRMImm; + } + + bool operator!=(const VXRMInfo &Other) const { return !(*this == Other); } + + bool operator==(const VXRMInfo &Other) const { + // Uninitialized is only equal to another Uninitialized. + if (!isValid()) + return !Other.isValid(); + if (!Other.isValid()) + return !isValid(); + + // Unknown is only equal to another Unknown. + if (isUnknown()) + return Other.isUnknown(); + if (Other.isUnknown()) + return isUnknown(); + + return VXRMImm == Other.VXRMImm; + } + + // Calculate the VXRMInfo visible to a block assuming this and Other are + // both predecessors. + VXRMInfo intersect(const VXRMInfo &Other) const { + // If the new value isn't valid, ignore it. + if (!Other.isValid()) + return *this; + + // If this value isn't valid, this must be the first predecessor, use it. + if (!isValid()) + return Other; + + // If either is unknown, the result is unknown. + if (isUnknown() || Other.isUnknown()) + return VXRMInfo::getUnknown(); + + // If we have an exact match, return this. + if (*this == Other) + return *this; + + // Otherwise the result is unknown. + return VXRMInfo::getUnknown(); + } + + // Calculate the VXRMInfo visible at the end of the block assuming this + // is the predecessor value, and Other is change for this block. + VXRMInfo merge(const VXRMInfo &Other) const { + assert(isValid() && "Can only merge with a valid VXRMInfo"); + + // Nothing changed from the predecessor, keep it. + if (!Other.isValid()) + return *this; + + // Otherwise just use whatever is in this block. + return Other; + } +}; + +struct BlockData { + // The VXRMInfo that represents the first change to the VXRM registers + // made by this block. Calculated in Phase 1. + VXRMInfo Require; + + // The VXRMInfo that represents the net changes to the VXRM registers + // made by this block. Calculated in Phase 1. + VXRMInfo Change; + + // The VXRMInfo that represents the VXRM settings on exit from this + // block. Calculated in Phase 2. + VXRMInfo Exit; + + // The VXRMInfo that supports hoisting the round mode from successor. + // Calculated in Phase 2. + VXRMInfo ForceExit; + + // The VXRMInfo that represents the VXRM settings from all predecessor + // blocks. Calculated in Phase 2, and used by Phase 3. + VXRMInfo Pred; + + // Keeps track of whether the block is already in the queue. + bool InQueue = false; + + MachineBasicBlock *PreHeader = nullptr; + + BlockData() {} +}; + class RISCVVXRMRegister : public MachineFunctionPass { const TargetInstrInfo *TII; MachineRegisterInfo *MRI; + MachineDominatorTree *MDT = nullptr; + const MachineLoopInfo *MLI = nullptr; + + std::vector BlockInfo; + std::queue WorkList; + public: static char ID; @@ -47,17 +177,35 @@ bool runOnMachineFunction(MachineFunction &MF) override; void getAnalysisUsage(AnalysisUsage &AU) const override { + AU.addRequired(); + AU.addRequired(); AU.setPreservesCFG(); + AU.addPreserved(); + AU.addPreserved(); MachineFunctionPass::getAnalysisUsage(AU); } StringRef getPassName() const override { return RISCV_INSERT_WRITEVXRM_NAME; } private: - bool emitWriteVXRM(MachineBasicBlock &MBB); + bool computeVXRMChanges(const MachineBasicBlock &MBB); + void computeIncomingVXRM(const MachineBasicBlock &MBB); + void collectLoopHeaders(void); + void propogateExitState(const MachineFunction &MF); + void emitWriteVXRM(MachineBasicBlock &MBB); + void emitWriteVXRMLocal(MachineBasicBlock &MBB); Optional getRoundModeIdx(const MachineInstr &MI) const; }; +bool hasDynUses(const MachineFunction &MF) { + for (const MachineBasicBlock &MBB : MF) + for (const MachineInstr &MI : MBB) { + if (MI.readsRegister(RISCV::VXRM)) + return true; + } + return false; +} + } // end anonymous namespace char RISCVVXRMRegister::ID = 0; @@ -78,17 +226,182 @@ return MI.getNumExplicitOperands() - RISCVII::hasVecPolicyOp(TSFlags) - 3; } -bool RISCVVXRMRegister::emitWriteVXRM(MachineBasicBlock &MBB) { - bool MadeChange = false; +bool RISCVVXRMRegister::computeVXRMChanges(const MachineBasicBlock &MBB) { + bool NeedVXRMChange = false; + BlockData &BBInfo = BlockInfo[MBB.getNumber()]; + + for (const MachineInstr &MI : MBB) { + VXRMInfo NewVXRMInfo; + if (auto Idx = getRoundModeIdx(MI)) { + unsigned NewVXRMImm = MI.getOperand(Idx.getValue()).getImm() & 0x7; + if (NewVXRMImm != RISCVVXRndMode::DYN) { + if (!BBInfo.Require.isValid()) { + NeedVXRMChange = true; + BBInfo.Require.setVXRMImm(NewVXRMImm); + } + BBInfo.Change.setVXRMImm(NewVXRMImm); + } + } + + if (MI.isCall() || MI.isInlineAsm() || MI.modifiesRegister(RISCV::VXRM)) + BBInfo.Change.setUnknown(); + } + // Initial exit state is the last change made in the block + BBInfo.Exit = BBInfo.Change; + return NeedVXRMChange; +} + +void RISCVVXRMRegister::computeIncomingVXRM(const MachineBasicBlock &MBB) { + BlockData &BBInfo = BlockInfo[MBB.getNumber()]; + BBInfo.InQueue = false; + VXRMInfo InInfo; + VXRMInfo BackedgeInfo; + + if (MBB.pred_empty()) { + // There are no predecessors, so use the default starting status. + InInfo.setUnknown(); + } else { + if (BBInfo.PreHeader) { + // Collect the exit states from backedges for later round mode hoisting + for (const MachineBasicBlock *P : MBB.predecessors()) { + if (P != BBInfo.PreHeader) { + BackedgeInfo = BackedgeInfo.intersect(BlockInfo[P->getNumber()].Exit); + } + } + InInfo = + BackedgeInfo.intersect(BlockInfo[BBInfo.PreHeader->getNumber()].Exit); + } else { + for (const MachineBasicBlock *P : MBB.predecessors()) + InInfo = InInfo.intersect(BlockInfo[P->getNumber()].Exit); + } + } + + // If we don't have any valid predecessor value, wait until we do. + if (!InInfo.isValid()) + return; + + // Hoist the round mode to PreHeader if the required mode meets the exit state + // from all backedges + if (BackedgeInfo.isStatic() && BackedgeInfo == BBInfo.Require && + BlockInfo[BBInfo.PreHeader->getNumber()].Exit != BackedgeInfo) { + BlockData &PreHeaderInfo = BlockInfo[BBInfo.PreHeader->getNumber()]; + PreHeaderInfo.ForceExit = BBInfo.Require; + WorkList.push(BBInfo.PreHeader); + return; + } - // To be defensive we keep the incoming VCSR value when round mode is changed - // from RISCVVXRndMode::DYN + BBInfo.Pred = InInfo; + + VXRMInfo TmpStatus = BBInfo.Pred.merge(BBInfo.Change); + + if (BBInfo.ForceExit.isStatic()) { + TmpStatus = BBInfo.ForceExit; + } + + // If the new exit value matches the old exit value, we don't need to revisit + // any blocks. + if (BBInfo.Exit == TmpStatus) + return; + + BBInfo.Exit = TmpStatus; + + // Add the successors to the work list so we can propagate the changed exit + // status. + for (const MachineBasicBlock *S : MBB.successors()) + if (!BlockInfo[S->getNumber()].InQueue) + WorkList.push(S); +} + +void RISCVVXRMRegister::collectLoopHeaders(void) { + SmallVector Worklist(MLI->begin(), MLI->end()); + MachineLoop *CurLoop; + while (!Worklist.empty()) { + CurLoop = Worklist.pop_back_val(); + Worklist.append(CurLoop->begin(), CurLoop->end()); + BlockData &BBInfo = BlockInfo[CurLoop->getHeader()->getNumber()]; + // Skip this if the header doesn't require static round mode + if (!BBInfo.Require.isStatic()) + continue; + BBInfo.PreHeader = CurLoop->getLoopPreheader(); + } +} + +void RISCVVXRMRegister::propogateExitState(const MachineFunction &MF) { + + collectLoopHeaders(); + + for (const MachineBasicBlock &MBB : MF) { + WorkList.push(&MBB); + BlockInfo[MBB.getNumber()].InQueue = true; + } + + while (!WorkList.empty()) { + const MachineBasicBlock &MBB = *WorkList.front(); + WorkList.pop(); + computeIncomingVXRM(MBB); + } +} + +void RISCVVXRMRegister::emitWriteVXRM(MachineBasicBlock &MBB) { + // Based on the information from Phase 2, incoming VXRM is a known value if Pred + // is static. + BlockData &BBInfo = BlockInfo[MBB.getNumber()]; + unsigned CurVXRMImm = + BBInfo.Pred.isStatic() ? BBInfo.Pred.getVXRMImm() : RISCVVXRndMode::DYN; + for (MachineInstr &MI : MBB) { + if (MI.isCall() || MI.isInlineAsm() || MI.modifiesRegister(RISCV::VXRM)) + CurVXRMImm = RISCVVXRndMode::DYN; + + if (auto Idx = getRoundModeIdx(MI)) { + MachineOperand &RoundModeOp = MI.getOperand(Idx.getValue()); + unsigned NewVXRMImm = RoundModeOp.getImm() & 0x7; + if (NewVXRMImm == RISCVVXRndMode::DYN) + continue; + + // If the current mode doesn't meet the requirement, + // we change it accordingly + if (NewVXRMImm != CurVXRMImm) + BuildMI(MBB, MI, MI.getDebugLoc(), TII->get(RISCV::WriteVXRMImm)) + .addImm(NewVXRMImm); + + RoundModeOp.setImm(RISCVVXRndMode::DYN); + MI.addOperand(MachineOperand::CreateReg(RISCV::VXRM, /*isDef*/ false, + /*isImp*/ true)); + CurVXRMImm = NewVXRMImm; + continue; + } + } + + // If current state doesn't meet the specified exit state, insert a CSR write + if (BBInfo.Exit.isStatic() && BBInfo.Exit.getVXRMImm() != CurVXRMImm) { + if (MBB.empty() || !MBB.back().isTerminator()) + BuildMI(&MBB, DebugLoc(), TII->get(RISCV::WriteVXRMImm)) + .addImm(BBInfo.Exit.getVXRMImm()); + else + BuildMI(MBB, MBB.getFirstTerminator(), DebugLoc(), + TII->get(RISCV::WriteVXRMImm)) + .addImm(BBInfo.Exit.getVXRMImm()); + } + + return; +} + +void RISCVVXRMRegister::emitWriteVXRMLocal(MachineBasicBlock &MBB) { + // A virtual register is used to keep the incoming VCSR value when round mode + // is changed from RISCVVXRndMode::DYN Register SavedVCSRReg = 0; - // For now predecessor state is unknown, we use RISCVVXRndMode::DYN to + // Assuming the predecessor state is unknown, we use RISCVVXRndMode::DYN to // represent the incoming VXRM value unsigned CurVXRMImm = RISCVVXRndMode::DYN; for (MachineInstr &MI : MBB) { + // VCSR is call-clobbered + if (MI.isCall() || MI.modifiesRegister(RISCV::VXRM)) { + SavedVCSRReg = 0; + CurVXRMImm = RISCVVXRndMode::DYN; + continue; + } + if (auto Idx = getRoundModeIdx(MI)) { MachineOperand &RoundModeOp = MI.getOperand(Idx.getValue()); unsigned NewVXRMImm = RoundModeOp.getImm() & 0x7; @@ -109,7 +422,6 @@ MI.addOperand(MachineOperand::CreateReg(RISCV::VXRM, /*isDef*/ false, /*isImp*/ true)); CurVXRMImm = NewVXRMImm; - MadeChange = true; continue; } @@ -127,14 +439,14 @@ if (CurVXRMImm == RISCVVXRndMode::DYN) continue; - if (!MI.readsRegister(RISCV::VXRM) && !MI.isCall() && !MI.isInlineAsm()) + if (!MI.readsRegister(RISCV::VXRM) && !MI.isInlineAsm()) continue; - // Here handles Calls, Terminator, InlineAsm, and all ops - // which depend on saved VXRM + // Here restores the saved VCSR for Terminator, InlineAsm, and all ops + // which reads VXRM assert(SavedVCSRReg); - BuildMI(MBB, MI, MI.getDebugLoc(), TII->get(RISCV::WriteVXRM)) + BuildMI(MBB, MI, MI.getDebugLoc(), TII->get(RISCV::WriteVCSR)) .addReg(SavedVCSRReg); SavedVCSRReg = 0; @@ -143,36 +455,59 @@ // Restore VXRM to previous saved value before leaving the block if (SavedVCSRReg) { - MachineInstr &MI = MBB.back(); - if (MI.isTerminator()) { + if (MBB.empty() || !MBB.back().isTerminator()) + BuildMI(&MBB, DebugLoc(), TII->get(RISCV::WriteVCSR)) + .addReg(SavedVCSRReg); + else BuildMI(MBB, MBB.getFirstTerminator(), DebugLoc(), TII->get(RISCV::WriteVCSR)) .addReg(SavedVCSRReg); - } else { - // it is a fallthrough to next block - BuildMI(&MBB, MI.getDebugLoc(), TII->get(RISCV::WriteVCSR)) - .addReg(SavedVCSRReg); - } } - - return MadeChange; + return; } bool RISCVVXRMRegister::runOnMachineFunction(MachineFunction &MF) { // Skip if the vector extension is not enabled. const RISCVSubtarget &ST = MF.getSubtarget(); + MDT = &getAnalysis(); + MLI = &getAnalysis(); + if (!ST.hasVInstructions()) return false; TII = ST.getInstrInfo(); MRI = &MF.getRegInfo(); - bool Changed = false; + assert(BlockInfo.empty() && "Expect empty block infos"); + BlockInfo.resize(MF.getNumBlockIDs()); + + bool NeedVXRMChange = false; + // Phase 1 - Collect VXRM info + for (const MachineBasicBlock &MBB : MF) + NeedVXRMChange |= computeVXRMChanges(MBB); + + if (NeedVXRMChange) { + + // If static mode and dynamic pseudos are mixed together, + // VXRM changes are emitted at the scope of the local basic block + if (hasDynUses(MF)) { + for (MachineBasicBlock &MBB : MF) + emitWriteVXRMLocal(MBB); + BlockInfo.clear(); + return NeedVXRMChange; + } + + // Phase 2: Propogate the exit state to successors + propogateExitState(MF); + + // Phase 3: Emit VXRM changes + for (MachineBasicBlock &MBB : MF) + emitWriteVXRM(MBB); + } - for (MachineBasicBlock &MBB : MF) - Changed |= emitWriteVXRM(MBB); + BlockInfo.clear(); - return Changed; + return NeedVXRMChange; } FunctionPass *llvm::createRISCVVXRMRegisterPass() { diff --git a/llvm/test/CodeGen/RISCV/rvv/roundmode-insert.ll b/llvm/test/CodeGen/RISCV/rvv/roundmode-insert.ll --- a/llvm/test/CodeGen/RISCV/rvv/roundmode-insert.ll +++ b/llvm/test/CodeGen/RISCV/rvv/roundmode-insert.ll @@ -1,6 +1,12 @@ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s +declare @llvm.riscv.vaadd.nxv8i8.nxv8i8( + , + , + , + i64); + declare @llvm.riscv.vaadd.rm.nxv8i8.nxv8i8( , , @@ -13,11 +19,10 @@ ; CHECK-LABEL: test1: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 4 +; CHECK-NEXT: csrwi vxrm, 2 ; CHECK-NEXT: vaadd.vv v8, v8, v9 ; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv8i8.nxv8i8( @@ -36,25 +41,55 @@ ret %res } -; Function Attrs: nounwind +; Check that pseudos with static mode don't break pseudos with dynamic mode +define @test2( %0, %1, %2, i64 %3) nounwind { +; CHECK-LABEL: test2: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT: #APP +; CHECK-NEXT: csrwi vxrm, 0 +; CHECK-NEXT: #NO_APP +; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, mu +; CHECK-NEXT: csrrwi a0, vcsr, 4 +; CHECK-NEXT: vaadd.vv v8, v8, v9 +; CHECK-NEXT: csrw vcsr, a0 +; CHECK-NEXT: vaadd.vv v8, v8, v10 +; CHECK-NEXT: ret +entry: + call void asm sideeffect "csrwi vxrm, 0", ""() + %a = call @llvm.riscv.vaadd.rm.nxv8i8.nxv8i8( + undef, + %0, + %1, + i64 %3, + i64 2) + %res = call @llvm.riscv.vaadd.nxv8i8.nxv8i8( + undef, + %a, + %2, + i64 %3) + + ret %res +} + +; Check round-mode change is hoisted out of loop define dso_local void @loop1(i8* nocapture %ptr_dest, i8* nocapture readonly %ptr_op1, i8* nocapture readonly %ptr_op2, i64 %n) { ; CHECK-LABEL: loop1: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli a4, a3, e8, m4, ta, mu -; CHECK-NEXT: beqz a4, .LBB1_2 -; CHECK-NEXT: .LBB1_1: # %for.body +; CHECK-NEXT: beqz a4, .LBB2_3 +; CHECK-NEXT: # %bb.1: # %for.body.preheader +; CHECK-NEXT: csrwi vxrm, 2 +; CHECK-NEXT: .LBB2_2: # %for.body ; CHECK-NEXT: # =>This Inner Loop Header: Depth=1 ; CHECK-NEXT: vsetvli zero, a4, e8, m1, ta, mu ; CHECK-NEXT: vle8.v v8, (a1) ; CHECK-NEXT: vle8.v v9, (a2) -; CHECK-NEXT: csrrwi a5, vcsr, 4 ; CHECK-NEXT: vaadd.vv v8, v8, v9 ; CHECK-NEXT: vse8.v v8, (a0) ; CHECK-NEXT: sub a3, a3, a4 ; CHECK-NEXT: vsetvli a4, a3, e8, m4, ta, mu -; CHECK-NEXT: csrw vcsr, a5 -; CHECK-NEXT: bnez a4, .LBB1_1 -; CHECK-NEXT: .LBB1_2: # %for.end +; CHECK-NEXT: bnez a4, .LBB2_2 +; CHECK-NEXT: .LBB2_3: # %for.end ; CHECK-NEXT: ret entry: %0 = tail call i64 @llvm.riscv.vsetvli.i64(i64 %n, i64 0, i64 2) @@ -79,6 +114,7 @@ for.end: ret void } + declare i64 @llvm.riscv.vsetvli.i64(i64, i64 immarg, i64 immarg) declare @llvm.riscv.vle.nxv8i8.i64(, * nocapture, i64) declare void @llvm.riscv.vse.nxv8i8.i64(, * nocapture, i64) diff --git a/llvm/test/CodeGen/RISCV/rvv/roundmode-insert.mir b/llvm/test/CodeGen/RISCV/rvv/roundmode-insert.mir --- a/llvm/test/CodeGen/RISCV/rvv/roundmode-insert.mir +++ b/llvm/test/CodeGen/RISCV/rvv/roundmode-insert.mir @@ -14,10 +14,9 @@ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vr = COPY $v9 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gprnox0 = COPY $x10 ; CHECK-NEXT: dead $x0 = PseudoVSETVLI [[COPY2]], 69, implicit-def $vl, implicit-def $vtype - ; CHECK-NEXT: [[SwapVCSRImm:%[0-9]+]]:gpr = SwapVCSRImm 4, implicit-def $vxrm, implicit-def $vxsat, implicit $vxrm, implicit $vxsat + ; CHECK-NEXT: WriteVXRMImm 2, implicit-def $vxrm ; CHECK-NEXT: [[PseudoVAADD_VV_MF8_:%[0-9]+]]:vr = PseudoVAADD_VV_MF8 [[COPY]], [[COPY1]], 4, $noreg, 3, implicit $vl, implicit $vtype, implicit $vxrm ; CHECK-NEXT: $v8 = COPY [[PseudoVAADD_VV_MF8_]] - ; CHECK-NEXT: WriteVCSR [[SwapVCSRImm]], implicit-def $vxrm, implicit-def $vxsat ; CHECK-NEXT: PseudoRET implicit $v8 %0:vr = COPY $v8 %1:vr = COPY $v9 @@ -41,14 +40,12 @@ ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vr = COPY $v9 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vr = COPY $v8 ; CHECK-NEXT: dead $x0 = PseudoVSETVLI [[COPY]], 69, implicit-def $vl, implicit-def $vtype - ; CHECK-NEXT: [[SwapVCSRImm:%[0-9]+]]:gpr = SwapVCSRImm 4, implicit-def $vxrm, implicit-def $vxsat, implicit $vxrm, implicit $vxsat + ; CHECK-NEXT: WriteVXRMImm 2, implicit-def $vxrm ; CHECK-NEXT: [[PseudoVAADD_VV_MF8_:%[0-9]+]]:vr = PseudoVAADD_VV_MF8 [[COPY3]], [[COPY2]], 4, $noreg, 3, implicit $vl, implicit $vtype, implicit $vxrm - ; CHECK-NEXT: WriteVXRM [[SwapVCSRImm]], implicit-def $vxrm ; CHECK-NEXT: INLINEASM &"", 1 /* sideeffect attdialect */ - ; CHECK-NEXT: [[SwapVCSRImm1:%[0-9]+]]:gpr = SwapVCSRImm 0, implicit-def $vxrm, implicit-def $vxsat, implicit $vxrm, implicit $vxsat + ; CHECK-NEXT: WriteVXRMImm 0, implicit-def $vxrm ; CHECK-NEXT: [[PseudoVAADD_VV_MF8_1:%[0-9]+]]:vr = PseudoVAADD_VV_MF8 killed [[PseudoVAADD_VV_MF8_]], [[COPY1]], 4, $noreg, 3, implicit $vl, implicit $vtype, implicit $vxrm ; CHECK-NEXT: $v8 = COPY [[PseudoVAADD_VV_MF8_1]] - ; CHECK-NEXT: WriteVCSR [[SwapVCSRImm1]], implicit-def $vxrm, implicit-def $vxsat ; CHECK-NEXT: PseudoRET implicit $v8 %3:gprnox0 = COPY $x10 %2:vr = COPY $v10 @@ -74,9 +71,8 @@ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vr = COPY $v9 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gprnox0 = COPY $x10 ; CHECK-NEXT: dead $x0 = PseudoVSETVLI [[COPY2]], 69, implicit-def $vl, implicit-def $vtype - ; CHECK-NEXT: [[SwapVCSRImm:%[0-9]+]]:gpr = SwapVCSRImm 4, implicit-def $vxrm, implicit-def $vxsat, implicit $vxrm, implicit $vxsat + ; CHECK-NEXT: WriteVXRMImm 2, implicit-def $vxrm ; CHECK-NEXT: [[PseudoVAADD_VV_MF8_:%[0-9]+]]:vr = PseudoVAADD_VV_MF8 [[COPY]], [[COPY1]], 4, $noreg, 3, implicit $vl, implicit $vtype, implicit $vxrm - ; CHECK-NEXT: WriteVCSR [[SwapVCSRImm]], implicit-def $vxrm, implicit-def $vxsat ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.1: ; CHECK-NEXT: $v8 = COPY [[PseudoVAADD_VV_MF8_]] diff --git a/llvm/test/CodeGen/RISCV/rvv/vaadd-rm-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vaadd-rm-rv32.ll --- a/llvm/test/CodeGen/RISCV/rvv/vaadd-rm-rv32.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vaadd-rm-rv32.ll @@ -12,9 +12,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv1i8_nxv1i8_nxv1i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v9 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv1i8.nxv1i8( @@ -31,9 +30,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv1i8_nxv1i8_nxv1i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv1i8.nxv1i8( @@ -59,9 +57,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv1i8_nxv1i8_nxv1i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv1i8.nxv1i8( @@ -86,9 +83,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv2i8_nxv2i8_nxv2i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v9 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv2i8.nxv2i8( @@ -105,9 +101,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv2i8_nxv2i8_nxv2i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv2i8.nxv2i8( @@ -133,9 +128,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv2i8_nxv2i8_nxv2i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv2i8.nxv2i8( @@ -160,9 +154,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv4i8_nxv4i8_nxv4i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v9 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv4i8.nxv4i8( @@ -179,9 +172,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv4i8_nxv4i8_nxv4i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv4i8.nxv4i8( @@ -207,9 +199,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv4i8_nxv4i8_nxv4i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv4i8.nxv4i8( @@ -234,9 +225,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv8i8_nxv8i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v9 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv8i8.nxv8i8( @@ -253,9 +243,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv8i8_nxv8i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m1, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv8i8.nxv8i8( @@ -281,9 +270,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv8i8_nxv8i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv8i8.nxv8i8( @@ -308,9 +296,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv16i8_nxv16i8_nxv16i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv16i8.nxv16i8( @@ -327,9 +314,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv16i8_nxv16i8_nxv16i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v10, v12 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv16i8.nxv16i8( @@ -355,9 +341,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv16i8_nxv16i8_nxv16i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v10, v12, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv16i8.nxv16i8( @@ -382,9 +367,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv32i8_nxv32i8_nxv32i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v12 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv32i8.nxv32i8( @@ -401,9 +385,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv32i8_nxv32i8_nxv32i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v12, v16 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv32i8.nxv32i8( @@ -429,9 +412,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv32i8_nxv32i8_nxv32i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v12, v16, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv32i8.nxv32i8( @@ -456,9 +438,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv64i8_nxv64i8_nxv64i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v16 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv64i8.nxv64i8( @@ -476,9 +457,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vl8r.v v24, (a0) ; CHECK-NEXT: vsetvli zero, a1, e8, m8, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v16, v24 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv64i8.nxv64i8( @@ -505,9 +485,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vl8r.v v24, (a0) ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v16, v24, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv64i8.nxv64i8( @@ -532,9 +511,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv1i16_nxv1i16_nxv1i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v9 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv1i16.nxv1i16( @@ -551,9 +529,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv1i16_nxv1i16_nxv1i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv1i16.nxv1i16( @@ -579,9 +556,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv1i16_nxv1i16_nxv1i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv1i16.nxv1i16( @@ -606,9 +582,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv2i16_nxv2i16_nxv2i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v9 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv2i16.nxv2i16( @@ -625,9 +600,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv2i16_nxv2i16_nxv2i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv2i16.nxv2i16( @@ -653,9 +627,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv2i16_nxv2i16_nxv2i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv2i16.nxv2i16( @@ -680,9 +653,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv4i16_nxv4i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v9 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv4i16.nxv4i16( @@ -699,9 +671,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv4i16_nxv4i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m1, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv4i16.nxv4i16( @@ -727,9 +698,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv4i16_nxv4i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv4i16.nxv4i16( @@ -754,9 +724,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv8i16_nxv8i16_nxv8i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv8i16.nxv8i16( @@ -773,9 +742,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv8i16_nxv8i16_nxv8i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v10, v12 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv8i16.nxv8i16( @@ -801,9 +769,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv8i16_nxv8i16_nxv8i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v10, v12, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv8i16.nxv8i16( @@ -828,9 +795,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv16i16_nxv16i16_nxv16i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v12 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv16i16.nxv16i16( @@ -847,9 +813,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv16i16_nxv16i16_nxv16i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v12, v16 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv16i16.nxv16i16( @@ -875,9 +840,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv16i16_nxv16i16_nxv16i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v12, v16, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv16i16.nxv16i16( @@ -902,9 +866,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv32i16_nxv32i16_nxv32i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v16 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv32i16.nxv32i16( @@ -922,9 +885,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vl8re16.v v24, (a0) ; CHECK-NEXT: vsetvli zero, a1, e16, m8, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v16, v24 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv32i16.nxv32i16( @@ -951,9 +913,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vl8re16.v v24, (a0) ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v16, v24, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv32i16.nxv32i16( @@ -978,9 +939,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv1i32_nxv1i32_nxv1i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v9 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv1i32.nxv1i32( @@ -997,9 +957,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv1i32_nxv1i32_nxv1i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv1i32.nxv1i32( @@ -1025,9 +984,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv1i32_nxv1i32_nxv1i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv1i32.nxv1i32( @@ -1052,9 +1010,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv2i32_nxv2i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v9 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv2i32.nxv2i32( @@ -1071,9 +1028,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv2i32_nxv2i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv2i32.nxv2i32( @@ -1099,9 +1055,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv2i32_nxv2i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv2i32.nxv2i32( @@ -1126,9 +1081,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv4i32_nxv4i32_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv4i32.nxv4i32( @@ -1145,9 +1099,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv4i32_nxv4i32_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v10, v12 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv4i32.nxv4i32( @@ -1173,9 +1126,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv4i32_nxv4i32_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v10, v12, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv4i32.nxv4i32( @@ -1200,9 +1152,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv8i32_nxv8i32_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v12 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv8i32.nxv8i32( @@ -1219,9 +1170,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv8i32_nxv8i32_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v12, v16 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv8i32.nxv8i32( @@ -1247,9 +1197,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv8i32_nxv8i32_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v12, v16, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv8i32.nxv8i32( @@ -1274,9 +1223,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv16i32_nxv16i32_nxv16i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v16 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv16i32.nxv16i32( @@ -1294,9 +1242,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vl8re32.v v24, (a0) ; CHECK-NEXT: vsetvli zero, a1, e32, m8, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v16, v24 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv16i32.nxv16i32( @@ -1323,9 +1270,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vl8re32.v v24, (a0) ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v16, v24, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv16i32.nxv16i32( @@ -1350,9 +1296,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv1i64_nxv1i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v9 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv1i64.nxv1i64( @@ -1369,9 +1314,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv1i64_nxv1i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv1i64.nxv1i64( @@ -1397,9 +1341,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv1i64_nxv1i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv1i64.nxv1i64( @@ -1424,9 +1367,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv2i64_nxv2i64_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv2i64.nxv2i64( @@ -1443,9 +1385,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv2i64_nxv2i64_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v10, v12 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv2i64.nxv2i64( @@ -1471,9 +1412,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv2i64_nxv2i64_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v10, v12, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv2i64.nxv2i64( @@ -1498,9 +1438,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv4i64_nxv4i64_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v12 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv4i64.nxv4i64( @@ -1517,9 +1456,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv4i64_nxv4i64_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v12, v16 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv4i64.nxv4i64( @@ -1545,9 +1483,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv4i64_nxv4i64_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v12, v16, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv4i64.nxv4i64( @@ -1572,9 +1509,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv8i64_nxv8i64_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v16 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv8i64.nxv8i64( @@ -1592,9 +1528,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vl8re64.v v24, (a0) ; CHECK-NEXT: vsetvli zero, a1, e64, m8, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v16, v24 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv8i64.nxv8i64( @@ -1621,9 +1556,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vl8re64.v v24, (a0) ; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v16, v24, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv8i64.nxv8i64( @@ -1648,9 +1582,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv1i8_nxv1i8_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv1i8.i8( @@ -1676,9 +1609,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv1i8_nxv1i8_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v9, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv1i8.i8( @@ -1703,9 +1635,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv2i8_nxv2i8_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv2i8.i8( @@ -1731,9 +1662,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv2i8_nxv2i8_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v9, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv2i8.i8( @@ -1758,9 +1688,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv4i8_nxv4i8_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv4i8.i8( @@ -1786,9 +1715,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv4i8_nxv4i8_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v9, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv4i8.i8( @@ -1813,9 +1741,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv8i8_nxv8i8_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv8i8.i8( @@ -1841,9 +1768,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv8i8_nxv8i8_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v9, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv8i8.i8( @@ -1868,9 +1794,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv16i8_nxv16i8_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv16i8.i8( @@ -1896,9 +1821,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv16i8_nxv16i8_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v10, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv16i8.i8( @@ -1923,9 +1847,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv32i8_nxv32i8_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv32i8.i8( @@ -1951,9 +1874,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv32i8_nxv32i8_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v12, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv32i8.i8( @@ -1978,9 +1900,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv64i8_nxv64i8_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv64i8.i8( @@ -2006,9 +1927,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv64i8_nxv64i8_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v16, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv64i8.i8( @@ -2033,9 +1953,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv1i16_nxv1i16_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv1i16.i16( @@ -2061,9 +1980,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv1i16_nxv1i16_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v9, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv1i16.i16( @@ -2088,9 +2006,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv2i16_nxv2i16_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv2i16.i16( @@ -2116,9 +2033,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv2i16_nxv2i16_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v9, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv2i16.i16( @@ -2143,9 +2059,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv4i16_nxv4i16_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv4i16.i16( @@ -2171,9 +2086,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv4i16_nxv4i16_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v9, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv4i16.i16( @@ -2198,9 +2112,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv8i16_nxv8i16_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv8i16.i16( @@ -2226,9 +2139,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv8i16_nxv8i16_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v10, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv8i16.i16( @@ -2253,9 +2165,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv16i16_nxv16i16_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv16i16.i16( @@ -2281,9 +2192,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv16i16_nxv16i16_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v12, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv16i16.i16( @@ -2308,9 +2218,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv32i16_nxv32i16_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv32i16.i16( @@ -2336,9 +2245,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv32i16_nxv32i16_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v16, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv32i16.i16( @@ -2363,9 +2271,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv1i32_nxv1i32_i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv1i32.i32( @@ -2391,9 +2298,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv1i32_nxv1i32_i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v9, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv1i32.i32( @@ -2418,9 +2324,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv2i32_nxv2i32_i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv2i32.i32( @@ -2446,9 +2351,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv2i32_nxv2i32_i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v9, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv2i32.i32( @@ -2473,9 +2377,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv4i32_nxv4i32_i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv4i32.i32( @@ -2501,9 +2404,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv4i32_nxv4i32_i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v10, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv4i32.i32( @@ -2528,9 +2430,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv8i32_nxv8i32_i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv8i32.i32( @@ -2556,9 +2457,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv8i32_nxv8i32_i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v12, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv8i32.i32( @@ -2583,9 +2483,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv16i32_nxv16i32_i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv16i32.i32( @@ -2611,9 +2510,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv16i32_nxv16i32_i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v16, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv16i32.i32( @@ -2643,9 +2541,8 @@ ; CHECK-NEXT: vsetvli zero, a2, e64, m1, ta, mu ; CHECK-NEXT: addi a0, sp, 8 ; CHECK-NEXT: vlse64.v v9, (a0), zero -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v9 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: addi sp, sp, 16 ; CHECK-NEXT: ret entry: @@ -2677,9 +2574,8 @@ ; CHECK-NEXT: vsetvli zero, a2, e64, m1, ta, mu ; CHECK-NEXT: addi a0, sp, 8 ; CHECK-NEXT: vlse64.v v10, (a0), zero -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: addi sp, sp, 16 ; CHECK-NEXT: ret entry: @@ -2710,9 +2606,8 @@ ; CHECK-NEXT: vsetvli zero, a2, e64, m2, ta, mu ; CHECK-NEXT: addi a0, sp, 8 ; CHECK-NEXT: vlse64.v v10, (a0), zero -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: addi sp, sp, 16 ; CHECK-NEXT: ret entry: @@ -2744,9 +2639,8 @@ ; CHECK-NEXT: vsetvli zero, a2, e64, m2, ta, mu ; CHECK-NEXT: addi a0, sp, 8 ; CHECK-NEXT: vlse64.v v12, (a0), zero -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v10, v12, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: addi sp, sp, 16 ; CHECK-NEXT: ret entry: @@ -2777,9 +2671,8 @@ ; CHECK-NEXT: vsetvli zero, a2, e64, m4, ta, mu ; CHECK-NEXT: addi a0, sp, 8 ; CHECK-NEXT: vlse64.v v12, (a0), zero -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v12 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: addi sp, sp, 16 ; CHECK-NEXT: ret entry: @@ -2811,9 +2704,8 @@ ; CHECK-NEXT: vsetvli zero, a2, e64, m4, ta, mu ; CHECK-NEXT: addi a0, sp, 8 ; CHECK-NEXT: vlse64.v v16, (a0), zero -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v12, v16, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: addi sp, sp, 16 ; CHECK-NEXT: ret entry: @@ -2844,9 +2736,8 @@ ; CHECK-NEXT: vsetvli zero, a2, e64, m8, ta, mu ; CHECK-NEXT: addi a0, sp, 8 ; CHECK-NEXT: vlse64.v v16, (a0), zero -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v16 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: addi sp, sp, 16 ; CHECK-NEXT: ret entry: @@ -2878,9 +2769,8 @@ ; CHECK-NEXT: vsetvli zero, a2, e64, m8, ta, mu ; CHECK-NEXT: addi a0, sp, 8 ; CHECK-NEXT: vlse64.v v24, (a0), zero -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v16, v24, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: addi sp, sp, 16 ; CHECK-NEXT: ret entry: diff --git a/llvm/test/CodeGen/RISCV/rvv/vaadd-rm-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vaadd-rm-rv64.ll --- a/llvm/test/CodeGen/RISCV/rvv/vaadd-rm-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vaadd-rm-rv64.ll @@ -12,9 +12,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv1i8_nxv1i8_nxv1i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v9 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv1i8.nxv1i8( @@ -31,9 +30,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv1i8_nxv1i8_nxv1i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv1i8.nxv1i8( @@ -59,9 +57,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv1i8_nxv1i8_nxv1i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv1i8.nxv1i8( @@ -86,9 +83,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv2i8_nxv2i8_nxv2i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v9 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv2i8.nxv2i8( @@ -105,9 +101,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv2i8_nxv2i8_nxv2i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv2i8.nxv2i8( @@ -133,9 +128,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv2i8_nxv2i8_nxv2i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv2i8.nxv2i8( @@ -160,9 +154,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv4i8_nxv4i8_nxv4i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v9 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv4i8.nxv4i8( @@ -179,9 +172,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv4i8_nxv4i8_nxv4i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv4i8.nxv4i8( @@ -207,9 +199,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv4i8_nxv4i8_nxv4i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv4i8.nxv4i8( @@ -234,9 +225,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv8i8_nxv8i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v9 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv8i8.nxv8i8( @@ -253,9 +243,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv8i8_nxv8i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m1, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv8i8.nxv8i8( @@ -281,9 +270,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv8i8_nxv8i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv8i8.nxv8i8( @@ -308,9 +296,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv16i8_nxv16i8_nxv16i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv16i8.nxv16i8( @@ -327,9 +314,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv16i8_nxv16i8_nxv16i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v10, v12 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv16i8.nxv16i8( @@ -355,9 +341,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv16i8_nxv16i8_nxv16i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v10, v12, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv16i8.nxv16i8( @@ -382,9 +367,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv32i8_nxv32i8_nxv32i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v12 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv32i8.nxv32i8( @@ -401,9 +385,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv32i8_nxv32i8_nxv32i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v12, v16 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv32i8.nxv32i8( @@ -429,9 +412,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv32i8_nxv32i8_nxv32i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v12, v16, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv32i8.nxv32i8( @@ -456,9 +438,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv64i8_nxv64i8_nxv64i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v16 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv64i8.nxv64i8( @@ -476,9 +457,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vl8r.v v24, (a0) ; CHECK-NEXT: vsetvli zero, a1, e8, m8, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v16, v24 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv64i8.nxv64i8( @@ -505,9 +485,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vl8r.v v24, (a0) ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v16, v24, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv64i8.nxv64i8( @@ -532,9 +511,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv1i16_nxv1i16_nxv1i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v9 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv1i16.nxv1i16( @@ -551,9 +529,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv1i16_nxv1i16_nxv1i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv1i16.nxv1i16( @@ -579,9 +556,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv1i16_nxv1i16_nxv1i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv1i16.nxv1i16( @@ -606,9 +582,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv2i16_nxv2i16_nxv2i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v9 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv2i16.nxv2i16( @@ -625,9 +600,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv2i16_nxv2i16_nxv2i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv2i16.nxv2i16( @@ -653,9 +627,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv2i16_nxv2i16_nxv2i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv2i16.nxv2i16( @@ -680,9 +653,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv4i16_nxv4i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v9 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv4i16.nxv4i16( @@ -699,9 +671,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv4i16_nxv4i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m1, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv4i16.nxv4i16( @@ -727,9 +698,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv4i16_nxv4i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv4i16.nxv4i16( @@ -754,9 +724,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv8i16_nxv8i16_nxv8i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv8i16.nxv8i16( @@ -773,9 +742,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv8i16_nxv8i16_nxv8i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v10, v12 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv8i16.nxv8i16( @@ -801,9 +769,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv8i16_nxv8i16_nxv8i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v10, v12, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv8i16.nxv8i16( @@ -828,9 +795,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv16i16_nxv16i16_nxv16i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v12 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv16i16.nxv16i16( @@ -847,9 +813,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv16i16_nxv16i16_nxv16i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v12, v16 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv16i16.nxv16i16( @@ -875,9 +840,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv16i16_nxv16i16_nxv16i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v12, v16, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv16i16.nxv16i16( @@ -902,9 +866,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv32i16_nxv32i16_nxv32i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v16 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv32i16.nxv32i16( @@ -922,9 +885,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vl8re16.v v24, (a0) ; CHECK-NEXT: vsetvli zero, a1, e16, m8, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v16, v24 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv32i16.nxv32i16( @@ -951,9 +913,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vl8re16.v v24, (a0) ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v16, v24, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv32i16.nxv32i16( @@ -978,9 +939,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv1i32_nxv1i32_nxv1i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v9 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv1i32.nxv1i32( @@ -997,9 +957,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv1i32_nxv1i32_nxv1i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv1i32.nxv1i32( @@ -1025,9 +984,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv1i32_nxv1i32_nxv1i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv1i32.nxv1i32( @@ -1052,9 +1010,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv2i32_nxv2i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v9 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv2i32.nxv2i32( @@ -1071,9 +1028,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv2i32_nxv2i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv2i32.nxv2i32( @@ -1099,9 +1055,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv2i32_nxv2i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv2i32.nxv2i32( @@ -1126,9 +1081,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv4i32_nxv4i32_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv4i32.nxv4i32( @@ -1145,9 +1099,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv4i32_nxv4i32_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v10, v12 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv4i32.nxv4i32( @@ -1173,9 +1126,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv4i32_nxv4i32_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v10, v12, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv4i32.nxv4i32( @@ -1200,9 +1152,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv8i32_nxv8i32_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v12 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv8i32.nxv8i32( @@ -1219,9 +1170,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv8i32_nxv8i32_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v12, v16 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv8i32.nxv8i32( @@ -1247,9 +1197,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv8i32_nxv8i32_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v12, v16, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv8i32.nxv8i32( @@ -1274,9 +1223,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv16i32_nxv16i32_nxv16i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v16 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv16i32.nxv16i32( @@ -1294,9 +1242,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vl8re32.v v24, (a0) ; CHECK-NEXT: vsetvli zero, a1, e32, m8, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v16, v24 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv16i32.nxv16i32( @@ -1323,9 +1270,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vl8re32.v v24, (a0) ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v16, v24, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv16i32.nxv16i32( @@ -1350,9 +1296,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv1i64_nxv1i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v9 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv1i64.nxv1i64( @@ -1369,9 +1314,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv1i64_nxv1i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv1i64.nxv1i64( @@ -1397,9 +1341,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv1i64_nxv1i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v9, v10, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv1i64.nxv1i64( @@ -1424,9 +1367,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv2i64_nxv2i64_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v10 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv2i64.nxv2i64( @@ -1443,9 +1385,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv2i64_nxv2i64_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v10, v12 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv2i64.nxv2i64( @@ -1471,9 +1412,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv2i64_nxv2i64_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v10, v12, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv2i64.nxv2i64( @@ -1498,9 +1438,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv4i64_nxv4i64_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v12 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv4i64.nxv4i64( @@ -1517,9 +1456,8 @@ ; CHECK-LABEL: intrinsic_vaadd_tu_vv_nxv4i64_nxv4i64_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v12, v16 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv4i64.nxv4i64( @@ -1545,9 +1483,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vv_nxv4i64_nxv4i64_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v12, v16, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv4i64.nxv4i64( @@ -1572,9 +1509,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vv_nxv8i64_nxv8i64_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v8, v16 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv8i64.nxv8i64( @@ -1592,9 +1528,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vl8re64.v v24, (a0) ; CHECK-NEXT: vsetvli zero, a1, e64, m8, tu, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v16, v24 -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv8i64.nxv8i64( @@ -1621,9 +1556,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vl8re64.v v24, (a0) ; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, mu -; CHECK-NEXT: csrrwi a0, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vv v8, v16, v24, v0.t -; CHECK-NEXT: csrw vcsr, a0 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv8i64.nxv8i64( @@ -1648,9 +1582,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv1i8_nxv1i8_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv1i8.i8( @@ -1676,9 +1609,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv1i8_nxv1i8_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v9, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv1i8.i8( @@ -1703,9 +1635,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv2i8_nxv2i8_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv2i8.i8( @@ -1731,9 +1662,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv2i8_nxv2i8_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v9, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv2i8.i8( @@ -1758,9 +1688,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv4i8_nxv4i8_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv4i8.i8( @@ -1786,9 +1715,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv4i8_nxv4i8_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v9, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv4i8.i8( @@ -1813,9 +1741,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv8i8_nxv8i8_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv8i8.i8( @@ -1841,9 +1768,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv8i8_nxv8i8_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v9, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv8i8.i8( @@ -1868,9 +1794,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv16i8_nxv16i8_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv16i8.i8( @@ -1896,9 +1821,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv16i8_nxv16i8_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v10, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv16i8.i8( @@ -1923,9 +1847,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv32i8_nxv32i8_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv32i8.i8( @@ -1951,9 +1874,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv32i8_nxv32i8_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v12, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv32i8.i8( @@ -1978,9 +1900,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv64i8_nxv64i8_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv64i8.i8( @@ -2006,9 +1927,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv64i8_nxv64i8_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v16, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv64i8.i8( @@ -2033,9 +1953,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv1i16_nxv1i16_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv1i16.i16( @@ -2061,9 +1980,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv1i16_nxv1i16_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v9, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv1i16.i16( @@ -2088,9 +2006,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv2i16_nxv2i16_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv2i16.i16( @@ -2116,9 +2033,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv2i16_nxv2i16_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v9, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv2i16.i16( @@ -2143,9 +2059,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv4i16_nxv4i16_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv4i16.i16( @@ -2171,9 +2086,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv4i16_nxv4i16_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v9, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv4i16.i16( @@ -2198,9 +2112,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv8i16_nxv8i16_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv8i16.i16( @@ -2226,9 +2139,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv8i16_nxv8i16_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v10, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv8i16.i16( @@ -2253,9 +2165,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv16i16_nxv16i16_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv16i16.i16( @@ -2281,9 +2192,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv16i16_nxv16i16_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v12, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv16i16.i16( @@ -2308,9 +2218,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv32i16_nxv32i16_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv32i16.i16( @@ -2336,9 +2245,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv32i16_nxv32i16_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v16, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv32i16.i16( @@ -2363,9 +2271,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv1i32_nxv1i32_i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv1i32.i32( @@ -2391,9 +2298,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv1i32_nxv1i32_i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v9, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv1i32.i32( @@ -2418,9 +2324,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv2i32_nxv2i32_i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv2i32.i32( @@ -2446,9 +2351,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv2i32_nxv2i32_i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v9, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv2i32.i32( @@ -2473,9 +2377,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv4i32_nxv4i32_i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv4i32.i32( @@ -2501,9 +2404,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv4i32_nxv4i32_i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v10, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv4i32.i32( @@ -2528,9 +2430,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv8i32_nxv8i32_i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv8i32.i32( @@ -2556,9 +2457,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv8i32_nxv8i32_i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v12, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv8i32.i32( @@ -2583,9 +2483,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv16i32_nxv16i32_i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv16i32.i32( @@ -2611,9 +2510,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv16i32_nxv16i32_i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v16, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv16i32.i32( @@ -2638,9 +2536,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv1i64_nxv1i64_i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv1i64.i64( @@ -2666,9 +2563,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv1i64_nxv1i64_i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v9, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv1i64.i64( @@ -2693,9 +2589,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv2i64_nxv2i64_i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e64, m2, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv2i64.i64( @@ -2721,9 +2616,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv2i64_nxv2i64_i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e64, m2, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v10, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv2i64.i64( @@ -2748,9 +2642,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv4i64_nxv4i64_i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e64, m4, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv4i64.i64( @@ -2776,9 +2669,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv4i64_nxv4i64_i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e64, m4, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v12, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv4i64.i64( @@ -2803,9 +2695,8 @@ ; CHECK-LABEL: intrinsic_vaadd_vx_nxv8i64_nxv8i64_i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v8, a0 -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.nxv8i64.i64( @@ -2831,9 +2722,8 @@ ; CHECK-LABEL: intrinsic_vaadd_mask_vx_nxv8i64_nxv8i64_i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, mu -; CHECK-NEXT: csrrwi a1, vcsr, 0 +; CHECK-NEXT: csrwi vxrm, 0 ; CHECK-NEXT: vaadd.vx v8, v16, a0, v0.t -; CHECK-NEXT: csrw vcsr, a1 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vaadd.rm.mask.nxv8i64.i64(