aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDuraid Madina <duraid@octopus.com.au>2006-01-10 05:08:25 +0000
committerDuraid Madina <duraid@octopus.com.au>2006-01-10 05:08:25 +0000
commitc1d3d10249df69f2589a574726f79f754bed2b60 (patch)
tree97fcfd93979659e123311599ea3bc6d5189d82b0
parent365320e49a32d873d502315f17fa5b612bff7680 (diff)
support functions that return bool (this "should" work but doesn't,
*maybe* due to a legalizer bug.) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25171 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/IA64/IA64ISelLowering.cpp20
1 files changed, 10 insertions, 10 deletions
diff --git a/lib/Target/IA64/IA64ISelLowering.cpp b/lib/Target/IA64/IA64ISelLowering.cpp
index 1a1f40b97f..e3c245a0d6 100644
--- a/lib/Target/IA64/IA64ISelLowering.cpp
+++ b/lib/Target/IA64/IA64ISelLowering.cpp
@@ -452,18 +452,18 @@ IA64TargetLowering::LowerCallTo(SDOperand Chain,
SDOperand RetVal;
if (RetTyVT != MVT::isVoid) {
switch (RetTyVT) {
- default: assert(0 && "Unknown value type to return!");
- case MVT::i1:/* { // bools are just like other integers (returned in r8)
+ default: // assert(0 && "Unknown value type to return!");
+ case MVT::i1: { // bools are just like other integers (returned in r8)
SDOperand boolInR8 = DAG.getCopyFromReg(Chain, IA64::r8, MVT::i64, InFlag);
- RetVal = DAG.getTargetNode(IA64::CMPNE, MVT::i1, // FIXME: is this flagged correctly?
- DAG.getRegister(IA64::r0, MVT::i64), boolInR8, Chain, InFlag);
- Chain = RetVal.getValue(1);
- // Add a note to keep track of whether it is sign or zero extended - TODO: bools
- RetVal = DAG.getNode(RetTy->isSigned() ? ISD::AssertSext :ISD::AssertZext,
- MVT::i64, RetVal, DAG.getValueType(RetTyVT));
- RetVal = DAG.getNode(ISD::TRUNCATE, RetTyVT, RetVal);
+ InFlag = boolInR8.getValue(2);
+ Chain = boolInR8.getValue(1);
+ SDOperand zeroReg = DAG.getCopyFromReg(Chain, IA64::r0, MVT::i64, InFlag);
+ InFlag = zeroReg.getValue(2);
+ Chain = zeroReg.getValue(1);
+
+ RetVal = DAG.getNode(ISD::SETNE, MVT::i1, boolInR8, zeroReg);
break;
- }*/
+ }
case MVT::i8:
case MVT::i16:
case MVT::i32: