[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
Chris Lattner
lattner at cs.uiuc.edu
Fri Sep 9 17:20:34 PDT 2005
Changes in directory llvm/lib/CodeGen/SelectionDAG:
LegalizeDAG.cpp updated: 1.185 -> 1.186
---
Log message:
Allow targets to say they don't support truncstore i1 (which includes a mask
when storing to an 8-bit memory location), as most don't.
---
Diffs of the changes: (+15 -2)
LegalizeDAG.cpp | 17 +++++++++++++++--
1 files changed, 15 insertions(+), 2 deletions(-)
Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.185 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.186
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.185 Fri Sep 2 15:32:45 2005
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Fri Sep 9 19:20:18 2005
@@ -1043,10 +1043,23 @@
switch (getTypeAction(Node->getOperand(1).getValueType())) {
case Legal:
Tmp2 = LegalizeOp(Node->getOperand(1));
- if (Tmp1 != Node->getOperand(0) || Tmp2 != Node->getOperand(1) ||
- Tmp3 != Node->getOperand(2))
+
+ // The only promote case we handle is TRUNCSTORE:i1 X into
+ // -> TRUNCSTORE:i8 (and X, 1)
+ if (cast<VTSDNode>(Node->getOperand(4))->getVT() == MVT::i1 &&
+ TLI.getOperationAction(ISD::TRUNCSTORE, MVT::i1) ==
+ TargetLowering::Promote) {
+ // Promote the bool to a mask then store.
+ Tmp2 = DAG.getNode(ISD::AND, Tmp2.getValueType(), Tmp2,
+ DAG.getConstant(1, Tmp2.getValueType()));
+ Result = DAG.getNode(ISD::TRUNCSTORE, MVT::Other, Tmp1, Tmp2, Tmp3,
+ Node->getOperand(3), DAG.getValueType(MVT::i8));
+
+ } else if (Tmp1 != Node->getOperand(0) || Tmp2 != Node->getOperand(1) ||
+ Tmp3 != Node->getOperand(2)) {
Result = DAG.getNode(ISD::TRUNCSTORE, MVT::Other, Tmp1, Tmp2, Tmp3,
Node->getOperand(3), Node->getOperand(4));
+ }
break;
case Promote:
case Expand:
More information about the llvm-commits
mailing list