mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-26 07:40:26 +08:00
re PR target/46098 (ICE: in extract_insn, at recog.c:2100 with -msse3 -ffloat-store and __builtin_ia32_loadupd())
PR target/46098 * config/i386/sse.md (*avx_movu<ssemodesuffix><avxmodesuffix>): Rename from avx_movu<ssemodesuffix><avxmodesuffix>. (avx_movu<ssemodesuffix><avxmodesuffix>): New expander. (*<sse>_movu<ssemodesuffix>): Rename from <sse>_movu<ssemodesuffix>. (<sse>_movu<ssemodesuffix>): New expander. (*avx_movdqu<avxmodesuffix>): Rename from avx_movdqu<avxmodesuffix>. (avx_movdqu<avxmodesuffix>): New expander. (*sse2_movdqu): Rename from sse2_movdqu. (sse2_movdqu): New expander. testsuite/ChangeLog: PR target/46098 * gcc.target/i386/pr46098.c: New test. From-SVN: r165845
This commit is contained in:
parent
4e8859d2ad
commit
5ab2c5cb69
@ -1,3 +1,16 @@
|
||||
2010-10-22 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
PR target/46098
|
||||
* config/i386/sse.md (*avx_movu<ssemodesuffix><avxmodesuffix>):
|
||||
Rename from avx_movu<ssemodesuffix><avxmodesuffix>.
|
||||
(avx_movu<ssemodesuffix><avxmodesuffix>): New expander.
|
||||
(*<sse>_movu<ssemodesuffix>): Rename from <sse>_movu<ssemodesuffix>.
|
||||
(<sse>_movu<ssemodesuffix>): New expander.
|
||||
(*avx_movdqu<avxmodesuffix>): Rename from avx_movdqu<avxmodesuffix>.
|
||||
(avx_movdqu<avxmodesuffix>): New expander.
|
||||
(*sse2_movdqu): Rename from sse2_movdqu.
|
||||
(sse2_movdqu): New expander.
|
||||
|
||||
2010-10-22 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/45720
|
||||
@ -175,7 +188,7 @@
|
||||
2010-10-21 Iain Sandoe <iains@gcc.gnu.org>
|
||||
|
||||
Based on the CFString implementation in FSF apple/trunk branch.
|
||||
|
||||
|
||||
* target.def (objc_construct_string): New Hook.
|
||||
* doc/tm.texi (objc_construct_string): Document.
|
||||
* doc/tm.texi.in (TARGET_OBJC_CONSTRUCT_STRING): New.
|
||||
@ -192,7 +205,7 @@
|
||||
(darwin_cfstring_p): Likewise.
|
||||
(darwin_enter_string_into_cfstring_table): Likewise.
|
||||
* config/rs6000/darwin.h (SUBTARGET_INIT_BUILTINS) Update for CFString.
|
||||
* config/darwin.c (darwin_running_cxx): New var.
|
||||
* config/darwin.c (darwin_running_cxx): New var.
|
||||
(machopic_select_section): Return cfstring_constant_object_section.
|
||||
(darwin_override_options): Set darwin_running_cxx.
|
||||
(add_builtin_field_decl): New.
|
||||
|
@ -382,7 +382,18 @@
|
||||
DONE;
|
||||
})
|
||||
|
||||
(define_insn "avx_movu<ssemodesuffix><avxmodesuffix>"
|
||||
(define_expand "avx_movu<ssemodesuffix><avxmodesuffix>"
|
||||
[(set (match_operand:AVXMODEF2P 0 "nonimmediate_operand" "")
|
||||
(unspec:AVXMODEF2P
|
||||
[(match_operand:AVXMODEF2P 1 "nonimmediate_operand" "")]
|
||||
UNSPEC_MOVU))]
|
||||
"AVX_VEC_FLOAT_MODE_P (<MODE>mode)"
|
||||
{
|
||||
if (MEM_P (operands[0]) && MEM_P (operands[1]))
|
||||
operands[1] = force_reg (<MODE>mode, operands[1]);
|
||||
})
|
||||
|
||||
(define_insn "*avx_movu<ssemodesuffix><avxmodesuffix>"
|
||||
[(set (match_operand:AVXMODEF2P 0 "nonimmediate_operand" "=x,m")
|
||||
(unspec:AVXMODEF2P
|
||||
[(match_operand:AVXMODEF2P 1 "nonimmediate_operand" "xm,x")]
|
||||
@ -408,7 +419,18 @@
|
||||
(set_attr "prefix" "maybe_vex")
|
||||
(set_attr "mode" "TI")])
|
||||
|
||||
(define_insn "<sse>_movu<ssemodesuffix>"
|
||||
(define_expand "<sse>_movu<ssemodesuffix>"
|
||||
[(set (match_operand:SSEMODEF2P 0 "nonimmediate_operand" "")
|
||||
(unspec:SSEMODEF2P
|
||||
[(match_operand:SSEMODEF2P 1 "nonimmediate_operand" "")]
|
||||
UNSPEC_MOVU))]
|
||||
"SSE_VEC_FLOAT_MODE_P (<MODE>mode)"
|
||||
{
|
||||
if (MEM_P (operands[0]) && MEM_P (operands[1]))
|
||||
operands[1] = force_reg (<MODE>mode, operands[1]);
|
||||
})
|
||||
|
||||
(define_insn "*<sse>_movu<ssemodesuffix>"
|
||||
[(set (match_operand:SSEMODEF2P 0 "nonimmediate_operand" "=x,m")
|
||||
(unspec:SSEMODEF2P
|
||||
[(match_operand:SSEMODEF2P 1 "nonimmediate_operand" "xm,x")]
|
||||
@ -420,7 +442,18 @@
|
||||
(set_attr "movu" "1")
|
||||
(set_attr "mode" "<MODE>")])
|
||||
|
||||
(define_insn "avx_movdqu<avxmodesuffix>"
|
||||
(define_expand "avx_movdqu<avxmodesuffix>"
|
||||
[(set (match_operand:AVXMODEQI 0 "nonimmediate_operand" "")
|
||||
(unspec:AVXMODEQI
|
||||
[(match_operand:AVXMODEQI 1 "nonimmediate_operand" "")]
|
||||
UNSPEC_MOVU))]
|
||||
"TARGET_AVX"
|
||||
{
|
||||
if (MEM_P (operands[0]) && MEM_P (operands[1]))
|
||||
operands[1] = force_reg (<MODE>mode, operands[1]);
|
||||
})
|
||||
|
||||
(define_insn "*avx_movdqu<avxmodesuffix>"
|
||||
[(set (match_operand:AVXMODEQI 0 "nonimmediate_operand" "=x,m")
|
||||
(unspec:AVXMODEQI
|
||||
[(match_operand:AVXMODEQI 1 "nonimmediate_operand" "xm,x")]
|
||||
@ -432,7 +465,17 @@
|
||||
(set_attr "prefix" "vex")
|
||||
(set_attr "mode" "<avxvecmode>")])
|
||||
|
||||
(define_insn "sse2_movdqu"
|
||||
(define_expand "sse2_movdqu"
|
||||
[(set (match_operand:V16QI 0 "nonimmediate_operand" "")
|
||||
(unspec:V16QI [(match_operand:V16QI 1 "nonimmediate_operand" "")]
|
||||
UNSPEC_MOVU))]
|
||||
"TARGET_SSE2"
|
||||
{
|
||||
if (MEM_P (operands[0]) && MEM_P (operands[1]))
|
||||
operands[1] = force_reg (V16QImode, operands[1]);
|
||||
})
|
||||
|
||||
(define_insn "*sse2_movdqu"
|
||||
[(set (match_operand:V16QI 0 "nonimmediate_operand" "=x,m")
|
||||
(unspec:V16QI [(match_operand:V16QI 1 "nonimmediate_operand" "xm,x")]
|
||||
UNSPEC_MOVU))]
|
||||
|
@ -1,3 +1,8 @@
|
||||
2010-10-22 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
PR target/46098
|
||||
* gcc.target/i386/pr46098.c: New test.
|
||||
|
||||
2010-10-22 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/45720
|
||||
@ -11,7 +16,7 @@
|
||||
2010-10-21 Iain Sandoe <iains@gcc.gnu.org>
|
||||
|
||||
Based on the CFString implementation in FSF apple/trunk branch.
|
||||
|
||||
|
||||
* lib/objc-dg.exp (objc-dg-runtest): Merge flags and additional flags
|
||||
so that the latter can be used in dg-skip and dg-xfail clauses.
|
||||
* lib/obj-c++-dg.exp (obj-c++-dg-runtest): Likewise.
|
||||
@ -39,17 +44,17 @@
|
||||
* obj-c++.dg/torture/strings/const-cfstring-1.mm: New.
|
||||
* obj-c++.dg/torture/strings/const-cfstring-3.mm: New.
|
||||
* obj-c++.dg/torture/strings/const-cfstring-4.mm: New.
|
||||
|
||||
* objc/execute/string1.m: Don't use CFStrings on Darwin. Update test
|
||||
to use dg-additional-files for Object1, move to objc.dg/torture/strings/.
|
||||
|
||||
* objc/execute/string1.m: Don't use CFStrings on Darwin. Update test to
|
||||
use dg-additional-files for Object1, move to objc.dg/torture/strings/.
|
||||
* objc/execute/string2.m: Likewise.
|
||||
* objc/execute/string3.m: Likewise.
|
||||
* objc/execute/string3.m: Likewise.
|
||||
* objc.dg/foreach-2.m: Don't use CFStrings on Darwin.
|
||||
* objc.dg/foreach-4.m: Likewise.
|
||||
* objc.dg/foreach-5.m: Likewise.
|
||||
* objc.dg/const-str-3.m: Don't use CFStrings on Darwin. Update test
|
||||
to use dg-additional-files for Object1, move to objc.dg/torture/strings/.
|
||||
* objc.dg/const-str-3.m: Don't use CFStrings on Darwin. Update test to
|
||||
use dg-additional-files for Object1, move to objc.dg/torture/strings/.
|
||||
* objc.dg/const-str-4.m: Likewise.
|
||||
* objc.dg/const-str-7.m: Likewise.
|
||||
* objc.dg/const-str-8.m: Likewise.
|
||||
|
9
gcc/testsuite/gcc.target/i386/pr46098.c
Normal file
9
gcc/testsuite/gcc.target/i386/pr46098.c
Normal file
@ -0,0 +1,9 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-msse2 -ffloat-store" } */
|
||||
|
||||
typedef double v2df __attribute__((vector_size (16)));
|
||||
|
||||
v2df foo (double *d)
|
||||
{
|
||||
return __builtin_ia32_loadupd (d);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user