backport: re PR target/57623 (BEXTR intrinsic has memory operands switched around (fails to compile code))
Backported from mainline 2013-06-27 Jakub Jelinek <jakub@redhat.com> 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. * gcc.target/i386/bmi2-bzhi-1.c: New test. From-SVN: r210166
This commit is contained in:
parent
338b4a6f09
commit
bc5874827e
|
@ -1,3 +1,13 @@
|
|||
2014-05-07 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
Backported from mainline
|
||||
2013-06-27 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
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.
|
||||
|
||||
2014-05-07 Richard Biener <rguenther@suse.de>
|
||||
|
||||
Backport from mainline
|
||||
|
|
|
@ -12127,9 +12127,9 @@
|
|||
;; BMI2 instructions.
|
||||
(define_insn "bmi2_bzhi_<mode>3"
|
||||
[(set (match_operand:SWI48 0 "register_operand" "=r")
|
||||
(and:SWI48 (match_operand:SWI48 1 "register_operand" "r")
|
||||
(lshiftrt:SWI48 (const_int -1)
|
||||
(match_operand:SWI48 2 "nonimmediate_operand" "rm"))))
|
||||
(and:SWI48 (lshiftrt:SWI48 (const_int -1)
|
||||
(match_operand:SWI48 2 "register_operand" "r"))
|
||||
(match_operand:SWI48 1 "nonimmediate_operand" "rm")))
|
||||
(clobber (reg:CC FLAGS_REG))]
|
||||
"TARGET_BMI2"
|
||||
"bzhi\t{%2, %1, %0|%0, %1, %2}"
|
||||
|
|
|
@ -1,3 +1,11 @@
|
|||
2014-05-07 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
Backported from mainline
|
||||
2013-06-27 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/57623
|
||||
* gcc.target/i386/bmi2-bzhi-1.c: New test.
|
||||
|
||||
2014-05-07 Richard Biener <rguenther@suse.de>
|
||||
|
||||
Backport from mainline
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
/* PR target/57623 */
|
||||
/* { dg-do assemble { target bmi2 } } */
|
||||
/* { dg-options "-O2 -mbmi2" } */
|
||||
|
||||
#include <x86intrin.h>
|
||||
|
||||
unsigned int
|
||||
f1 (unsigned int x, unsigned int *y)
|
||||
{
|
||||
return _bzhi_u32 (x, *y);
|
||||
}
|
||||
|
||||
unsigned int
|
||||
f2 (unsigned int *x, unsigned int y)
|
||||
{
|
||||
return _bzhi_u32 (*x, y);
|
||||
}
|
||||
|
||||
#ifdef __x86_64__
|
||||
unsigned long long
|
||||
f3 (unsigned long long x, unsigned long long *y)
|
||||
{
|
||||
return _bzhi_u64 (x, *y);
|
||||
}
|
||||
|
||||
unsigned long long
|
||||
f4 (unsigned long long *x, unsigned long long y)
|
||||
{
|
||||
return _bzhi_u64 (*x, y);
|
||||
}
|
||||
#endif
|
Loading…
Reference in New Issue