omp-low.c (expand_omp_for_generic): If iter_type has different precision than type and type is a pointer type...
* omp-low.c (expand_omp_for_generic): If iter_type has different precision than type and type is a pointer type, cast n1 and n2 first to an integer type with the same precision as pointers and only afterwards to iter_type. Co-Authored-By: Jakub Jelinek <jakub@redhat.com> From-SVN: r141563
This commit is contained in:
parent
f9bd1a8966
commit
c6ff44935c
@ -1,3 +1,11 @@
|
||||
2008-11-03 Steve Ellcey <sje@cup.hp.com>
|
||||
Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* omp-low.c (expand_omp_for_generic): If iter_type has different
|
||||
precision than type and type is a pointer type, cast n1 and n2
|
||||
first to an integer type with the same precision as pointers
|
||||
and only afterwards to iter_type.
|
||||
|
||||
2008-11-03 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* config/arm/arm.md (UNSPEC_PIC_BASE): Update documentation.
|
||||
|
@ -3681,8 +3681,20 @@ expand_omp_for_generic (struct omp_region *region,
|
||||
t4 = build_fold_addr_expr (iend0);
|
||||
t3 = build_fold_addr_expr (istart0);
|
||||
t2 = fold_convert (fd->iter_type, fd->loop.step);
|
||||
t1 = fold_convert (fd->iter_type, fd->loop.n2);
|
||||
t0 = fold_convert (fd->iter_type, fd->loop.n1);
|
||||
if (POINTER_TYPE_P (type)
|
||||
&& TYPE_PRECISION (type) != TYPE_PRECISION (fd->iter_type))
|
||||
{
|
||||
/* Avoid casting pointers to integer of a different size. */
|
||||
tree itype
|
||||
= lang_hooks.types.type_for_size (TYPE_PRECISION (type), 0);
|
||||
t1 = fold_convert (fd->iter_type, fold_convert (itype, fd->loop.n2));
|
||||
t0 = fold_convert (fd->iter_type, fold_convert (itype, fd->loop.n1));
|
||||
}
|
||||
else
|
||||
{
|
||||
t1 = fold_convert (fd->iter_type, fd->loop.n2);
|
||||
t0 = fold_convert (fd->iter_type, fd->loop.n1);
|
||||
}
|
||||
if (bias)
|
||||
{
|
||||
t1 = fold_build2 (PLUS_EXPR, fd->iter_type, t1, bias);
|
||||
|
Loading…
Reference in New Issue
Block a user