re PR rtl-optimization/57637 (Miscompare on 178.galgel in SPEC2000 on arm)
gcc/ 2013-07-30 Zhenqiang Chen <zhenqiang.chen@linaro.org> PR rtl-optimization/57637 * function.c (move_insn_for_shrink_wrap): Also check the GEN set of the LIVE problem for the liveness analysis if it exists, otherwise give up. gcc/testsuite/ 2013-07-30 Zhenqiang Chen <zhenqiang.chen@linaro.org> * gcc.target/arm/pr57637.c: New testcase. From-SVN: r201326
This commit is contained in:
parent
0100cd3f7e
commit
14a8763670
@ -1,3 +1,10 @@
|
||||
2013-07-30 Zhenqiang Chen <zhenqiang.chen@linaro.org>
|
||||
|
||||
PR rtl-optimization/57637
|
||||
* function.c (move_insn_for_shrink_wrap): Also check the
|
||||
GEN set of the LIVE problem for the liveness analysis
|
||||
if it exists, otherwise give up.
|
||||
|
||||
2013-07-29 Bill Schmidt <wschmidt@vnet.linux.ibm.com>
|
||||
|
||||
PR tree-optimization/57993
|
||||
|
@ -5506,22 +5506,45 @@ move_insn_for_shrink_wrap (basic_block bb, rtx insn,
|
||||
except for any part that overlaps SRC (next loop). */
|
||||
bb_uses = &DF_LR_BB_INFO (bb)->use;
|
||||
bb_defs = &DF_LR_BB_INFO (bb)->def;
|
||||
for (i = dregno; i < end_dregno; i++)
|
||||
if (df_live)
|
||||
{
|
||||
if (REGNO_REG_SET_P (bb_uses, i) || REGNO_REG_SET_P (bb_defs, i))
|
||||
next_block = NULL;
|
||||
CLEAR_REGNO_REG_SET (live_out, i);
|
||||
CLEAR_REGNO_REG_SET (live_in, i);
|
||||
}
|
||||
for (i = dregno; i < end_dregno; i++)
|
||||
{
|
||||
if (REGNO_REG_SET_P (bb_uses, i) || REGNO_REG_SET_P (bb_defs, i)
|
||||
|| REGNO_REG_SET_P (&DF_LIVE_BB_INFO (bb)->gen, i))
|
||||
next_block = NULL;
|
||||
CLEAR_REGNO_REG_SET (live_out, i);
|
||||
CLEAR_REGNO_REG_SET (live_in, i);
|
||||
}
|
||||
|
||||
/* Check whether BB clobbers SRC. We need to add INSN to BB if so.
|
||||
Either way, SRC is now live on entry. */
|
||||
for (i = sregno; i < end_sregno; i++)
|
||||
/* Check whether BB clobbers SRC. We need to add INSN to BB if so.
|
||||
Either way, SRC is now live on entry. */
|
||||
for (i = sregno; i < end_sregno; i++)
|
||||
{
|
||||
if (REGNO_REG_SET_P (bb_defs, i)
|
||||
|| REGNO_REG_SET_P (&DF_LIVE_BB_INFO (bb)->gen, i))
|
||||
next_block = NULL;
|
||||
SET_REGNO_REG_SET (live_out, i);
|
||||
SET_REGNO_REG_SET (live_in, i);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (REGNO_REG_SET_P (bb_defs, i))
|
||||
next_block = NULL;
|
||||
SET_REGNO_REG_SET (live_out, i);
|
||||
SET_REGNO_REG_SET (live_in, i);
|
||||
/* DF_LR_BB_INFO (bb)->def does not comprise the DF_REF_PARTIAL and
|
||||
DF_REF_CONDITIONAL defs. So if DF_LIVE doesn't exist, i.e.
|
||||
at -O1, just give up searching NEXT_BLOCK. */
|
||||
next_block = NULL;
|
||||
for (i = dregno; i < end_dregno; i++)
|
||||
{
|
||||
CLEAR_REGNO_REG_SET (live_out, i);
|
||||
CLEAR_REGNO_REG_SET (live_in, i);
|
||||
}
|
||||
|
||||
for (i = sregno; i < end_sregno; i++)
|
||||
{
|
||||
SET_REGNO_REG_SET (live_out, i);
|
||||
SET_REGNO_REG_SET (live_in, i);
|
||||
}
|
||||
}
|
||||
|
||||
/* If we don't need to add the move to BB, look for a single
|
||||
|
@ -1,3 +1,7 @@
|
||||
2013-07-30 Zhenqiang Chen <zhenqiang.chen@linaro.org>
|
||||
|
||||
* gcc.target/arm/pr57637.c: New testcase.
|
||||
|
||||
2013-07-29 Bill Schmidt <wschmidt@vnet.linux.ibm.com>
|
||||
|
||||
PR tree-optimization/57993
|
||||
|
206
gcc/testsuite/gcc.target/arm/pr57637.c
Normal file
206
gcc/testsuite/gcc.target/arm/pr57637.c
Normal file
@ -0,0 +1,206 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-O2 -fno-inline" } */
|
||||
|
||||
typedef struct _GtkCssStyleProperty GtkCssStyleProperty;
|
||||
|
||||
struct _GtkCssStyleProperty
|
||||
{
|
||||
int *initial_value;
|
||||
unsigned int id;
|
||||
unsigned int inherit :1;
|
||||
unsigned int animated :1;
|
||||
unsigned int affects_size :1;
|
||||
unsigned int affects_font :1;
|
||||
|
||||
int * parse_value;
|
||||
int * query_value;
|
||||
int * assign_value;
|
||||
};
|
||||
|
||||
void
|
||||
g_assertion_message_expr (const char *domain,
|
||||
const char *file,
|
||||
int line,
|
||||
const char *func,
|
||||
const char *expr) __attribute__((__noreturn__));
|
||||
|
||||
void
|
||||
g_assertion_message_expr (const char *domain,
|
||||
const char *file,
|
||||
int line,
|
||||
const char *func,
|
||||
const char *expr)
|
||||
{
|
||||
__builtin_abort ();
|
||||
}
|
||||
int
|
||||
get_id (GtkCssStyleProperty *property)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
int
|
||||
_gtk_css_style_property_get_type ()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
GtkCssStyleProperty *
|
||||
g_object_new (int object_type,
|
||||
const char *first_property_name,
|
||||
...)
|
||||
{
|
||||
return (GtkCssStyleProperty *) __builtin_malloc (sizeof (GtkCssStyleProperty));
|
||||
}
|
||||
|
||||
typedef enum {
|
||||
INHERIT = (1 << 0),
|
||||
ANIMATED = (1 << 1),
|
||||
RESIZE = (1 << 2),
|
||||
FONT = (1 << 3)
|
||||
} GtkStylePropertyFlags;
|
||||
|
||||
int t = 0;
|
||||
void
|
||||
gtk_css_style_property_register (const char * name,
|
||||
int expected_id,
|
||||
int value_type,
|
||||
int flags,
|
||||
int *parse_value,
|
||||
int *query_value,
|
||||
int *assign_value,
|
||||
int *initial_value)
|
||||
{
|
||||
GtkCssStyleProperty *node;
|
||||
|
||||
do
|
||||
{
|
||||
if (__builtin_expect (__extension__ (
|
||||
{
|
||||
int _g_boolean_var_;
|
||||
if (initial_value != ((void *)0))
|
||||
_g_boolean_var_ = 1;
|
||||
else
|
||||
_g_boolean_var_ = 0;
|
||||
_g_boolean_var_;
|
||||
}),
|
||||
1))
|
||||
;
|
||||
else
|
||||
g_assertion_message_expr ("Gtk",
|
||||
"gtkcssstylepropertyimpl.c",
|
||||
85,
|
||||
((const char*) (__PRETTY_FUNCTION__)),
|
||||
"initial_value != NULL");
|
||||
} while (0);
|
||||
|
||||
do
|
||||
{
|
||||
if (__builtin_expect (__extension__ (
|
||||
{
|
||||
int _g_boolean_var_;
|
||||
if (parse_value != ((void *)0))
|
||||
_g_boolean_var_ = 1;
|
||||
else
|
||||
_g_boolean_var_ = 0;
|
||||
_g_boolean_var_;
|
||||
}),
|
||||
1))
|
||||
;
|
||||
else
|
||||
g_assertion_message_expr ("Gtk",
|
||||
"gtkcssstylepropertyimpl.c",
|
||||
86,
|
||||
((const char*) (__PRETTY_FUNCTION__)),
|
||||
"parse_value != NULL");
|
||||
} while (0);
|
||||
|
||||
do
|
||||
{
|
||||
if (__builtin_expect (__extension__ (
|
||||
{
|
||||
int _g_boolean_var_;
|
||||
if (value_type == ((int) ((1) << (2)))
|
||||
|| query_value != ((void *)0))
|
||||
_g_boolean_var_ = 1;
|
||||
else
|
||||
_g_boolean_var_ = 0;
|
||||
_g_boolean_var_;
|
||||
}),
|
||||
1))
|
||||
;
|
||||
else
|
||||
g_assertion_message_expr ("Gtk",
|
||||
"gtkcssstylepropertyimpl.c",
|
||||
87, ((const char*) (__PRETTY_FUNCTION__)),
|
||||
"value_type == NONE || query_value != NULL");
|
||||
} while (0);
|
||||
|
||||
/* FLAGS is changed in a cond_exec instruction with pr57637. */
|
||||
if (flags == 15)
|
||||
t = 15;
|
||||
|
||||
do
|
||||
{
|
||||
if (__builtin_expect (__extension__ (
|
||||
{
|
||||
int _g_boolean_var_;
|
||||
if (value_type == ((1) << (2))
|
||||
|| assign_value != ((void *)0))
|
||||
_g_boolean_var_ = 1;
|
||||
else
|
||||
_g_boolean_var_ = 0;
|
||||
_g_boolean_var_;
|
||||
}),
|
||||
1))
|
||||
;
|
||||
else
|
||||
g_assertion_message_expr ("Gtk",
|
||||
"gtkcssstylepropertyimpl.c",
|
||||
88, ((const char*) (__PRETTY_FUNCTION__)),
|
||||
"value_type == NONE || assign_value != NULL");
|
||||
} while (0);
|
||||
|
||||
node = g_object_new ((_gtk_css_style_property_get_type ()),
|
||||
"value-type", value_type,
|
||||
"affects-size", (flags & RESIZE) ? (0) : (!(0)),
|
||||
"affects-font", (flags & FONT) ? (!(0)) : (0),
|
||||
"animated", (flags & ANIMATED) ? (!(0)) : (0),
|
||||
"inherit", (flags & INHERIT) ? (!(0)) : (0),
|
||||
"initial-value", initial_value,
|
||||
"name", name,
|
||||
((void *)0));
|
||||
|
||||
node->parse_value = parse_value;
|
||||
node->query_value = query_value;
|
||||
node->assign_value = assign_value;
|
||||
|
||||
do
|
||||
{
|
||||
if (__builtin_expect (__extension__ (
|
||||
{
|
||||
int _g_boolean_var_;
|
||||
if (get_id (node) == expected_id)
|
||||
_g_boolean_var_ = 1;
|
||||
else
|
||||
_g_boolean_var_ = 0;
|
||||
_g_boolean_var_;
|
||||
}),
|
||||
1))
|
||||
;
|
||||
else
|
||||
g_assertion_message_expr ("Gtk",
|
||||
"gtkcssstylepropertyimpl.c",
|
||||
106,
|
||||
((const char*) (__PRETTY_FUNCTION__)),
|
||||
"get_id (node) == expected_id");
|
||||
} while (0);
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
gtk_css_style_property_register ("test", 1, 4, 15, &t, &t, &t, &t);
|
||||
|
||||
if (t != 15)
|
||||
__builtin_abort ();
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user