79 lines · plain
1// RUN: llvm-tblgen -gen-callingconv -I %p/../../include -I %p/Common %s | FileCheck %s2// RUN: not llvm-tblgen -gen-callingconv -DERROR1 -I %p/../../include -I %p/Common %s 2>&1 | FileCheck --check-prefix=CHECK-ERROR1 %s3// RUN: not llvm-tblgen -gen-callingconv -DERROR2 -I %p/../../include -I %p/Common %s 2>&1 | FileCheck --check-prefix=CHECK-ERROR2 %s4 5include "reg-with-subregs-common.td"6 7def CC_ABI1 : CallingConv<[8 // Use singleton definitions directly.9 CCIfType<[i32, f32],10 CCAssignToReg<[R8, R9, R10, R11, R12, R13, R14, R15]>>,11 12 // Use tuple definitions indirectly as strings.13 CCIfType<[i64, f64],14 CCAssignToRegTuple<["R8_R9", "R10_R11", "R12_R13", "R14_R15"]>>,15 16 CCIfType<[i128],17 CCAssignToRegTuple<["R8_R9_R10_R11", "R12_R13_R14_R15"]>>,18 19 CCIfType<[v8i32],20 CCAssignToRegTuple<["R8_R9_R10_R11_R12_R13_R14_R15"]>>,21]>;22 23// CHECK: if (LocVT == MVT::i32 ||24// CHECK: LocVT == MVT::f32) {25// CHECK: static const MCPhysReg RegList1[] = {26// CHECK: R8, R9, R10, R11, R12, R13, R14, R1527// CHECK: };28// CHECK: if (MCRegister Reg = State.AllocateReg(RegList1)) {29// CHECK: State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));30// CHECK: return false;31// CHECK: }32// CHECK: }33 34// CHECK: if (LocVT == MVT::i64 ||35// CHECK: LocVT == MVT::f64) {36// CHECK: static const MCPhysReg RegList2[] = {37// CHECK: R8_R9, R10_R11, R12_R13, R14_R1538// CHECK: };39// CHECK: if (MCRegister Reg = State.AllocateReg(RegList2)) {40// CHECK: State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));41// CHECK: return false;42// CHECK: }43// CHECK: }44 45// CHECK: if (LocVT == MVT::i128) {46// CHECK: static const MCPhysReg RegList3[] = {47// CHECK: R8_R9_R10_R11, R12_R13_R14_R1548// CHECK: };49// CHECK: if (MCRegister Reg = State.AllocateReg(RegList3)) {50// CHECK: State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));51// CHECK: return false;52// CHECK: }53// CHECK: }54 55// CHECK: if (LocVT == MVT::v8i32) {56// CHECK: if (MCRegister Reg = State.AllocateReg(R8_R9_R10_R11_R12_R13_R14_R15)) {57// CHECK: State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo));58// CHECK: return false;59// CHECK: }60// CHECK: }61 62#ifdef ERROR163def CC_ABI2 : CallingConv<[64 // Test that referencing an undefined tuple is diagnosed as an error.65 // CHECK-ERROR1: error: register not defined: "R89_R33"66 CCIfType<[i64, f64],67 CCAssignToRegTuple<["R89_R33", "R12_R13", "R14_R15"]>>,68]>;69#endif70 71#ifdef ERROR272def CC_ABI3 : CallingConv<[73 // Currently an error: Use tuple definitions directly.74 // CHECK-ERROR2: error: Variable not defined: 'R8_R9_R10_R11'75 CCIfType<[i128],76 CCAssignToRegTuple<[R8_R9_R10_R11, R12_R13_R14_R15]>>,77]>;78#endif79