Commit a6b15ad0 by Eric Botcazou Committed by Eric Botcazou

tree-sra.c (scalarize_use): Create another temporary with the proper type for…

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
parent 0717bfbd
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> 2008-12-06 Steven Bosscher <steven@gcc.gnu.org>
PR rtl-optimization/36365 PR rtl-optimization/36365
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> 2008-12-06 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/38425 PR fortran/38425
......
-- { 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;
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, ...@@ -3223,12 +3223,20 @@ scalarize_use (struct sra_elt *elt, tree *expr_p, gimple_stmt_iterator *gsi,
if (!elt->use_block_copy) if (!elt->use_block_copy)
{ {
tree type = TREE_TYPE (bfexpr); tree type = TREE_TYPE (bfexpr);
tree var, vpos; tree var = make_rename_temp (type, "SR"), tmp, vpos;
gimple st = NULL;
if (!TYPE_UNSIGNED (type)) gimple_assign_set_rhs1 (stmt, var);
type = unsigned_type_for (type); update = true;
var = make_rename_temp (type, "SR"); if (!TYPE_UNSIGNED (type))
{
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_seq_add_stmt (&seq,
gimple_build_assign gimple_build_assign
...@@ -3245,8 +3253,8 @@ scalarize_use (struct sra_elt *elt, tree *expr_p, gimple_stmt_iterator *gsi, ...@@ -3245,8 +3253,8 @@ scalarize_use (struct sra_elt *elt, tree *expr_p, gimple_stmt_iterator *gsi,
sra_explode_bitfield_assignment sra_explode_bitfield_assignment
(var, vpos, true, &seq, blen, bpos, elt); (var, vpos, true, &seq, blen, bpos, elt);
gimple_assign_set_rhs1 (stmt, var); if (st)
update = true; gimple_seq_add_stmt (&seq, st);
} }
else else
sra_sync_for_bitfield_assignment sra_sync_for_bitfield_assignment
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment