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: Alias set and MEM tracking patch


On Wednesday 17 October 2001 11:48, Richard Kenner wrote:
> This patch does a few things that ended up being tied together.
>
> First, it fixes the problem with execute/20001024-1.c involving restricted
> pointers by defering making the new alias set until we actually need the
> alias set of the object.  The reason is that we might have a pointer to
> an incomplete type and if we get an alias set for an incomplete type
> it gets changed to alias set zero when it completes.  We also don't change
> the alias set of a reference into a reference via a restricted type into
> the alias set of the component since it is known not to be aliased.
>
> Second, it fixes some minor problems in find_placeholder and calls it
> from get_inner_reference.
>
> Third, it now computes and displays in the RTL (but nothing uses so far)
> more attributes about a memory reference.
>
> Tested on alphaev56.
>
> Wed Oct 17 05:26:39 2001  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
>
> 	* Makefile.in (print-rtl.o): Depend on TREE_H.
> 	* alias.c (get_alias_set): Make two passes over objects to first
> 	see if inner object is access via restricted pointer.
> 	Defer allocating alias set for restricted pointer until here.
> 	Call find_placeholder with second arg nonzero.
> 	Minor cleanups.
> 	* c-common.c (c_apply_type_quals_to_decl): Defer getting alias
> 	set for restricted pointer types.
> 	* emit-rtl.c (set_mem_attributes): Set more attributes.
> 	(set_mem_align, change_address, adjust_address_1): New functions.
> 	(change_address_1): Now static.
> 	(adjust_address, adjust_address_nv): Deleted.
> 	(replace_equiv_address): Call change_address_1.
> 	* expr.c (get_inner_reference): Handle PLACEHOLDER_EXPR.
> 	(find_placeholder): Get starting point from PLIST arg.
> 	(expand_expr, case PLACEHOLDER_EXPR): Initialize find_placeholder arg.
> 	* expr.h (set_mem_align, change_address, adjust_address_1): New decls.
> 	(adjust_address, adjust_address_nv): New macros.
> 	* print-rtl.c (tree.h): New include.
> 	(print_rtx, case MEM): Print all memory attributes.

This patch triggers a reload problem on powerpc-linux-gnu with the attached 
testcase (reduced from XF4/Mesa) compiled with -O2:

Starting program: /usr/lib/gcc-lib/ppc-linux/3.1/cc1 -fpreprocessed test3.i 
-quiet -dumpbase test3.c  -O2 -W -Wall -version -fsigned-char -o test3.s
GNU CPP version 3.1 20020120 (experimental) (cpplib) (PowerPC GNU/Linux)
GNU C version 3.1 20020120 (experimental) (ppc-linux)
        compiled by GNU C version 3.1 20020120 (experimental).
test3.c: In function `spec_tex_aa_tri':
test3.c:553: unrecognizable insn:
(insn 3418 3417 110 (set (mem:CC (plus:SI (plus:SI (reg/f:SI 1 r1)
                    (const_int 65536 [0x10000]))
                (const_int 24824 [0x60f8])) [63 S4 A32])
        (reg:CC 8 r8)) -1 (nil)
    (nil))

Breakpoint 1, fancy_abort (file=0x1033f230 
"/cvsx/rawhide/BUILD/gcc-3.1/gcc/recog.c", line=2129, function=0x1033f554 
"extract_insn")
    at /cvsx/rawhide/BUILD/gcc-3.1/gcc/diagnostic.c:1450
1450      internal_error ("Internal compiler error in %s, at %s:%d",

The problem seems to be that the (plus:SI (reg/f:SI 1 r1) (const_int 65536 
[0x10000])) never gets replaced with the already prepared (reg:SI 6 r6):

(insn 3416 109 3417 (set (reg:SI 6 r6)
        (plus:SI (reg/f:SI 1 r1)
            (const_int 65536 [0x10000]))) 36 {*addsi3_internal1} (nil)
    (nil))

(insn 3417 3416 3418 (set (reg:CC 8 r8)
        (reg:CC 68 cr0)) 299 {*rs6000.md:7787} (nil)
    (nil))

(insn 3418 3417 110 (set (mem:CC (plus:SI (plus:SI (reg/f:SI 1 r1)
                    (const_int 65536 [0x10000]))
                (const_int 24824 [0x60f8])) [63 S4 A32])
        (reg:CC 8 r8)) -1 (nil)
    (nil))

(insn 110 3418 3419 (set (reg:CCEQ 68 cr0)
        (compare:CCEQ (ior:SI (lt:SI (reg:CCFP 68 cr0)
                    (const_int 0 [0x0]))
                (eq:SI (reg:CCFP 68 cr0)
                    (const_int 0 [0x0])))
            (const_int 1 [0x1]))) 489 {*rs6000.md:12946} (insn_list 109 (nil))
    (expr_list:REG_DEAD (reg:CCFP 68 cr0 [164])
        (nil)))

Any ideas?
Franz.

Attachment: test3.i
Description: Text document


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