[llvm] b9c21d4 - RegAlloc: Clear isSSA

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 28 09:02:23 PDT 2020


Author: Matt Arsenault
Date: 2020-10-28T12:02:16-04:00
New Revision: b9c21d43bb0c9e1a6d51f624f4369c717516a459

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

LOG: RegAlloc: Clear isSSA

The MIR parser may infer SSA, so -run-pass=regallocgreedy would hit a
verifier error after multiple vreg defs are added.

Added: 
    llvm/test/CodeGen/AMDGPU/greedy-broken-ssa-verifier-error.mir

Modified: 
    llvm/lib/CodeGen/RegAllocBasic.cpp
    llvm/lib/CodeGen/RegAllocFast.cpp
    llvm/lib/CodeGen/RegAllocGreedy.cpp
    llvm/lib/CodeGen/RegAllocPBQP.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/CodeGen/RegAllocBasic.cpp b/llvm/lib/CodeGen/RegAllocBasic.cpp
index 58e1e364d285..1b748b84841b 100644
--- a/llvm/lib/CodeGen/RegAllocBasic.cpp
+++ b/llvm/lib/CodeGen/RegAllocBasic.cpp
@@ -111,6 +111,11 @@ class RABasic : public MachineFunctionPass,
         MachineFunctionProperties::Property::NoPHIs);
   }
 
+  MachineFunctionProperties getClearedProperties() const override {
+    return MachineFunctionProperties().set(
+      MachineFunctionProperties::Property::IsSSA);
+  }
+
   // Helper for spilling all live virtual registers currently unified under preg
   // that interfere with the most recently queried lvr.  Return true if spilling
   // was successful, and append any new spilled/split intervals to splitLVRs.

diff  --git a/llvm/lib/CodeGen/RegAllocFast.cpp b/llvm/lib/CodeGen/RegAllocFast.cpp
index 78a797da8459..13eb896518a6 100644
--- a/llvm/lib/CodeGen/RegAllocFast.cpp
+++ b/llvm/lib/CodeGen/RegAllocFast.cpp
@@ -203,6 +203,11 @@ namespace {
           MachineFunctionProperties::Property::NoVRegs);
     }
 
+    MachineFunctionProperties getClearedProperties() const override {
+      return MachineFunctionProperties().set(
+        MachineFunctionProperties::Property::IsSSA);
+    }
+
   private:
     bool runOnMachineFunction(MachineFunction &MF) override;
 

diff  --git a/llvm/lib/CodeGen/RegAllocGreedy.cpp b/llvm/lib/CodeGen/RegAllocGreedy.cpp
index 6f4905fe286f..ecb9a5a2c53a 100644
--- a/llvm/lib/CodeGen/RegAllocGreedy.cpp
+++ b/llvm/lib/CodeGen/RegAllocGreedy.cpp
@@ -430,6 +430,11 @@ class RAGreedy : public MachineFunctionPass,
         MachineFunctionProperties::Property::NoPHIs);
   }
 
+  MachineFunctionProperties getClearedProperties() const override {
+    return MachineFunctionProperties().set(
+      MachineFunctionProperties::Property::IsSSA);
+  }
+
   static char ID;
 
 private:

diff  --git a/llvm/lib/CodeGen/RegAllocPBQP.cpp b/llvm/lib/CodeGen/RegAllocPBQP.cpp
index 1ea587cb8f3c..4d610abc3dfe 100644
--- a/llvm/lib/CodeGen/RegAllocPBQP.cpp
+++ b/llvm/lib/CodeGen/RegAllocPBQP.cpp
@@ -140,6 +140,11 @@ class RegAllocPBQP : public MachineFunctionPass {
         MachineFunctionProperties::Property::NoPHIs);
   }
 
+  MachineFunctionProperties getClearedProperties() const override {
+    return MachineFunctionProperties().set(
+      MachineFunctionProperties::Property::IsSSA);
+  }
+
 private:
   using LI2NodeMap = std::map<const LiveInterval *, unsigned>;
   using Node2LIMap = std::vector<const LiveInterval *>;

diff  --git a/llvm/test/CodeGen/AMDGPU/greedy-broken-ssa-verifier-error.mir b/llvm/test/CodeGen/AMDGPU/greedy-broken-ssa-verifier-error.mir
new file mode 100644
index 000000000000..537bea7d2cfb
--- /dev/null
+++ b/llvm/test/CodeGen/AMDGPU/greedy-broken-ssa-verifier-error.mir
@@ -0,0 +1,40 @@
+# RUN: llc -march=amdgcn -mcpu=gfx1030 -verify-machineinstrs -run-pass=greedy -stress-regalloc=2 %s -o - | FileCheck -check-prefix=GCN %s
+
+# Make sure there's no verifier error after register allocation
+# introduces vreg defs when the MIR parser infers SSA.
+
+---
+name: ra_introduces_vreg_def
+tracksRegLiveness: true
+machineFunctionInfo:
+  scratchRSrcReg:  '$sgpr0_sgpr1_sgpr2_sgpr3'
+  frameOffsetReg:  '$sgpr33'
+  stackPtrOffsetReg: '$sgpr32'
+  argumentInfo:
+    privateSegmentBuffer: { reg: '$sgpr0_sgpr1_sgpr2_sgpr3' }
+body:             |
+  ; GCN-LABEL: name: ra_introduces_vreg_def
+  ; GCN: [[COPY_V0:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+  ; GCN: [[COPY_V0]]:vgpr_32 =
+  bb.0:
+    liveins: $vgpr0, $vgpr1
+    %0:vgpr_32 = COPY $vgpr0
+    %1:vgpr_32 = COPY $vgpr1
+    S_NOP 0, implicit %0
+    S_NOP 0, implicit %1
+
+  bb.1:
+    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
+    $vgpr1 = V_MOV_B32_e32 1, implicit $exec
+    S_NOP 0, implicit %0
+    S_NOP 0, implicit %1
+
+  bb.2:
+    S_CBRANCH_EXECNZ %bb.1, implicit $exec
+
+  bb.3:
+    $exec_lo = S_OR_B32 $exec_lo, undef $sgpr4, implicit-def $scc
+    $vgpr0 = COPY %0
+    S_SETPC_B64_return undef $sgpr30_sgpr31, implicit $vgpr0
+
+...


        


More information about the llvm-commits mailing list