[PATCH, i386, Pointer Bounds Checker 33/x] MPX ABI

Ilya Enkovich enkovich.gnu@gmail.com
Wed Sep 24 21:51:00 GMT 2014


2014-09-24 23:09 GMT+04:00 Jeff Law <law@redhat.com>:
> On 09/24/14 07:13, Ilya Enkovich wrote:
>>
>> I tried to generate PARALLEL with all regs set by call.  Here is a
>> memset call I got:
>>
>> (call_insn 23 22 24 2 (set (parallel [
>>                  (expr_list:REG_DEP_TRUE (reg:DI 0 ax)
>>                      (const_int 0 [0]))
>>                  (expr_list:REG_DEP_TRUE (reg:BND64 77 bnd0)
>>                      (const_int 0 [0]))
>>                  (expr_list:REG_DEP_TRUE (reg:BND64 78 bnd1)
>>                      (const_int 0 [0]))
>>              ])
>>          (call/j (mem:QI (symbol_ref:DI ("memset") [flags 0x41]
>
> [ snip ]
> Looks good.  This is the approved way to handle multiple results of a call.
>
>>
>> During register allocation LRA generated a weird move instruction:
>>
>> (insn 63 0 0 (set (reg/f:DI 100)
>>          (parallel [
>>                  (expr_list:REG_DEP_TRUE (reg:DI 0 ax)
>>                      (const_int 0 [0]))
>>                  (expr_list:REG_DEP_TRUE (reg:BND64 77 bnd0)
>>                      (const_int 0 [0]))
>>                  (expr_list:REG_DEP_TRUE (reg:BND64 78 bnd1)
>>                      (const_int 0 [0]))
>>              ])) -1
>>       (nil))
>>
>> Which caused ICE later in LRA.  This move happens because of
>> REG_RETURNED (reg/f:DI 100) (see condition in inherit_in_ebb at
>> lra-constraints.c:5312).  Thus this code in LRA doesn't accept
>> PARALLEL dest for calls.
>
> This is a bug in LRA then.  Multiple return values aren't heavily used, so
> I'm not surprised that its handling was missed in LRA.
>
> The question now is how to bundle things together in such a way as to make
> it easy for Vlad to reproduce and fix this in LRA.
>
> Jeff

I suppose it should be easy to reproduce using the same test case I
use and some speudo patch which adds fake return values (e.g. xmm6 and
xmm7) to calls.  Will try to make some minimal patch and test Vlad
could work with.

Ilya



More information about the Gcc-patches mailing list