// RUN: llvm-tblgen -gen-asm-matcher -I %p/../../include %s | FileCheck %s

// Check that MatchRegisterName and MatchRegisterAltName are generated
// correctly when multiple registers are defined with the same name and
// AllowDuplicateRegisterNames is set.

include "llvm/Target/Target.td"

def ArchInstrInfo : InstrInfo;

def ArchAsmParser : AsmParser {
  let AllowDuplicateRegisterNames = 1;
  let ShouldEmitMatchRegisterAltName = 1;
}

def Arch : Target {
  let InstructionSet = ArchInstrInfo;
  let AssemblyParsers = [ArchAsmParser];
}

let Namespace = "Arch" in {
class ArchReg<string n, list <string> alt, list <RegAltNameIndex> altidx>
    : Register<n> {
  let AltNames = alt;
  let RegAltNameIndices = altidx;
}

def ABIRegAltName : RegAltNameIndex;

foreach i = 0-3 in {
  def R#i#_32 : ArchReg<"r"#i, ["x"#i], [ABIRegAltName]>;
  def R#i#_64 : ArchReg<"r"#i, ["x"#i], [ABIRegAltName]>;
}
} // Namespace = "Arch"

def GPR32 : RegisterClass<"Arch", [i32], 32, (add
    (sequence "R%u_32", 0, 3)
)>;

def GPR64 : RegisterClass<"Arch", [i64], 64, (add
    (sequence "R%u_64", 0, 3)
)>;

// CHECK: static unsigned MatchRegisterName(StringRef Name) {
// CHECK:   switch (Name.size()) {
// CHECK:   default: break;
// CHECK:   case 2:  // 8 strings to match.
// CHECK:     if (Name[0] != 'r')
// CHECK:       break;
// CHECK:     switch (Name[1]) {
// CHECK:     default: break;
// CHECK:     case '0':  // 2 strings to match.
// CHECK:       return 1;  // "r0"
// CHECK:     case '1':  // 2 strings to match.
// CHECK:       return 3;  // "r1"
// CHECK:     case '2':  // 2 strings to match.
// CHECK:       return 5;  // "r2"
// CHECK:     case '3':  // 2 strings to match.
// CHECK:       return 7;  // "r3"
// CHECK:     }
// CHECK:     break;
// CHECK:   }
// CHECK:   return 0;
// CHECK: }

// CHECK: static unsigned MatchRegisterAltName(StringRef Name) {
// CHECK:   switch (Name.size()) {
// CHECK:   default: break;
// CHECK:   case 2:  // 8 strings to match.
// CHECK:     if (Name[0] != 'x')
// CHECK:       break;
// CHECK:     switch (Name[1]) {
// CHECK:     default: break;
// CHECK:     case '0':  // 2 strings to match.
// CHECK:       return 1;  // "x0"
// CHECK:     case '1':  // 2 strings to match.
// CHECK:       return 3;  // "x1"
// CHECK:     case '2':  // 2 strings to match.
// CHECK:       return 5;  // "x2"
// CHECK:     case '3':  // 2 strings to match.
// CHECK:       return 7;  // "x3"
// CHECK:     }
// CHECK:     break;
// CHECK:   }
// CHECK:   return 0;
// CHECK: }
