diff options
| author | Bob Wilson <bob.wilson@apple.com> | 2009-04-24 17:00:36 +0000 | 
|---|---|---|
| committer | Bob Wilson <bob.wilson@apple.com> | 2009-04-24 17:00:36 +0000 | 
| commit | f134b2d2122ddd1e4eceb32b7269c155ec33f119 (patch) | |
| tree | 5af22ce9ed6e01a9855c37d240e077e4b0813bcf /llvm/lib/Target | |
| parent | 33e834cc0a211f5ec6db926da7f93cce66929478 (diff) | |
| download | bcm5719-llvm-f134b2d2122ddd1e4eceb32b7269c155ec33f119.tar.gz bcm5719-llvm-f134b2d2122ddd1e4eceb32b7269c155ec33f119.zip | |
Fix up some problems with getCopyToReg and getCopyFromReg nodes being
chained and "flagged" together.  I also made a few changes to handle the
chain and flag values more consistently.  I found these problems by
inspection so I'm not aware of anything that breaks because of them
(thus no testcase).
llvm-svn: 69977
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/ARM/ARMISelLowering.cpp | 20 | 
1 files changed, 12 insertions, 8 deletions
| diff --git a/llvm/lib/Target/ARM/ARMISelLowering.cpp b/llvm/lib/Target/ARM/ARMISelLowering.cpp index e35b6672a31..a3b7a7d496b 100644 --- a/llvm/lib/Target/ARM/ARMISelLowering.cpp +++ b/llvm/lib/Target/ARM/ARMISelLowering.cpp @@ -504,23 +504,26 @@ LowerCallResult(SDValue Chain, SDValue InFlag, CallSDNode *TheCall,      if (VA.needsCustom()) {        SDValue Lo = DAG.getCopyFromReg(Chain, dl, VA.getLocReg(), VA.getLocVT(),                                        InFlag); +      Chain = Lo.getValue(1); +      InFlag = Lo.getValue(2);        VA = RVLocs[++i]; // skip ahead to next loc -      SDValue Hi = DAG.getCopyFromReg(Lo, dl, VA.getLocReg(), VA.getLocVT(), -                                      Lo.getValue(2)); +      SDValue Hi = DAG.getCopyFromReg(Chain, dl, VA.getLocReg(), VA.getLocVT(), +                                      InFlag); +      Chain = Hi.getValue(1); +      InFlag = Hi.getValue(2);        ResultVals.push_back(DAG.getNode(ARMISD::FMDRR, dl, VA.getValVT(), Lo,                                         Hi));      } else { -      Chain = DAG.getCopyFromReg(Chain, dl, VA.getLocReg(), VA.getLocVT(), -                                 InFlag).getValue(1); -      SDValue Val = Chain.getValue(0); -      InFlag = Chain.getValue(2); +      SDValue Val = DAG.getCopyFromReg(Chain, dl, VA.getLocReg(), VA.getLocVT(), +                                       InFlag); +      Chain = Val.getValue(1); +      InFlag = Val.getValue(2);        switch (VA.getLocInfo()) {        default: assert(0 && "Unknown loc info!");        case CCValAssign::Full: break;        case CCValAssign::BCvt: -        Val = DAG.getNode(ISD::BIT_CONVERT, dl, VA.getValVT(), -                          Chain.getValue(0)); +        Val = DAG.getNode(ISD::BIT_CONVERT, dl, VA.getValVT(), Val);          break;        } @@ -813,6 +816,7 @@ SDValue ARMTargetLowering::LowerRET(SDValue Op, SelectionDAG &DAG) {        SDValue fmrrd = DAG.getNode(ARMISD::FMRRD, dl,                                    DAG.getVTList(MVT::i32, MVT::i32), &Arg, 1);        Chain = DAG.getCopyToReg(Chain, dl, VA.getLocReg(), fmrrd, Flag); +      Flag = Chain.getValue(1);        VA = RVLocs[++i]; // skip ahead to next loc        Chain = DAG.getCopyToReg(Chain, dl, VA.getLocReg(), fmrrd.getValue(1),                                 Flag); | 

