#include <range_analysis.h>
Definition at line 530 of file range_analysis.h.
◆ RangeAnalysis()
dart::RangeAnalysis::RangeAnalysis |
( |
FlowGraph * |
flow_graph | ) |
|
|
inlineexplicit |
Definition at line 532 of file range_analysis.h.
533 : flow_graph_(flow_graph),
static Range Full(RangeBoundary::RangeSize size)
◆ Analyze()
void dart::RangeAnalysis::Analyze |
( |
| ) |
|
Definition at line 56 of file range_analysis.cc.
56 {
57 CollectValues();
58 InsertConstraints();
60 InferRanges();
61 EliminateRedundantBoundsChecks();
62 MarkUnreachableBlocks();
63
64 NarrowMintToInt32();
65
66 IntegerInstructionSelector iis(flow_graph_);
67 iis.Select();
68
69 RemoveConstraints();
70}
const LoopHierarchy & GetLoopHierarchy()
void ComputeInduction() const
◆ AssignRangesRecursively()
void dart::RangeAnalysis::AssignRangesRecursively |
( |
Definition * |
defn | ) |
|
Definition at line 585 of file range_analysis.cc.
585 {
587 return;
588 }
589
591 return;
592 }
593
594 for (intptr_t
i = 0;
i < defn->InputCount();
i++) {
595 Definition* input_defn = defn->InputAt(
i)->definition();
596 if (!input_defn->HasSSATemp() || input_defn->IsConstant()) {
598 }
599 }
600
601 Range new_range;
602 defn->InferRange(this, &new_range);
604 defn->set_range(new_range);
605 }
606}
void AssignRangesRecursively(Definition *defn)
static bool IsIntegerDefinition(Definition *defn)
static bool IsUnknown(const Range *other)
◆ GetIntRange()
const Range * dart::RangeAnalysis::GetIntRange |
( |
Value * |
value | ) |
const |
Definition at line 303 of file range_analysis.cc.
303 {
304 Definition* defn =
value->definition();
305 const Range* range = defn->range();
306
307 if ((range == nullptr) && !defn->Type()->IsInt()) {
308
309
310
311
312
313
314 return &int64_range_;
315 }
316
317 return range;
318}
◆ GetSmiRange()
const Range * dart::RangeAnalysis::GetSmiRange |
( |
Value * |
value | ) |
const |
Definition at line 282 of file range_analysis.cc.
282 {
283 Definition* defn =
value->definition();
284 const Range* range = defn->range();
285
286 if ((range == nullptr) && (defn->Type()->ToCid() != kSmiCid)) {
287
288
289
290
291
292
293
294
295
296
297 return &smi_range_;
298 }
299
300 return range;
301}
◆ IsIntegerDefinition()
static bool dart::RangeAnalysis::IsIntegerDefinition |
( |
Definition * |
defn | ) |
|
|
inlinestatic |
The documentation for this class was generated from the following files: