Add an operator for vaba so it can be implemented using vabd.

llvm-svn: 121276
This commit is contained in:
Bob Wilson 2010-12-08 20:09:10 +00:00
parent fb72ca2129
commit 9cb69260e2
2 changed files with 10 additions and 3 deletions

View File

@ -752,6 +752,9 @@ static std::string GenOpString(OpKind op, const std::string &proto,
s += ");";
break;
}
case OpAba:
s += "__a + " + MangleName("vabd", typestr, ClassS) + "(__b, __c);";
break;
default:
throw "unknown OpKind!";
break;
@ -1077,13 +1080,15 @@ void NeonEmitter::run(raw_ostream &OS) {
std::vector<Record*> RV = Records.getAllDerivedDefinitions("Inst");
// Emit vmovl intrinsics first so they can be used by other intrinsics.
// Emit vmovl and vabd intrinsics first so they can be used by other
// intrinsics.
emitIntrinsic(OS, Records.getDef("VMOVL"));
emitIntrinsic(OS, Records.getDef("VABD"));
// Unique the return+pattern types, and assign them.
for (unsigned i = 0, e = RV.size(); i != e; ++i) {
Record *R = RV[i];
if (R->getName() != "VMOVL")
if (R->getName() != "VMOVL" && R->getName() != "VABD")
emitIntrinsic(OS, R);
}

View File

@ -69,7 +69,8 @@ enum OpKind {
OpRev16,
OpRev32,
OpRev64,
OpReinterpret
OpReinterpret,
OpAba
};
enum ClassKind {
@ -137,6 +138,7 @@ namespace llvm {
OpMap["OP_REV32"] = OpRev32;
OpMap["OP_REV64"] = OpRev64;
OpMap["OP_REINT"] = OpReinterpret;
OpMap["OP_ABA"] = OpAba;
Record *SI = R.getClass("SInst");
Record *II = R.getClass("IInst");