default predicate operands

I'm trying to define a register-based predicate operand that will appear in the "ins" list of most MachineInstrs. It will be Initialized with a default value meaning "unconditional" in most cases but instantiated via the pattern in explicitly conditional instructions.

I tried this:

def myPred : OperandWithDefaultOps<
   i64, (ops (i64 zero_reg), (i32 0))> {
   let MIOperandInfo = (ops (i64 Scalar64:$creg), (i32 i32imm:$cc));

def myInst : Instruction {
  let InOperandList = (ins myPred:$p, Scalar32:$src1, Scalar32:$src2);
  let OutOperandList = (outs Scalar32:$dst);
  let Pattern = [(set i32:$dst, (add Scalar32:$src1, Scalar32:$src2))];

but tablegen faults with some kind of type mismatch.

llvm-tblgen: llvm/include/llvm/Support/Casting.h:237: typename llvm::cast_retty<X, Y*>::ret_type llvm::cast(Y*) [with X = llvm::DefInit; Y = llvm::Init; typename llvm::cast_retty<X, Y*>::ret_type = llvm::DefInit*]: Assertion `isa<X>(Val) && "cast<Ty>() argument of incompatible type!"' failed.

Am I doing something wrong or is this just a bug in tablegen?