Why make the register list a dag for RegisterClass in target descriptor file?

The blow snippet in target.td shows the regList in RegisterClass is typed as dag. Why not make it a simple list, such as list?

class RegisterClass<string namespace,
list regTypes, int alignment, dag regList>


I don't know about the original reason, but these days we have a few
operators in use to make constructing those sets easier which would be
much harder to do for lists. E.g. "(sequence "R%u", 0, 12)", "(sub
GPR, PC)" from ARM.



Thanks Tim. Is there any document about these operators? Such how does each set represent a different RegClass?