mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-21 12:41:19 +08:00
tree-sra.c (scalarize_use): Create another temporary with the proper type for signed types in the use_all...
* tree-sra.c (scalarize_use): Create another temporary with the proper type for signed types in the use_all && !is_output bitfield case. From-SVN: r142537
This commit is contained in:
parent
0717bfbd17
commit
a6b15ad077
@ -1,3 +1,8 @@
|
||||
2008-12-07 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* tree-sra.c (scalarize_use): Create another temporary with the proper
|
||||
type for signed types in the use_all && !is_output bitfield case.
|
||||
|
||||
2008-12-06 Steven Bosscher <steven@gcc.gnu.org>
|
||||
|
||||
PR rtl-optimization/36365
|
||||
|
@ -1,3 +1,8 @@
|
||||
2008-12-07 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gnat.dg/aggr10.adb: New test.
|
||||
* gnat.dg/aggr10_pkg.ads: New helper.
|
||||
|
||||
2008-12-06 Jerry DeLisle <jvdelisle@gcc.gnu.org>
|
||||
|
||||
PR fortran/38425
|
||||
|
23
gcc/testsuite/gnat.dg/aggr10.adb
Normal file
23
gcc/testsuite/gnat.dg/aggr10.adb
Normal file
@ -0,0 +1,23 @@
|
||||
-- { dg-do compile }
|
||||
-- { dg-options "-O2" }
|
||||
|
||||
with Aggr10_Pkg; use Aggr10_Pkg;
|
||||
|
||||
procedure Aggr10 is
|
||||
|
||||
No_Name_Location : constant Name_Location :=
|
||||
(Name => Name_Id'First,
|
||||
Location => Int'First,
|
||||
Source => Source_Id'First,
|
||||
Except => False,
|
||||
Found => False);
|
||||
|
||||
Name_Loc : Name_Location;
|
||||
|
||||
begin
|
||||
Name_Loc := Get;
|
||||
if Name_Loc = No_Name_Location then -- { dg-bogus "comparison always false" }
|
||||
raise Program_Error;
|
||||
end if;
|
||||
Set (Name_Loc);
|
||||
end;
|
18
gcc/testsuite/gnat.dg/aggr10_pkg.ads
Normal file
18
gcc/testsuite/gnat.dg/aggr10_pkg.ads
Normal file
@ -0,0 +1,18 @@
|
||||
package Aggr10_Pkg is
|
||||
|
||||
type Name_Id is range 300_000_000 .. 399_999_999;
|
||||
type Int is range -2 ** 31 .. +2 ** 31 - 1;
|
||||
type Source_Id is range 5_000_000 .. 5_999_999;
|
||||
|
||||
type Name_Location is record
|
||||
Name : Name_Id;
|
||||
Location : Int;
|
||||
Source : Source_Id;
|
||||
Except : Boolean;
|
||||
Found : Boolean := False;
|
||||
end record;
|
||||
|
||||
function Get return Name_Location;
|
||||
procedure Set (Name_Loc : Name_Location);
|
||||
|
||||
end Aggr10_Pkg;
|
@ -3223,12 +3223,20 @@ scalarize_use (struct sra_elt *elt, tree *expr_p, gimple_stmt_iterator *gsi,
|
||||
if (!elt->use_block_copy)
|
||||
{
|
||||
tree type = TREE_TYPE (bfexpr);
|
||||
tree var, vpos;
|
||||
tree var = make_rename_temp (type, "SR"), tmp, vpos;
|
||||
gimple st = NULL;
|
||||
|
||||
gimple_assign_set_rhs1 (stmt, var);
|
||||
update = true;
|
||||
|
||||
if (!TYPE_UNSIGNED (type))
|
||||
type = unsigned_type_for (type);
|
||||
|
||||
var = make_rename_temp (type, "SR");
|
||||
{
|
||||
type = unsigned_type_for (type);
|
||||
tmp = make_rename_temp (type, "SR");
|
||||
st = gimple_build_assign (var,
|
||||
fold_convert (TREE_TYPE (var), tmp));
|
||||
var = tmp;
|
||||
}
|
||||
|
||||
gimple_seq_add_stmt (&seq,
|
||||
gimple_build_assign
|
||||
@ -3245,8 +3253,8 @@ scalarize_use (struct sra_elt *elt, tree *expr_p, gimple_stmt_iterator *gsi,
|
||||
sra_explode_bitfield_assignment
|
||||
(var, vpos, true, &seq, blen, bpos, elt);
|
||||
|
||||
gimple_assign_set_rhs1 (stmt, var);
|
||||
update = true;
|
||||
if (st)
|
||||
gimple_seq_add_stmt (&seq, st);
|
||||
}
|
||||
else
|
||||
sra_sync_for_bitfield_assignment
|
||||
|
Loading…
x
Reference in New Issue
Block a user