Commit cd06d2a2 by Jakub Jelinek Committed by Jakub Jelinek

re PR target/57623 (BEXTR intrinsic has memory operands switched around (fails to compile code))

	PR target/57623
	* config/i386/i386.md (bmi_bextr_<mode>): Swap predicates and
	constraints of operand 1 and 2.

	* gcc.target/i386/bmi-bextr-3.c: New test.

From-SVN: r200479
parent 2444244e
2013-06-27 Jakub Jelinek <jakub@redhat.com>
PR target/57623
* config/i386/i386.md (bmi_bextr_<mode>): Swap predicates and
constraints of operand 1 and 2.
PR target/57623
* config/i386/i386.md (bmi2_bzhi_<mode>3): Swap AND arguments
to match RTL canonicalization. Swap predicates and
constraints of operand 1 and 2.
......
......@@ -11679,8 +11679,8 @@
(define_insn "bmi_bextr_<mode>"
[(set (match_operand:SWI48 0 "register_operand" "=r,r")
(unspec:SWI48 [(match_operand:SWI48 1 "register_operand" "r,r")
(match_operand:SWI48 2 "nonimmediate_operand" "r,m")]
(unspec:SWI48 [(match_operand:SWI48 1 "nonimmediate_operand" "r,m")
(match_operand:SWI48 2 "register_operand" "r,r")]
UNSPEC_BEXTR))
(clobber (reg:CC FLAGS_REG))]
"TARGET_BMI"
......
2013-06-27 Jakub Jelinek <jakub@redhat.com>
PR target/57623
* gcc.target/i386/bmi-bextr-3.c: New test.
PR target/57623
* gcc.target/i386/bmi2-bzhi-1.c: New test.
2013-06-27 Marc Glisse <marc.glisse@inria.fr>
......
/* PR target/57623 */
/* { dg-do assemble { target bmi } } */
/* { dg-options "-O2 -mbmi" } */
#include <x86intrin.h>
unsigned int
f1 (unsigned int x, unsigned int *y)
{
return __bextr_u32 (x, *y);
}
unsigned int
f2 (unsigned int *x, unsigned int y)
{
return __bextr_u32 (*x, y);
}
#ifdef __x86_64__
unsigned long long
f3 (unsigned long long x, unsigned long long *y)
{
return __bextr_u64 (x, *y);
}
unsigned long long
f4 (unsigned long long *x, unsigned long long y)
{
return __bextr_u64 (*x, y);
}
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment