Index: src/compiler/pipeline.cc |
diff --git a/src/compiler/pipeline.cc b/src/compiler/pipeline.cc |
index ad00f984de541dfe77349d2b73382cfbf82301c3..3fdf826543557d2ed745635e0fe91740e6719f12 100644 |
--- a/src/compiler/pipeline.cc |
+++ b/src/compiler/pipeline.cc |
@@ -24,6 +24,7 @@ |
#include "src/compiler/machine-operator-reducer.h" |
#include "src/compiler/pipeline-statistics.h" |
#include "src/compiler/register-allocator.h" |
+#include "src/compiler/register-allocator-verifier.h" |
#include "src/compiler/schedule.h" |
#include "src/compiler/scheduler.h" |
#include "src/compiler/select-lowering.h" |
@@ -575,6 +576,13 @@ Handle<Code> Pipeline::GenerateCode(Linkage* linkage, PipelineData* data) { |
data->pipeline_statistics()->BeginPhaseKind("register allocation"); |
} |
+#ifdef DEBUG |
+ // Don't track usage for this zone in compiler stats. |
+ Zone verifier_zone(info()->isolate()); |
+ RegisterAllocatorVerifier verifier( |
+ &verifier_zone, RegisterConfiguration::ArchDefault(), &sequence); |
+#endif |
+ |
// Allocate registers. |
Frame frame; |
{ |
@@ -586,17 +594,14 @@ Handle<Code> Pipeline::GenerateCode(Linkage* linkage, PipelineData* data) { |
ZonePool::Scope zone_scope(data->zone_pool()); |
SmartArrayPointer<char> debug_name; |
- RegisterAllocator::VerificationType verification_type = |
- RegisterAllocator::kNoVerify; |
#ifdef DEBUG |
debug_name = GetDebugName(info()); |
- verification_type = RegisterAllocator::kVerifyAssignment; |
#endif |
RegisterAllocator allocator(RegisterConfiguration::ArchDefault(), |
zone_scope.zone(), &frame, &sequence, |
debug_name.get()); |
- if (!allocator.Allocate(data->pipeline_statistics(), verification_type)) { |
+ if (!allocator.Allocate(data->pipeline_statistics())) { |
info()->AbortOptimization(kNotEnoughVirtualRegistersRegalloc); |
return Handle<Code>::null(); |
} |
@@ -614,6 +619,11 @@ Handle<Code> Pipeline::GenerateCode(Linkage* linkage, PipelineData* data) { |
<< printable; |
} |
+#ifdef DEBUG |
+ verifier.VerifyAssignment(); |
+ verifier.VerifyGapMoves(); |
+#endif |
+ |
if (data->pipeline_statistics() != NULL) { |
data->pipeline_statistics()->BeginPhaseKind("code generation"); |
} |