Help with RTL expand and a builtins

Martin Liška mliska@suse.cz
Tue Jul 18 07:16:00 GMT 2017


Hello.

I've been working on PR59521 and I'm unable to properly emit RTL instructions
in expand_builtin_mempcpy. At the end of the function I have:

...
(insn 12 11 13 (set (reg:DI 5 di)
        (reg:DI 90)) "/home/marxin/Programming/testcases/mempcpy-1.c":1 -1
     (nil))

(call_insn/j 13 12 14 (set (reg:DI 0 ax)
        (call (mem:QI (symbol_ref:DI ("memcpy") [flags 0x41] <function_decl 0x2aaaac0e0e00 __builtin_memcpy>) [0 __builtin_memcpy S1 A8])
            (const_int 0 [0]))) "/home/marxin/Programming/testcases/mempcpy-1.c":1 -1
     (expr_list:REG_CALL_DECL (symbol_ref:DI ("memcpy") [flags 0x41] <function_decl 0x2aaaac0e0e00 __builtin_memcpy>)
        (expr_list:REG_EH_REGION (const_int 0 [0])
            (nil)))
    (expr_list:DI (use (reg:DI 5 di))
        (expr_list:DI (use (reg:DI 4 si))
            (expr_list:DI (use (reg:DI 1 dx))
                (nil)))))

(barrier 14 13 15)

(insn 15 14 16 (set (reg:DI 93)
        (reg:DI 0 ax)) "/home/marxin/Programming/testcases/mempcpy-1.c":1 -1
     (nil))

(insn 16 15 17 (set (reg:DI 94)
        (reg:DI 93)) "/home/marxin/Programming/testcases/mempcpy-1.c":1 -1
     (nil))

(insn 17 16 18 (set (reg:DI 95)
        (plus:DI (reg:DI 94)
            (const_int 10000000 [0x989680]))) "/home/marxin/Programming/testcases/mempcpy-1.c":1 -1
     (nil))

(insn 18 17 0 (set (reg/f:DI 87 [ <retval> ])
        (reg:DI 95)) "/home/marxin/Programming/testcases/mempcpy-1.c":1 -1
     (nil))

and
(gdb) p debug_rtx(target)
(reg/f:DI 87 [ <retval> ])
$3 = void


which is fine, it's basically return memcpy (x,y,10000000) + 10000000. However -fdump-rtl-expand shows:

...
(insn 12 11 13 2 (set (reg:DI 5 di)
        (reg:DI 90)) "/home/marxin/Programming/testcases/mempcpy-1.c":1 -1
     (nil))
(call_insn/j 13 12 14 2 (set (reg:DI 0 ax)
        (call (mem:QI (symbol_ref:DI ("memcpy") [flags 0x41] <function_decl 0x2b9b2187fe00 __builtin_memcpy>) [0 __builtin_memcpy S1 A8])
            (const_int 0 [0]))) "/home/marxin/Programming/testcases/mempcpy-1.c":1 -1
     (expr_list:REG_CALL_DECL (symbol_ref:DI ("memcpy") [flags 0x41] <function_decl 0x2b9b2187fe00 __builtin_memcpy>)
        (expr_list:REG_EH_REGION (const_int 0 [0])
            (nil)))
    (expr_list:DI (use (reg:DI 5 di))
        (expr_list:DI (use (reg:DI 4 si))
            (expr_list:DI (use (reg:DI 1 dx))
                (nil)))))
(barrier 14 13 0)

I'm attaching patch and there's test-case:

$ cat ~/Programming/testcases/mempcpy-1.c
void *f1(void *p, void *q) { return __builtin_mempcpy(p, q, 10000000); }

Thanks,
Martin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Make-mempcpy-more-optimal-PR-middle-end-70140.patch
Type: text/x-patch
Size: 16143 bytes
Desc: not available
URL: <https://gcc.gnu.org/pipermail/gcc/attachments/20170718/41e7571b/attachment.bin>


More information about the Gcc mailing list