[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
Chris Lattner
lattner at cs.uiuc.edu
Thu Sep 1 17:18:22 PDT 2005
Changes in directory llvm/lib/CodeGen/SelectionDAG:
LegalizeDAG.cpp updated: 1.181 -> 1.182
---
Log message:
legalize ANY_EXTEND appropriately
---
Diffs of the changes: (+26 -6)
LegalizeDAG.cpp | 32 ++++++++++++++++++++++++++------
1 files changed, 26 insertions(+), 6 deletions(-)
Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.181 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.182
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.181 Wed Aug 31 14:01:53 2005
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Thu Sep 1 19:18:10 2005
@@ -1088,7 +1088,7 @@
TLI.getTypeToPromoteTo(ISD::SELECT, Tmp2.getValueType());
unsigned ExtOp, TruncOp;
if (MVT::isInteger(Tmp2.getValueType())) {
- ExtOp = ISD::ZERO_EXTEND;
+ ExtOp = ISD::ANY_EXTEND;
TruncOp = ISD::TRUNCATE;
} else {
ExtOp = ISD::FP_EXTEND;
@@ -1866,6 +1866,7 @@
}
break;
+ case ISD::ANY_EXTEND:
case ISD::ZERO_EXTEND:
case ISD::SIGN_EXTEND:
case ISD::FP_EXTEND:
@@ -1881,17 +1882,19 @@
case Promote:
switch (Node->getOpcode()) {
+ case ISD::ANY_EXTEND:
+ Result = PromoteOp(Node->getOperand(0));
+ Result = DAG.getNode(ISD::ANY_EXTEND, Op.getValueType(), Result);
+ break;
case ISD::ZERO_EXTEND:
Result = PromoteOp(Node->getOperand(0));
- // NOTE: Any extend would work here...
- Result = DAG.getNode(ISD::ZERO_EXTEND, Op.getValueType(), Result);
+ Result = DAG.getNode(ISD::ANY_EXTEND, Op.getValueType(), Result);
Result = DAG.getZeroExtendInReg(Result,
Node->getOperand(0).getValueType());
break;
case ISD::SIGN_EXTEND:
Result = PromoteOp(Node->getOperand(0));
- // NOTE: Any extend would work here...
- Result = DAG.getNode(ISD::ZERO_EXTEND, Op.getValueType(), Result);
+ Result = DAG.getNode(ISD::ANY_EXTEND, Op.getValueType(), Result);
Result = DAG.getNode(ISD::SIGN_EXTEND_INREG, Result.getValueType(),
Result,
DAG.getValueType(Node->getOperand(0).getValueType()));
@@ -2051,6 +2054,7 @@
break;
case ISD::SIGN_EXTEND:
case ISD::ZERO_EXTEND:
+ case ISD::ANY_EXTEND:
switch (getTypeAction(Node->getOperand(0).getValueType())) {
case Expand: assert(0 && "BUG: Smaller reg should have been promoted!");
case Legal:
@@ -2065,7 +2069,7 @@
if (Node->getOpcode() == ISD::SIGN_EXTEND)
Result = DAG.getNode(ISD::SIGN_EXTEND_INREG, NVT, Result,
DAG.getValueType(Node->getOperand(0).getValueType()));
- else
+ else if (Node->getOpcode() == ISD::ZERO_EXTEND)
Result = DAG.getZeroExtendInReg(Result,
Node->getOperand(0).getValueType());
break;
@@ -3010,6 +3014,22 @@
Hi = LegalizeOp(Hi);
break;
}
+ case ISD::ANY_EXTEND: {
+ SDOperand In;
+ switch (getTypeAction(Node->getOperand(0).getValueType())) {
+ case Expand: assert(0 && "expand-expand not implemented yet!");
+ case Legal: In = LegalizeOp(Node->getOperand(0)); break;
+ case Promote:
+ In = PromoteOp(Node->getOperand(0));
+ break;
+ }
+
+ // The low part is any extension of the input (which degenerates to a copy).
+ Lo = DAG.getNode(ISD::ANY_EXTEND, NVT, In);
+ // The high part is undefined.
+ Hi = DAG.getNode(ISD::UNDEF, NVT);
+ break;
+ }
case ISD::SIGN_EXTEND: {
SDOperand In;
switch (getTypeAction(Node->getOperand(0).getValueType())) {
More information about the llvm-commits
mailing list