From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf1-x436.google.com (mail-pf1-x436.google.com [IPv6:2607:f8b0:4864:20::436]) by sourceware.org (Postfix) with ESMTPS id 9DEB9385800D for ; Tue, 15 Dec 2020 06:35:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 9DEB9385800D Received: by mail-pf1-x436.google.com with SMTP id f9so13863610pfc.11 for ; Mon, 14 Dec 2020 22:35:05 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=NAwG2ITC+pOskvMUsMOhxFdpaUj7LWLsB7Uvs+x25PE=; b=ub6lbGmCB+mtH+gcxMnAL/zL60LnJFXnlUApduLqPHh/0YriySeMN9BEhi+KeSIqit 558yBJcIBIMQvdEVzKyBcAvIQfFZE8I2FkwE/Lg6aEkDaUuSlLxQ+RsI8tdW3fnftQJA XR/j4un98GMq5IdqsMBU7nVfzZtrMh3ca2tZks7TiuaEURc1Gn4Vu+kuF5vSnYPE74ZB jyXsFEfdiCaK3PQflh1nLqq/xa6yD87jBfPRfazdh1+Sp0c3v0wLXEcgsKlzaefjjh3Y p4HFAGvJuNex+yWqE6uf9e6FPLYfG589NI5RgJ7hh9mpa8yceVx5eI1H9BYEgbUzWgTb TAWg== X-Gm-Message-State: AOAM530onO0GNL/o9nu22eaboVEQ0KWmCAYO6Bv5ZY7wkeu6gnxPSxH5 BVQfXbkuC3o6GlRhm1mKMTG4nUIuW78= X-Google-Smtp-Source: ABdhPJzttHPNndlLlG7S1UYdKI0WIaNEDThlfLqyXtSLb60XqYwUL35+wTmftSt+QS8V93cYxqY28g== X-Received: by 2002:a63:4083:: with SMTP id n125mr27864375pga.356.1608014104185; Mon, 14 Dec 2020 22:35:04 -0800 (PST) Received: from octofox.hsd1.ca.comcast.net ([2601:641:401:26c0:5caa:fe49:9c90:e47c]) by smtp.gmail.com with ESMTPSA id x23sm6238882pge.47.2020.12.14.22.35.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Dec 2020 22:35:03 -0800 (PST) From: Max Filippov To: gcc-patches@gcc.gnu.org Cc: linux-xtensa@linux-xtensa.org, Max Filippov Subject: [COMMITTED] gcc: xtensa: fix PR target/98285 Date: Mon, 14 Dec 2020 22:34:21 -0800 Message-Id: <20201215063421.5095-1-jcmvbkbc@gmail.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, FROM_LOCAL_NOVOWEL, GIT_PATCH_0, HK_RANDOM_ENVFROM, HK_RANDOM_FROM, KAM_NUMSUBJECT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 15 Dec 2020 06:35:07 -0000 2020-12-14 Max Filippov gcc/ * config/xtensa/predicates.md (addsubx_operand): Change accepted values from 2/4/8 to 1..3. * config/xtensa/xtensa.md (*addx, *subx): Change RTL pattern to use 'ashift' instead of 'mult'. Update operands[3] value. gcc/testsuite/ * gcc.target/xtensa/pr98285.c: New test. --- gcc/config/xtensa/predicates.md | 5 +-- gcc/config/xtensa/xtensa.md | 18 +++++--- gcc/testsuite/gcc.target/xtensa/pr98285.c | 54 +++++++++++++++++++++++ 3 files changed, 68 insertions(+), 9 deletions(-) create mode 100644 gcc/testsuite/gcc.target/xtensa/pr98285.c diff --git a/gcc/config/xtensa/predicates.md b/gcc/config/xtensa/predicates.md index 1721640dc79e..eb52b05aafad 100644 --- a/gcc/config/xtensa/predicates.md +++ b/gcc/config/xtensa/predicates.md @@ -25,9 +25,8 @@ (define_predicate "addsubx_operand" (and (match_code "const_int") - (match_test "INTVAL (op) == 2 - || INTVAL (op) == 4 - || INTVAL (op) == 8"))) + (match_test "INTVAL (op) >= 1 + && INTVAL (op) <= 3"))) (define_predicate "arith_operand" (ior (and (match_code "const_int") diff --git a/gcc/config/xtensa/xtensa.md b/gcc/config/xtensa/xtensa.md index 749fe477d562..671c4bea144f 100644 --- a/gcc/config/xtensa/xtensa.md +++ b/gcc/config/xtensa/xtensa.md @@ -162,11 +162,14 @@ (define_insn "*addx" [(set (match_operand:SI 0 "register_operand" "=a") - (plus:SI (mult:SI (match_operand:SI 1 "register_operand" "r") - (match_operand:SI 3 "addsubx_operand" "i")) + (plus:SI (ashift:SI (match_operand:SI 1 "register_operand" "r") + (match_operand:SI 3 "addsubx_operand" "i")) (match_operand:SI 2 "register_operand" "r")))] "TARGET_ADDX" - "addx%3\t%0, %1, %2" +{ + operands[3] = GEN_INT (1 << INTVAL (operands[3])); + return "addx%3\t%0, %1, %2"; +} [(set_attr "type" "arith") (set_attr "mode" "SI") (set_attr "length" "3")]) @@ -196,11 +199,14 @@ (define_insn "*subx" [(set (match_operand:SI 0 "register_operand" "=a") - (minus:SI (mult:SI (match_operand:SI 1 "register_operand" "r") - (match_operand:SI 3 "addsubx_operand" "i")) + (minus:SI (ashift:SI (match_operand:SI 1 "register_operand" "r") + (match_operand:SI 3 "addsubx_operand" "i")) (match_operand:SI 2 "register_operand" "r")))] "TARGET_ADDX" - "subx%3\t%0, %1, %2" +{ + operands[3] = GEN_INT (1 << INTVAL (operands[3])); + return "subx%3\t%0, %1, %2"; +} [(set_attr "type" "arith") (set_attr "mode" "SI") (set_attr "length" "3")]) diff --git a/gcc/testsuite/gcc.target/xtensa/pr98285.c b/gcc/testsuite/gcc.target/xtensa/pr98285.c new file mode 100644 index 000000000000..2c037d546565 --- /dev/null +++ b/gcc/testsuite/gcc.target/xtensa/pr98285.c @@ -0,0 +1,54 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +int mul3(int v) +{ + return v * 3; +} + +int mul5(int v) +{ + return v * 5; +} + +int mul7(int v) +{ + return v * 7; +} + +int mul9(int v) +{ + return v * 9; +} + +int mul2sub(int a, int b) +{ + return a * 2 - b; +} + +int mul4sub(int a, int b) +{ + return a * 4 - b; +} + +short index2(short *p, int i) +{ + return p[i]; +} + +int index4(int *p, int i) +{ + return p[i]; +} + +long long index8(long long *p, int i) +{ + return p[i]; +} + +/* { dg-final { scan-assembler-times "addx2" 2 } } */ +/* { dg-final { scan-assembler-times "addx4" 2 } } */ +/* { dg-final { scan-assembler-times "addx8" 2 } } */ +/* { dg-final { scan-assembler-times "subx2" 1 } } */ +/* { dg-final { scan-assembler-times "subx4" 1 } } */ +/* { dg-final { scan-assembler-times "subx8" 1 } } */ -- 2.20.1