mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
Thread the chain through the eh.sjlj.setjmp intrinsic, like it's documented to
do. This will be useful later on with the new SJLJ stuff. llvm-svn: 141416
This commit is contained in:
parent
fe793806e9
commit
0f5b533c48
@ -95,7 +95,7 @@ namespace ISD {
|
||||
// execution to HANDLER. Many platform-related details also :)
|
||||
EH_RETURN,
|
||||
|
||||
// OUTCHAIN = EH_SJLJ_SETJMP(INCHAIN, buffer)
|
||||
// RESULT, OUTCHAIN = EH_SJLJ_SETJMP(INCHAIN, buffer)
|
||||
// This corresponds to the eh.sjlj.setjmp intrinsic.
|
||||
// It takes an input chain and a pointer to the jump buffer as inputs
|
||||
// and returns an outchain.
|
||||
|
@ -4744,8 +4744,14 @@ SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I, unsigned Intrinsic) {
|
||||
return 0;
|
||||
}
|
||||
case Intrinsic::eh_sjlj_setjmp: {
|
||||
setValue(&I, DAG.getNode(ISD::EH_SJLJ_SETJMP, dl, MVT::i32, getRoot(),
|
||||
getValue(I.getArgOperand(0))));
|
||||
SDValue Ops[2];
|
||||
Ops[0] = getRoot();
|
||||
Ops[1] = getValue(I.getArgOperand(0));
|
||||
SDValue Op = DAG.getNode(ISD::EH_SJLJ_SETJMP, dl,
|
||||
DAG.getVTList(MVT::i32, MVT::Other),
|
||||
Ops, 2);
|
||||
setValue(&I, Op.getValue(0));
|
||||
DAG.setRoot(Op.getValue(1));
|
||||
return 0;
|
||||
}
|
||||
case Intrinsic::eh_sjlj_longjmp: {
|
||||
|
@ -2210,7 +2210,8 @@ SDValue
|
||||
ARMTargetLowering::LowerEH_SJLJ_SETJMP(SDValue Op, SelectionDAG &DAG) const {
|
||||
DebugLoc dl = Op.getDebugLoc();
|
||||
SDValue Val = DAG.getConstant(0, MVT::i32);
|
||||
return DAG.getNode(ARMISD::EH_SJLJ_SETJMP, dl, MVT::i32, Op.getOperand(0),
|
||||
return DAG.getNode(ARMISD::EH_SJLJ_SETJMP, dl,
|
||||
DAG.getVTList(MVT::i32, MVT::Other), Op.getOperand(0),
|
||||
Op.getOperand(1), Val);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user