fneg combining attempts to turn it into fadd(fneg(A), fneg(0)), but
creating the new fadd folds to just fneg(A). When A has multiple uses,
this confuses it and you get an assert. Fixed.
Change-Id: I0ddc9b7286abe78edc0cd8d734fdeb05ff09821c
Differential D60633
[AMDGPU] Avoid DAG combining assert with fneg(fadd(A,0)) tpr on Apr 12 2019, 1:14 PM. Authored by
Details fneg combining attempts to turn it into fadd(fneg(A), fneg(0)), but Change-Id: I0ddc9b7286abe78edc0cd8d734fdeb05ff09821c
Diff Detail
Event Timeline
Comment Actions I have cut down the test a bit more and put it into fneg-combines.ll. I did not manage to repro any problems with the other cases that I added fixes for. I don't have a massive amount of time to spend on this. Would you prefer I land it as is, without tests for the other cases, or remove the precautionary fix for those cases and wait for someone else to possibly encounter them? |
I think it would be slightly safer to check != ISD::FADD, in case some other fold decided to do something else