brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.7 KiB · abc3402 Raw
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