https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91126
Bug ID: 91126
Summary: [10 regression] Incorrect constant propagation of
BIT_FIELD_REF
Product: gcc
Version: 10.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: wilco at gcc dot gnu.org
Target Milestone: ---
gcc.c-torture/execute/pr31448-2.c generates incorrect code due to a recent
change with -O2 -mbig-endian on AArch64. fre3 constant-folds a BIT_FIELD_REF
<a, 32, 0> with value 0xFEFEFEFE as 0xFFFEFEFE. As a result the if-statement is
removed and we abort:
Value numbering store a.iIndex1 to -65794
Setting value number of .MEM_8 to .MEM_8 (changed)
Value numbering stmt = _1 = BIT_FIELD_REF <a, 32, 0>;
Successfully combined 2 partial definitions
Setting value number of _1 to 4294901503 (changed)
Value numbering stmt = _2 = _1 & 4294967040;
Match-and-simplified _1 & 4294967040 to 4294901248
RHS _1 & 4294967040 simplified to 4294901248
Setting value number of _2 to 4294901248 (changed)
Value numbering stmt = if (_2 != 4278124032)
marking known outgoing edge 2 -> 3 executable
Block 1: BB4 found not executable
...
Merging blocks 2 and 3
fix_loop_structure: fixing up loops for function
main ()
{
struct stD.3411 aD.3421;
;; basic block 2, loop depth 0, count 0 (precise), probably never executed
;; Invalid sum of incoming counts 1073741824 (estimated locally), should be 0
(precise)
;; prev block 0, next block 1, flags: (NEW, REACHABLE, VISITED)
;; pred: ENTRY [always] count:1073741824 (estimated locally)
(FALLTHRU,EXECUTABLE)
# .MEM_4 = VDEF <.MEM_3(D)>
nextD.3412 = &aD.3421;
# .MEM_7 = VDEF <.MEM_4>
aD.3421.iIndexD.3408 = -65794;
# .MEM_8 = VDEF <.MEM_7>
aD.3421.iIndex1D.3409 = -65794;
# .MEM_6 = VDEF <.MEM_8>
# USE = nonlocal { D.3421 } (escaped)
# CLB = nonlocal { D.3421 } (escaped)
abortD.1083 ();
;; succ:
}