Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
8f439681
Commit
8f439681
authored
Jun 05, 2009
by
Revital Eres
Committed by
Revital Eres
Jun 05, 2009
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
misaligned store support
Co-Authored-By: Leehod Baruch <leehod@il.ibm.com> From-SVN: r148211
parent
b89f8e3c
Hide whitespace changes
Inline
Side-by-side
Showing
40 changed files
with
233 additions
and
100 deletions
+233
-100
gcc/ChangeLog
+12
-0
gcc/expr.c
+30
-3
gcc/testsuite/ChangeLog
+42
-0
gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-vect-31.c
+3
-2
gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-vect-33.c
+1
-1
gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-vect-31.c
+3
-3
gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-vect-33.c
+1
-1
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-8.c
+1
-1
gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-31.c
+3
-2
gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-64.c
+3
-2
gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-68.c
+3
-2
gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-69.c
+5
-4
gcc/testsuite/gcc.dg/vect/slp-25.c
+3
-2
gcc/testsuite/gcc.dg/vect/vect-109.c
+2
-1
gcc/testsuite/gcc.dg/vect/vect-26.c
+2
-2
gcc/testsuite/gcc.dg/vect/vect-28.c
+3
-3
gcc/testsuite/gcc.dg/vect/vect-33.c
+3
-3
gcc/testsuite/gcc.dg/vect/vect-42.c
+3
-3
gcc/testsuite/gcc.dg/vect/vect-44.c
+4
-3
gcc/testsuite/gcc.dg/vect/vect-50.c
+7
-6
gcc/testsuite/gcc.dg/vect/vect-54.c
+3
-2
gcc/testsuite/gcc.dg/vect/vect-70.c
+4
-3
gcc/testsuite/gcc.dg/vect/vect-87.c
+4
-3
gcc/testsuite/gcc.dg/vect/vect-89.c
+3
-2
gcc/testsuite/gcc.dg/vect/vect-91.c
+3
-2
gcc/testsuite/gcc.dg/vect/vect-92.c
+3
-2
gcc/testsuite/gcc.dg/vect/vect-93.c
+3
-2
gcc/testsuite/gcc.dg/vect/vect-95.c
+3
-2
gcc/testsuite/gcc.dg/vect/vect-96.c
+2
-2
gcc/testsuite/gcc.dg/vect/vect-align-1.c
+2
-1
gcc/testsuite/gcc.dg/vect/vect-align-2.c
+1
-1
gcc/testsuite/gcc.dg/vect/vect-multitypes-1.c
+5
-5
gcc/testsuite/gcc.dg/vect/vect-multitypes-4.c
+3
-3
gcc/testsuite/gfortran.dg/vect/vect-2.f90
+5
-4
gcc/testsuite/gfortran.dg/vect/vect-3.f90
+5
-6
gcc/testsuite/gfortran.dg/vect/vect-4.f90
+4
-3
gcc/testsuite/gfortran.dg/vect/vect-5.f90
+4
-3
gcc/testsuite/lib/target-supports.exp
+20
-0
gcc/tree-vect-data-refs.c
+12
-8
gcc/tree-vect-stmts.c
+10
-2
No files found.
gcc/ChangeLog
View file @
8f439681
2009-06-05 Revital Eres <eres@il.ibm.com>
Leehod Baruch <leehod@il.ibm.com>
* expr.c (expand_assignment): Expand MISALIGNED_INDIRECT_REF.
(expand_expr_real_1): Remove comment.
* tree-vect-data-refs.c (vect_enhance_data_refs_alignment):
Vectorize misaligned access when the target supports it.
(vect_supportable_dr_alignment): Check for unaligned access
support.
* tree-vect-stmts.c (vectorizable_store): Generate misaligned store
and remove asset.
2009-06-05 Julian Brown <julian@codesourcery.com>
* config/arm/ieee754-df.S (cmpdf2): Avoid writing below SP.
...
...
gcc/expr.c
View file @
8f439681
...
...
@@ -4296,6 +4296,36 @@ expand_assignment (tree to, tree from, bool nontemporal)
return
;
}
else
if
(
TREE_CODE
(
to
)
==
MISALIGNED_INDIRECT_REF
)
{
enum
machine_mode
mode
,
op_mode1
;
enum
insn_code
icode
;
rtx
reg
,
addr
,
mem
,
insn
;
reg
=
expand_expr
(
from
,
NULL_RTX
,
VOIDmode
,
EXPAND_NORMAL
);
reg
=
force_not_mem
(
reg
);
mode
=
TYPE_MODE
(
TREE_TYPE
(
to
));
addr
=
expand_expr
(
TREE_OPERAND
(
to
,
0
),
NULL_RTX
,
VOIDmode
,
EXPAND_SUM
);
addr
=
memory_address
(
mode
,
addr
);
mem
=
gen_rtx_MEM
(
mode
,
addr
);
set_mem_attributes
(
mem
,
to
,
0
);
icode
=
movmisalign_optab
->
handlers
[
mode
].
insn_code
;
gcc_assert
(
icode
!=
CODE_FOR_nothing
);
op_mode1
=
insn_data
[
icode
].
operand
[
1
].
mode
;
if
(
!
(
*
insn_data
[
icode
].
operand
[
1
].
predicate
)
(
reg
,
op_mode1
)
&&
op_mode1
!=
VOIDmode
)
reg
=
copy_to_mode_reg
(
op_mode1
,
reg
);
insn
=
GEN_FCN
(
icode
)
(
mem
,
reg
);
emit_insn
(
insn
);
return
;
}
/* If the rhs is a function call and its value is not an aggregate,
call the function before we start to compute the lhs.
This is needed for correct code for cases such as
...
...
@@ -7575,9 +7605,6 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
/* Resolve the misalignment now, so that we don't have to remember
to resolve it later. Of course, this only works for reads. */
/* ??? When we get around to supporting writes, we'll have to handle
this in store_expr directly. The vectorizer isn't generating
those yet, however. */
if
(
code
==
MISALIGNED_INDIRECT_REF
)
{
int
icode
;
...
...
gcc/testsuite/ChangeLog
View file @
8f439681
2009-06-05 Revital Eres <eres@il.ibm.com>
* lib/target-supports.exp:
(check_effective_target_vect_hw_misalign): New procedure.
* gcc.dg/vect/vect-50.c: Change checks to use vect_hw_misalign.
* gcc.dg/vect/vect-33.c: Likewise.
* gcc.dg/vect/vect-92.c: Likewise.
* gcc.dg/vect/vect-58.c: Likewise.
* gcc.dg/vect/no-section-anchors-vect-69.c: Likewise.
* gcc.dg/vect/vect-42.c: Likewise.
* gcc.dg/vect/slp-25.c: Likewise.
* gcc.dg/vect/vect-align-1.c: Likewise.
* gcc.dg/vect/vect-align-2.c: Likewise.
* gcc.dg/vect/vect-93.c: Likewise.
* gcc.dg/vect/no-scevccp-outer-8.c: Likewise.
* gcc.dg/vect/costmodel/i386/costmodel-vect-31.c: Likewise.
* gcc.dg/vect/costmodel/i386/costmodel-vect-33.c: Likewise.
* gcc.dg/vect/costmodel/x86_64/costmodel-vect-31.c: Likewise.
* gcc.dg/vect/costmodel/x86_64/costmodel-vect-33.c: Likewise.
* gcc.dg/vect/vect-26.c: Likewise.
* gcc.dg/vect/vect-44.c: Likewise.
* gcc.dg/vect/vect-70.c: Likewise.
* gcc.dg/vect/vect-95.c: Likewise.
* gcc.dg/vect/no-section-anchors-vect-64.c: Likewise.
* gcc.dg/vect/vect-28.c: Likewise.
* gcc.dg/vect/no-section-anchors-vect-31.c: Likewise.
* gcc.dg/vect/vect-87.c: Likewise.
* gcc.dg/vect/vect-109.c: Likewise.
* gcc.dg/vect/vect-54.c: Likewise.
* gcc.dg/vect/vect-96.c: Likewise.
* gcc.dg/vect/vect-multitypes-1.c: Likewise.
* gcc.dg/vect/vect-88.c: Likewise.
* gcc.dg/vect/no-section-anchors-vect-66.c: Likewise.
* gcc.dg/vect/vect-89.c: Likewise.
* gcc.dg/vect/vect-91.c: Likewise.
* gcc.dg/vect/no-section-anchors-vect-68.c: Likewise.
* gcc.dg/vect/vect-multitypes-4.c: Likewise.
* gfortran.dg/vect/vect-2.f90: Likewise.
* gfortran.dg/vect/vect-3.f90: Likewise.
* gfortran.dg/vect/vect-4.f90: Likewise.
* gfortran.dg/vect/vect-5.f90: Likewise.
2009-06-05 Alexander Strange <astrange@ithinksw.com>
PR tree-optimization/36318
...
...
gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-vect-31.c
View file @
8f439681
...
...
@@ -86,7 +86,8 @@ int main (void)
return
main1
();
}
/* { dg-final { scan-tree-dump-times "vectorization not profitable" 1 "vect" } }
/* { dg-final { scan-tree-dump-times "vectorization not profitable" 1 "vect"
{ xfail vect_hw_misalign }
} }
*/
/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect" { target vect_hw_misalign } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-vect-33.c
View file @
8f439681
...
...
@@ -36,5 +36,5 @@ int main (void)
return
main1
();
}
/* { dg-final { scan-tree-dump-times "vectorization not profitable" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "vectorization not profitable" 1 "vect"
{ xfail vect_hw_misalign }
} } */
/* { dg-final { cleanup-tree-dump "vect" } } */
gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-vect-31.c
View file @
8f439681
...
...
@@ -86,7 +86,7 @@ int main (void)
return
main1
();
}
/* { dg-final { scan-tree-dump-times "vectorization not profitable" 1 "vect"
} }
*/
/* { dg-final { scan-tree-dump-times "vectorized
3 loops" 1 "vect"
} } */
/* { dg-final { scan-tree-dump-times "vectorization not profitable" 1 "vect"
{ xfail vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { target {! vect_hw_misalign} } } }
*/
/* { dg-final { scan-tree-dump-times "vectorized
4 loops" 1 "vect" { target {vect_hw_misalign } }
} } */
/* { dg-final { cleanup-tree-dump "vect" } } */
gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-vect-33.c
View file @
8f439681
...
...
@@ -36,5 +36,5 @@ int main (void)
return
main1
();
}
/* { dg-final { scan-tree-dump-times "vectorization not profitable" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "vectorization not profitable" 1 "vect"
{ xfail vect_hw_misalign }
} } */
/* { dg-final { cleanup-tree-dump "vect" } } */
gcc/testsuite/gcc.dg/vect/no-scevccp-outer-8.c
View file @
8f439681
...
...
@@ -46,5 +46,5 @@ int main (void)
return
0
;
}
/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" { xfail
*-*-*
} } } */
/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED." 1 "vect" { xfail
{ ! { vect_hw_misalign } }
} } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-31.c
View file @
8f439681
...
...
@@ -87,6 +87,7 @@ int main (void)
}
/* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { target vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail vect_hw_misalign } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-64.c
View file @
8f439681
...
...
@@ -83,6 +83,7 @@ int main (void)
}
/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { target vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail vect_hw_misalign } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-68.c
View file @
8f439681
...
...
@@ -87,6 +87,7 @@ int main (void)
}
/* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { target vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail vect_hw_misalign } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
gcc/testsuite/gcc.dg/vect/no-section-anchors-vect-69.c
View file @
8f439681
...
...
@@ -113,8 +113,9 @@ int main (void)
}
/* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail {! vector_alignment_reachable} } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target {! vector_alignment_reachable} } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target {! vector_alignment_reachable} } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { target vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail { {! vector_alignment_reachable} || vect_hw_misalign } } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
gcc/testsuite/gcc.dg/vect/slp-25.c
View file @
8f439681
...
...
@@ -55,6 +55,7 @@ int main (void)
}
/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail vect_no_align } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { target vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail { vect_no_align || vect_hw_misalign } } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
gcc/testsuite/gcc.dg/vect/vect-109.c
View file @
8f439681
...
...
@@ -73,6 +73,7 @@ int main (void)
}
/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 2 "vect" } } */
/* { dg-final { scan-tree-dump-times "not vectorized: unsupported unaligned store" 2 "vect" } } */
/* { dg-final { scan-tree-dump-times "not vectorized: unsupported unaligned store" 2 "vect" { xfail vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 3 "vect" { target vect_hw_misalign } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
gcc/testsuite/gcc.dg/vect/vect-26.c
View file @
8f439681
...
...
@@ -36,6 +36,6 @@ int main (void)
}
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access"
0 "vect"
} } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access"
1 "vect" { xfail {! vect_hw_misalign} }
} } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect"
{ xfail vect_hw_misalign }
} } */
/* { dg-final { cleanup-tree-dump "vect" } } */
gcc/testsuite/gcc.dg/vect/vect-28.c
View file @
8f439681
...
...
@@ -39,7 +39,7 @@ int main (void)
}
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access"
0 "vect" } }
*/
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target
vector_alignment_reachable
} } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target {
! vector_alignment_reachable
} } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access"
1 "vect" { xfail { ! { vect_hw_misalign } } } } }
*/
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target
{ vector_alignment_reachable && { ! { vect_hw_misalign } } }
} } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target {
{! vector_alignment_reachable} && {! vect_hw_misalign}
} } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
gcc/testsuite/gcc.dg/vect/vect-33.c
View file @
8f439681
...
...
@@ -38,7 +38,7 @@ int main (void)
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access"
0 "vect"
} } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target
vector_alignment_reachable
} } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target {
! vector_alignment_reachable } } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access"
1 "vect" { xfail { ! { vect_hw_misalign } } }
} } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target
{ vector_alignment_reachable && {! vect_hw_misalign} }
} } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target {
{! vector_alignment_reachable} && {! vect_hw_misalign} } } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
gcc/testsuite/gcc.dg/vect/vect-42.c
View file @
8f439681
...
...
@@ -63,7 +63,7 @@ int main (void)
}
/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 3 "vect" { target { vect_no_align || {
! vector_alignment_reachable
} } } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" { xfail {
vect_no_align
|| { ! vector_alignment_reachable } } } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail {
vect_no_align
|| { ! vector_alignment_reachable } } } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 3 "vect" { target { vect_no_align || {
{ ! vector_alignment_reachable} && {!vect_hw_misalign}
} } } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" { xfail {
{ vect_no_align || vect_hw_misalign }
|| { ! vector_alignment_reachable } } } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail {
{ vect_no_align || vect_hw_misalign }
|| { ! vector_alignment_reachable } } } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
gcc/testsuite/gcc.dg/vect/vect-44.c
View file @
8f439681
...
...
@@ -65,8 +65,9 @@ int main (void)
two loads to be aligned). */
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail vect_no_align } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || {! vector_alignment_reachable} } } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 3 "vect" { xfail { ! {vect_hw_misalign } } } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align || vect_hw_misalign } } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { { vect_no_align || vect_hw_misalign } || {! vector_alignment_reachable} } } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 3 "vect" { target vect_no_align } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { {! vector_alignment_reachable} && {
! vect_no_align
} } } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { {! vector_alignment_reachable} && {
{! vect_no_align} && {! vect_hw_misalign}
} } } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
gcc/testsuite/gcc.dg/vect/vect-50.c
View file @
8f439681
...
...
@@ -56,13 +56,14 @@ int main (void)
return
0
;
}
/* For targets that don't support misaligned loads
we version for the
all three accesses (peeling to align the store will not force the
two loads to be aligned). */
/* For targets that don't support misaligned loads
and don't support
misaligned stores we version for the all three accesses (peeling to
align the store will not force the
two loads to be aligned). */
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail vect_no_align } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || {! vector_alignment_reachable} } } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align || vect_hw_misalign } } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 3 "vect" { target vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { { vect_no_align || vect_hw_misalign } || {! vector_alignment_reachable} } } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 3 "vect" { target vect_no_align } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { {! vector_alignment_reachable} && {!
vect_no_
align} } } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { {! vector_alignment_reachable} && {!
vect_no_align && !vect_hw_mis
align} } } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
gcc/testsuite/gcc.dg/vect/vect-54.c
View file @
8f439681
...
...
@@ -59,6 +59,7 @@ int main (void)
}
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 3 "vect" { target vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail vect_hw_misalign } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
gcc/testsuite/gcc.dg/vect/vect-70.c
View file @
8f439681
...
...
@@ -63,7 +63,8 @@ int main (void)
}
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" {target vector_alignment_reachable } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" {target {! vector_alignment_reachable} } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" {target { vector_alignment_reachable && { ! {vect_hw_misalign} } } } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" {target {{! vector_alignment_reachable} && {! vect_hw_misalign} } } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
gcc/testsuite/gcc.dg/vect/vect-87.c
View file @
8f439681
...
...
@@ -50,7 +50,8 @@ int main (void)
/* Fails for targets that don't vectorize PLUS (e.g alpha). */
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" {target vector_alignment_reachable } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" {target {! vector_alignment_reachable} } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" {target { vector_alignment_reachable && {! vect_hw_misalign} } } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" {target { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
gcc/testsuite/gcc.dg/vect/vect-89.c
View file @
8f439681
...
...
@@ -45,6 +45,7 @@ int main (void)
}
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail vect_hw_misalign } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
gcc/testsuite/gcc.dg/vect/vect-91.c
View file @
8f439681
...
...
@@ -58,7 +58,8 @@ main3 ()
}
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 3 "vect" { xfail vect_no_int_add } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 6 "vect" { target vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "accesses have the same alignment." 3 "vect" } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" {target
vector_alignment_reachable
} } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 3 "vect" {target {
! vector_alignment_reachable
} } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" {target
{ vector_alignment_reachable && {! vect_hw_misalign} }
} } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 3 "vect" {target {
{! vector_alignment_reachable} && {! vect_hw_misalign}
} } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
gcc/testsuite/gcc.dg/vect/vect-92.c
View file @
8f439681
...
...
@@ -91,6 +91,7 @@ int main (void)
}
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 3 "vect" } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 9 "vect" { target vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" { xfail vect_hw_misalign } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
gcc/testsuite/gcc.dg/vect/vect-93.c
View file @
8f439681
...
...
@@ -71,8 +71,9 @@ int main (void)
/* main && main1 together: */
/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 2 "vect" { target powerpc*-*-* i?86-*-* x86_64-*-* } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 3 "vect" { target vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { target { vect_no_align && {! vector_alignment_reachable} } } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" { xfail {
vect_no_align
|| {! vector_alignment_reachable} } } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" { xfail {
{ vect_no_align || vect_hw_misalign }
|| {! vector_alignment_reachable} } } } } */
/* in main1: */
/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { target !powerpc*-*-* !i?86-*-* !x86_64-*-* } } } */
...
...
@@ -80,6 +81,6 @@ int main (void)
/* in main: */
/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target vect_no_align } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail
vect_no_align
} } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail
{ vect_no_align || vect_hw_misalign }
} } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
gcc/testsuite/gcc.dg/vect/vect-95.c
View file @
8f439681
...
...
@@ -62,8 +62,9 @@ int main (void)
stores and generate misaligned accesses for the loads. For targets that
don't support unaligned loads we version for all four accesses. */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail vect_no_align } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 2 "vect" { xfail vect_no_align } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align || vect_hw_misalign } } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" { target vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 2 "vect" { xfail { vect_no_align || vect_hw_misalign } } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { target vect_no_align } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 4 "vect" { target vect_no_align } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
gcc/testsuite/gcc.dg/vect/vect-96.c
View file @
8f439681
...
...
@@ -44,6 +44,6 @@ int main (void)
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target { {! vect_no_align} && vector_alignment_reachable } } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail {
vect_no_align
|| {! vector_alignment_reachable} } } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { vect_no_align || {
! vector_alignment_reachable
} } } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail {
{ vect_no_align || vect_hw_misalign }
|| {! vector_alignment_reachable} } } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target { vect_no_align || {
{! vector_alignment_reachable} && {!vect_hw_misalign}
} } } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
gcc/testsuite/gcc.dg/vect/vect-align-1.c
View file @
8f439681
...
...
@@ -46,6 +46,7 @@ int main (void)
return
0
;
}
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { target vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { xfail vect_hw_misalign} } } */
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
gcc/testsuite/gcc.dg/vect/vect-align-2.c
View file @
8f439681
...
...
@@ -43,6 +43,6 @@ int main (void)
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 0 "vect" } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect"
{ xfail vect_hw_misalign}
} } */
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
gcc/testsuite/gcc.dg/vect/vect-multitypes-1.c
View file @
8f439681
...
...
@@ -78,11 +78,11 @@ int main (void)
return
0
;
}
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail
*-*-*
} } } */
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail
vect_no_align
} } } */
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail
{! vect_hw_misalign}
} } } */
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail
{ vect_no_align || vect_hw_misalign }
} } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail *-*-* } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail
vect_no_align
} } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" { xfail
*-*-*
} } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail
vect_no_align
} } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail
{ vect_no_align || vect_hw_misalign }
} } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" { xfail
{! vect_hw_misalign}
} } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail
{ vect_no_align || vect_hw_misalign }
} } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
gcc/testsuite/gcc.dg/vect/vect-multitypes-4.c
View file @
8f439681
...
...
@@ -85,10 +85,10 @@ int main (void)
return
0
;
}
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail
*-*-*
} } } */
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail
vect_no_align
} } } */
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { xfail
{! vect_hw_misalign}
} } } */
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail
{ vect_no_align || vect_hw_misalign }
} } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { xfail *-*-* } } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail
vect_no_align
} } } */
/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail
{ vect_no_align || vect_hw_misalign }
} } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 8 "vect" { xfail *-*-* } } } */
/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 4 "vect" { xfail vect_no_align } } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
...
...
gcc/testsuite/gfortran.dg/vect/vect-2.f90
View file @
8f439681
...
...
@@ -15,8 +15,9 @@ END
! support unaligned loads).
! { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" } }
! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" { xfail { vect_no_align || {! vector_alignment_reachable} } } } }
! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { target { vect_no_align && {! vector_alignment_reachable} } } } }
! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail vect_no_align } } }
! { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 3 "vect" {target { vect_no_align || {! vector_alignment_reachable} } } } }
! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 3 "vect" { xfail { { vect_no_align || vect_hw_misalign } || {! vector_alignment_reachable} } } } }
! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 2 "vect" { target { vect_no_align && { {! vector_alignment_reachable } && {! vect_hw_misalign } } } } } }
! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { xfail { vect_no_align || vect_hw_misalign} } } }
! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 5 "vect" { target vect_hw_misalign } } }
! { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 3 "vect" {target { vect_no_align || { {! vector_alignment_reachable } && {! vect_hw_misalign }} } } } }
! { dg-final { cleanup-tree-dump "vect" } }
gcc/testsuite/gfortran.dg/vect/vect-3.f90
View file @
8f439681
...
...
@@ -8,11 +8,10 @@ END
! { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 3 "vect" { target vect_no_align } } }
! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { target vect_no_align } } }
! { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { {! vect_no_align} && {! vector_alignment_reachable} } } } }
! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { target { {! vect_no_align} && {! vector_alignment_reachable} } } } }
! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || {! vector_alignment_reachable} } } } }
! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align || {! vector_alignment_reachable} } } } }
! { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" { target { {! vect_no_align} && { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } } }
! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { target { {! vect_no_align} && { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } } }
! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 3 "vect" {target vect_hw_misalign} } }
! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { { vect_no_align || vect_hw_misalign } || {! vector_alignment_reachable}} } } }
! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { { vect_no_align || vect_hw_misalign } || { ! vector_alignment_reachable} } } } }
! { dg-final { cleanup-tree-dump "vect" } }
gcc/testsuite/gfortran.dg/vect/vect-4.f90
View file @
8f439681
...
...
@@ -10,8 +10,9 @@ Y = Y + A * X
END
! { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } }
! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || {! vector_alignment_reachable} } } } }
! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align || {! vector_alignment_reachable} } } } }
! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { target {! vector_alignment_reachable} } } }
! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { { vect_no_align || vect_hw_misalign } || {! vector_alignment_reachable} } } } }
! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { { vect_no_align || vect_hw_misalign } || {! vector_alignment_reachable} } } } }
! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 3 "vect" { target vect_hw_misalign } } }
! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { target { {! vector_alignment_reachable} && {! vect_hw_misalign} } } } }
! { dg-final { scan-tree-dump-times "accesses have the same alignment." 1 "vect" } }
! { dg-final { cleanup-tree-dump "vect" } }
gcc/testsuite/gfortran.dg/vect/vect-5.f90
View file @
8f439681
...
...
@@ -36,8 +36,9 @@
end
! { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } }
! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { vect_no_align || {! vector_alignment_reachable} } } } }
! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align } } } }
! { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail { { vect_no_align || vect_hw_misalign } || {! vector_alignment_reachable} } } } }
! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 1 "vect" { xfail { vect_no_align || vect_hw_misalign } } } }
! { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 2 "vect" { target { vect_hw_misalign } } } }
! { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 2 "vect" { target { vect_no_align } } } }
! { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target {
! vector_alignment_reachable
} } } }
! { dg-final { scan-tree-dump-times "Alignment of access forced using versioning." 1 "vect" { target {
{! vector_alignment_reachable} && {! vect_hw_misalign}
} } } }
! { dg-final { cleanup-tree-dump "vect" } }
gcc/testsuite/lib/target-supports.exp
View file @
8f439681
...
...
@@ -2220,6 +2220,26 @@ proc check_effective_target_vect_no_align { } {
return $et_vect_no_align_saved
}
# Return 1 if the target supports a vector misalign access, 0 otherwise.
#
# This won't change for different subtargets so cache the result.
proc check_effective_target_vect_hw_misalign { } {
global et_vect_hw_misalign_saved
if [info exists et_vect_hw_misalign_saved] {
verbose "check_effective_target_vect_hw_misalign: using cached result" 2
} else {
set et_vect_hw_misalign_saved 0
if { [istarget x86_64-*-*] } {
set et_vect_hw_misalign_saved 1
}
}
verbose "check_effective_target_vect_hw_misalign: returning $et_vect_hw_misalign_saved" 2
return $et_vect_hw_misalign_saved
}
# Return 1 if arrays are aligned to the vector alignment
# boundary, 0 otherwise.
#
...
...
gcc/tree-vect-data-refs.c
View file @
8f439681
...
...
@@ -1138,11 +1138,10 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo)
/* While cost model enhancements are expected in the future, the high level
view of the code at this time is as follows:
A) If there is a misaligned write then see if peeling to align this write
can make all data references satisfy vect_supportable_dr_alignment.
If so, update data structures as needed and return true. Note that
at this time vect_supportable_dr_alignment is known to return false
for a misaligned write.
A) If there is an unsupported misaligned access then see if peeling
to align this access can make all data references satisfy
vect_supportable_dr_alignment. If so, update data structures
as needed and return true.
B) If peeling wasn't possible and there is a data reference with an
unknown misalignment that does not satisfy vect_supportable_dr_alignment
...
...
@@ -1169,8 +1168,7 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo)
in code size).
The scheme we use FORNOW: peel to force the alignment of the first
misaligned store in the loop.
Rationale: misaligned stores are not yet supported.
unsupported misaligned access in the loop.
TODO: Use a cost model. */
...
...
@@ -1178,6 +1176,7 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo)
{
stmt
=
DR_STMT
(
dr
);
stmt_info
=
vinfo_for_stmt
(
stmt
);
supportable_dr_alignment
=
vect_supportable_dr_alignment
(
dr
);
/* For interleaving, only the alignment of the first access
matters. */
...
...
@@ -1185,7 +1184,7 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo)
&&
DR_GROUP_FIRST_DR
(
stmt_info
)
!=
stmt
)
continue
;
if
(
!
DR_IS_READ
(
dr
)
&&
!
aligned_access_p
(
dr
)
)
if
(
!
supportable_dr_alignment
)
{
do_peeling
=
vector_alignment_reachable_p
(
dr
);
if
(
do_peeling
)
...
...
@@ -3475,6 +3474,11 @@ vect_supportable_dr_alignment (struct data_reference *dr)
/* Can't software pipeline the loads, but can at least do them. */
return
dr_unaligned_supported
;
}
else
{
if
(
movmisalign_optab
->
handlers
[
mode
].
insn_code
!=
CODE_FOR_nothing
)
return
dr_unaligned_supported
;
}
/* Unsupported. */
return
dr_unaligned_unsupported
;
...
...
gcc/tree-vect-stmts.c
View file @
8f439681
...
...
@@ -3018,7 +3018,6 @@ vectorizable_store (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt,
alignment_support_scheme
=
vect_supportable_dr_alignment
(
first_dr
);
gcc_assert
(
alignment_support_scheme
);
gcc_assert
(
alignment_support_scheme
==
dr_aligned
);
/* FORNOW */
/* In case the vectorization factor (VF) is bigger than the number
of elements that we can fit in a vectype (nunits), we have to generate
...
...
@@ -3157,7 +3156,16 @@ vectorizable_store (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt,
vect_permute_store_chain(). */
vec_oprnd
=
VEC_index
(
tree
,
result_chain
,
i
);
data_ref
=
build_fold_indirect_ref
(
dataref_ptr
);
if
(
aligned_access_p
(
first_dr
))
data_ref
=
build_fold_indirect_ref
(
dataref_ptr
);
else
{
int
mis
=
DR_MISALIGNMENT
(
first_dr
);
tree
tmis
=
(
mis
==
-
1
?
size_zero_node
:
size_int
(
mis
));
tmis
=
size_binop
(
MULT_EXPR
,
tmis
,
size_int
(
BITS_PER_UNIT
));
data_ref
=
build2
(
MISALIGNED_INDIRECT_REF
,
vectype
,
dataref_ptr
,
tmis
);
}
/* If accesses through a pointer to vectype do not alias the original
memory reference we have a problem. This should never happen. */
gcc_assert
(
alias_sets_conflict_p
(
get_alias_set
(
data_ref
),
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment