Some of the Arm complex pattern functions call canExtractShiftFromMul, which can modify the DAG in-place. For this to be valid and handled successfully we need to define ComplexPatternFuncMutatesDAG.
The test case is a little big, but I didn't have a lot of luck reducing it further.
Nice find. Bit of an "obscure" hook, doesn't seem to be documented very well. But I guess it will eventually call canExtractShiftFromMul, perhaps you can clarify that a little bit in the comment.