diff --git a/llvm/lib/Target/AMDGPU/SIRegisterInfo.td b/llvm/lib/Target/AMDGPU/SIRegisterInfo.td index ef9adde13348f..3556f6a95b521 100644 --- a/llvm/lib/Target/AMDGPU/SIRegisterInfo.td +++ b/llvm/lib/Target/AMDGPU/SIRegisterInfo.td @@ -88,15 +88,10 @@ class getSubRegs { // Generates list of sequential register tuple names. // E.g. RegSeq<3,2,2,"s">.ret -> [ "s[0:1]", "s[2:3]" ] -class RegSeqNames { - int next = !add(start, stride); - int end_reg = !add(start, size, -1); - list ret = - !if(!le(end_reg, last_reg), - !listconcat([prefix # "[" # start # ":" # end_reg # "]"], - RegSeqNames.ret), - []); +class RegSeqNames { + defvar numtuples = !div(!sub(!add(last_reg, stride, 1), size), stride); + defvar range = !range(0, !mul(numtuples, stride), stride); + list ret = !foreach(n, range, prefix # "[" # n # ":" # !add(n, size, -1) # "]"); } // Generates list of dags for register tuples.