// RUN: llvm-tblgen -gen-callingconv -I %p/../../include -I %p/Common %s | FileCheck %s
// RUN: not llvm-tblgen -gen-callingconv -DERROR1 -I %p/../../include -I %p/Common %s 2>&1 | FileCheck --check-prefix=CHECK-ERROR1 %s
// RUN: not llvm-tblgen -gen-callingconv -DERROR2 -I %p/../../include -I %p/Common %s 2>&1 | FileCheck --check-prefix=CHECK-ERROR2 %s

include "reg-with-subregs-common.td"

def CC_ABI1 : CallingConv<[
  // Use singleton definitions directly.
  CCIfType<[i32, f32],
      CCAssignToReg<[R8, R9, R10, R11, R12, R13, R14, R15]>>,

  // Use tuple definitions indirectly as strings.
  CCIfType<[i64, f64],
      CCAssignToRegTuple<["R8_R9", "R10_R11", "R12_R13", "R14_R15"]>>,

  CCIfType<[i128],
      CCAssignToRegTuple<["R8_R9_R10_R11", "R12_R13_R14_R15"]>>,

  CCIfType<[v8i32],
      CCAssignToRegTuple<["R8_R9_R10_R11_R12_R13_R14_R15"]>>,
]>;

// CHECK: if (LocVT == MVT::i32 ||
// CHECK:      LocVT == MVT::f32) {
// CHECK:    static const MCPhysReg RegList1[] = {
// CHECK:      R8, R9, R10, R11, R12, R13, R14, R15
// CHECK:    };
// CHECK:    if (MCRegister Reg = State.AllocateReg(RegList1)) {
// CHECK:      State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
// CHECK:      return false;
// CHECK:    }
// CHECK:  }

// CHECK:  if (LocVT == MVT::i64 ||
// CHECK:      LocVT == MVT::f64) {
// CHECK:    static const MCPhysReg RegList2[] = {
// CHECK:      R8_R9, R10_R11, R12_R13, R14_R15
// CHECK:    };
// CHECK:    if (MCRegister Reg = State.AllocateReg(RegList2)) {
// CHECK:      State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
// CHECK:      return false;
// CHECK:    }
// CHECK:  }

// CHECK:  if (LocVT == MVT::i128) {
// CHECK:    static const MCPhysReg RegList3[] = {
// CHECK:      R8_R9_R10_R11, R12_R13_R14_R15
// CHECK:    };
// CHECK:    if (MCRegister Reg = State.AllocateReg(RegList3)) {
// CHECK:      State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
// CHECK:      return false;
// CHECK:    }
// CHECK:  }

// CHECK:  if (LocVT == MVT::v8i32) {
// CHECK:    if (MCRegister Reg = State.AllocateReg(R8_R9_R10_R11_R12_R13_R14_R15)) {
// CHECK:      State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));
// CHECK:      return false;
// CHECK:    }
// CHECK:  }

#ifdef ERROR1
def CC_ABI2 : CallingConv<[
  // Test that referencing an undefined tuple is diagnosed as an error.
  // CHECK-ERROR1: error: register not defined: "R89_R33"
  CCIfType<[i64, f64],
      CCAssignToRegTuple<["R89_R33", "R12_R13", "R14_R15"]>>,
]>;
#endif

#ifdef ERROR2
def CC_ABI3 : CallingConv<[
  // Currently an error: Use tuple definitions directly.
  // CHECK-ERROR2: error: Variable not defined: 'R8_R9_R10_R11'
  CCIfType<[i128],
      CCAssignToRegTuple<[R8_R9_R10_R11, R12_R13_R14_R15]>>,
]>;
#endif
