This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Patch] [aarch64] Fix asm-subreg-1.c ICE


Hi,

Please find attached the patch “asm-subreg.patch” for aarch64 which
fixes ICE for /gcc.dg/torture/asm-subreg-1.c testcase.

The error was the result of reload problems in
“aarch64_load_symref_appropriately” function.

The higher part of symbol_ref moved to temporary RTX “tmp_reg” does
not contain the exact value. The dumps showed that (CONST_INT 0) is
moved into the temporary RTX.
When the higher part of symbol_ref was added with the temporary rtx
and moved into the “dest”, it seg faults due to reload issues.

Hence, the transfer of symbol_ref is handled slightly in a modified
manner which fixes the ICE.
Please review the patch and let me know your comments on the same.

Regards,
Naveen
--- gcc/config/aarch64/aarch64.c	2012-11-22 16:23:21.147121486 +0530
+++ gcc/config/aarch64/aarch64.c	2012-11-27 16:54:04.412608356 +0530
@@ -515,9 +515,9 @@ aarch64_load_symref_appropriately (rtx d
 	  {
 	    tmp_reg =  gen_reg_rtx (Pmode);
 	  }
-
-	emit_move_insn (tmp_reg, gen_rtx_HIGH (Pmode, imm));
-	emit_insn (gen_add_losym (dest, tmp_reg, imm));
+	emit_move_insn (dest, gen_rtx_HIGH (Pmode, imm));
+	emit_insn (gen_add_losym (tmp_reg, dest, imm));
+	emit_move_insn (dest, tmp_reg);
 	return;
       }
 

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]