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