summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2005-01-18 17:54:55 +0000
committerChris Lattner <sabre@nondot.org>2005-01-18 17:54:55 +0000
commit9f2c4a52005a116df0300941572b501789692534 (patch)
tree24a4427fdef015f0773a53603b913187011c95bd /llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
parent479c7118e486c6a60d2ff9aeec6f97754d4fa287 (diff)
downloadbcm5719-llvm-9f2c4a52005a116df0300941572b501789692534.tar.gz
bcm5719-llvm-9f2c4a52005a116df0300941572b501789692534.zip
Teach legalize to promote copy(from|to)reg, instead of making the isel pass
do it. This results in better code on X86 for floats (because if strict precision is not required, we can elide some more expensive double -> float conversions like the old isel did), and allows other targets to emit CopyFromRegs that are not legal for arguments. llvm-svn: 19668
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp')
-rw-r--r--llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp22
1 files changed, 1 insertions, 21 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
index 09b5f3c010b..a17caa1469a 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
@@ -292,19 +292,7 @@ public:
FuncInfo.ValueMap.find(V);
assert(VMI != FuncInfo.ValueMap.end() && "Value not in map!");
- MVT::ValueType RegVT = VT;
- if (TLI.getTypeAction(VT) == 1) // Must promote this value?
- RegVT = TLI.getTypeToTransformTo(VT);
-
- N = DAG.getCopyFromReg(VMI->second, RegVT, DAG.getEntryNode());
-
- if (RegVT != VT)
- if (MVT::isFloatingPoint(VT))
- N = DAG.getNode(ISD::FP_ROUND, VT, N);
- else
- N = DAG.getNode(ISD::TRUNCATE, VT, N);
-
- return N;
+ return N = DAG.getCopyFromReg(VMI->second, VT, DAG.getEntryNode());
}
const SDOperand &setValue(const Value *V, SDOperand NewN) {
@@ -843,14 +831,6 @@ CopyValueToVirtualRegister(SelectionDAGLowering &SDL, Value *V, unsigned Reg) {
assert((Op.getOpcode() != ISD::CopyFromReg ||
cast<RegSDNode>(Op)->getReg() != Reg) &&
"Copy from a reg to the same reg!");
- MVT::ValueType VT = Op.getValueType();
- if (TLI.getTypeAction(VT) == 1) { // Must promote this value?
- if (MVT::isFloatingPoint(VT))
- Op = DAG.getNode(ISD::FP_EXTEND, TLI.getTypeToTransformTo(VT), Op);
- else
- Op = DAG.getNode(ISD::ZERO_EXTEND, TLI.getTypeToTransformTo(VT), Op);
- }
-
return DAG.getCopyToReg(SDL.getRoot(), Op, Reg);
}
OpenPOWER on IntegriCloud