On 05/17/16 17:30, Cesar Philippidis wrote:
On 05/17/2016 02:22 PM, Andrew Pinski wrote:

Good eyes, thanks! I thought I had to create a new insn, but I got away
with an expand. I attached the updated patch.

Cesar

gcc.sum
Tests that now fail, but worked before:

nvptx-none-run: gcc.c-torture/execute/20100316-1.c   -Os  execution test
nvptx-none-run: gcc.c-torture/execute/20100708-1.c   -O1  execution test
nvptx-none-run: gcc.c-torture/execute/20100805-1.c   -O0  execution test
nvptx-none-run: gcc.dg/torture/pr52028.c   -O3 -fomit-frame-pointer 
-funroll-loops -fpeel-loops -ftracer -finline-functions  execution test
nvptx-none-run: gcc.dg/torture/pr52028.c   -O3 -g  execution test


Please determine why these now fail.

+(define_expand "sincossf3"
+  [(set (match_operand:SF 0 "nvptx_register_operand" "=R")
+       (unspec:SF [(match_operand:SF 2 "nvptx_register_operand" "R")]
+                  UNSPEC_COS))
+   (set (match_operand:SF 1 "nvptx_register_operand" "=R")
+       (unspec:SF [(match_dup 2)] UNSPEC_SIN))]
+  "flag_unsafe_math_optimizations"
+{
+  emit_insn (gen_sinsf2 (operands[1], operands[2]));
+  emit_insn (gen_cossf2 (operands[0], operands[2]));
+
+  DONE;
+})

Why the emit_insn code? that seems to be replicating the RTL representation -- you're saying the same thing twice.

Doesn't operands[2] need (conditionally) copying to a new register -- what if it aliases operands[1]?

+++ b/gcc/testsuite/gcc.target/nvptx/sincos-2.c
@@ -0,0 +1,30 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -ffast-math" } */
+

What is this test trying to test? I'm puzzled by it. (btw, don't use assert, either abort, exit(1) or return from main.)

nathan

Reply via email to