This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
re: How to deal with unrecognizable RTL code
- From: "daniel.tian" <daniel dot tian at mavrixtech dot com dot cn>
- To: "'Paul Yuan'" <yingbo dot com at gmail dot com>
- Cc: <gcc at gcc dot gnu dot org>, "'Peng Zheng'" <peng dot zheng at mavrixtech dot com>, <thomas dot liau at mavrixtech dot com>
- Date: Mon, 22 Jun 2009 09:56:06 +0800
- Subject: re: How to deal with unrecognizable RTL code
>1) How these unrecognized RTLs are generated?
>RTL generation depends on the templates in the .md file. If the format of these RTLs is not legal, you should review related templates.
>2) Add templates to match the unrecognized RTLs if they are legal.
Yeah, you are right.
But I have already defined the PROMOTE_MODE which will convert all the QImode, HImode to SImode in computation. And the RTL mentioned, including " SUBREG " should not exist after reload.
Now all the instructions pattern, which modes are smaller than SImode, formed in SUBREG.
Could anyone give me clue to find out why?
Thank you.
_______________________________________________
Best Regards
Daniel Tian
Mavrix Technology, Inc.
Addressï200 Zhangheng Road, #3501, Building 3, Zhangjiang Hi-tech Park, Shanghai, P.R.China (201204)
Tel:86(21)51095958 - 8125
Fax:86(21)50277658
Emailïdaniel.tian@mavrixtech.com.cn
www.mavrixtech.com
________________________________________
åää: Paul Yuan [mailto:yingbo.com@gmail.com]
åéæé: 2009å6æ19æ 22:27
æää: çæå
äé: Re: How to deal with unrecognizable RTL code
Hi Daniel,
You can handle this issue from two points:
1) How these unrecognized RTLs are generated?
RTL generation depends on the templates in the .md file. If the format of these RTLs is not legal, you should review related templates.
2) Add templates to match the unrecognized RTLs if they are legal.
2009/6/19 çæå <daniel.tian@mavrixtech.com.cn>
Hello, guys:
The porting is really a difficult and huge job. So many things I
don't know or miss result in countless bugs.
I'd like to thank you for your guys in maillist helping so much,
especially, Ian Lance Taylor.
Here I encounter some unrecognizable RTL (R0 to R15 are registers. I
hate the unrecognizable RTL insns always coming about, and I wanna end it.):
(insn 264 191 193 15 (set (reg:HI 5 R5)
(subreg:HI (mem:SI (plus:SI (reg/f:SI 14 R14)
(const_int 12 [0xc])) [0 crc+0 S4 A32]) 0)) -1 (nil)
(nil))
(insn 261 197 200 14 (set (reg:HI 5 R5)
(subreg:HI (mem:SI (reg/f:SI 14 R14) [7 crc.16+0 S4 A32]) 0)) -1
(nil)
(nil))
PROMOTE_MODE, stolen from mips, is defined in my port:
#define PROMOTE_MODE(MODE, UNSIGNEDP, TYPE) \
if (GET_MODE_CLASS (MODE) == MODE_INT \
&& GET_MODE_SIZE (MODE) < UNITS_PER_WORD) \
{ \
(MODE) = Pmode; \
}
I don't know whether those RTL related with this macro. Yeah, there is a
solution to fix them -- updated the LOAD/STORE constraint. But I don't think
it's a good point.
My RISC chip only accepts the specified RTL which I have already defined
them with insn and expand patterns. So I think there must be a way which
legitimizes RTL code.
(insn:HI 17 13 14 0 (set (mem/s:SI (plus:SI (mem/f:SI (reg/f:SI 14 R14) [15
header+0 S4 A32])
(const_int 32 [0x20])) [10 <variable>.private_bits+0 S4
A32])
(reg:SI 4 R4 [56])) 8 {store_si} (insn_list:REG_DEP_TRUE 13
(insn_list:REG_DEP_TRUE 6 (nil)))
(expr_list:REG_EQUAL (const_int 0 [0x0])
(nil)))
If I have to fix those RTL one by one, that would be so tough! So did there
are some macros or TARGET HOOKs, which retrieve those unknown RTL, then, I
can write code there to force them into specified way.
Any suggestion is appreciated!
Thank you very much!
Daniel.Tian
_______________________________________________
Best Regards
Daniel Tian
Tel:86(21)51095958 - 8125
Fax:86(21)50277658
Emailïdaniel.tian@mavrixtech.com.cn
www.mavrixtech.com
--
Regards,
Paul Yuan (èé)