tree-optimization/88240 - stopgap for floating point code-hoisting issues
authorRichard Biener <rguenther@suse.de>
Tue, 4 Aug 2020 12:10:45 +0000 (14:10 +0200)
committerRichard Biener <rguenther@suse.de>
Tue, 4 Aug 2020 13:29:19 +0000 (15:29 +0200)
commit1af5cdd77985daf76130f527deac425c43df9f49
treeb9f60d270eeda2fded7364104ac18674414d3c9b
parent7bd72dd5a385dfa6d49cfe640cefc9ed187361d3
tree-optimization/88240 - stopgap for floating point code-hoisting issues

This adds a stopgap measure to avoid performing code-hoisting
on mixed type loads when the load we'd insert in the hoisting
position would be a floating point one.  This is because certain
targets (hello x87) cannot perform floating point loads without
possibly altering the bit representation and thus cannot be used
in place of integral loads.

2020-08-04  Richard Biener  <rguenther@suse.de>

PR tree-optimization/88240
* tree-ssa-sccvn.h (vn_reference_s::punned): New flag.
* tree-ssa-sccvn.c (vn_reference_insert): Initialize punned.
(vn_reference_insert_pieces): Likewise.
(visit_reference_op_call): Likewise.
(visit_reference_op_load): Track whether a ref was punned.
* tree-ssa-pre.c (do_hoist_insertion): Refuse to perform hoist
insertion on punned floating point loads.

* gcc.target/i386/pr88240.c: New testcase.
gcc/testsuite/gcc.target/i386/pr88240.c [new file with mode: 0644]
gcc/tree-ssa-pre.c
gcc/tree-ssa-sccvn.c
gcc/tree-ssa-sccvn.h