mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-11 21:57:55 +00:00
Clarify that CALLSEQ_START..END may not be nested,
and add some protection against creating such. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47957 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
327d0651f8
commit
0ea0356dff
@ -529,6 +529,7 @@ namespace ISD {
|
||||
// a call sequence, and carry arbitrary information that target might want
|
||||
// to know. The first operand is a chain, the rest are specified by the
|
||||
// target and not touched by the DAG optimizers.
|
||||
// CALLSEQ_START..CALLSEQ_END pairs may not be nested.
|
||||
CALLSEQ_START, // Beginning of a call sequence
|
||||
CALLSEQ_END, // End of a call sequence
|
||||
|
||||
|
@ -1266,6 +1266,13 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {
|
||||
// The only option for this is to custom lower it.
|
||||
Tmp3 = TLI.LowerOperation(Result.getValue(0), DAG);
|
||||
assert(Tmp3.Val && "Target didn't custom lower this node!");
|
||||
// A call within a calling sequence must be legalized to something
|
||||
// other than the normal CALLSEQ_END. Violating this gets Legalize
|
||||
// into an infinite loop.
|
||||
assert ((!IsLegalizingCall ||
|
||||
Node->getOpcode() != ISD::CALL ||
|
||||
Tmp3.Val->getOpcode() != ISD::CALLSEQ_END) &&
|
||||
"Nested CALLSEQ_START..CALLSEQ_END not supported.");
|
||||
|
||||
// The number of incoming and outgoing values should match; unless the final
|
||||
// outgoing value is a flag.
|
||||
|
Loading…
Reference in New Issue
Block a user