+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...
}
[(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
}
[(set_attr "type" "simd_branch")
(set_attr "mode" "TI")
- (set_attr "compact_form" "never")])
+ (set_attr "compact_form" "never")
+ (set_attr "branch_likely" "no")])
(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)))
;; 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")
;; 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")
+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:
--- /dev/null
+/* { 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," } } */