00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _TREE_FLOW_INLINE_H
00023 #define _TREE_FLOW_INLINE_H 1
00024
00025
00026
00027
00028
00029
00030 static inline var_ann_t
00031 var_ann (tree t)
00032 {
00033 gcc_assert (t);
00034 gcc_assert (DECL_P (t));
00035 gcc_assert (!t->common.ann || t->common.ann->common.type == VAR_ANN);
00036
00037 return (var_ann_t) t->common.ann;
00038 }
00039
00040
00041
00042 static inline var_ann_t
00043 get_var_ann (tree var)
00044 {
00045 var_ann_t ann = var_ann (var);
00046 return (ann) ? ann : create_var_ann (var);
00047 }
00048
00049
00050
00051 static inline stmt_ann_t
00052 stmt_ann (tree t)
00053 {
00054 #ifdef ENABLE_CHECKING
00055 gcc_assert (is_gimple_stmt (t));
00056 #endif
00057 return (stmt_ann_t) t->common.ann;
00058 }
00059
00060
00061
00062 static inline stmt_ann_t
00063 get_stmt_ann (tree stmt)
00064 {
00065 stmt_ann_t ann = stmt_ann (stmt);
00066 return (ann) ? ann : create_stmt_ann (stmt);
00067 }
00068
00069
00070
00071 static inline enum tree_ann_type
00072 ann_type (tree_ann_t ann)
00073 {
00074 return ann->common.type;
00075 }
00076
00077
00078 static inline basic_block
00079 bb_for_stmt (tree t)
00080 {
00081 stmt_ann_t ann;
00082
00083 if (TREE_CODE (t) == PHI_NODE)
00084 return PHI_BB (t);
00085
00086 ann = stmt_ann (t);
00087 return ann ? ann->bb : NULL;
00088 }
00089
00090
00091
00092 static inline varray_type
00093 may_aliases (tree var)
00094 {
00095 var_ann_t ann = var_ann (var);
00096 return ann ? ann->may_aliases : NULL;
00097 }
00098
00099
00100
00101 static inline int
00102 get_lineno (tree expr)
00103 {
00104 if (expr == NULL_TREE)
00105 return -1;
00106
00107 if (TREE_CODE (expr) == COMPOUND_EXPR)
00108 expr = TREE_OPERAND (expr, 0);
00109
00110 if (! EXPR_HAS_LOCATION (expr))
00111 return -1;
00112
00113 return EXPR_LINENO (expr);
00114 }
00115
00116
00117
00118 static inline const char *
00119 get_filename (tree expr)
00120 {
00121 const char *filename;
00122 if (expr == NULL_TREE)
00123 return "???";
00124
00125 if (TREE_CODE (expr) == COMPOUND_EXPR)
00126 expr = TREE_OPERAND (expr, 0);
00127
00128 if (EXPR_HAS_LOCATION (expr) && (filename = EXPR_FILENAME (expr)))
00129 return filename;
00130 else
00131 return "???";
00132 }
00133
00134
00135 static inline bool
00136 noreturn_call_p (tree t)
00137 {
00138 tree call = get_call_expr_in (t);
00139 return call != 0 && (call_expr_flags (call) & ECF_NORETURN) != 0;
00140 }
00141
00142
00143 static inline void
00144 modify_stmt (tree t)
00145 {
00146 stmt_ann_t ann = stmt_ann (t);
00147 if (ann == NULL)
00148 ann = create_stmt_ann (t);
00149 else if (noreturn_call_p (t))
00150 VEC_safe_push (tree, modified_noreturn_calls, t);
00151 ann->modified = 1;
00152 }
00153
00154
00155 static inline void
00156 unmodify_stmt (tree t)
00157 {
00158 stmt_ann_t ann = stmt_ann (t);
00159 if (ann == NULL)
00160 ann = create_stmt_ann (t);
00161 ann->modified = 0;
00162 }
00163
00164
00165 static inline bool
00166 stmt_modified_p (tree t)
00167 {
00168 stmt_ann_t ann = stmt_ann (t);
00169
00170
00171
00172
00173 return ann ? ann->modified : true;
00174 }
00175
00176
00177
00178 static inline def_optype
00179 get_def_ops (stmt_ann_t ann)
00180 {
00181 return ann ? ann->operands.def_ops : NULL;
00182 }
00183
00184
00185
00186 static inline use_optype
00187 get_use_ops (stmt_ann_t ann)
00188 {
00189 return ann ? ann->operands.use_ops : NULL;
00190 }
00191
00192
00193
00194
00195 static inline v_may_def_optype
00196 get_v_may_def_ops (stmt_ann_t ann)
00197 {
00198 return ann ? ann->operands.v_may_def_ops : NULL;
00199 }
00200
00201
00202
00203 static inline vuse_optype
00204 get_vuse_ops (stmt_ann_t ann)
00205 {
00206 return ann ? ann->operands.vuse_ops : NULL;
00207 }
00208
00209
00210
00211 static inline v_must_def_optype
00212 get_v_must_def_ops (stmt_ann_t ann)
00213 {
00214 return ann ? ann->operands.v_must_def_ops : NULL;
00215 }
00216
00217
00218 static inline tree
00219 get_use_from_ptr (use_operand_p use)
00220 {
00221 return *(use.use);
00222 }
00223
00224
00225 static inline tree
00226 get_def_from_ptr (def_operand_p def)
00227 {
00228 return *(def.def);
00229 }
00230
00231
00232 static inline use_operand_p
00233 get_use_op_ptr (use_optype uses, unsigned int index)
00234 {
00235 gcc_assert (index < uses->num_uses);
00236 return uses->uses[index];
00237 }
00238
00239
00240 static inline def_operand_p
00241 get_def_op_ptr (def_optype defs, unsigned int index)
00242 {
00243 gcc_assert (index < defs->num_defs);
00244 return defs->defs[index];
00245 }
00246
00247
00248
00249
00250 static inline def_operand_p
00251 get_v_may_def_result_ptr(v_may_def_optype v_may_defs, unsigned int index)
00252 {
00253 def_operand_p op;
00254 gcc_assert (index < v_may_defs->num_v_may_defs);
00255 op.def = &(v_may_defs->v_may_defs[index].def);
00256 return op;
00257 }
00258
00259
00260
00261 static inline use_operand_p
00262 get_v_may_def_op_ptr(v_may_def_optype v_may_defs, unsigned int index)
00263 {
00264 use_operand_p op;
00265 gcc_assert (index < v_may_defs->num_v_may_defs);
00266 op.use = &(v_may_defs->v_may_defs[index].use);
00267 return op;
00268 }
00269
00270
00271 static inline use_operand_p
00272 get_vuse_op_ptr(vuse_optype vuses, unsigned int index)
00273 {
00274 use_operand_p op;
00275 gcc_assert (index < vuses->num_vuses);
00276 op.use = &(vuses->vuses[index]);
00277 return op;
00278 }
00279
00280
00281
00282 static inline def_operand_p
00283 get_v_must_def_result_ptr (v_must_def_optype v_must_defs, unsigned int index)
00284 {
00285 def_operand_p op;
00286 gcc_assert (index < v_must_defs->num_v_must_defs);
00287 op.def = &(v_must_defs->v_must_defs[index].def);
00288 return op;
00289 }
00290
00291
00292
00293 static inline use_operand_p
00294 get_v_must_def_kill_ptr (v_must_def_optype v_must_defs, unsigned int index)
00295 {
00296 use_operand_p op;
00297 gcc_assert (index < v_must_defs->num_v_must_defs);
00298 op.use = &(v_must_defs->v_must_defs[index].use);
00299 return op;
00300 }
00301
00302
00303 static inline def_operand_p
00304 get_phi_result_ptr (tree phi)
00305 {
00306 def_operand_p op;
00307 op.def = &(PHI_RESULT_TREE (phi));
00308 return op;
00309 }
00310
00311
00312 static inline use_operand_p
00313 get_phi_arg_def_ptr (tree phi, int i)
00314 {
00315 use_operand_p op;
00316 op.use = &(PHI_ARG_DEF_TREE (phi, i));
00317 return op;
00318 }
00319
00320
00321
00322 static inline bitmap
00323 addresses_taken (tree stmt)
00324 {
00325 stmt_ann_t ann = stmt_ann (stmt);
00326 return ann ? ann->addresses_taken : NULL;
00327 }
00328
00329
00330
00331 static dataflow_t
00332 get_immediate_uses (tree stmt)
00333 {
00334 stmt_ann_t ann;
00335
00336 if (TREE_CODE (stmt) == PHI_NODE)
00337 return PHI_DF (stmt);
00338
00339 ann = stmt_ann (stmt);
00340 return ann ? ann->df : NULL;
00341 }
00342
00343
00344
00345 static inline int
00346 num_immediate_uses (dataflow_t df)
00347 {
00348 varray_type imm;
00349
00350 if (!df)
00351 return 0;
00352
00353 imm = df->immediate_uses;
00354 if (!imm)
00355 return df->uses[1] ? 2 : 1;
00356
00357 return VARRAY_ACTIVE_SIZE (imm) + 2;
00358 }
00359
00360
00361 static inline tree
00362 immediate_use (dataflow_t df, int num)
00363 {
00364 if (!df)
00365 return NULL_TREE;
00366
00367 #ifdef ENABLE_CHECKING
00368 gcc_assert (num < num_immediate_uses (df));
00369 #endif
00370 if (num < 2)
00371 return df->uses[num];
00372 return VARRAY_TREE (df->immediate_uses, num - 2);
00373 }
00374
00375
00376 static inline bb_ann_t
00377 bb_ann (basic_block bb)
00378 {
00379 return (bb_ann_t)bb->tree_annotations;
00380 }
00381
00382
00383
00384 static inline tree
00385 phi_nodes (basic_block bb)
00386 {
00387 return bb_ann (bb)->phi_nodes;
00388 }
00389
00390
00391
00392 static inline void
00393 set_phi_nodes (basic_block bb, tree l)
00394 {
00395 tree phi;
00396
00397 bb_ann (bb)->phi_nodes = l;
00398 for (phi = l; phi; phi = PHI_CHAIN (phi))
00399 set_bb_for_stmt (phi, bb);
00400 }
00401
00402
00403
00404 static inline void
00405 set_is_used (tree var)
00406 {
00407 var_ann_t ann = get_var_ann (var);
00408 ann->used = 1;
00409 }
00410
00411
00412
00413
00414
00415 static inline bool
00416 is_exec_stmt (tree t)
00417 {
00418 return (t && !IS_EMPTY_STMT (t) && t != error_mark_node);
00419 }
00420
00421
00422
00423
00424 static inline bool
00425 is_label_stmt (tree t)
00426 {
00427 if (t)
00428 switch (TREE_CODE (t))
00429 {
00430 case LABEL_DECL:
00431 case LABEL_EXPR:
00432 case CASE_LABEL_EXPR:
00433 return true;
00434 default:
00435 return false;
00436 }
00437 return false;
00438 }
00439
00440
00441 static inline void
00442 set_default_def (tree var, tree def)
00443 {
00444 var_ann_t ann = get_var_ann (var);
00445 ann->default_def = def;
00446 }
00447
00448
00449
00450 static inline tree
00451 default_def (tree var)
00452 {
00453 var_ann_t ann = var_ann (var);
00454 return ann ? ann->default_def : NULL_TREE;
00455 }
00456
00457
00458
00459
00460
00461 static inline bool
00462 phi_ssa_name_p (tree t)
00463 {
00464 if (TREE_CODE (t) == SSA_NAME)
00465 return true;
00466 #ifdef ENABLE_CHECKING
00467 gcc_assert (is_gimple_min_invariant (t));
00468 #endif
00469 return false;
00470 }
00471
00472
00473
00474
00475
00476 static inline block_stmt_iterator
00477 bsi_start (basic_block bb)
00478 {
00479 block_stmt_iterator bsi;
00480 if (bb->stmt_list)
00481 bsi.tsi = tsi_start (bb->stmt_list);
00482 else
00483 {
00484 gcc_assert (bb->index < 0);
00485 bsi.tsi.ptr = NULL;
00486 bsi.tsi.container = NULL;
00487 }
00488 bsi.bb = bb;
00489 return bsi;
00490 }
00491
00492
00493
00494
00495 static inline block_stmt_iterator
00496 bsi_after_labels (basic_block bb)
00497 {
00498 block_stmt_iterator bsi;
00499 tree_stmt_iterator next;
00500
00501 bsi.bb = bb;
00502
00503 if (!bb->stmt_list)
00504 {
00505 gcc_assert (bb->index < 0);
00506 bsi.tsi.ptr = NULL;
00507 bsi.tsi.container = NULL;
00508 return bsi;
00509 }
00510
00511 bsi.tsi = tsi_start (bb->stmt_list);
00512 if (tsi_end_p (bsi.tsi))
00513 return bsi;
00514
00515
00516
00517
00518
00519
00520 gcc_assert (TREE_CODE (tsi_stmt (bsi.tsi)) == LABEL_EXPR);
00521
00522 next = bsi.tsi;
00523 tsi_next (&next);
00524
00525 while (!tsi_end_p (next)
00526 && TREE_CODE (tsi_stmt (next)) == LABEL_EXPR)
00527 {
00528 bsi.tsi = next;
00529 tsi_next (&next);
00530 }
00531
00532 return bsi;
00533 }
00534
00535
00536
00537 static inline block_stmt_iterator
00538 bsi_last (basic_block bb)
00539 {
00540 block_stmt_iterator bsi;
00541 if (bb->stmt_list)
00542 bsi.tsi = tsi_last (bb->stmt_list);
00543 else
00544 {
00545 gcc_assert (bb->index < 0);
00546 bsi.tsi.ptr = NULL;
00547 bsi.tsi.container = NULL;
00548 }
00549 bsi.bb = bb;
00550 return bsi;
00551 }
00552
00553
00554
00555 static inline bool
00556 bsi_end_p (block_stmt_iterator i)
00557 {
00558 return tsi_end_p (i.tsi);
00559 }
00560
00561
00562
00563 static inline void
00564 bsi_next (block_stmt_iterator *i)
00565 {
00566 tsi_next (&i->tsi);
00567 }
00568
00569
00570
00571 static inline void
00572 bsi_prev (block_stmt_iterator *i)
00573 {
00574 tsi_prev (&i->tsi);
00575 }
00576
00577
00578
00579 static inline tree
00580 bsi_stmt (block_stmt_iterator i)
00581 {
00582 return tsi_stmt (i.tsi);
00583 }
00584
00585
00586
00587 static inline tree *
00588 bsi_stmt_ptr (block_stmt_iterator i)
00589 {
00590 return tsi_stmt_ptr (i.tsi);
00591 }
00592
00593
00594
00595 static inline struct loop *
00596 loop_containing_stmt (tree stmt)
00597 {
00598 basic_block bb = bb_for_stmt (stmt);
00599 if (!bb)
00600 return NULL;
00601
00602 return bb->loop_father;
00603 }
00604
00605
00606 static inline bool
00607 is_call_clobbered (tree var)
00608 {
00609 return is_global_var (var)
00610 || bitmap_bit_p (call_clobbered_vars, var_ann (var)->uid);
00611 }
00612
00613
00614 static inline void
00615 mark_call_clobbered (tree var)
00616 {
00617 var_ann_t ann = var_ann (var);
00618
00619
00620
00621
00622 if (ann->mem_tag_kind != NOT_A_TAG)
00623 DECL_EXTERNAL (var) = 1;
00624 bitmap_set_bit (call_clobbered_vars, ann->uid);
00625 ssa_call_clobbered_cache_valid = false;
00626 ssa_ro_call_cache_valid = false;
00627 }
00628
00629
00630 static inline void
00631 clear_call_clobbered (tree var)
00632 {
00633 var_ann_t ann = var_ann (var);
00634 if (ann->mem_tag_kind != NOT_A_TAG)
00635 DECL_EXTERNAL (var) = 0;
00636 bitmap_clear_bit (call_clobbered_vars, ann->uid);
00637 ssa_call_clobbered_cache_valid = false;
00638 ssa_ro_call_cache_valid = false;
00639 }
00640
00641
00642 static inline void
00643 mark_non_addressable (tree var)
00644 {
00645 bitmap_clear_bit (call_clobbered_vars, var_ann (var)->uid);
00646 TREE_ADDRESSABLE (var) = 0;
00647 ssa_call_clobbered_cache_valid = false;
00648 ssa_ro_call_cache_valid = false;
00649 }
00650
00651
00652
00653 static inline tree_ann_t
00654 tree_ann (tree t)
00655 {
00656 return t->common.ann;
00657 }
00658
00659
00660
00661 static inline tree_ann_t
00662 get_tree_ann (tree t)
00663 {
00664 tree_ann_t ann = tree_ann (t);
00665 return (ann) ? ann : create_tree_ann (t);
00666 }
00667
00668
00669
00670
00671
00672
00673
00674 static inline bool
00675 op_iter_done (ssa_op_iter *ptr)
00676 {
00677 return ptr->done;
00678 }
00679
00680
00681 static inline use_operand_p
00682 op_iter_next_use (ssa_op_iter *ptr)
00683 {
00684 if (ptr->use_i < ptr->num_use)
00685 {
00686 return USE_OP_PTR (ptr->ops->use_ops, (ptr->use_i)++);
00687 }
00688 if (ptr->vuse_i < ptr->num_vuse)
00689 {
00690 return VUSE_OP_PTR (ptr->ops->vuse_ops, (ptr->vuse_i)++);
00691 }
00692 if (ptr->v_mayu_i < ptr->num_v_mayu)
00693 {
00694 return V_MAY_DEF_OP_PTR (ptr->ops->v_may_def_ops,
00695 (ptr->v_mayu_i)++);
00696 }
00697 if (ptr->v_mustu_i < ptr->num_v_mustu)
00698 {
00699 return V_MUST_DEF_KILL_PTR (ptr->ops->v_must_def_ops,
00700 (ptr->v_mustu_i)++);
00701 }
00702 ptr->done = true;
00703 return NULL_USE_OPERAND_P;
00704 }
00705
00706
00707 static inline def_operand_p
00708 op_iter_next_def (ssa_op_iter *ptr)
00709 {
00710 if (ptr->def_i < ptr->num_def)
00711 {
00712 return DEF_OP_PTR (ptr->ops->def_ops, (ptr->def_i)++);
00713 }
00714 if (ptr->v_mustd_i < ptr->num_v_mustd)
00715 {
00716 return V_MUST_DEF_RESULT_PTR (ptr->ops->v_must_def_ops,
00717 (ptr->v_mustd_i)++);
00718 }
00719 if (ptr->v_mayd_i < ptr->num_v_mayd)
00720 {
00721 return V_MAY_DEF_RESULT_PTR (ptr->ops->v_may_def_ops,
00722 (ptr->v_mayd_i)++);
00723 }
00724 ptr->done = true;
00725 return NULL_DEF_OPERAND_P;
00726 }
00727
00728
00729 static inline tree
00730 op_iter_next_tree (ssa_op_iter *ptr)
00731 {
00732 if (ptr->use_i < ptr->num_use)
00733 {
00734 return USE_OP (ptr->ops->use_ops, (ptr->use_i)++);
00735 }
00736 if (ptr->vuse_i < ptr->num_vuse)
00737 {
00738 return VUSE_OP (ptr->ops->vuse_ops, (ptr->vuse_i)++);
00739 }
00740 if (ptr->v_mayu_i < ptr->num_v_mayu)
00741 {
00742 return V_MAY_DEF_OP (ptr->ops->v_may_def_ops, (ptr->v_mayu_i)++);
00743 }
00744 if (ptr->v_mustu_i < ptr->num_v_mustu)
00745 {
00746 return V_MUST_DEF_KILL (ptr->ops->v_must_def_ops, (ptr->v_mustu_i)++);
00747 }
00748 if (ptr->def_i < ptr->num_def)
00749 {
00750 return DEF_OP (ptr->ops->def_ops, (ptr->def_i)++);
00751 }
00752 if (ptr->v_mustd_i < ptr->num_v_mustd)
00753 {
00754 return V_MUST_DEF_RESULT (ptr->ops->v_must_def_ops,
00755 (ptr->v_mustd_i)++);
00756 }
00757 if (ptr->v_mayd_i < ptr->num_v_mayd)
00758 {
00759 return V_MAY_DEF_RESULT (ptr->ops->v_may_def_ops,
00760 (ptr->v_mayd_i)++);
00761 }
00762 ptr->done = true;
00763 return NULL;
00764 }
00765
00766
00767 static inline void
00768 op_iter_init (ssa_op_iter *ptr, tree stmt, int flags)
00769 {
00770 stmt_operands_p ops;
00771 stmt_ann_t ann = get_stmt_ann (stmt);
00772
00773 ops = &(ann->operands);
00774 ptr->done = false;
00775 ptr->ops = ops;
00776 ptr->num_def = (flags & SSA_OP_DEF) ? NUM_DEFS (ops->def_ops) : 0;
00777 ptr->num_use = (flags & SSA_OP_USE) ? NUM_USES (ops->use_ops) : 0;
00778 ptr->num_vuse = (flags & SSA_OP_VUSE) ? NUM_VUSES (ops->vuse_ops) : 0;
00779 ptr->num_v_mayu = (flags & SSA_OP_VMAYUSE)
00780 ? NUM_V_MAY_DEFS (ops->v_may_def_ops) : 0;
00781 ptr->num_v_mayd = (flags & SSA_OP_VMAYDEF)
00782 ? NUM_V_MAY_DEFS (ops->v_may_def_ops) : 0;
00783 ptr->num_v_mustu = (flags & SSA_OP_VMUSTDEFKILL)
00784 ? NUM_V_MUST_DEFS (ops->v_must_def_ops) : 0;
00785 ptr->num_v_mustd = (flags & SSA_OP_VMUSTDEF)
00786 ? NUM_V_MUST_DEFS (ops->v_must_def_ops) : 0;
00787 ptr->def_i = 0;
00788 ptr->use_i = 0;
00789 ptr->vuse_i = 0;
00790 ptr->v_mayu_i = 0;
00791 ptr->v_mayd_i = 0;
00792 ptr->v_mustu_i = 0;
00793 ptr->v_mustd_i = 0;
00794 }
00795
00796
00797
00798 static inline use_operand_p
00799 op_iter_init_use (ssa_op_iter *ptr, tree stmt, int flags)
00800 {
00801 op_iter_init (ptr, stmt, flags);
00802 return op_iter_next_use (ptr);
00803 }
00804
00805
00806
00807 static inline def_operand_p
00808 op_iter_init_def (ssa_op_iter *ptr, tree stmt, int flags)
00809 {
00810 op_iter_init (ptr, stmt, flags);
00811 return op_iter_next_def (ptr);
00812 }
00813
00814
00815
00816 static inline tree
00817 op_iter_init_tree (ssa_op_iter *ptr, tree stmt, int flags)
00818 {
00819 op_iter_init (ptr, stmt, flags);
00820 return op_iter_next_tree (ptr);
00821 }
00822
00823
00824
00825 static inline void
00826 op_iter_next_mustdef (use_operand_p *kill, def_operand_p *def, ssa_op_iter *ptr)
00827 {
00828 if (ptr->v_mustu_i < ptr->num_v_mustu)
00829 {
00830 *def = V_MUST_DEF_RESULT_PTR (ptr->ops->v_must_def_ops, ptr->v_mustu_i);
00831 *kill = V_MUST_DEF_KILL_PTR (ptr->ops->v_must_def_ops, (ptr->v_mustu_i)++);
00832 return;
00833 }
00834 else
00835 {
00836 *def = NULL_DEF_OPERAND_P;
00837 *kill = NULL_USE_OPERAND_P;
00838 }
00839 ptr->done = true;
00840 return;
00841 }
00842
00843
00844 static inline void
00845 op_iter_next_maydef (use_operand_p *use, def_operand_p *def, ssa_op_iter *ptr)
00846 {
00847 if (ptr->v_mayu_i < ptr->num_v_mayu)
00848 {
00849 *def = V_MAY_DEF_RESULT_PTR (ptr->ops->v_may_def_ops, ptr->v_mayu_i);
00850 *use = V_MAY_DEF_OP_PTR (ptr->ops->v_may_def_ops, (ptr->v_mayu_i)++);
00851 return;
00852 }
00853 else
00854 {
00855 *def = NULL_DEF_OPERAND_P;
00856 *use = NULL_USE_OPERAND_P;
00857 }
00858 ptr->done = true;
00859 return;
00860 }
00861
00862
00863
00864 static inline void
00865 op_iter_init_maydef (ssa_op_iter *ptr, tree stmt, use_operand_p *use,
00866 def_operand_p *def)
00867 {
00868 op_iter_init (ptr, stmt, SSA_OP_VMAYUSE);
00869 op_iter_next_maydef (use, def, ptr);
00870 }
00871
00872
00873
00874 static inline void
00875 op_iter_init_mustdef (ssa_op_iter *ptr, tree stmt, use_operand_p *kill,
00876 def_operand_p *def)
00877 {
00878 op_iter_init (ptr, stmt, SSA_OP_VMUSTDEFKILL);
00879 op_iter_next_mustdef (kill, def, ptr);
00880 }
00881 #endif