aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Target/ARM/ARMISelDAGToDAG.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Target/ARM/ARMISelDAGToDAG.cpp')
-rw-r--r--lib/Target/ARM/ARMISelDAGToDAG.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/Target/ARM/ARMISelDAGToDAG.cpp b/lib/Target/ARM/ARMISelDAGToDAG.cpp
index 3ef15a1..3b394b0 100644
--- a/lib/Target/ARM/ARMISelDAGToDAG.cpp
+++ b/lib/Target/ARM/ARMISelDAGToDAG.cpp
@@ -1415,6 +1415,36 @@ SDNode *ARMDAGToDAGISel::Select(SDValue Op) {
N->getOperand(4), N->getOperand(5), Chain };
return CurDAG->getTargetNode(Opc, dl, MVT::Other, Ops, 8);
}
+ case ARMISD::VZIP16: {
+ EVT VT = N->getValueType(0);
+ return CurDAG->getTargetNode(ARM::VZIPd16, dl, VT, VT,
+ N->getOperand(0), N->getOperand(1));
+ }
+ case ARMISD::VZIP32: {
+ EVT VT = N->getValueType(0);
+ return CurDAG->getTargetNode(ARM::VZIPq32, dl, VT, VT,
+ N->getOperand(0), N->getOperand(1));
+ }
+ case ARMISD::VUZP16: {
+ EVT VT = N->getValueType(0);
+ return CurDAG->getTargetNode(ARM::VUZPd16, dl, VT, VT,
+ N->getOperand(0), N->getOperand(1));
+ }
+ case ARMISD::VUZP32: {
+ EVT VT = N->getValueType(0);
+ return CurDAG->getTargetNode(ARM::VUZPq32, dl, VT, VT,
+ N->getOperand(0), N->getOperand(1));
+ }
+ case ARMISD::VTRN16: {
+ EVT VT = N->getValueType(0);
+ return CurDAG->getTargetNode(ARM::VTRNd16, dl, VT, VT,
+ N->getOperand(0), N->getOperand(1));
+ }
+ case ARMISD::VTRN32: {
+ EVT VT = N->getValueType(0);
+ return CurDAG->getTargetNode(ARM::VTRNq32, dl, VT, VT,
+ N->getOperand(0), N->getOperand(1));
+ }
}
return SelectCode(Op);