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]

Re: RFA: LM32: Fix building libgcc


Hi Sébastien,

After applying your patch, I get an assertion failure in
emit_return_into_block, at function.c:5600 when trying to compile
anything (line is "gcc_assert (ANY_RETURN_P (pat));").

Any ideas?

Doh - I should have checked further. The problem is the return_internal pattern. emit_return_into_block() expects that in a return insn that contains more than one piece of RTL, the first piece of RTL will be (return). This is not (currently) true for the lm23.


Fixing that let the build proceed as far as truncdfsf2.c in libgcc, This then fails with a return insn that does not match the return pattern. This turns out to be because the "return" pattern should really be an expander that will work when conditions are not being tested. The simplest way to fix this was to create an expander and rename "return" to "basic_return".

Next there is seg-fault building ffssi2 in newlib. I do not have a fix for this one yet, but at least libgcc builds now.

OK to apply ?

Cheers
  Nick

gcc/ChangeLog
2012-08-21  Nick Clifton  <nickc@redhat.com>

	* config/lm32/lm32.md (return_internal): Place the (return) as the
	first element in the vector.
	(return): Changed into an expander.
	(basic_return): Renamed version of previous return pattern.

 Index: gcc/config/lm32/lm32.md
===================================================================
--- gcc/config/lm32/lm32.md	(revision 190564)
+++ gcc/config/lm32/lm32.md	(working copy)
@@ -629,16 +629,22 @@
 )

 (define_insn "return_internal"
-  [(use (match_operand:SI 0 "register_operand" "r"))
-   (return)]
+  [(return)
+   (use (match_operand:SI 0 "register_operand" "r"))]
   ""
   "b        %0"
   [(set_attr "type" "uibranch")]
 )

-(define_insn "return"
+(define_expand "return"
   [(return)]
   "lm32_can_use_return ()"
+  "lm32_expand_epilogue (); DONE;"
+)
+
+(define_insn "basic_return"
+  [(return)]
+  "lm32_can_use_return ()"
   "ret"
   [(set_attr "type" "uibranch")]
 )


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