[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