[llvm] c7c3f58 - [riscv] Use early return to reduce nesting for InsertVSETVLI [nfc]

Philip Reames via llvm-commits llvm-commits at lists.llvm.org
Fri May 6 13:19:03 PDT 2022


Author: Philip Reames
Date: 2022-05-06T13:10:05-07:00
New Revision: c7c3f5854460a85ca7305c8ee15acc08a1d6df30

URL: https://github.com/llvm/llvm-project/commit/c7c3f5854460a85ca7305c8ee15acc08a1d6df30
DIFF: https://github.com/llvm/llvm-project/commit/c7c3f5854460a85ca7305c8ee15acc08a1d6df30.diff

LOG: [riscv] Use early return to reduce nesting for InsertVSETVLI [nfc]

Added: 
    

Modified: 
    llvm/lib/Target/RISCV/RISCVInsertVSETVLI.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/RISCV/RISCVInsertVSETVLI.cpp b/llvm/lib/Target/RISCV/RISCVInsertVSETVLI.cpp
index 09dc2d7e16a4..5f2635855f10 100644
--- a/llvm/lib/Target/RISCV/RISCVInsertVSETVLI.cpp
+++ b/llvm/lib/Target/RISCV/RISCVInsertVSETVLI.cpp
@@ -1224,46 +1224,48 @@ bool RISCVInsertVSETVLI::runOnMachineFunction(MachineFunction &MF) {
     HaveVectorOp |= computeVLVTYPEChanges(MBB);
 
   // If we didn't find any instructions that need VSETVLI, we're done.
-  if (HaveVectorOp) {
-    // Phase 2 - determine the exit VL/VTYPE from each block. We add all
-    // blocks to the list here, but will also add any that need to be revisited
-    // during Phase 2 processing.
-    for (const MachineBasicBlock &MBB : MF) {
-      WorkList.push(&MBB);
-      BlockInfo[MBB.getNumber()].InQueue = true;
-    }
-    while (!WorkList.empty()) {
-      const MachineBasicBlock &MBB = *WorkList.front();
-      WorkList.pop();
-      computeIncomingVLVTYPE(MBB);
-    }
+  if (!HaveVectorOp) {
+    BlockInfo.clear();
+    return false;
+  }
 
-    // Phase 3 - add any vsetvli instructions needed in the block. Use the
-    // Phase 2 information to avoid adding vsetvlis before the first vector
-    // instruction in the block if the VL/VTYPE is satisfied by its
-    // predecessors.
-    for (MachineBasicBlock &MBB : MF)
-      emitVSETVLIs(MBB);
-
-    // Once we're fully done rewriting all the instructions, do a final pass
-    // through to check for VSETVLIs which write to an unused destination.
-    // For the non X0, X0 variant, we can replace the destination register
-    // with X0 to reduce register pressure.  This is really a generic
-    // optimization which can be applied to any dead def (TODO: generalize).
-    for (MachineBasicBlock &MBB : MF) {
-      for (MachineInstr &MI : MBB) {
-        if (MI.getOpcode() == RISCV::PseudoVSETVLI ||
-            MI.getOpcode() == RISCV::PseudoVSETIVLI) {
-          Register VRegDef = MI.getOperand(0).getReg();
-          if (VRegDef != RISCV::X0 && MRI->use_nodbg_empty(VRegDef))
-            MI.getOperand(0).setReg(RISCV::X0);
-        }
+  // Phase 2 - determine the exit VL/VTYPE from each block. We add all
+  // blocks to the list here, but will also add any that need to be revisited
+  // during Phase 2 processing.
+  for (const MachineBasicBlock &MBB : MF) {
+    WorkList.push(&MBB);
+    BlockInfo[MBB.getNumber()].InQueue = true;
+  }
+  while (!WorkList.empty()) {
+    const MachineBasicBlock &MBB = *WorkList.front();
+    WorkList.pop();
+    computeIncomingVLVTYPE(MBB);
+  }
+
+  // Phase 3 - add any vsetvli instructions needed in the block. Use the
+  // Phase 2 information to avoid adding vsetvlis before the first vector
+  // instruction in the block if the VL/VTYPE is satisfied by its
+  // predecessors.
+  for (MachineBasicBlock &MBB : MF)
+    emitVSETVLIs(MBB);
+
+  // Once we're fully done rewriting all the instructions, do a final pass
+  // through to check for VSETVLIs which write to an unused destination.
+  // For the non X0, X0 variant, we can replace the destination register
+  // with X0 to reduce register pressure.  This is really a generic
+  // optimization which can be applied to any dead def (TODO: generalize).
+  for (MachineBasicBlock &MBB : MF) {
+    for (MachineInstr &MI : MBB) {
+      if (MI.getOpcode() == RISCV::PseudoVSETVLI ||
+          MI.getOpcode() == RISCV::PseudoVSETIVLI) {
+        Register VRegDef = MI.getOperand(0).getReg();
+        if (VRegDef != RISCV::X0 && MRI->use_nodbg_empty(VRegDef))
+          MI.getOperand(0).setReg(RISCV::X0);
       }
     }
   }
 
   BlockInfo.clear();
-
   return HaveVectorOp;
 }
 


        


More information about the llvm-commits mailing list