[llvm-commits] CVS: llvm/lib/Target/PowerPC/PPC32ISelDAGToDAG.cpp

Chris Lattner lattner at cs.uiuc.edu
Tue Aug 30 14:28:31 PDT 2005



Changes in directory llvm/lib/Target/PowerPC:

PPC32ISelDAGToDAG.cpp updated: 1.61 -> 1.62
---
Log message:

Fix type mismatches when passing f32 values to calls


---
Diffs of the changes:  (+7 -2)

 PPC32ISelDAGToDAG.cpp |    9 +++++++--
 1 files changed, 7 insertions(+), 2 deletions(-)


Index: llvm/lib/Target/PowerPC/PPC32ISelDAGToDAG.cpp
diff -u llvm/lib/Target/PowerPC/PPC32ISelDAGToDAG.cpp:1.61 llvm/lib/Target/PowerPC/PPC32ISelDAGToDAG.cpp:1.62
--- llvm/lib/Target/PowerPC/PPC32ISelDAGToDAG.cpp:1.61	Tue Aug 30 13:37:48 2005
+++ llvm/lib/Target/PowerPC/PPC32ISelDAGToDAG.cpp	Tue Aug 30 16:28:19 2005
@@ -1520,8 +1520,13 @@
       }
 
       if (N->getOperand(i).getOpcode() != ISD::UNDEF) {
-        Chain = CurDAG->getCopyToReg(Chain, DestReg,
-                                     Select(N->getOperand(i)), InFlag);
+        SDOperand Val = Select(N->getOperand(i));
+        if (Val.getValueType() != RegTy) {
+          // Use a register-register copy to handle f32 values in f64 registers.
+          assert(Val.getValueType() == MVT::f32 && RegTy == MVT::f64);
+          Val = CurDAG->getTargetNode(PPC::FMR, MVT::f64, Val);
+        }
+        Chain = CurDAG->getCopyToReg(Chain, DestReg, Val, InFlag);
         InFlag = Chain.getValue(1);
         CallOperands.push_back(CurDAG->getRegister(DestReg, RegTy));
       }






More information about the llvm-commits mailing list