Adjust lrintmn2 operand preidcates according to real instructions.
gcc/ChangeLog:
PR target/107185
* config/i386/i386.md (lrint<MODEF:mode><SWI48:mode>2): Swap
predicate of operands[0] and operands[1].
gcc/testsuite/ChangeLog:
* gcc.target/i386/pr107185.c: New test.
(set_attr "mode" "<MODE>")])
(define_expand "lrint<MODEF:mode><SWI48:mode>2"
- [(set (match_operand:SWI48 0 "nonimmediate_operand")
- (unspec:SWI48 [(match_operand:MODEF 1 "register_operand")]
+ [(set (match_operand:SWI48 0 "register_operand")
+ (unspec:SWI48 [(match_operand:MODEF 1 "nonimmediate_operand")]
UNSPEC_FIX_NOTRUNC))]
"SSE_FLOAT_MODE_P (<MODEF:MODE>mode) && TARGET_SSE_MATH")
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-ffast-math" } */
+
+void
+foo (float f)
+{
+ long p = __builtin_lrintf (f);
+}