[llvm-commits] [llvm] r43072 - in /llvm/trunk: lib/CodeGen/SelectionDAG/LegalizeDAG.cpp test/CodeGen/X86/split-select.ll
Dan Gohman
djg at cray.com
Wed Oct 17 07:48:29 PDT 2007
Author: djg
Date: Wed Oct 17 09:48:28 2007
New Revision: 43072
URL: http://llvm.org/viewvc/llvm-project?rev=43072&view=rev
Log:
Add support for ISD::SELECT in SplitVectorOp.
Added:
llvm/trunk/test/CodeGen/X86/split-select.ll
Modified:
llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp?rev=43072&r1=43071&r2=43072&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Wed Oct 17 09:48:28 2007
@@ -6225,6 +6225,26 @@
}
break;
}
+ case ISD::SELECT: {
+ SDOperand Cond = Node->getOperand(0);
+
+ SDOperand LL, LH, RL, RH;
+ SplitVectorOp(Node->getOperand(1), LL, LH);
+ SplitVectorOp(Node->getOperand(2), RL, RH);
+
+ if (MVT::isVector(Cond.getValueType())) {
+ // Handle a vector merge.
+ SDOperand CL, CH;
+ SplitVectorOp(Cond, CL, CH);
+ Lo = DAG.getNode(Node->getOpcode(), NewVT, CL, LL, RL);
+ Hi = DAG.getNode(Node->getOpcode(), NewVT, CH, LH, RH);
+ } else {
+ // Handle a simple select with vector operands.
+ Lo = DAG.getNode(Node->getOpcode(), NewVT, Cond, LL, RL);
+ Hi = DAG.getNode(Node->getOpcode(), NewVT, Cond, LH, RH);
+ }
+ break;
+ }
case ISD::ADD:
case ISD::SUB:
case ISD::MUL:
Added: llvm/trunk/test/CodeGen/X86/split-select.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/split-select.ll?rev=43072&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/split-select.ll (added)
+++ llvm/trunk/test/CodeGen/X86/split-select.ll Wed Oct 17 09:48:28 2007
@@ -0,0 +1,7 @@
+; RUN: llvm-as < %s | llc -march=x86-64 | grep test | count 1
+
+define void @foo(i1 %c, <2 x float> %a, <2 x float> %b, <2 x float>* %p) {
+ %x = select i1 %c, <2 x float> %a, <2 x float> %b
+ store <2 x float> %x, <2 x float>* %p
+ ret void
+}
More information about the llvm-commits
mailing list