[llvm-commits] CVS: llvm/lib/Target/PowerPC/PPCISelLowering.h PPCInstrInfo.td
Chris Lattner
lattner at cs.uiuc.edu
Sun Mar 19 22:15:57 PST 2006
Changes in directory llvm/lib/Target/PowerPC:
PPCISelLowering.h updated: 1.28 -> 1.29
PPCInstrInfo.td updated: 1.195 -> 1.196
---
Log message:
Check in some intermediate code that adds a skeleton for matching vsplt*
instructions
---
Diffs of the changes: (+28 -4)
PPCISelLowering.h | 14 +++++++++++++-
PPCInstrInfo.td | 18 +++++++++++++++---
2 files changed, 28 insertions(+), 4 deletions(-)
Index: llvm/lib/Target/PowerPC/PPCISelLowering.h
diff -u llvm/lib/Target/PowerPC/PPCISelLowering.h:1.28 llvm/lib/Target/PowerPC/PPCISelLowering.h:1.29
--- llvm/lib/Target/PowerPC/PPCISelLowering.h:1.28 Sun Mar 19 19:53:53 2006
+++ llvm/lib/Target/PowerPC/PPCISelLowering.h Mon Mar 20 00:15:45 2006
@@ -82,7 +82,19 @@
/// Return with a flag operand, matched by 'blr'
RET_FLAG,
};
- }
+ }
+
+ /// Define some predicates that are used for node matching.
+ namespace PPC {
+ /// isSplatShuffleMask - Return true if the specified VECTOR_SHUFFLE operand
+ /// specifies a splat of a single element that is suitable for input to
+ /// VSPLTB/VSPLTH/VSPLTW.
+ bool isSplatShuffleMask(SDNode *N) { return false; } // FIXME:
+
+ /// getVSPLTImmediate - Return the appropriate VSPLT* immediate to splat the
+ /// specified isSplatShuffleMask VECTOR_SHUFFLE mask.
+ unsigned getVSPLTImmediate(SDNode *N) { return 0; } // FIXME:
+ }
class PPCTargetLowering : public TargetLowering {
int VarArgsFrameIndex; // FrameIndex for start of varargs area.
Index: llvm/lib/Target/PowerPC/PPCInstrInfo.td
diff -u llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.195 llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.196
--- llvm/lib/Target/PowerPC/PPCInstrInfo.td:1.195 Sun Mar 19 23:05:55 2006
+++ llvm/lib/Target/PowerPC/PPCInstrInfo.td Mon Mar 20 00:15:45 2006
@@ -123,6 +123,14 @@
return ((unsigned)N->getValue() & 0xFFFF0000U) == (unsigned)N->getValue();
}], HI16>;
+// VSPLT_get_imm xform function: convert vector_shuffle mask to VSPLT* imm.
+def VSPLT_get_imm : SDNodeXForm<build_vector, [{
+ return getI32Imm(PPC::getVSPLTImmediate(N));
+}]>;
+
+def VSPLT_shuffle_mask : PatLeaf<(build_vector), [{
+ return PPC::isSplatShuffleMask(N);
+}], VSPLT_get_imm>;
//===----------------------------------------------------------------------===//
// PowerPC Flag Definitions.
@@ -937,6 +945,7 @@
[]>, isPPC64;
}
+
let PPC970_Unit = 5 in { // VALU Operations.
// VA-Form instructions. 3-input AltiVec ops.
def VMADDFP : VAForm_1<46, (ops VRRC:$vD, VRRC:$vA, VRRC:$vB, VRRC:$vC),
@@ -1022,9 +1031,11 @@
def VSPLTH : VXForm_1<588, (ops VRRC:$vD, u5imm:$UIMM, VRRC:$vB),
"vsplth $vD, $vB, $UIMM", VecPerm,
[]>;
-def VSPLTW : VXForm_1<652, (ops VRRC:$vD, u5imm:$UIMM, VRRC:$vB),
- "vspltw $vD, $vB, $UIMM", VecPerm,
- []>;
+
+//def VSPLTW : VXForm_1<652, (ops VRRC:$vD, u5imm:$UIMM, VRRC:$vB),
+// "vspltw $vD, $vB, $UIMM", VecPerm,
+// [(set VRRC:$vD, (vector_shuffle (v4f32 VRRC:$vB), (undef),
+// VSPLT_shuffle_mask:$UIMM))]>;
// VX-Form Pseudo Instructions
@@ -1033,6 +1044,7 @@
[]>;
}
+
//===----------------------------------------------------------------------===//
// DWARF Pseudo Instructions
//
More information about the llvm-commits
mailing list