aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndrew Waterman <waterman@cs.berkeley.edu>2015-11-18 16:30:50 -0800
committerAndrew Waterman <waterman@cs.berkeley.edu>2015-11-18 16:30:50 -0800
commit1dce42c06e18ca9f98dece08a902e485128cd425 (patch)
tree094b72e79387472e7f7ff52964d3bac0789f709e /gcc
parenta36a4fba58a3f04e9fa439c16e8d6e453ef6067d (diff)
downloadriscv-gnu-toolchain-1dce42c06e18ca9f98dece08a902e485128cd425.zip
riscv-gnu-toolchain-1dce42c06e18ca9f98dece08a902e485128cd425.tar.gz
riscv-gnu-toolchain-1dce42c06e18ca9f98dece08a902e485128cd425.tar.bz2
gcc: improve codegen for reg = (float1 != float2);
Diffstat (limited to 'gcc')
-rw-r--r--gcc/gcc/config/riscv/predicates.md5
-rw-r--r--gcc/gcc/config/riscv/riscv.md15
2 files changed, 12 insertions, 8 deletions
diff --git a/gcc/gcc/config/riscv/predicates.md b/gcc/gcc/config/riscv/predicates.md
index 1db0c4f..688c15c 100644
--- a/gcc/gcc/config/riscv/predicates.md
+++ b/gcc/gcc/config/riscv/predicates.md
@@ -181,7 +181,4 @@
(match_code "eq,ne,lt,ltu,le,leu,ge,geu,gt,gtu"))
(define_predicate "fp_order_operator"
- (match_code "eq,lt,le,gt,ge"))
-
-(define_predicate "fp_unorder_operator"
- (match_code "ordered,unordered"))
+ (match_code "eq,ne,lt,le,gt,ge"))
diff --git a/gcc/gcc/config/riscv/riscv.md b/gcc/gcc/config/riscv/riscv.md
index af3a3c2..0ae09b9 100644
--- a/gcc/gcc/config/riscv/riscv.md
+++ b/gcc/gcc/config/riscv/riscv.md
@@ -2025,13 +2025,20 @@
DONE;
})
-(define_insn "cstore<mode>4"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (match_operator:SI 1 "fp_order_operator"
+(define_insn_and_split "cstore<mode>4"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (match_operator:SI 1 "fp_order_operator"
[(match_operand:SCALARF 2 "register_operand" "f")
(match_operand:SCALARF 3 "register_operand" "f")]))]
"TARGET_HARD_FLOAT"
- "f%C1.<fmt>\t%0,%2,%3"
+{
+ if (GET_CODE (operands[1]) != NE)
+ return "f%C1.<fmt>\t%0,%2,%3";
+}
+ ""
+ [(set (match_dup 0) (eq:SI (match_dup 2) (match_dup 3)))
+ (set (match_dup 0) (eq:SI (match_dup 0) (const_int 0)))]
+ ""
[(set_attr "type" "fcmp")
(set_attr "mode" "<UNITMODE>")])