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] |
> -----Original Message----- > From: Richard Earnshaw > Sent: Monday, December 08, 2014 7:31 PM > To: Terry Guo; gcc-patches@gcc.gnu.org > Cc: Ramana Radhakrishnan > Subject: Re: [Patch, ARM/Thumb1]Add a Thumb1 insn pattern to legalize the > instruction that moves pc to low register > > On 08/12/14 08:24, Terry Guo wrote: > > Hi there, > > > > When compile below simple code: > > > > terguo01@terry-pc01:mtpcs-frame$ cat test.c int main(void) { > > return 0; > > } > > > > I got ICE with option -mtpcs-leaf-frame (no error if remove this option). > > > > terguo01@terry-pc01:mtpcs-frame$ > > /work/terguo01/tools/gcc-arm-none-eabi-5_0-2014q4/bin/arm-none-eabi- > gc > > c -mtpcs-leaf-frame test.c -c -mcpu=cortex-m0plus -mthumb -da > > test.c: In function 'main': > > test.c:4:1: error: unrecognizable insn: > > } > > ^ > > (insn 20 19 21 (set (reg:SI 2 r2) > > (reg:SI 15 pc)) test.c:2 -1 > > (nil)) > > test.c:4:1: internal compiler error: in extract_insn, at recog.c:2327 > > Please submit a full bug report, with preprocessed source if > > appropriate. > > See http://gcc.gnu.org/bugs.html\ for instructions. > > > > This RTL is generated in function thumb1_expand_prologue. The expected > > insn pattern is thumb1_movsi_insn in thumb1.md. And instruction like > "mov r2, pc" > > is a legal instruction. Because gcc returns NO_REG for PC register, so > > no valid pattern to match instruction that move pc to low register. > > This patch intends to add a new insn pattern to legalize such thing. > > > > Tested with GCC regression test. No regression. Is it OK to trunk? > > > > BR, > > Terry > > > > 2014-12-08 Terry Guo terry.guo@arm.com > > > > * config/arm/predicates.md (pc_register): New to match PC register. > > * config/arm/thumb1.md (*thumb1_movpc_insn): New insn pattern. > > > > gcc/testsuite/ChangeLog: > > 2014-12-08 Terry Guo terry.guo@arm.com > > > > * gcc.target/arm/thumb1-mov-pc.c: New test. > > > > > > thumb1-move-pc-v1.txt > > > > > > diff --git a/gcc/config/arm/predicates.md > > b/gcc/config/arm/predicates.md index 032808c..c5ef5ed 100644 > > --- a/gcc/config/arm/predicates.md > > +++ b/gcc/config/arm/predicates.md > > @@ -361,6 +361,10 @@ > > (and (match_code "smin,smax,umin,umax") > > (match_test "mode == GET_MODE (op)"))) > > > > +(define_special_predicate "pc_register" > > + (and (match_code "reg") > > + (match_test "REGNO (op) == PC_REGNUM"))) > > + > > (define_special_predicate "cc_register" > > (and (match_code "reg") > > (and (match_test "REGNO (op) == CC_REGNUM") diff --git > > a/gcc/config/arm/thumb1.md b/gcc/config/arm/thumb1.md index > > ddedc39..8e6057c 100644 > > --- a/gcc/config/arm/thumb1.md > > +++ b/gcc/config/arm/thumb1.md > > @@ -1780,6 +1780,16 @@ > > " > > ) > > > > +(define_insn "*thumb1_movpc_insn" > > + [(set (match_operand:SI 0 "low_register_operand") > > This needs constraints. > The constraint is used now. Is this one OK? BR, Terry 2015-01-09 Terry Guo terry.guo@arm.com * config/arm/thumb1.md (*thumb1_movpc_insn): New insn pattern.
Attachment:
thumb1_move_pc.txt
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |