aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/config/mips/mips-msa.md6
-rw-r--r--gcc/config/mips/mips.md10
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.target/mips/msa-ds.c31
5 files changed, 58 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b36834b..3516235 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,14 @@
+2019-11-19 Zoran Jovanovic <zoran.jovanovic@mips.com>
+ Dragan Mladjenovic <dmladjenovic@wavecomp.com>
+
+ * config/mips/mips-msa.md (msa_<msabr>_<msafmt_f>, msa_<msabr>_v_<msafmt_f>):
+ Mark as not having "likely" version.
+ * config/mips/mips.md (insn_count): The simd_div instruction with
+ TARGET_CHECK_ZERO_DIV consists of 3 instructions.
+ (can_delay): Exclude simd_branch.
+ (defile_delay *): Add simd_branch instructions.
+ They have one regular delay slot.
+
2019-11-19 Martin Liska <mliska@suse.cz>
* toplev.c (general_init): Move the call...
diff --git a/gcc/config/mips/mips-msa.md b/gcc/config/mips/mips-msa.md
index 628423d..100cf99 100644
--- a/gcc/config/mips/mips-msa.md
+++ b/gcc/config/mips/mips-msa.md
@@ -2719,7 +2719,8 @@
}
[(set_attr "type" "simd_branch")
(set_attr "mode" "<MODE>")
- (set_attr "compact_form" "never")])
+ (set_attr "compact_form" "never")
+ (set_attr "branch_likely" "no")])
(define_insn "msa_<msabr>_v_<msafmt_f>"
[(set (pc) (if_then_else
@@ -2738,4 +2739,5 @@
}
[(set_attr "type" "simd_branch")
(set_attr "mode" "TI")
- (set_attr "compact_form" "never")])
+ (set_attr "compact_form" "never")
+ (set_attr "branch_likely" "no")])
diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md
index 4de9731..929e368 100644
--- a/gcc/config/mips/mips.md
+++ b/gcc/config/mips/mips.md
@@ -560,6 +560,12 @@
(eq_attr "type" "idiv,idiv3")
(symbol_ref "mips_idiv_insns (GET_MODE (PATTERN (insn)))")
+ ;; simd div have 3 instruction if TARGET_CHECK_ZERO_DIV is true.
+ (eq_attr "type" "simd_div")
+ (if_then_else (match_test "TARGET_CHECK_ZERO_DIV")
+ (const_int 3)
+ (const_int 1))
+
(not (eq_attr "sync_mem" "none"))
(symbol_ref "mips_sync_loop_insns (insn, operands)")]
(const_int 1)))
@@ -759,7 +765,7 @@
;; Can the instruction be put into a delay slot?
(define_attr "can_delay" "no,yes"
- (if_then_else (and (eq_attr "type" "!branch,call,jump")
+ (if_then_else (and (eq_attr "type" "!branch,call,jump,simd_branch")
(eq_attr "hazard" "none")
(match_test "get_attr_insn_count (insn) == 1"))
(const_string "yes")
@@ -1098,7 +1104,7 @@
;; Branches that have delay slots and don't have likely variants do
;; not annul on false.
-(define_delay (and (eq_attr "type" "branch")
+(define_delay (and (eq_attr "type" "branch,simd_branch")
(not (match_test "TARGET_MIPS16"))
(ior (match_test "TARGET_CB_NEVER")
(and (eq_attr "compact_form" "maybe")
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 32d6223..fc275fa 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2019-11-19 Dragan Mladjenovic <dmladjenovic@wavecomp.com>
+
+ * gcc.target/mips/msa-ds.c: New test.
+
2019-11-19 Richard Sandiford <richard.sandiford@arm.com>
gcc/
Revert:
diff --git a/gcc/testsuite/gcc.target/mips/msa-ds.c b/gcc/testsuite/gcc.target/mips/msa-ds.c
new file mode 100644
index 0000000..c6932b2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/mips/msa-ds.c
@@ -0,0 +1,31 @@
+/* { dg-options "-mmsa -mfp64 -mhard-float" } */
+/* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */
+
+/* Check that delay slots for MSA branches are filled. */
+
+typedef unsigned v4si __attribute__ ((vector_size (16)));
+
+int __attribute__ ((cold)) foo (v4si v , int a, int b)
+{
+ int c = 0xf0f0f0f0;
+ int f = __builtin_msa_bnz_w (v);
+
+ if (f)
+ return a + c;
+ else
+ return b + c;
+}
+
+int __attribute__ ((cold)) bar (v4si v , int a, int b)
+{
+ int c = 0xf0f0f0f0;
+ int f = __builtin_msa_bz_w (v);
+
+ if (f)
+ return a + c;
+ else
+ return b + c;
+}
+
+/* { dg-final { scan-assembler-not "foo:.*nop.*jr.*foo," } } */
+/* { dg-final { scan-assembler-not "bar:.*nop.*jr.*bar," } } */