https://gcc.gnu.org/g:b0e5c22df97d4405fc1c3da33e55331407d57e2a
commit b0e5c22df97d4405fc1c3da33e55331407d57e2a Author: Michael Meissner <[email protected]> Date: Tue Oct 14 02:32:07 2025 -0400 Fix -Ofast issue with BF optimization. 2025-10-13 Michael Meissner <[email protected]> gcc/ * config/rs6000/predicates.md (bfloat16_v4sf_operand): Add checks to make sure float_extend and float_truncate have a register as an argument. Diff: --- gcc/config/rs6000/predicates.md | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/gcc/config/rs6000/predicates.md b/gcc/config/rs6000/predicates.md index 83f5f1fe3ea5..4394b4a6daa1 100644 --- a/gcc/config/rs6000/predicates.md +++ b/gcc/config/rs6000/predicates.md @@ -2225,15 +2225,21 @@ if (CONST_DOUBLE_P (op)) return true; - if (GET_CODE (op) == FLOAT_EXTEND - && mode == SFmode - && GET_MODE (XEXP (op, 0)) == BFmode) - return true; + if (GET_CODE (op) == FLOAT_EXTEND) + { + rtx op_arg = XEXP (op, 0); + return (mode == SFmode + && GET_MODE (op_arg) == BFmode + && (REG_P (op_arg) || SUBREG_P (op_arg))); + } - if (GET_CODE (op) == FLOAT_TRUNCATE - && mode == BFmode - && GET_MODE (XEXP (op, 0)) == SFmode) - return true; + if (GET_CODE (op) == FLOAT_TRUNCATE) + { + rtx op_arg = XEXP (op, 0); + return (mode == BFmode + && GET_MODE (op_arg) == SFmode + && (REG_P (op_arg) || SUBREG_P (op_arg))); + } return false; })
