c1_IR.cpp revision 1499:e9ff18c4ace7
1/*
2 * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25# include "incls/_precompiled.incl"
26# include "incls/_c1_IR.cpp.incl"
27
28
29// Implementation of XHandlers
30//
31// Note: This code could eventually go away if we are
32//       just using the ciExceptionHandlerStream.
33
34XHandlers::XHandlers(ciMethod* method) : _list(method->exception_table_length()) {
35  ciExceptionHandlerStream s(method);
36  while (!s.is_done()) {
37    _list.append(new XHandler(s.handler()));
38    s.next();
39  }
40  assert(s.count() == method->exception_table_length(), "exception table lengths inconsistent");
41}
42
43// deep copy of all XHandler contained in list
44XHandlers::XHandlers(XHandlers* other) :
45  _list(other->length())
46{
47  for (int i = 0; i < other->length(); i++) {
48    _list.append(new XHandler(other->handler_at(i)));
49  }
50}
51
52// Returns whether a particular exception type can be caught.  Also
53// returns true if klass is unloaded or any exception handler
54// classes are unloaded.  type_is_exact indicates whether the throw
55// is known to be exactly that class or it might throw a subtype.
56bool XHandlers::could_catch(ciInstanceKlass* klass, bool type_is_exact) const {
57  // the type is unknown so be conservative
58  if (!klass->is_loaded()) {
59    return true;
60  }
61
62  for (int i = 0; i < length(); i++) {
63    XHandler* handler = handler_at(i);
64    if (handler->is_catch_all()) {
65      // catch of ANY
66      return true;
67    }
68    ciInstanceKlass* handler_klass = handler->catch_klass();
69    // if it's unknown it might be catchable
70    if (!handler_klass->is_loaded()) {
71      return true;
72    }
73    // if the throw type is definitely a subtype of the catch type
74    // then it can be caught.
75    if (klass->is_subtype_of(handler_klass)) {
76      return true;
77    }
78    if (!type_is_exact) {
79      // If the type isn't exactly known then it can also be caught by
80      // catch statements where the inexact type is a subtype of the
81      // catch type.
82      // given: foo extends bar extends Exception
83      // throw bar can be caught by catch foo, catch bar, and catch
84      // Exception, however it can't be caught by any handlers without
85      // bar in its type hierarchy.
86      if (handler_klass->is_subtype_of(klass)) {
87        return true;
88      }
89    }
90  }
91
92  return false;
93}
94
95
96bool XHandlers::equals(XHandlers* others) const {
97  if (others == NULL) return false;
98  if (length() != others->length()) return false;
99
100  for (int i = 0; i < length(); i++) {
101    if (!handler_at(i)->equals(others->handler_at(i))) return false;
102  }
103  return true;
104}
105
106bool XHandler::equals(XHandler* other) const {
107  assert(entry_pco() != -1 && other->entry_pco() != -1, "must have entry_pco");
108
109  if (entry_pco() != other->entry_pco()) return false;
110  if (scope_count() != other->scope_count()) return false;
111  if (_desc != other->_desc) return false;
112
113  assert(entry_block() == other->entry_block(), "entry_block must be equal when entry_pco is equal");
114  return true;
115}
116
117
118// Implementation of IRScope
119
120BlockBegin* IRScope::header_block(BlockBegin* entry, BlockBegin::Flag f, ValueStack* state) {
121  if (entry == NULL) return NULL;
122  assert(entry->is_set(f), "entry/flag mismatch");
123  // create header block
124  BlockBegin* h = new BlockBegin(entry->bci());
125  BlockEnd* g = new Goto(entry, false);
126  h->set_next(g, entry->bci());
127  h->set_end(g);
128  h->set(f);
129  // setup header block end state
130  ValueStack* s = state->copy(); // can use copy since stack is empty (=> no phis)
131  assert(s->stack_is_empty(), "must have empty stack at entry point");
132  g->set_state(s);
133  return h;
134}
135
136
137BlockBegin* IRScope::build_graph(Compilation* compilation, int osr_bci) {
138  GraphBuilder gm(compilation, this);
139  NOT_PRODUCT(if (PrintValueNumbering && Verbose) gm.print_stats());
140  if (compilation->bailed_out()) return NULL;
141  return gm.start();
142}
143
144
145IRScope::IRScope(Compilation* compilation, IRScope* caller, int caller_bci, ciMethod* method, int osr_bci, bool create_graph)
146: _callees(2)
147, _compilation(compilation)
148, _lock_stack_size(-1)
149, _requires_phi_function(method->max_locals())
150{
151  _caller             = caller;
152  _caller_bci         = caller == NULL ? -1 : caller_bci;
153  _caller_state       = NULL; // Must be set later if needed
154  _level              = caller == NULL ?  0 : caller->level() + 1;
155  _method             = method;
156  _xhandlers          = new XHandlers(method);
157  _number_of_locks    = 0;
158  _monitor_pairing_ok = method->has_balanced_monitors();
159  _start              = NULL;
160
161  if (osr_bci == -1) {
162    _requires_phi_function.clear();
163  } else {
164        // selective creation of phi functions is not possibel in osr-methods
165    _requires_phi_function.set_range(0, method->max_locals());
166  }
167
168  assert(method->holder()->is_loaded() , "method holder must be loaded");
169
170  // build graph if monitor pairing is ok
171  if (create_graph && monitor_pairing_ok()) _start = build_graph(compilation, osr_bci);
172}
173
174
175int IRScope::max_stack() const {
176  int my_max = method()->max_stack();
177  int callee_max = 0;
178  for (int i = 0; i < number_of_callees(); i++) {
179    callee_max = MAX2(callee_max, callee_no(i)->max_stack());
180  }
181  return my_max + callee_max;
182}
183
184
185void IRScope::compute_lock_stack_size() {
186  if (!InlineMethodsWithExceptionHandlers) {
187    _lock_stack_size = 0;
188    return;
189  }
190
191  // Figure out whether we have to preserve expression stack elements
192  // for parent scopes, and if so, how many
193  IRScope* cur_scope = this;
194  while (cur_scope != NULL && !cur_scope->xhandlers()->has_handlers()) {
195    cur_scope = cur_scope->caller();
196  }
197  _lock_stack_size = (cur_scope == NULL ? 0 :
198                      (cur_scope->caller_state() == NULL ? 0 :
199                       cur_scope->caller_state()->stack_size()));
200}
201
202int IRScope::top_scope_bci() const {
203  assert(!is_top_scope(), "no correct answer for top scope possible");
204  const IRScope* scope = this;
205  while (!scope->caller()->is_top_scope()) {
206    scope = scope->caller();
207  }
208  return scope->caller_bci();
209}
210
211bool IRScopeDebugInfo::should_reexecute() {
212  ciMethod* cur_method = scope()->method();
213  int       cur_bci    = bci();
214  if (cur_method != NULL && cur_bci != SynchronizationEntryBCI) {
215    Bytecodes::Code code = cur_method->java_code_at_bci(cur_bci);
216    return Interpreter::bytecode_should_reexecute(code);
217  } else
218    return false;
219}
220
221
222// Implementation of CodeEmitInfo
223
224// Stack must be NON-null
225CodeEmitInfo::CodeEmitInfo(int bci, ValueStack* stack, XHandlers* exception_handlers)
226  : _scope(stack->scope())
227  , _bci(bci)
228  , _scope_debug_info(NULL)
229  , _oop_map(NULL)
230  , _stack(stack)
231  , _exception_handlers(exception_handlers)
232  , _next(NULL)
233  , _id(-1)
234  , _is_method_handle_invoke(false) {
235  assert(_stack != NULL, "must be non null");
236  assert(_bci == SynchronizationEntryBCI || Bytecodes::is_defined(scope()->method()->java_code_at_bci(_bci)), "make sure bci points at a real bytecode");
237}
238
239
240CodeEmitInfo::CodeEmitInfo(CodeEmitInfo* info, bool lock_stack_only)
241  : _scope(info->_scope)
242  , _exception_handlers(NULL)
243  , _bci(info->_bci)
244  , _scope_debug_info(NULL)
245  , _oop_map(NULL)
246  , _is_method_handle_invoke(info->_is_method_handle_invoke) {
247  if (lock_stack_only) {
248    if (info->_stack != NULL) {
249      _stack = info->_stack->copy_locks();
250    } else {
251      _stack = NULL;
252    }
253  } else {
254    _stack = info->_stack;
255  }
256
257  // deep copy of exception handlers
258  if (info->_exception_handlers != NULL) {
259    _exception_handlers = new XHandlers(info->_exception_handlers);
260  }
261}
262
263
264void CodeEmitInfo::record_debug_info(DebugInformationRecorder* recorder, int pc_offset) {
265  // record the safepoint before recording the debug info for enclosing scopes
266  recorder->add_safepoint(pc_offset, _oop_map->deep_copy());
267  _scope_debug_info->record_debug_info(recorder, pc_offset, true/*topmost*/, _is_method_handle_invoke);
268  recorder->end_safepoint(pc_offset);
269}
270
271
272void CodeEmitInfo::add_register_oop(LIR_Opr opr) {
273  assert(_oop_map != NULL, "oop map must already exist");
274  assert(opr->is_single_cpu(), "should not call otherwise");
275
276  int frame_size = frame_map()->framesize();
277  int arg_count = frame_map()->oop_map_arg_count();
278  VMReg name = frame_map()->regname(opr);
279  _oop_map->set_oop(name);
280}
281
282
283
284
285// Implementation of IR
286
287IR::IR(Compilation* compilation, ciMethod* method, int osr_bci) :
288    _locals_size(in_WordSize(-1))
289  , _num_loops(0) {
290  // initialize data structures
291  ValueType::initialize();
292  Instruction::initialize();
293  BlockBegin::initialize();
294  GraphBuilder::initialize();
295  // setup IR fields
296  _compilation = compilation;
297  _top_scope   = new IRScope(compilation, NULL, -1, method, osr_bci, true);
298  _code        = NULL;
299}
300
301
302void IR::optimize() {
303  Optimizer opt(this);
304  if (DoCEE) {
305    opt.eliminate_conditional_expressions();
306#ifndef PRODUCT
307    if (PrintCFG || PrintCFG1) { tty->print_cr("CFG after CEE"); print(true); }
308    if (PrintIR  || PrintIR1 ) { tty->print_cr("IR after CEE"); print(false); }
309#endif
310  }
311  if (EliminateBlocks) {
312    opt.eliminate_blocks();
313#ifndef PRODUCT
314    if (PrintCFG || PrintCFG1) { tty->print_cr("CFG after block elimination"); print(true); }
315    if (PrintIR  || PrintIR1 ) { tty->print_cr("IR after block elimination"); print(false); }
316#endif
317  }
318  if (EliminateNullChecks) {
319    opt.eliminate_null_checks();
320#ifndef PRODUCT
321    if (PrintCFG || PrintCFG1) { tty->print_cr("CFG after null check elimination"); print(true); }
322    if (PrintIR  || PrintIR1 ) { tty->print_cr("IR after null check elimination"); print(false); }
323#endif
324  }
325}
326
327
328static int sort_pairs(BlockPair** a, BlockPair** b) {
329  if ((*a)->from() == (*b)->from()) {
330    return (*a)->to()->block_id() - (*b)->to()->block_id();
331  } else {
332    return (*a)->from()->block_id() - (*b)->from()->block_id();
333  }
334}
335
336
337class CriticalEdgeFinder: public BlockClosure {
338  BlockPairList blocks;
339  IR*       _ir;
340
341 public:
342  CriticalEdgeFinder(IR* ir): _ir(ir) {}
343  void block_do(BlockBegin* bb) {
344    BlockEnd* be = bb->end();
345    int nos = be->number_of_sux();
346    if (nos >= 2) {
347      for (int i = 0; i < nos; i++) {
348        BlockBegin* sux = be->sux_at(i);
349        if (sux->number_of_preds() >= 2) {
350          blocks.append(new BlockPair(bb, sux));
351        }
352      }
353    }
354  }
355
356  void split_edges() {
357    BlockPair* last_pair = NULL;
358    blocks.sort(sort_pairs);
359    for (int i = 0; i < blocks.length(); i++) {
360      BlockPair* pair = blocks.at(i);
361      if (last_pair != NULL && pair->is_same(last_pair)) continue;
362      BlockBegin* from = pair->from();
363      BlockBegin* to = pair->to();
364      BlockBegin* split = from->insert_block_between(to);
365#ifndef PRODUCT
366      if ((PrintIR || PrintIR1) && Verbose) {
367        tty->print_cr("Split critical edge B%d -> B%d (new block B%d)",
368                      from->block_id(), to->block_id(), split->block_id());
369      }
370#endif
371      last_pair = pair;
372    }
373  }
374};
375
376void IR::split_critical_edges() {
377  CriticalEdgeFinder cef(this);
378
379  iterate_preorder(&cef);
380  cef.split_edges();
381}
382
383
384class UseCountComputer: public AllStatic {
385 private:
386  static void update_use_count(Value* n) {
387    // Local instructions and Phis for expression stack values at the
388    // start of basic blocks are not added to the instruction list
389    if ((*n)->bci() == -99 && (*n)->as_Local() == NULL &&
390        (*n)->as_Phi() == NULL) {
391      assert(false, "a node was not appended to the graph");
392      Compilation::current_compilation()->bailout("a node was not appended to the graph");
393    }
394    // use n's input if not visited before
395    if (!(*n)->is_pinned() && !(*n)->has_uses()) {
396      // note: a) if the instruction is pinned, it will be handled by compute_use_count
397      //       b) if the instruction has uses, it was touched before
398      //       => in both cases we don't need to update n's values
399      uses_do(n);
400    }
401    // use n
402    (*n)->_use_count++;
403  }
404
405  static Values* worklist;
406  static int depth;
407  enum {
408    max_recurse_depth = 20
409  };
410
411  static void uses_do(Value* n) {
412    depth++;
413    if (depth > max_recurse_depth) {
414      // don't allow the traversal to recurse too deeply
415      worklist->push(*n);
416    } else {
417      (*n)->input_values_do(update_use_count);
418      // special handling for some instructions
419      if ((*n)->as_BlockEnd() != NULL) {
420        // note on BlockEnd:
421        //   must 'use' the stack only if the method doesn't
422        //   terminate, however, in those cases stack is empty
423        (*n)->state_values_do(update_use_count);
424      }
425    }
426    depth--;
427  }
428
429  static void basic_compute_use_count(BlockBegin* b) {
430    depth = 0;
431    // process all pinned nodes as the roots of expression trees
432    for (Instruction* n = b; n != NULL; n = n->next()) {
433      if (n->is_pinned()) uses_do(&n);
434    }
435    assert(depth == 0, "should have counted back down");
436
437    // now process any unpinned nodes which recursed too deeply
438    while (worklist->length() > 0) {
439      Value t = worklist->pop();
440      if (!t->is_pinned()) {
441        // compute the use count
442        uses_do(&t);
443
444        // pin the instruction so that LIRGenerator doesn't recurse
445        // too deeply during it's evaluation.
446        t->pin();
447      }
448    }
449    assert(depth == 0, "should have counted back down");
450  }
451
452 public:
453  static void compute(BlockList* blocks) {
454    worklist = new Values();
455    blocks->blocks_do(basic_compute_use_count);
456    worklist = NULL;
457  }
458};
459
460
461Values* UseCountComputer::worklist = NULL;
462int UseCountComputer::depth = 0;
463
464// helper macro for short definition of trace-output inside code
465#ifndef PRODUCT
466  #define TRACE_LINEAR_SCAN(level, code)       \
467    if (TraceLinearScanLevel >= level) {       \
468      code;                                    \
469    }
470#else
471  #define TRACE_LINEAR_SCAN(level, code)
472#endif
473
474class ComputeLinearScanOrder : public StackObj {
475 private:
476  int        _max_block_id;        // the highest block_id of a block
477  int        _num_blocks;          // total number of blocks (smaller than _max_block_id)
478  int        _num_loops;           // total number of loops
479  bool       _iterative_dominators;// method requires iterative computation of dominatiors
480
481  BlockList* _linear_scan_order;   // the resulting list of blocks in correct order
482
483  BitMap     _visited_blocks;      // used for recursive processing of blocks
484  BitMap     _active_blocks;       // used for recursive processing of blocks
485  BitMap     _dominator_blocks;    // temproary BitMap used for computation of dominator
486  intArray   _forward_branches;    // number of incoming forward branches for each block
487  BlockList  _loop_end_blocks;     // list of all loop end blocks collected during count_edges
488  BitMap2D   _loop_map;            // two-dimensional bit set: a bit is set if a block is contained in a loop
489  BlockList  _work_list;           // temporary list (used in mark_loops and compute_order)
490
491  // accessors for _visited_blocks and _active_blocks
492  void init_visited()                     { _active_blocks.clear(); _visited_blocks.clear(); }
493  bool is_visited(BlockBegin* b) const    { return _visited_blocks.at(b->block_id()); }
494  bool is_active(BlockBegin* b) const     { return _active_blocks.at(b->block_id()); }
495  void set_visited(BlockBegin* b)         { assert(!is_visited(b), "already set"); _visited_blocks.set_bit(b->block_id()); }
496  void set_active(BlockBegin* b)          { assert(!is_active(b), "already set");  _active_blocks.set_bit(b->block_id()); }
497  void clear_active(BlockBegin* b)        { assert(is_active(b), "not already");   _active_blocks.clear_bit(b->block_id()); }
498
499  // accessors for _forward_branches
500  void inc_forward_branches(BlockBegin* b) { _forward_branches.at_put(b->block_id(), _forward_branches.at(b->block_id()) + 1); }
501  int  dec_forward_branches(BlockBegin* b) { _forward_branches.at_put(b->block_id(), _forward_branches.at(b->block_id()) - 1); return _forward_branches.at(b->block_id()); }
502
503  // accessors for _loop_map
504  bool is_block_in_loop   (int loop_idx, BlockBegin* b) const { return _loop_map.at(loop_idx, b->block_id()); }
505  void set_block_in_loop  (int loop_idx, BlockBegin* b)       { _loop_map.set_bit(loop_idx, b->block_id()); }
506  void clear_block_in_loop(int loop_idx, int block_id)        { _loop_map.clear_bit(loop_idx, block_id); }
507
508  // count edges between blocks
509  void count_edges(BlockBegin* cur, BlockBegin* parent);
510
511  // loop detection
512  void mark_loops();
513  void clear_non_natural_loops(BlockBegin* start_block);
514  void assign_loop_depth(BlockBegin* start_block);
515
516  // computation of final block order
517  BlockBegin* common_dominator(BlockBegin* a, BlockBegin* b);
518  void compute_dominator(BlockBegin* cur, BlockBegin* parent);
519  int  compute_weight(BlockBegin* cur);
520  bool ready_for_processing(BlockBegin* cur);
521  void sort_into_work_list(BlockBegin* b);
522  void append_block(BlockBegin* cur);
523  void compute_order(BlockBegin* start_block);
524
525  // fixup of dominators for non-natural loops
526  bool compute_dominators_iter();
527  void compute_dominators();
528
529  // debug functions
530  NOT_PRODUCT(void print_blocks();)
531  DEBUG_ONLY(void verify();)
532
533 public:
534  ComputeLinearScanOrder(BlockBegin* start_block);
535
536  // accessors for final result
537  BlockList* linear_scan_order() const    { return _linear_scan_order; }
538  int        num_loops() const            { return _num_loops; }
539};
540
541
542ComputeLinearScanOrder::ComputeLinearScanOrder(BlockBegin* start_block) :
543  _max_block_id(BlockBegin::number_of_blocks()),
544  _num_blocks(0),
545  _num_loops(0),
546  _iterative_dominators(false),
547  _visited_blocks(_max_block_id),
548  _active_blocks(_max_block_id),
549  _dominator_blocks(_max_block_id),
550  _forward_branches(_max_block_id, 0),
551  _loop_end_blocks(8),
552  _work_list(8),
553  _linear_scan_order(NULL), // initialized later with correct size
554  _loop_map(0, 0)           // initialized later with correct size
555{
556  TRACE_LINEAR_SCAN(2, "***** computing linear-scan block order");
557
558  init_visited();
559  count_edges(start_block, NULL);
560
561  if (_num_loops > 0) {
562    mark_loops();
563    clear_non_natural_loops(start_block);
564    assign_loop_depth(start_block);
565  }
566
567  compute_order(start_block);
568  compute_dominators();
569
570  NOT_PRODUCT(print_blocks());
571  DEBUG_ONLY(verify());
572}
573
574
575// Traverse the CFG:
576// * count total number of blocks
577// * count all incoming edges and backward incoming edges
578// * number loop header blocks
579// * create a list with all loop end blocks
580void ComputeLinearScanOrder::count_edges(BlockBegin* cur, BlockBegin* parent) {
581  TRACE_LINEAR_SCAN(3, tty->print_cr("Enter count_edges for block B%d coming from B%d", cur->block_id(), parent != NULL ? parent->block_id() : -1));
582  assert(cur->dominator() == NULL, "dominator already initialized");
583
584  if (is_active(cur)) {
585    TRACE_LINEAR_SCAN(3, tty->print_cr("backward branch"));
586    assert(is_visited(cur), "block must be visisted when block is active");
587    assert(parent != NULL, "must have parent");
588
589    cur->set(BlockBegin::linear_scan_loop_header_flag);
590    cur->set(BlockBegin::backward_branch_target_flag);
591
592    parent->set(BlockBegin::linear_scan_loop_end_flag);
593
594    // When a loop header is also the start of an exception handler, then the backward branch is
595    // an exception edge. Because such edges are usually critical edges which cannot be split, the
596    // loop must be excluded here from processing.
597    if (cur->is_set(BlockBegin::exception_entry_flag)) {
598      // Make sure that dominators are correct in this weird situation
599      _iterative_dominators = true;
600      return;
601    }
602    assert(parent->number_of_sux() == 1 && parent->sux_at(0) == cur,
603           "loop end blocks must have one successor (critical edges are split)");
604
605    _loop_end_blocks.append(parent);
606    return;
607  }
608
609  // increment number of incoming forward branches
610  inc_forward_branches(cur);
611
612  if (is_visited(cur)) {
613    TRACE_LINEAR_SCAN(3, tty->print_cr("block already visited"));
614    return;
615  }
616
617  _num_blocks++;
618  set_visited(cur);
619  set_active(cur);
620
621  // recursive call for all successors
622  int i;
623  for (i = cur->number_of_sux() - 1; i >= 0; i--) {
624    count_edges(cur->sux_at(i), cur);
625  }
626  for (i = cur->number_of_exception_handlers() - 1; i >= 0; i--) {
627    count_edges(cur->exception_handler_at(i), cur);
628  }
629
630  clear_active(cur);
631
632  // Each loop has a unique number.
633  // When multiple loops are nested, assign_loop_depth assumes that the
634  // innermost loop has the lowest number. This is guaranteed by setting
635  // the loop number after the recursive calls for the successors above
636  // have returned.
637  if (cur->is_set(BlockBegin::linear_scan_loop_header_flag)) {
638    assert(cur->loop_index() == -1, "cannot set loop-index twice");
639    TRACE_LINEAR_SCAN(3, tty->print_cr("Block B%d is loop header of loop %d", cur->block_id(), _num_loops));
640
641    cur->set_loop_index(_num_loops);
642    _num_loops++;
643  }
644
645  TRACE_LINEAR_SCAN(3, tty->print_cr("Finished count_edges for block B%d", cur->block_id()));
646}
647
648
649void ComputeLinearScanOrder::mark_loops() {
650  TRACE_LINEAR_SCAN(3, tty->print_cr("----- marking loops"));
651
652  _loop_map = BitMap2D(_num_loops, _max_block_id);
653  _loop_map.clear();
654
655  for (int i = _loop_end_blocks.length() - 1; i >= 0; i--) {
656    BlockBegin* loop_end   = _loop_end_blocks.at(i);
657    BlockBegin* loop_start = loop_end->sux_at(0);
658    int         loop_idx   = loop_start->loop_index();
659
660    TRACE_LINEAR_SCAN(3, tty->print_cr("Processing loop from B%d to B%d (loop %d):", loop_start->block_id(), loop_end->block_id(), loop_idx));
661    assert(loop_end->is_set(BlockBegin::linear_scan_loop_end_flag), "loop end flag must be set");
662    assert(loop_end->number_of_sux() == 1, "incorrect number of successors");
663    assert(loop_start->is_set(BlockBegin::linear_scan_loop_header_flag), "loop header flag must be set");
664    assert(loop_idx >= 0 && loop_idx < _num_loops, "loop index not set");
665    assert(_work_list.is_empty(), "work list must be empty before processing");
666
667    // add the end-block of the loop to the working list
668    _work_list.push(loop_end);
669    set_block_in_loop(loop_idx, loop_end);
670    do {
671      BlockBegin* cur = _work_list.pop();
672
673      TRACE_LINEAR_SCAN(3, tty->print_cr("    processing B%d", cur->block_id()));
674      assert(is_block_in_loop(loop_idx, cur), "bit in loop map must be set when block is in work list");
675
676      // recursive processing of all predecessors ends when start block of loop is reached
677      if (cur != loop_start && !cur->is_set(BlockBegin::osr_entry_flag)) {
678        for (int j = cur->number_of_preds() - 1; j >= 0; j--) {
679          BlockBegin* pred = cur->pred_at(j);
680
681          if (!is_block_in_loop(loop_idx, pred) /*&& !pred->is_set(BlockBeginosr_entry_flag)*/) {
682            // this predecessor has not been processed yet, so add it to work list
683            TRACE_LINEAR_SCAN(3, tty->print_cr("    pushing B%d", pred->block_id()));
684            _work_list.push(pred);
685            set_block_in_loop(loop_idx, pred);
686          }
687        }
688      }
689    } while (!_work_list.is_empty());
690  }
691}
692
693
694// check for non-natural loops (loops where the loop header does not dominate
695// all other loop blocks = loops with mulitple entries).
696// such loops are ignored
697void ComputeLinearScanOrder::clear_non_natural_loops(BlockBegin* start_block) {
698  for (int i = _num_loops - 1; i >= 0; i--) {
699    if (is_block_in_loop(i, start_block)) {
700      // loop i contains the entry block of the method
701      // -> this is not a natural loop, so ignore it
702      TRACE_LINEAR_SCAN(2, tty->print_cr("Loop %d is non-natural, so it is ignored", i));
703
704      for (int block_id = _max_block_id - 1; block_id >= 0; block_id--) {
705        clear_block_in_loop(i, block_id);
706      }
707      _iterative_dominators = true;
708    }
709  }
710}
711
712void ComputeLinearScanOrder::assign_loop_depth(BlockBegin* start_block) {
713  TRACE_LINEAR_SCAN(3, "----- computing loop-depth and weight");
714  init_visited();
715
716  assert(_work_list.is_empty(), "work list must be empty before processing");
717  _work_list.append(start_block);
718
719  do {
720    BlockBegin* cur = _work_list.pop();
721
722    if (!is_visited(cur)) {
723      set_visited(cur);
724      TRACE_LINEAR_SCAN(4, tty->print_cr("Computing loop depth for block B%d", cur->block_id()));
725
726      // compute loop-depth and loop-index for the block
727      assert(cur->loop_depth() == 0, "cannot set loop-depth twice");
728      int i;
729      int loop_depth = 0;
730      int min_loop_idx = -1;
731      for (i = _num_loops - 1; i >= 0; i--) {
732        if (is_block_in_loop(i, cur)) {
733          loop_depth++;
734          min_loop_idx = i;
735        }
736      }
737      cur->set_loop_depth(loop_depth);
738      cur->set_loop_index(min_loop_idx);
739
740      // append all unvisited successors to work list
741      for (i = cur->number_of_sux() - 1; i >= 0; i--) {
742        _work_list.append(cur->sux_at(i));
743      }
744      for (i = cur->number_of_exception_handlers() - 1; i >= 0; i--) {
745        _work_list.append(cur->exception_handler_at(i));
746      }
747    }
748  } while (!_work_list.is_empty());
749}
750
751
752BlockBegin* ComputeLinearScanOrder::common_dominator(BlockBegin* a, BlockBegin* b) {
753  assert(a != NULL && b != NULL, "must have input blocks");
754
755  _dominator_blocks.clear();
756  while (a != NULL) {
757    _dominator_blocks.set_bit(a->block_id());
758    assert(a->dominator() != NULL || a == _linear_scan_order->at(0), "dominator must be initialized");
759    a = a->dominator();
760  }
761  while (b != NULL && !_dominator_blocks.at(b->block_id())) {
762    assert(b->dominator() != NULL || b == _linear_scan_order->at(0), "dominator must be initialized");
763    b = b->dominator();
764  }
765
766  assert(b != NULL, "could not find dominator");
767  return b;
768}
769
770void ComputeLinearScanOrder::compute_dominator(BlockBegin* cur, BlockBegin* parent) {
771  if (cur->dominator() == NULL) {
772    TRACE_LINEAR_SCAN(4, tty->print_cr("DOM: initializing dominator of B%d to B%d", cur->block_id(), parent->block_id()));
773    cur->set_dominator(parent);
774
775  } else if (!(cur->is_set(BlockBegin::linear_scan_loop_header_flag) && parent->is_set(BlockBegin::linear_scan_loop_end_flag))) {
776    TRACE_LINEAR_SCAN(4, tty->print_cr("DOM: computing dominator of B%d: common dominator of B%d and B%d is B%d", cur->block_id(), parent->block_id(), cur->dominator()->block_id(), common_dominator(cur->dominator(), parent)->block_id()));
777    assert(cur->number_of_preds() > 1, "");
778    cur->set_dominator(common_dominator(cur->dominator(), parent));
779  }
780}
781
782
783int ComputeLinearScanOrder::compute_weight(BlockBegin* cur) {
784  BlockBegin* single_sux = NULL;
785  if (cur->number_of_sux() == 1) {
786    single_sux = cur->sux_at(0);
787  }
788
789  // limit loop-depth to 15 bit (only for security reason, it will never be so big)
790  int weight = (cur->loop_depth() & 0x7FFF) << 16;
791
792  // general macro for short definition of weight flags
793  // the first instance of INC_WEIGHT_IF has the highest priority
794  int cur_bit = 15;
795  #define INC_WEIGHT_IF(condition) if ((condition)) { weight |= (1 << cur_bit); } cur_bit--;
796
797  // this is necessery for the (very rare) case that two successing blocks have
798  // the same loop depth, but a different loop index (can happen for endless loops
799  // with exception handlers)
800  INC_WEIGHT_IF(!cur->is_set(BlockBegin::linear_scan_loop_header_flag));
801
802  // loop end blocks (blocks that end with a backward branch) are added
803  // after all other blocks of the loop.
804  INC_WEIGHT_IF(!cur->is_set(BlockBegin::linear_scan_loop_end_flag));
805
806  // critical edge split blocks are prefered because than they have a bigger
807  // proability to be completely empty
808  INC_WEIGHT_IF(cur->is_set(BlockBegin::critical_edge_split_flag));
809
810  // exceptions should not be thrown in normal control flow, so these blocks
811  // are added as late as possible
812  INC_WEIGHT_IF(cur->end()->as_Throw() == NULL  && (single_sux == NULL || single_sux->end()->as_Throw()  == NULL));
813  INC_WEIGHT_IF(cur->end()->as_Return() == NULL && (single_sux == NULL || single_sux->end()->as_Return() == NULL));
814
815  // exceptions handlers are added as late as possible
816  INC_WEIGHT_IF(!cur->is_set(BlockBegin::exception_entry_flag));
817
818  // guarantee that weight is > 0
819  weight |= 1;
820
821  #undef INC_WEIGHT_IF
822  assert(cur_bit >= 0, "too many flags");
823  assert(weight > 0, "weight cannot become negative");
824
825  return weight;
826}
827
828bool ComputeLinearScanOrder::ready_for_processing(BlockBegin* cur) {
829  // Discount the edge just traveled.
830  // When the number drops to zero, all forward branches were processed
831  if (dec_forward_branches(cur) != 0) {
832    return false;
833  }
834
835  assert(_linear_scan_order->index_of(cur) == -1, "block already processed (block can be ready only once)");
836  assert(_work_list.index_of(cur) == -1, "block already in work-list (block can be ready only once)");
837  return true;
838}
839
840void ComputeLinearScanOrder::sort_into_work_list(BlockBegin* cur) {
841  assert(_work_list.index_of(cur) == -1, "block already in work list");
842
843  int cur_weight = compute_weight(cur);
844
845  // the linear_scan_number is used to cache the weight of a block
846  cur->set_linear_scan_number(cur_weight);
847
848#ifndef PRODUCT
849  if (StressLinearScan) {
850    _work_list.insert_before(0, cur);
851    return;
852  }
853#endif
854
855  _work_list.append(NULL); // provide space for new element
856
857  int insert_idx = _work_list.length() - 1;
858  while (insert_idx > 0 && _work_list.at(insert_idx - 1)->linear_scan_number() > cur_weight) {
859    _work_list.at_put(insert_idx, _work_list.at(insert_idx - 1));
860    insert_idx--;
861  }
862  _work_list.at_put(insert_idx, cur);
863
864  TRACE_LINEAR_SCAN(3, tty->print_cr("Sorted B%d into worklist. new worklist:", cur->block_id()));
865  TRACE_LINEAR_SCAN(3, for (int i = 0; i < _work_list.length(); i++) tty->print_cr("%8d B%2d  weight:%6x", i, _work_list.at(i)->block_id(), _work_list.at(i)->linear_scan_number()));
866
867#ifdef ASSERT
868  for (int i = 0; i < _work_list.length(); i++) {
869    assert(_work_list.at(i)->linear_scan_number() > 0, "weight not set");
870    assert(i == 0 || _work_list.at(i - 1)->linear_scan_number() <= _work_list.at(i)->linear_scan_number(), "incorrect order in worklist");
871  }
872#endif
873}
874
875void ComputeLinearScanOrder::append_block(BlockBegin* cur) {
876  TRACE_LINEAR_SCAN(3, tty->print_cr("appending block B%d (weight 0x%6x) to linear-scan order", cur->block_id(), cur->linear_scan_number()));
877  assert(_linear_scan_order->index_of(cur) == -1, "cannot add the same block twice");
878
879  // currently, the linear scan order and code emit order are equal.
880  // therefore the linear_scan_number and the weight of a block must also
881  // be equal.
882  cur->set_linear_scan_number(_linear_scan_order->length());
883  _linear_scan_order->append(cur);
884}
885
886void ComputeLinearScanOrder::compute_order(BlockBegin* start_block) {
887  TRACE_LINEAR_SCAN(3, "----- computing final block order");
888
889  // the start block is always the first block in the linear scan order
890  _linear_scan_order = new BlockList(_num_blocks);
891  append_block(start_block);
892
893  assert(start_block->end()->as_Base() != NULL, "start block must end with Base-instruction");
894  BlockBegin* std_entry = ((Base*)start_block->end())->std_entry();
895  BlockBegin* osr_entry = ((Base*)start_block->end())->osr_entry();
896
897  BlockBegin* sux_of_osr_entry = NULL;
898  if (osr_entry != NULL) {
899    // special handling for osr entry:
900    // ignore the edge between the osr entry and its successor for processing
901    // the osr entry block is added manually below
902    assert(osr_entry->number_of_sux() == 1, "osr entry must have exactly one successor");
903    assert(osr_entry->sux_at(0)->number_of_preds() >= 2, "sucessor of osr entry must have two predecessors (otherwise it is not present in normal control flow");
904
905    sux_of_osr_entry = osr_entry->sux_at(0);
906    dec_forward_branches(sux_of_osr_entry);
907
908    compute_dominator(osr_entry, start_block);
909    _iterative_dominators = true;
910  }
911  compute_dominator(std_entry, start_block);
912
913  // start processing with standard entry block
914  assert(_work_list.is_empty(), "list must be empty before processing");
915
916  if (ready_for_processing(std_entry)) {
917    sort_into_work_list(std_entry);
918  } else {
919    assert(false, "the std_entry must be ready for processing (otherwise, the method has no start block)");
920  }
921
922  do {
923    BlockBegin* cur = _work_list.pop();
924
925    if (cur == sux_of_osr_entry) {
926      // the osr entry block is ignored in normal processing, it is never added to the
927      // work list. Instead, it is added as late as possible manually here.
928      append_block(osr_entry);
929      compute_dominator(cur, osr_entry);
930    }
931    append_block(cur);
932
933    int i;
934    int num_sux = cur->number_of_sux();
935    // changed loop order to get "intuitive" order of if- and else-blocks
936    for (i = 0; i < num_sux; i++) {
937      BlockBegin* sux = cur->sux_at(i);
938      compute_dominator(sux, cur);
939      if (ready_for_processing(sux)) {
940        sort_into_work_list(sux);
941      }
942    }
943    num_sux = cur->number_of_exception_handlers();
944    for (i = 0; i < num_sux; i++) {
945      BlockBegin* sux = cur->exception_handler_at(i);
946      compute_dominator(sux, cur);
947      if (ready_for_processing(sux)) {
948        sort_into_work_list(sux);
949      }
950    }
951  } while (_work_list.length() > 0);
952}
953
954
955bool ComputeLinearScanOrder::compute_dominators_iter() {
956  bool changed = false;
957  int num_blocks = _linear_scan_order->length();
958
959  assert(_linear_scan_order->at(0)->dominator() == NULL, "must not have dominator");
960  assert(_linear_scan_order->at(0)->number_of_preds() == 0, "must not have predecessors");
961  for (int i = 1; i < num_blocks; i++) {
962    BlockBegin* block = _linear_scan_order->at(i);
963
964    BlockBegin* dominator = block->pred_at(0);
965    int num_preds = block->number_of_preds();
966    for (int i = 1; i < num_preds; i++) {
967      dominator = common_dominator(dominator, block->pred_at(i));
968    }
969
970    if (dominator != block->dominator()) {
971      TRACE_LINEAR_SCAN(4, tty->print_cr("DOM: updating dominator of B%d from B%d to B%d", block->block_id(), block->dominator()->block_id(), dominator->block_id()));
972
973      block->set_dominator(dominator);
974      changed = true;
975    }
976  }
977  return changed;
978}
979
980void ComputeLinearScanOrder::compute_dominators() {
981  TRACE_LINEAR_SCAN(3, tty->print_cr("----- computing dominators (iterative computation reqired: %d)", _iterative_dominators));
982
983  // iterative computation of dominators is only required for methods with non-natural loops
984  // and OSR-methods. For all other methods, the dominators computed when generating the
985  // linear scan block order are correct.
986  if (_iterative_dominators) {
987    do {
988      TRACE_LINEAR_SCAN(1, tty->print_cr("DOM: next iteration of fix-point calculation"));
989    } while (compute_dominators_iter());
990  }
991
992  // check that dominators are correct
993  assert(!compute_dominators_iter(), "fix point not reached");
994}
995
996
997#ifndef PRODUCT
998void ComputeLinearScanOrder::print_blocks() {
999  if (TraceLinearScanLevel >= 2) {
1000    tty->print_cr("----- loop information:");
1001    for (int block_idx = 0; block_idx < _linear_scan_order->length(); block_idx++) {
1002      BlockBegin* cur = _linear_scan_order->at(block_idx);
1003
1004      tty->print("%4d: B%2d: ", cur->linear_scan_number(), cur->block_id());
1005      for (int loop_idx = 0; loop_idx < _num_loops; loop_idx++) {
1006        tty->print ("%d ", is_block_in_loop(loop_idx, cur));
1007      }
1008      tty->print_cr(" -> loop_index: %2d, loop_depth: %2d", cur->loop_index(), cur->loop_depth());
1009    }
1010  }
1011
1012  if (TraceLinearScanLevel >= 1) {
1013    tty->print_cr("----- linear-scan block order:");
1014    for (int block_idx = 0; block_idx < _linear_scan_order->length(); block_idx++) {
1015      BlockBegin* cur = _linear_scan_order->at(block_idx);
1016      tty->print("%4d: B%2d    loop: %2d  depth: %2d", cur->linear_scan_number(), cur->block_id(), cur->loop_index(), cur->loop_depth());
1017
1018      tty->print(cur->is_set(BlockBegin::exception_entry_flag)         ? " ex" : "   ");
1019      tty->print(cur->is_set(BlockBegin::critical_edge_split_flag)     ? " ce" : "   ");
1020      tty->print(cur->is_set(BlockBegin::linear_scan_loop_header_flag) ? " lh" : "   ");
1021      tty->print(cur->is_set(BlockBegin::linear_scan_loop_end_flag)    ? " le" : "   ");
1022
1023      if (cur->dominator() != NULL) {
1024        tty->print("    dom: B%d ", cur->dominator()->block_id());
1025      } else {
1026        tty->print("    dom: NULL ");
1027      }
1028
1029      if (cur->number_of_preds() > 0) {
1030        tty->print("    preds: ");
1031        for (int j = 0; j < cur->number_of_preds(); j++) {
1032          BlockBegin* pred = cur->pred_at(j);
1033          tty->print("B%d ", pred->block_id());
1034        }
1035      }
1036      if (cur->number_of_sux() > 0) {
1037        tty->print("    sux: ");
1038        for (int j = 0; j < cur->number_of_sux(); j++) {
1039          BlockBegin* sux = cur->sux_at(j);
1040          tty->print("B%d ", sux->block_id());
1041        }
1042      }
1043      if (cur->number_of_exception_handlers() > 0) {
1044        tty->print("    ex: ");
1045        for (int j = 0; j < cur->number_of_exception_handlers(); j++) {
1046          BlockBegin* ex = cur->exception_handler_at(j);
1047          tty->print("B%d ", ex->block_id());
1048        }
1049      }
1050      tty->cr();
1051    }
1052  }
1053}
1054#endif
1055
1056#ifdef ASSERT
1057void ComputeLinearScanOrder::verify() {
1058  assert(_linear_scan_order->length() == _num_blocks, "wrong number of blocks in list");
1059
1060  if (StressLinearScan) {
1061    // blocks are scrambled when StressLinearScan is used
1062    return;
1063  }
1064
1065  // check that all successors of a block have a higher linear-scan-number
1066  // and that all predecessors of a block have a lower linear-scan-number
1067  // (only backward branches of loops are ignored)
1068  int i;
1069  for (i = 0; i < _linear_scan_order->length(); i++) {
1070    BlockBegin* cur = _linear_scan_order->at(i);
1071
1072    assert(cur->linear_scan_number() == i, "incorrect linear_scan_number");
1073    assert(cur->linear_scan_number() >= 0 && cur->linear_scan_number() == _linear_scan_order->index_of(cur), "incorrect linear_scan_number");
1074
1075    int j;
1076    for (j = cur->number_of_sux() - 1; j >= 0; j--) {
1077      BlockBegin* sux = cur->sux_at(j);
1078
1079      assert(sux->linear_scan_number() >= 0 && sux->linear_scan_number() == _linear_scan_order->index_of(sux), "incorrect linear_scan_number");
1080      if (!cur->is_set(BlockBegin::linear_scan_loop_end_flag)) {
1081        assert(cur->linear_scan_number() < sux->linear_scan_number(), "invalid order");
1082      }
1083      if (cur->loop_depth() == sux->loop_depth()) {
1084        assert(cur->loop_index() == sux->loop_index() || sux->is_set(BlockBegin::linear_scan_loop_header_flag), "successing blocks with same loop depth must have same loop index");
1085      }
1086    }
1087
1088    for (j = cur->number_of_preds() - 1; j >= 0; j--) {
1089      BlockBegin* pred = cur->pred_at(j);
1090
1091      assert(pred->linear_scan_number() >= 0 && pred->linear_scan_number() == _linear_scan_order->index_of(pred), "incorrect linear_scan_number");
1092      if (!cur->is_set(BlockBegin::linear_scan_loop_header_flag)) {
1093        assert(cur->linear_scan_number() > pred->linear_scan_number(), "invalid order");
1094      }
1095      if (cur->loop_depth() == pred->loop_depth()) {
1096        assert(cur->loop_index() == pred->loop_index() || cur->is_set(BlockBegin::linear_scan_loop_header_flag), "successing blocks with same loop depth must have same loop index");
1097      }
1098
1099      assert(cur->dominator()->linear_scan_number() <= cur->pred_at(j)->linear_scan_number(), "dominator must be before predecessors");
1100    }
1101
1102    // check dominator
1103    if (i == 0) {
1104      assert(cur->dominator() == NULL, "first block has no dominator");
1105    } else {
1106      assert(cur->dominator() != NULL, "all but first block must have dominator");
1107    }
1108    assert(cur->number_of_preds() != 1 || cur->dominator() == cur->pred_at(0), "Single predecessor must also be dominator");
1109  }
1110
1111  // check that all loops are continuous
1112  for (int loop_idx = 0; loop_idx < _num_loops; loop_idx++) {
1113    int block_idx = 0;
1114    assert(!is_block_in_loop(loop_idx, _linear_scan_order->at(block_idx)), "the first block must not be present in any loop");
1115
1116    // skip blocks before the loop
1117    while (block_idx < _num_blocks && !is_block_in_loop(loop_idx, _linear_scan_order->at(block_idx))) {
1118      block_idx++;
1119    }
1120    // skip blocks of loop
1121    while (block_idx < _num_blocks && is_block_in_loop(loop_idx, _linear_scan_order->at(block_idx))) {
1122      block_idx++;
1123    }
1124    // after the first non-loop block, there must not be another loop-block
1125    while (block_idx < _num_blocks) {
1126      assert(!is_block_in_loop(loop_idx, _linear_scan_order->at(block_idx)), "loop not continuous in linear-scan order");
1127      block_idx++;
1128    }
1129  }
1130}
1131#endif
1132
1133
1134void IR::compute_code() {
1135  assert(is_valid(), "IR must be valid");
1136
1137  ComputeLinearScanOrder compute_order(start());
1138  _num_loops = compute_order.num_loops();
1139  _code = compute_order.linear_scan_order();
1140}
1141
1142
1143void IR::compute_use_counts() {
1144  // make sure all values coming out of this block get evaluated.
1145  int num_blocks = _code->length();
1146  for (int i = 0; i < num_blocks; i++) {
1147    _code->at(i)->end()->state()->pin_stack_for_linear_scan();
1148  }
1149
1150  // compute use counts
1151  UseCountComputer::compute(_code);
1152}
1153
1154
1155void IR::iterate_preorder(BlockClosure* closure) {
1156  assert(is_valid(), "IR must be valid");
1157  start()->iterate_preorder(closure);
1158}
1159
1160
1161void IR::iterate_postorder(BlockClosure* closure) {
1162  assert(is_valid(), "IR must be valid");
1163  start()->iterate_postorder(closure);
1164}
1165
1166void IR::iterate_linear_scan_order(BlockClosure* closure) {
1167  linear_scan_order()->iterate_forward(closure);
1168}
1169
1170
1171#ifndef PRODUCT
1172class BlockPrinter: public BlockClosure {
1173 private:
1174  InstructionPrinter* _ip;
1175  bool                _cfg_only;
1176  bool                _live_only;
1177
1178 public:
1179  BlockPrinter(InstructionPrinter* ip, bool cfg_only, bool live_only = false) {
1180    _ip       = ip;
1181    _cfg_only = cfg_only;
1182    _live_only = live_only;
1183  }
1184
1185  virtual void block_do(BlockBegin* block) {
1186    if (_cfg_only) {
1187      _ip->print_instr(block); tty->cr();
1188    } else {
1189      block->print_block(*_ip, _live_only);
1190    }
1191  }
1192};
1193
1194
1195void IR::print(BlockBegin* start, bool cfg_only, bool live_only) {
1196  ttyLocker ttyl;
1197  InstructionPrinter ip(!cfg_only);
1198  BlockPrinter bp(&ip, cfg_only, live_only);
1199  start->iterate_preorder(&bp);
1200  tty->cr();
1201}
1202
1203void IR::print(bool cfg_only, bool live_only) {
1204  if (is_valid()) {
1205    print(start(), cfg_only, live_only);
1206  } else {
1207    tty->print_cr("invalid IR");
1208  }
1209}
1210
1211
1212define_array(BlockListArray, BlockList*)
1213define_stack(BlockListList, BlockListArray)
1214
1215class PredecessorValidator : public BlockClosure {
1216 private:
1217  BlockListList* _predecessors;
1218  BlockList*     _blocks;
1219
1220  static int cmp(BlockBegin** a, BlockBegin** b) {
1221    return (*a)->block_id() - (*b)->block_id();
1222  }
1223
1224 public:
1225  PredecessorValidator(IR* hir) {
1226    ResourceMark rm;
1227    _predecessors = new BlockListList(BlockBegin::number_of_blocks(), NULL);
1228    _blocks = new BlockList();
1229
1230    int i;
1231    hir->start()->iterate_preorder(this);
1232    if (hir->code() != NULL) {
1233      assert(hir->code()->length() == _blocks->length(), "must match");
1234      for (i = 0; i < _blocks->length(); i++) {
1235        assert(hir->code()->contains(_blocks->at(i)), "should be in both lists");
1236      }
1237    }
1238
1239    for (i = 0; i < _blocks->length(); i++) {
1240      BlockBegin* block = _blocks->at(i);
1241      BlockList* preds = _predecessors->at(block->block_id());
1242      if (preds == NULL) {
1243        assert(block->number_of_preds() == 0, "should be the same");
1244        continue;
1245      }
1246
1247      // clone the pred list so we can mutate it
1248      BlockList* pred_copy = new BlockList();
1249      int j;
1250      for (j = 0; j < block->number_of_preds(); j++) {
1251        pred_copy->append(block->pred_at(j));
1252      }
1253      // sort them in the same order
1254      preds->sort(cmp);
1255      pred_copy->sort(cmp);
1256      int length = MIN2(preds->length(), block->number_of_preds());
1257      for (j = 0; j < block->number_of_preds(); j++) {
1258        assert(preds->at(j) == pred_copy->at(j), "must match");
1259      }
1260
1261      assert(preds->length() == block->number_of_preds(), "should be the same");
1262    }
1263  }
1264
1265  virtual void block_do(BlockBegin* block) {
1266    _blocks->append(block);
1267    BlockEnd* be = block->end();
1268    int n = be->number_of_sux();
1269    int i;
1270    for (i = 0; i < n; i++) {
1271      BlockBegin* sux = be->sux_at(i);
1272      assert(!sux->is_set(BlockBegin::exception_entry_flag), "must not be xhandler");
1273
1274      BlockList* preds = _predecessors->at_grow(sux->block_id(), NULL);
1275      if (preds == NULL) {
1276        preds = new BlockList();
1277        _predecessors->at_put(sux->block_id(), preds);
1278      }
1279      preds->append(block);
1280    }
1281
1282    n = block->number_of_exception_handlers();
1283    for (i = 0; i < n; i++) {
1284      BlockBegin* sux = block->exception_handler_at(i);
1285      assert(sux->is_set(BlockBegin::exception_entry_flag), "must be xhandler");
1286
1287      BlockList* preds = _predecessors->at_grow(sux->block_id(), NULL);
1288      if (preds == NULL) {
1289        preds = new BlockList();
1290        _predecessors->at_put(sux->block_id(), preds);
1291      }
1292      preds->append(block);
1293    }
1294  }
1295};
1296
1297void IR::verify() {
1298#ifdef ASSERT
1299  PredecessorValidator pv(this);
1300#endif
1301}
1302
1303#endif // PRODUCT
1304
1305void SubstitutionResolver::substitute(Value* v) {
1306  Value v0 = *v;
1307  if (v0) {
1308    Value vs = v0->subst();
1309    if (vs != v0) {
1310      *v = v0->subst();
1311    }
1312  }
1313}
1314
1315#ifdef ASSERT
1316void check_substitute(Value* v) {
1317  Value v0 = *v;
1318  if (v0) {
1319    Value vs = v0->subst();
1320    assert(vs == v0, "missed substitution");
1321  }
1322}
1323#endif
1324
1325
1326void SubstitutionResolver::block_do(BlockBegin* block) {
1327  Instruction* last = NULL;
1328  for (Instruction* n = block; n != NULL;) {
1329    n->values_do(substitute);
1330    // need to remove this instruction from the instruction stream
1331    if (n->subst() != n) {
1332      assert(last != NULL, "must have last");
1333      last->set_next(n->next(), n->next()->bci());
1334    } else {
1335      last = n;
1336    }
1337    n = last->next();
1338  }
1339
1340#ifdef ASSERT
1341  if (block->state()) block->state()->values_do(check_substitute);
1342  block->block_values_do(check_substitute);
1343  if (block->end() && block->end()->state()) block->end()->state()->values_do(check_substitute);
1344#endif
1345}
1346