GCC Middle and Back End API Reference
dojump.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

class  saved_pending_stack_adjust
 

Functions

void init_pending_stack_adjust (void)
 
void discard_pending_stack_adjust (void)
 
void clear_pending_stack_adjust (void)
 
void do_pending_stack_adjust (void)
 
void save_pending_stack_adjust (saved_pending_stack_adjust *)
 
void restore_pending_stack_adjust (saved_pending_stack_adjust *)
 
bool split_comparison (enum rtx_code, machine_mode, enum rtx_code *, enum rtx_code *)
 
void jumpif (tree exp, rtx_code_label *label, profile_probability prob)
 
void jumpif_1 (enum tree_code, tree, tree, rtx_code_label *, profile_probability)
 
void jumpifnot (tree exp, rtx_code_label *label, profile_probability prob)
 
void jumpifnot_1 (enum tree_code, tree, tree, rtx_code_label *, profile_probability)
 
void do_compare_rtx_and_jump (rtx, rtx, enum rtx_code, int, tree, machine_mode, rtx, rtx_code_label *, rtx_code_label *, profile_probability)
 
void do_compare_rtx_and_jump (rtx, rtx, enum rtx_code, int, machine_mode, rtx, rtx_code_label *, rtx_code_label *, profile_probability)
 

Function Documentation

◆ clear_pending_stack_adjust()

void clear_pending_stack_adjust ( void )
extern
When exiting from function, if safe, clear out any pending stack adjust
so the adjustment won't get done.   
When exiting from function, if safe, clear out any pending stack adjust
so the adjustment won't get done.

Note, if the current function calls alloca, then it must have a
frame pointer regardless of the value of flag_omit_frame_pointer.   

References cfun, discard_pending_stack_adjust(), and EXIT_IGNORE_STACK.

Referenced by expand_function_end(), expand_naked_return(), and expand_null_return_1().

◆ discard_pending_stack_adjust()

void discard_pending_stack_adjust ( void )
extern
Discard any pending stack adjustment.   
Discard any pending stack adjustment.  This avoid relying on the
RTL optimizers to remove useless adjustments when we know the
stack pointer value is dead.   

References pending_stack_adjust, and stack_pointer_delta.

Referenced by clear_pending_stack_adjust(), and emit_stack_restore().

◆ do_compare_rtx_and_jump() [1/2]

◆ do_compare_rtx_and_jump() [2/2]

◆ do_pending_stack_adjust()

◆ init_pending_stack_adjust()

void init_pending_stack_adjust ( void )
extern
Export function prototypes from dojump.cc.
   Copyright (C) 2015-2024 Free Software Foundation, Inc.

This file is part of GCC.

GCC is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3, or (at your option) any later
version.

GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.

You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3.  If not see
<http://www.gnu.org/licenses/>.   
At the start of a function, record that we have no previously-pushed
arguments waiting to be popped.   
At the start of a function, record that we have no previously-pushed
arguments waiting to be popped.   

References pending_stack_adjust.

◆ jumpif()

void jumpif ( tree exp,
rtx_code_label * label,
profile_probability prob )
extern
Generate code to evaluate EXP and jump to LABEL if the value is nonzero.   
Generate code to evaluate EXP and jump to LABEL if the value is nonzero.
PROB is probability of jump to LABEL.   

References do_jump(), exp(), and NULL.

Referenced by expand_expr_real_1(), and store_constructor().

◆ jumpif_1()

void jumpif_1 ( enum tree_code code,
tree op0,
tree op1,
rtx_code_label * label,
profile_probability prob )
extern
Similar to jumpif but dealing with exploded comparisons of the type
OP0 CODE OP1 .  LABEL and PROB are like in jumpif.   

References do_jump_1(), and NULL.

Referenced by expand_gimple_cond().

◆ jumpifnot()

void jumpifnot ( tree exp,
rtx_code_label * label,
profile_probability prob )
extern
Generate code to evaluate EXP and jump to LABEL if the value is zero.   
Generate code to evaluate EXP and jump to LABEL if the value is zero.
PROB is probability of jump to LABEL.   

References do_jump(), exp(), profile_probability::invert(), and NULL.

Referenced by expand_expr_real_1(), expand_expr_real_2(), and store_expr().

◆ jumpifnot_1()

void jumpifnot_1 ( enum tree_code code,
tree op0,
tree op1,
rtx_code_label * label,
profile_probability prob )
extern
Similar to jumpifnot but dealing with exploded comparisons of the type
OP0 CODE OP1 .  LABEL and PROB are like in jumpifnot.   

References do_jump_1(), profile_probability::invert(), and NULL.

Referenced by expand_expr_real_2(), and expand_gimple_cond().

◆ restore_pending_stack_adjust()

void restore_pending_stack_adjust ( saved_pending_stack_adjust * save)
extern

◆ save_pending_stack_adjust()

void save_pending_stack_adjust ( saved_pending_stack_adjust * save)
extern
Remember pending_stack_adjust/stack_pointer_delta.
To be used around code that may call do_pending_stack_adjust (),
but the generated code could be discarded e.g. using delete_insns_since.   

References pending_stack_adjust, stack_pointer_delta, saved_pending_stack_adjust::x_pending_stack_adjust, and saved_pending_stack_adjust::x_stack_pointer_delta.

Referenced by emit_conditional_move(), and expand_call().

◆ split_comparison()

bool split_comparison ( enum rtx_code code,
machine_mode mode,
enum rtx_code * code1,
enum rtx_code * code2 )
extern
Split a comparison into two others, the second of which has the other
"orderedness".  The first is always ORDERED or UNORDERED if MODE
does not honor NaNs (which means that it can be skipped in that case;
see do_compare_rtx_and_jump).

The two conditions are written in *CODE1 and *CODE2.  Return true if
the conditions must be ANDed, false if they must be ORed.   

References gcc_unreachable, and HONOR_NANS().

Referenced by do_compare_rtx_and_jump(), and emit_store_flag().