1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 11:13:28 +01:00

Restructure some assertion checking based on post commit feedback by Aaron and Tom.

llvm-svn: 223150
This commit is contained in:
Philip Reames 2014-12-02 21:01:48 +00:00
parent 8a04298b22
commit 82e79ac753
2 changed files with 13 additions and 7 deletions

View File

@ -129,7 +129,13 @@ class StatepointBase {
#ifndef NDEBUG #ifndef NDEBUG
/// Asserts if this statepoint is malformed. Common cases for failure
/// include incorrect length prefixes for variable length sections or
/// illegal values for parameters.
void verify() { void verify() {
assert(numCallArgs() >= 0 &&
"number of arguments to actually callee can't be negative");
// The internal asserts in the iterator accessors do the rest. // The internal asserts in the iterator accessors do the rest.
(void)call_args_begin(); (void)call_args_begin();
(void)call_args_end(); (void)call_args_end();

View File

@ -228,10 +228,6 @@ static SDNode *lowerCallFromStatepoint(const CallInst &CI,
dyn_cast<IntrinsicInst>(&CI)->getIntrinsicID() && dyn_cast<IntrinsicInst>(&CI)->getIntrinsicID() &&
"function called must be the statepoint function"); "function called must be the statepoint function");
int NumCallArgs = dyn_cast<ConstantInt>(CI.getArgOperand(1))->getZExtValue();
assert(NumCallArgs >= 0 && "non-negative");
(void)NumCallArgs;
ImmutableStatepoint StatepointOperands(&CI); ImmutableStatepoint StatepointOperands(&CI);
// Lower the actual call itself - This is a bit of a hack, but we want to // Lower the actual call itself - This is a bit of a hack, but we want to
@ -240,9 +236,6 @@ static SDNode *lowerCallFromStatepoint(const CallInst &CI,
// differently. Hopefully, this is slightly more robust w.r.t. calling // differently. Hopefully, this is slightly more robust w.r.t. calling
// convention, return values, and other function attributes. // convention, return values, and other function attributes.
Value *ActualCallee = const_cast<Value *>(StatepointOperands.actualCallee()); Value *ActualCallee = const_cast<Value *>(StatepointOperands.actualCallee());
#ifndef NDEBUG
StatepointOperands.verify();
#endif
std::vector<Value *> Args; std::vector<Value *> Args;
CallInst::const_op_iterator arg_begin = StatepointOperands.call_args_begin(); CallInst::const_op_iterator arg_begin = StatepointOperands.call_args_begin();
@ -500,6 +493,13 @@ void SelectionDAGBuilder::visitStatepoint(const CallInst &CI) {
#endif #endif
ImmutableStatepoint ISP(&CI); ImmutableStatepoint ISP(&CI);
#ifndef NDEBUG
// If this is a malformed statepoint, report it early to simplify debugging.
// This should catch any IR level mistake that's made when constructing or
// transforming statepoints.
ISP.verify();
#endif
// Lower statepoint vmstate and gcstate arguments // Lower statepoint vmstate and gcstate arguments
SmallVector<SDValue, 10> LoweredArgs; SmallVector<SDValue, 10> LoweredArgs;