mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-01 00:17:01 +00:00
fix sext breakage: now we correctly deal with functions that return
int vs uint git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25478 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -494,7 +494,7 @@ SDOperand IA64DAGToDAGISel::Select(SDOperand Op) {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
case ISD::LOAD:
|
case ISD::LOAD:
|
||||||
case ISD::EXTLOAD:
|
case ISD::EXTLOAD: // FIXME: load -1, not 1, for bools?
|
||||||
case ISD::ZEXTLOAD: {
|
case ISD::ZEXTLOAD: {
|
||||||
SDOperand Chain = Select(N->getOperand(0));
|
SDOperand Chain = Select(N->getOperand(0));
|
||||||
SDOperand Address = Select(N->getOperand(1));
|
SDOperand Address = Select(N->getOperand(1));
|
||||||
|
|||||||
@@ -475,6 +475,8 @@ IA64TargetLowering::LowerCallTo(SDOperand Chain,
|
|||||||
switch (RetTyVT) {
|
switch (RetTyVT) {
|
||||||
default: assert(0 && "Unknown value type to return!");
|
default: assert(0 && "Unknown value type to return!");
|
||||||
case MVT::i1: { // bools are just like other integers (returned in r8)
|
case MVT::i1: { // bools are just like other integers (returned in r8)
|
||||||
|
// we *could* fall through to the truncate below, but this saves a
|
||||||
|
// few redundant predicate ops
|
||||||
SDOperand boolInR8 = DAG.getCopyFromReg(Chain, IA64::r8, MVT::i64, InFlag);
|
SDOperand boolInR8 = DAG.getCopyFromReg(Chain, IA64::r8, MVT::i64, InFlag);
|
||||||
InFlag = boolInR8.getValue(2);
|
InFlag = boolInR8.getValue(2);
|
||||||
Chain = boolInR8.getValue(1);
|
Chain = boolInR8.getValue(1);
|
||||||
@@ -492,8 +494,10 @@ IA64TargetLowering::LowerCallTo(SDOperand Chain,
|
|||||||
Chain = RetVal.getValue(1);
|
Chain = RetVal.getValue(1);
|
||||||
|
|
||||||
// keep track of whether it is sign or zero extended (todo: bools?)
|
// keep track of whether it is sign or zero extended (todo: bools?)
|
||||||
|
/* XXX
|
||||||
RetVal = DAG.getNode(RetTy->isSigned() ? ISD::AssertSext :ISD::AssertZext,
|
RetVal = DAG.getNode(RetTy->isSigned() ? ISD::AssertSext :ISD::AssertZext,
|
||||||
MVT::i64, RetVal, DAG.getValueType(RetTyVT));
|
MVT::i64, RetVal, DAG.getValueType(RetTyVT));
|
||||||
|
*/
|
||||||
RetVal = DAG.getNode(ISD::TRUNCATE, RetTyVT, RetVal);
|
RetVal = DAG.getNode(ISD::TRUNCATE, RetTyVT, RetVal);
|
||||||
break;
|
break;
|
||||||
case MVT::i64:
|
case MVT::i64:
|
||||||
|
|||||||
Reference in New Issue
Block a user