On 11/19/24 12:01 PM, Jeff Law wrote:
Andreas reported GCC mis-compiled GAS for risc-v Thankfully he also
reduced it to a nice little testcase.
So the whole point of the pattern in question is to "reduce" the
constants by right shifting away common unnecessary bits in RTL
expressions like this:
[(set (pc)
(if_then_else (any_eq
(and:ANYI (match_operand:ANYI 1 "register_operand"
"r")
(match_operand 2
"shifted_const_arith_operand" "i"))
(match_operand 3 "shifted_const_arith_operand" "i"))
(label_ref (match_operand 0 "" ""))
(pc)))
When applicable, the reduced constants in operands 2/3 fit into a simm12
and thus do not need multi-instruction synthesis. Note that we have to
also shift operand 1.
That shift should have been an arithmetic shift, but was incorrectly
coded as a logical shift.
Fixed with the obvious change on the right shift opcode.
Expecting to push to the trunk once the pre-commit tester renders its
verdict. I've already tested in this my tester for rv32 and rv64.
If you look at the patch, it's got a hunk from a different bugfix :-)
Obviously that'll need to be addressed.
jeff