Bug 16362 - i386/x86-64 backend missing logical vector operations
Summary: i386/x86-64 backend missing logical vector operations
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: target (show other bugs)
Version: lno
: P2 enhancement
Target Milestone: 4.0.0
Assignee: Not yet assigned to anyone
URL:
Keywords: missed-optimization, ssemmx
Depends on:
Blocks:
 
Reported: 2004-07-04 19:34 UTC by Andi Kleen
Modified: 2005-01-12 06:41 UTC (History)
1 user (show)

See Also:
Host:
Target: i?86-*-*, x86_64-*-*
Build:
Known to work:
Known to fail:
Last reconfirmed: 2005-01-02 01:17:30


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Andi Kleen 2004-07-04 19:34:16 UTC
The vectorization test suite currently has a few failures that happen
because i386 is missing patterns for logical vector operations.
Altivec got these recently.

> This means the i386 backend needs new patterns for logical operations
> like you added to altivec.md ?

I suspect so.

> FAIL: gcc.dg/tree-ssa-vect/tree-ssa-vect-17.c scan-tree-dump-times
vectorized 3 loops 1
> FAIL: gcc.dg/tree-ssa-vect/tree-ssa-vect-18.c scan-tree-dump-times
vectorized 3 loops 1
> FAIL: gcc.dg/tree-ssa-vect/tree-ssa-vect-19.c scan-tree-dump-times
vectorized 3 loops 1
> FAIL: gcc.dg/tree-ssa-vect/tree-ssa-vect-20.c scan-tree-dump-times
vectorized 3 loops 1

bitwise operations - may need to add new patterns to i*86 (see
http://gcc.gnu.org/ml/gcc-patches/2004-04/msg00907.html).
Comment 1 Andrew Pinski 2004-07-04 19:35:29 UTC
Confirmed.
Comment 2 Andrew Pinski 2005-01-12 06:41:58 UTC
Fixed 3 days ago by:
* config/i386/emmintrin.h (_mm_cvtsi128_si32): Move earlier.
        (_mm_cvtsi128_si64x): Likewise.
        (_mm_srl_epi64, _mm_srl_epi32, _mm_srl_epi16, _mm_sra_epi32,
        _mm_sra_epi16, _mm_sll_epi64, _mm_sll_epi32, _mm_sll_epi16): Use
        the _mm_{srl,sll}i_foo counterpart, and _mm_cvtsi128_si32.
        * config/i386/i386-modes.def: Add V16HI, V32QI, V4DF, V8SF.
        * config/i386/i386-protos.h: Update.
        * config/i386/i386.c (print_operand): Add 'H'.
        (ix86_fixup_binary_operands): Split out from ...
        (ix86_expand_binary_operator): ... here.
        (ix86_fixup_binary_operands_no_copy): New.
....