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