[PATCH] D72441: [CodeGen] Store LiveRegs in SetVector

Sam Parker via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 9 02:58:20 PST 2020


samparker created this revision.
samparker added reviewers: MatzeB, ributzka, Eugene.Zelenko, kparzysz.
Herald added a subscriber: dexonsmith.
Herald added a project: LLVM.

liveins are dumped in many of the test cases and so storing them in a set can result in non-deterministic failures. I'm not sure whether this could cause of issues too... I'm also wondering how this hasn't come up before, have I missed something? SparseSet has now been replaced with a SetVector.


https://reviews.llvm.org/D72441

Files:
  llvm/include/llvm/CodeGen/LivePhysRegs.h
  llvm/test/CodeGen/ARM/constant-island-movwt.mir
  llvm/test/CodeGen/X86/tail-call-conditional.mir


Index: llvm/test/CodeGen/X86/tail-call-conditional.mir
===================================================================
--- llvm/test/CodeGen/X86/tail-call-conditional.mir
+++ llvm/test/CodeGen/X86/tail-call-conditional.mir
@@ -48,7 +48,7 @@
   ; CHECK-NEXT: $rdi = COPY $rsi
   ; CHECK-NEXT: $rsi = COPY $rax
   ; CHECK-NEXT: CMP64ri8 $rax, 9, implicit-def $eflags
-  ; CHECK-NEXT: TCRETURNdi64cc @f1, 0, 6, csr_64, implicit $rsp, implicit $eflags, implicit $ssp, implicit $rsp, implicit $rdi, implicit $rsi, implicit $rdi, implicit-def $rdi, implicit $hsi, implicit-def $hsi, implicit $sih, implicit-def $sih, implicit $sil, implicit-def $sil, implicit $si, implicit-def $si, implicit $esi, implicit-def $esi, implicit $rsi, implicit-def $rsi, implicit $hdi, implicit-def $hdi, implicit $dih, implicit-def $dih, implicit $dil, implicit-def $dil, implicit $di, implicit-def $di, implicit $edi, implicit-def $edi
+  ; CHECK-NEXT: TCRETURNdi64cc @f1, 0, 6, csr_64, implicit $rsp, implicit $eflags, implicit $ssp, implicit $rsp, implicit $rdi, implicit $rsi, implicit $rdi, implicit-def $rdi, implicit $edi, implicit-def $edi, implicit $di, implicit-def $di, implicit $dil, implicit-def $dil, implicit $dih, implicit-def $dih, implicit $hdi, implicit-def $hdi, implicit $rsi, implicit-def $rsi, implicit $esi, implicit-def $esi, implicit $si, implicit-def $si, implicit $sil, implicit-def $sil, implicit $sih, implicit-def $sih, implicit $hsi, implicit-def $hsi
 
   bb.1:
     successors: %bb.2, %bb.3
Index: llvm/test/CodeGen/ARM/constant-island-movwt.mir
===================================================================
--- llvm/test/CodeGen/ARM/constant-island-movwt.mir
+++ llvm/test/CodeGen/ARM/constant-island-movwt.mir
@@ -898,13 +898,13 @@
 # CHECK-NEXT:    CONSTPOOL_ENTRY 1, %const.0, 4
 # CHECK-NEXT: {{^  $}}
 # CHECK-NEXT:   bb.2.entry (align 2):
-# CHECK-NEXT:   liveins: $d13, $s27, $r10, $r9, $r8, $s26, $d12, $s25, $s24,
-# CHECK-SAME:            $d15, $s30, $s31, $d14, $s28, $s29, $lr, $r0, $d21,
-# CHECK-SAME:            $r3, $q10, $d20, $d17, $r2, $d25, $q11, $d22, $d23,
-# CHECK-SAME:            $r1, $q8, $d16, $s3, $q14, $d28, $d29, $d19, $s17,
-# CHECK-SAME:            $d8, $s16, $r6, $r7, $r4, $q12, $q9, $d18, $s0, $q15,
-# CHECK-SAME:            $d30, $d31, $r12, $s1, $d0, $d24, $s2, $d1, $q0, $s6,
-# CHECK-SAME:            $d3, $d2, $s4, $q1, $s7, $s5, $d9, $s18, $s19, $q4
+# CHECK-NEXT: liveins: $r10, $r9, $r8, $d15, $s30, $s31, $d14, $s28, $s29,
+# CHECK-SAME:          $d13, $s26, $s27, $d12, $s24, $s25, $lr, $r0, $q10,
+# CHECK-SAME:          $d20, $d21, $r2, $q11, $d22, $d23, $q8, $d16, $d17,
+# CHECK-SAME:          $q14, $d28, $d29, $r6, $q9, $d18, $d19, $r1, $r12,
+# CHECK-SAME:          $r7, $r3, $d0, $s0, $s1, $q0, $d1, $s2, $s3, $d31,
+# CHECK-SAME:          $q15, $d30, $d25, $q12, $d24, $d9, $s18, $s19, $q4,
+# CHECK-SAME:          $d8, $s16, $s17, $q1, $d2, $s4, $s5, $d3, $s6, $s7, $r4
 # CHECK-NEXT: {{^  $}}
 # CHECK-NEXT:     $r5 = t2MOVi16 target-flags(arm-lo16) @.str.84, 14, $noreg
 # CHECK-NEXT:     $r5 = t2MOVTi16 $r5, target-flags(arm-hi16) @.str.84, 14, $noreg
Index: llvm/include/llvm/CodeGen/LivePhysRegs.h
===================================================================
--- llvm/include/llvm/CodeGen/LivePhysRegs.h
+++ llvm/include/llvm/CodeGen/LivePhysRegs.h
@@ -29,7 +29,7 @@
 #ifndef LLVM_CODEGEN_LIVEPHYSREGS_H
 #define LLVM_CODEGEN_LIVEPHYSREGS_H
 
-#include "llvm/ADT/SparseSet.h"
+#include "llvm/ADT/SetVector.h"
 #include "llvm/CodeGen/MachineBasicBlock.h"
 #include "llvm/CodeGen/TargetRegisterInfo.h"
 #include "llvm/MC/MCRegisterInfo.h"
@@ -47,7 +47,7 @@
 /// when walking backward/forward through a basic block.
 class LivePhysRegs {
   const TargetRegisterInfo *TRI = nullptr;
-  using RegisterSet = SparseSet<MCPhysReg, identity<MCPhysReg>>;
+  using RegisterSet = SetVector<MCPhysReg>;
   RegisterSet LiveRegs;
 
 public:
@@ -55,9 +55,7 @@
   LivePhysRegs() = default;
 
   /// Constructs and initializes an empty set.
-  LivePhysRegs(const TargetRegisterInfo &TRI) : TRI(&TRI) {
-    LiveRegs.setUniverse(TRI.getNumRegs());
-  }
+  LivePhysRegs(const TargetRegisterInfo &TRI) : TRI(&TRI) { }
 
   LivePhysRegs(const LivePhysRegs&) = delete;
   LivePhysRegs &operator=(const LivePhysRegs&) = delete;
@@ -66,7 +64,6 @@
   void init(const TargetRegisterInfo &TRI) {
     this->TRI = &TRI;
     LiveRegs.clear();
-    LiveRegs.setUniverse(TRI.getNumRegs());
   }
 
   /// Clears the set.
@@ -90,7 +87,7 @@
     assert(TRI && "LivePhysRegs is not initialized.");
     assert(Reg <= TRI->getNumRegs() && "Expected a physical register.");
     for (MCRegAliasIterator R(Reg, TRI, true); R.isValid(); ++R)
-      LiveRegs.erase(*R);
+      LiveRegs.remove(*R);
   }
 
   /// Removes physical registers clobbered by the regmask operand \p MO.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D72441.237002.patch
Type: text/x-patch
Size: 4829 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200109/f06d4cca/attachment.bin>


More information about the llvm-commits mailing list