i386.c (ix86_expand_call): Avoid nested PARALLEL in returned call value.
authorIlya Enkovich <ilya.enkovich@intel.com>
Fri, 3 Apr 2015 08:51:26 +0000 (08:51 +0000)
committerIlya Enkovich <ienkovich@gcc.gnu.org>
Fri, 3 Apr 2015 08:51:26 +0000 (08:51 +0000)
* config/i386/i386.c (ix86_expand_call): Avoid nested
PARALLEL in returned call value.

From-SVN: r221851

gcc/ChangeLog
gcc/config/i386/i386.c

index a11ec1cc0e5d2bea66667ceda1aa539a572cbf97..b37e15d32e0064356a9bbe1f12eb7af09f13d3a7 100644 (file)
@@ -1,3 +1,8 @@
+2015-04-02  Ilya Enkovich  <ilya.enkovich@intel.com>
+
+       * config/i386/i386.c (ix86_expand_call): Avoid nested
+       PARALLEL in returned call value.
+
 2015-04-02  Ilya Enkovich  <ilya.enkovich@intel.com>
 
        * lto-cgraph.c (input_cgraph_1): Always link instrumented
index d8d9983009d29df1ef1ea10ddce439a3528062d7..02b5103138a0fb97836815329bb3bbeca0b3949a 100644 (file)
@@ -25624,8 +25624,19 @@ ix86_expand_call (rtx retval, rtx fnaddr, rtx callarg1,
        {
          rtx b0 = gen_rtx_REG (BND64mode, FIRST_BND_REG);
          rtx b1 = gen_rtx_REG (BND64mode, FIRST_BND_REG + 1);
-         retval = gen_rtx_PARALLEL (VOIDmode, gen_rtvec (3, retval, b0, b1));
-         chkp_put_regs_to_expr_list (retval);
+         if (GET_CODE (retval) == PARALLEL)
+           {
+             b0 = gen_rtx_EXPR_LIST (VOIDmode, b0, const0_rtx);
+             b1 = gen_rtx_EXPR_LIST (VOIDmode, b1, const0_rtx);
+             rtx par = gen_rtx_PARALLEL (VOIDmode, gen_rtvec (2, b0, b1));
+             retval = chkp_join_splitted_slot (retval, par);
+           }
+         else
+           {
+             retval = gen_rtx_PARALLEL (VOIDmode,
+                                        gen_rtvec (3, retval, b0, b1));
+             chkp_put_regs_to_expr_list (retval);
+           }
        }
 
       call = gen_rtx_SET (VOIDmode, retval, call);