From: Xi Ruoyao Date: Tue, 19 Aug 2025 03:14:42 +0000 (+0800) Subject: LoongArch: Fix the "%t" modifier handling for (const_int 0) X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=13ec1769fa2404eec8c34ce8e0b87fc28ff5ac76;p=thirdparty%2Fgcc.git LoongArch: Fix the "%t" modifier handling for (const_int 0) This modifier is intended to output $r0 for (const_int 0), but the logic: GET_MODE (op) != TImode || (op != CONST0_RTX (TImode) && code != REG) will reject (const_int 0) because (const_int 0) actually does not have a mode and GET_MODE will return VOIDmode for it. Use reg_or_0_operand instead to fix the issue. gcc/ChangeLog: * config/loongarch/loongarch.cc (loongarch_print_operand): Call reg_or_0_operand for checking the sanity of %t. --- diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc index 0935d7ba092..ef5d5f4e060 100644 --- a/gcc/config/loongarch/loongarch.cc +++ b/gcc/config/loongarch/loongarch.cc @@ -6495,8 +6495,7 @@ loongarch_print_operand (FILE *file, rtx op, int letter) break; case 't': - if (GET_MODE (op) != TImode - || (op != CONST0_RTX (TImode) && code != REG)) + if (!reg_or_0_operand (op, TImode)) { output_operand_lossage ("invalid use of '%%%c'", letter); break;