Fix ipa-cp wrt volatile loads

Check for volatile flag to ipa_load_from_parm_agg.

gcc/ChangeLog:

2022-06-10  Jan Hubicka  <hubicka@ucw.cz>

	PR ipa/105739
	* ipa-prop.cc (ipa_load_from_parm_agg): Punt on volatile loads.

gcc/testsuite/ChangeLog:

2022-06-10  Jan Hubicka  <hubicka@ucw.cz>

	* gcc.dg/ipa/pr105739.c: New test.

(cherry picked from commit 8f6c317b3a)
This commit is contained in:
Jan Hubicka 2022-06-14 14:05:53 +02:00 committed by Jakub Jelinek
parent 0ddeeb11e4
commit bf4ba94067
2 changed files with 34 additions and 0 deletions

View File

@ -1112,6 +1112,10 @@ ipa_load_from_parm_agg (struct ipa_func_body_info *fbi,
if (!base)
return false;
/* We can not propagate across volatile loads. */
if (TREE_THIS_VOLATILE (op))
return false;
if (DECL_P (base))
{
int index = ipa_get_param_decl_index_1 (descriptors, base);

View File

@ -0,0 +1,30 @@
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-optimized" } */
__attribute__((noinline))
static int
test2(int a)
{
if (__builtin_constant_p (a))
__builtin_abort ();
return a;
}
static int
test(int *a)
{
int val = *(volatile int *)a;
if (__builtin_constant_p (val))
__builtin_abort ();
if (val)
return test2(val);
return 0;
}
int a;
int
main()
{
a = 0;
return test (&a);
}
/* { dg-final { scan-tree-dump "test2" "optimized" } } */