Commit d9e736e7 by Richard Biener Committed by Richard Biener

re PR tree-optimization/91812 (GCC ignores volatile modifier)

2019-09-19  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/91812
	* tree-ssa-phiprop.c (propagate_with_phi): Do not replace
	volatile loads.

	* gcc.dg/torture/pr91812.c: New testcase.

From-SVN: r275960
parent f24f4c15
2019-09-19 Richard Biener <rguenther@suse.de>
PR tree-optimization/91812
* tree-ssa-phiprop.c (propagate_with_phi): Do not replace
volatile loads.
2019-09-19 Richard Sandiford <richard.sandiford@arm.com>
* defaults.h (TARGET_UNIT): New macro.
......
2019-09-19 Richard Biener <rguenther@suse.de>
PR tree-optimization/91812
* gcc.dg/torture/pr91812.c: New testcase.
2019-09-19 Tom Tromey <tromey@adacore.com>
* gnat.dg/bias1.adb: New testcase.
......
/* { dg-do compile } */
/* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } { "" } } */
/* { dg-options "-fdump-tree-optimized-blocks" } */
unsigned register1;
unsigned register2;
void busy_wait_for_register (int x)
{
volatile unsigned* ptr;
switch(x) {
case 0x1111:
ptr = &register1;
break;
case 0x2222:
ptr = &register2;
break;
default:
return;
}
while (*ptr) {}
}
/* { dg-final { scan-tree-dump "loop depth 1" "optimized" } } */
......@@ -338,8 +338,15 @@ propagate_with_phi (basic_block bb, gphi *phi, struct phiprop_d *phivn,
&& (!type
|| types_compatible_p
(TREE_TYPE (gimple_assign_lhs (use_stmt)), type))
/* We cannot replace a load that may throw or is volatile. */
&& !stmt_can_throw_internal (cfun, use_stmt)))
/* We cannot replace a load that may throw or is volatile.
For volatiles the transform can change the number of
executions if the load is inside a loop but the address
computations outside (PR91812). We could relax this
if we guard against that appropriately. For loads that can
throw we could relax things if the moved loads all are
known to not throw. */
&& !stmt_can_throw_internal (cfun, use_stmt)
&& !gimple_has_volatile_ops (use_stmt)))
continue;
/* Check if we can move the loads. The def stmt of the virtual use
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment