]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/79514 (ICE in curr_insn_transform, at lra-constraints.c:3773)
authorUros Bizjak <ubizjak@gmail.com>
Thu, 2 Mar 2017 21:35:38 +0000 (22:35 +0100)
committerUros Bizjak <uros@gcc.gnu.org>
Thu, 2 Mar 2017 21:35:38 +0000 (22:35 +0100)
PR target/79514
* config/i386/i386.md (*pushxf_rounded): New insn_and_split pattern.

testsuite/ChangeLog:

PR target/79514
* gcc.target/i386/pr79514.c: New test.

From-SVN: r245854

gcc/ChangeLog
gcc/config/i386/i386.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr79514.c [new file with mode: 0644]

index 6df3353f272a922182e824df352a854fe8afe776..40ed48354211f8e142d20433717a415be090e12a 100644 (file)
@@ -1,3 +1,8 @@
+2017-03-02  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/79514
+       * config/i386/i386.md (*pushxf_rounded): New insn_and_split pattern.
+
 2017-03-01  Pat Haugen  <pthaugen@us.ibm.com>
 
        Backport from mainline:
index 6e1987529ca4b670dfd9d6735ba6c3e1f1fd6eec..3b17bb2af612627f50548bd317744a6d5b0b22e1 100644 (file)
   operands[0] = replace_equiv_address (operands[0], stack_pointer_rtx);
 })
 
+(define_insn_and_split "*pushxf_rounded"
+  [(set (mem:XF
+         (pre_modify:DI
+           (reg:DI SP_REG)
+           (plus:DI (reg:DI SP_REG) (const_int -16))))
+       (match_operand:XF 0 "nonmemory_no_elim_operand" "f,r,*r,C"))]
+  "TARGET_64BIT"
+  "#"
+  "&& 1"
+  [(set (reg:DI SP_REG) (plus:DI (reg:DI SP_REG) (const_int -16)))
+   (set (match_dup 1) (match_dup 0))]
+{
+  rtx pat = PATTERN (curr_insn);
+  operands[1] = SET_DEST (pat);
+
+  /* Preserve memory attributes. */
+  operands[1] = replace_equiv_address (operands[1], stack_pointer_rtx);
+}
+  [(set_attr "type" "multi")
+   (set_attr "unit" "i387,*,*,*")
+   (set (attr "mode")
+       (cond [(eq_attr "alternative" "1,2,3")
+                (const_string "DI")
+             ]
+             (const_string "XF")))
+   (set (attr "preferred_for_size")
+     (cond [(eq_attr "alternative" "1")
+              (symbol_ref "false")]
+           (symbol_ref "true")))])
+
 (define_insn "*pushxf"
   [(set (match_operand:XF 0 "push_operand" "=<,<,<,<")
        (match_operand:XF 1 "general_no_elim_operand" "f,r,*r,oF"))]
index 7b7dc05095b0700747ffcc53431176d768460d65..fee2c8cd5a8003b53583886450ea2f69c89fe137 100644 (file)
@@ -1,3 +1,8 @@
+2017-03-02  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/79514
+       * gcc.target/i386/pr79514.c: New test.
+
 2017-03-01  Pat Haugen  <pthaugen@us.ibm.com>
 
        Backport from mainline:
diff --git a/gcc/testsuite/gcc.target/i386/pr79514.c b/gcc/testsuite/gcc.target/i386/pr79514.c
new file mode 100644 (file)
index 0000000..c5b7bf8
--- /dev/null
@@ -0,0 +1,12 @@
+/* PR target/79514 */
+/* { dg-do compile } */
+/* { dg-options "-m96bit-long-double" } */
+
+extern void bar (long double);
+
+extern long double x;
+
+void foo (void)
+{
+  bar (x);
+}