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
05e3bdb9
Commit
05e3bdb9
authored
31 years ago
by
Per Bothner
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Use new macro AGGREGATE_TYPE_P.
From-SVN: r7160
parent
947765f9
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
21 additions
and
93 deletions
+21
-93
gcc/calls.c
+5
-24
gcc/expr.c
+5
-21
gcc/function.c
+7
-32
gcc/stmt.c
+2
-10
gcc/varasm.c
+2
-6
No files found.
gcc/calls.c
View file @
05e3bdb9
...
...
@@ -631,11 +631,7 @@ expand_call (exp, target, ignore)
/* Warn if this value is an aggregate type,
regardless of which calling convention we are using for it. */
if
(
warn_aggregate_return
&&
(
TREE_CODE
(
TREE_TYPE
(
exp
))
==
RECORD_TYPE
||
TREE_CODE
(
TREE_TYPE
(
exp
))
==
UNION_TYPE
||
TREE_CODE
(
TREE_TYPE
(
exp
))
==
QUAL_UNION_TYPE
||
TREE_CODE
(
TREE_TYPE
(
exp
))
==
ARRAY_TYPE
))
if
(
warn_aggregate_return
&&
AGGREGATE_TYPE_P
(
TREE_TYPE
(
exp
)))
warning
(
"function call has aggregate value"
);
/* Set up a place to return a structure. */
...
...
@@ -1039,11 +1035,7 @@ expand_call (exp, target, ignore)
copy
=
assign_stack_temp
(
TYPE_MODE
(
type
),
size
,
1
);
}
MEM_IN_STRUCT_P
(
copy
)
=
(
TREE_CODE
(
type
)
==
RECORD_TYPE
||
TREE_CODE
(
type
)
==
UNION_TYPE
||
TREE_CODE
(
type
)
==
QUAL_UNION_TYPE
||
TREE_CODE
(
type
)
==
ARRAY_TYPE
);
MEM_IN_STRUCT_P
(
copy
)
=
AGGREGATE_TYPE_P
(
type
);
store_expr
(
args
[
i
].
tree_value
,
copy
,
0
);
...
...
@@ -1498,10 +1490,7 @@ expand_call (exp, target, ignore)
addr
=
plus_constant
(
addr
,
arg_offset
);
args
[
i
].
stack
=
gen_rtx
(
MEM
,
args
[
i
].
mode
,
addr
);
MEM_IN_STRUCT_P
(
args
[
i
].
stack
)
=
(
TREE_CODE
(
TREE_TYPE
(
args
[
i
].
tree_value
))
==
RECORD_TYPE
||
TREE_CODE
(
TREE_TYPE
(
args
[
i
].
tree_value
))
==
UNION_TYPE
||
TREE_CODE
(
TREE_TYPE
(
args
[
i
].
tree_value
))
==
QUAL_UNION_TYPE
||
TREE_CODE
(
TREE_TYPE
(
args
[
i
].
tree_value
))
==
ARRAY_TYPE
);
=
AGGREGATE_TYPE_P
(
TREE_TYPE
(
args
[
i
].
tree_value
));
if
(
GET_CODE
(
slot_offset
)
==
CONST_INT
)
addr
=
plus_constant
(
arg_reg
,
INTVAL
(
slot_offset
));
...
...
@@ -1941,11 +1930,7 @@ expand_call (exp, target, ignore)
target
=
gen_rtx
(
MEM
,
TYPE_MODE
(
TREE_TYPE
(
exp
)),
memory_address
(
TYPE_MODE
(
TREE_TYPE
(
exp
)),
structure_value_addr
));
MEM_IN_STRUCT_P
(
target
)
=
(
TREE_CODE
(
TREE_TYPE
(
exp
))
==
ARRAY_TYPE
||
TREE_CODE
(
TREE_TYPE
(
exp
))
==
RECORD_TYPE
||
TREE_CODE
(
TREE_TYPE
(
exp
))
==
UNION_TYPE
||
TREE_CODE
(
TREE_TYPE
(
exp
))
==
QUAL_UNION_TYPE
);
MEM_IN_STRUCT_P
(
target
)
=
AGGREGATE_TYPE_P
(
TREE_TYPE
(
exp
));
}
}
else
if
(
pcc_struct_value
)
...
...
@@ -1964,11 +1949,7 @@ expand_call (exp, target, ignore)
int_size_in_bytes
(
TREE_TYPE
(
exp
)),
0
);
MEM_IN_STRUCT_P
(
target
)
=
(
TREE_CODE
(
TREE_TYPE
(
exp
))
==
ARRAY_TYPE
||
TREE_CODE
(
TREE_TYPE
(
exp
))
==
RECORD_TYPE
||
TREE_CODE
(
TREE_TYPE
(
exp
))
==
UNION_TYPE
||
TREE_CODE
(
TREE_TYPE
(
exp
))
==
QUAL_UNION_TYPE
);
MEM_IN_STRUCT_P
(
target
)
=
AGGREGATE_TYPE_P
(
TREE_TYPE
(
exp
));
/* Save this temp slot around the pop below. */
preserve_temp_slots
(
target
);
...
...
This diff is collapsed.
Click to expand it.
gcc/expr.c
View file @
05e3bdb9
...
...
@@ -3915,11 +3915,7 @@ expand_expr (exp, target, tmode, modifier)
{
temp
=
assign_stack_temp
(
mode
,
int_size_in_bytes
(
type
),
0
);
MEM_IN_STRUCT_P
(
temp
)
=
(
TREE_CODE
(
type
)
==
RECORD_TYPE
||
TREE_CODE
(
type
)
==
UNION_TYPE
||
TREE_CODE
(
type
)
==
QUAL_UNION_TYPE
||
TREE_CODE
(
type
)
==
ARRAY_TYPE
);
MEM_IN_STRUCT_P
(
temp
)
=
AGGREGATE_TYPE_P
(
type
);
}
else
temp
=
gen_reg_rtx
(
promote_mode
(
type
,
mode
,
&
unsignedp
,
0
));
...
...
@@ -4106,11 +4102,9 @@ expand_expr (exp, target, tmode, modifier)
target
=
gen_reg_rtx
(
tmode
!=
VOIDmode
?
tmode
:
mode
);
else
{
enum
tree_code
c
=
TREE_CODE
(
type
);
target
=
assign_stack_temp
(
mode
,
int_size_in_bytes
(
type
),
0
);
if
(
c
==
RECORD_TYPE
||
c
==
UNION_TYPE
||
c
==
QUAL_UNION_TYPE
||
c
==
ARRAY_TYPE
)
if
(
AGGREGATE_TYPE_P
(
type
))
MEM_IN_STRUCT_P
(
target
)
=
1
;
}
}
...
...
@@ -4153,16 +4147,10 @@ expand_expr (exp, target, tmode, modifier)
if
(
TREE_CODE
(
TREE_OPERAND
(
exp
,
0
))
==
PLUS_EXPR
||
(
TREE_CODE
(
TREE_OPERAND
(
exp
,
0
))
==
SAVE_EXPR
&&
TREE_CODE
(
TREE_OPERAND
(
TREE_OPERAND
(
exp
,
0
),
0
))
==
PLUS_EXPR
)
||
TREE_CODE
(
TREE_TYPE
(
exp
))
==
ARRAY_TYPE
||
TREE_CODE
(
TREE_TYPE
(
exp
))
==
RECORD_TYPE
||
TREE_CODE
(
TREE_TYPE
(
exp
))
==
UNION_TYPE
||
TREE_CODE
(
TREE_TYPE
(
exp
))
==
QUAL_UNION_TYPE
||
AGGREGATE_TYPE_P
(
TREE_TYPE
(
exp
))
||
(
TREE_CODE
(
exp1
)
==
ADDR_EXPR
&&
(
exp2
=
TREE_OPERAND
(
exp1
,
0
))
&&
(
TREE_CODE
(
TREE_TYPE
(
exp2
))
==
ARRAY_TYPE
||
TREE_CODE
(
TREE_TYPE
(
exp2
))
==
RECORD_TYPE
||
TREE_CODE
(
TREE_TYPE
(
exp2
))
==
UNION_TYPE
||
TREE_CODE
(
TREE_TYPE
(
exp2
))
==
QUAL_UNION_TYPE
)))
&&
AGGREGATE_TYPE_P
(
TREE_TYPE
(
exp2
))))
MEM_IN_STRUCT_P
(
temp
)
=
1
;
MEM_VOLATILE_P
(
temp
)
=
TREE_THIS_VOLATILE
(
exp
)
|
flag_volatile
;
#if 0 /* It is incorrect to set RTX_UNCHANGING_P here, because the fact that
...
...
@@ -5341,11 +5329,7 @@ expand_expr (exp, target, tmode, modifier)
(
TREE_INT_CST_LOW
(
TYPE_SIZE
(
type
))
+
BITS_PER_UNIT
-
1
)
/
BITS_PER_UNIT
,
0
);
MEM_IN_STRUCT_P
(
temp
)
=
(
TREE_CODE
(
type
)
==
RECORD_TYPE
||
TREE_CODE
(
type
)
==
UNION_TYPE
||
TREE_CODE
(
type
)
==
QUAL_UNION_TYPE
||
TREE_CODE
(
type
)
==
ARRAY_TYPE
);
MEM_IN_STRUCT_P
(
temp
)
=
AGGREGATE_TYPE_P
(
type
);
}
else
temp
=
gen_reg_rtx
(
mode
);
...
...
This diff is collapsed.
Click to expand it.
gcc/function.c
View file @
05e3bdb9
...
...
@@ -1218,11 +1218,7 @@ put_reg_into_stack (function, reg, type, promoted_mode, decl_mode)
/* If this is a memory ref that contains aggregate components,
mark it as such for cse and loop optimize. */
MEM_IN_STRUCT_P
(
reg
)
=
(
TREE_CODE
(
type
)
==
ARRAY_TYPE
||
TREE_CODE
(
type
)
==
RECORD_TYPE
||
TREE_CODE
(
type
)
==
UNION_TYPE
||
TREE_CODE
(
type
)
==
QUAL_UNION_TYPE
);
MEM_IN_STRUCT_P
(
reg
)
=
AGGREGATE_TYPE_P
(
type
);
/* Now make sure that all refs to the variable, previously made
when it was a register, are fixed up to be valid again. */
...
...
@@ -2996,11 +2992,7 @@ aggregate_value_p (exp)
if
(
RETURN_IN_MEMORY
(
type
))
return
1
;
if
(
flag_pcc_struct_return
&&
(
TREE_CODE
(
type
)
==
RECORD_TYPE
||
TREE_CODE
(
type
)
==
UNION_TYPE
||
TREE_CODE
(
type
)
==
QUAL_UNION_TYPE
||
TREE_CODE
(
type
)
==
ARRAY_TYPE
))
if
(
flag_pcc_struct_return
&&
AGGREGATE_TYPE_P
(
type
))
return
1
;
/* Make sure we have suitable call-clobbered regs to return
the value in; if not, we must return it in memory. */
...
...
@@ -3119,11 +3111,7 @@ assign_parms (fndecl, second_time)
for
(
parm
=
fnargs
;
parm
;
parm
=
TREE_CHAIN
(
parm
))
{
int
aggregate
=
(
TREE_CODE
(
TREE_TYPE
(
parm
))
==
ARRAY_TYPE
||
TREE_CODE
(
TREE_TYPE
(
parm
))
==
RECORD_TYPE
||
TREE_CODE
(
TREE_TYPE
(
parm
))
==
UNION_TYPE
||
TREE_CODE
(
TREE_TYPE
(
parm
))
==
QUAL_UNION_TYPE
);
int
aggregate
=
AGGREGATE_TYPE_P
(
TREE_TYPE
(
parm
));
struct
args_size
stack_offset
;
struct
args_size
arg_size
;
int
passed_pointer
=
0
;
...
...
@@ -3704,11 +3692,7 @@ assign_parms (fndecl, second_time)
DECL_RTL
(
result
)
=
gen_rtx
(
MEM
,
DECL_MODE
(
result
),
DECL_RTL
(
parm
));
MEM_IN_STRUCT_P
(
DECL_RTL
(
result
))
=
(
TREE_CODE
(
restype
)
==
RECORD_TYPE
||
TREE_CODE
(
restype
)
==
UNION_TYPE
||
TREE_CODE
(
restype
)
==
QUAL_UNION_TYPE
||
TREE_CODE
(
restype
)
==
ARRAY_TYPE
);
MEM_IN_STRUCT_P
(
DECL_RTL
(
result
))
=
AGGREGATE_TYPE_P
(
restype
);
}
if
(
TREE_THIS_VOLATILE
(
parm
))
...
...
@@ -4031,10 +4015,7 @@ uninitialized_vars_warning (block)
because assigning the fields one by one can fail to convince
flow.c that the entire aggregate was initialized.
Unions are troublesome because members may be shorter. */
&&
TREE_CODE
(
TREE_TYPE
(
decl
))
!=
RECORD_TYPE
&&
TREE_CODE
(
TREE_TYPE
(
decl
))
!=
UNION_TYPE
&&
TREE_CODE
(
TREE_TYPE
(
decl
))
!=
QUAL_UNION_TYPE
&&
TREE_CODE
(
TREE_TYPE
(
decl
))
!=
ARRAY_TYPE
&&
!
AGGREGATE_TYPE_P
(
TREE_TYPE
(
decl
))
&&
DECL_RTL
(
decl
)
!=
0
&&
GET_CODE
(
DECL_RTL
(
decl
))
==
REG
&&
regno_uninitialized
(
REGNO
(
DECL_RTL
(
decl
))))
...
...
@@ -4662,10 +4643,7 @@ init_function_start (subr, filename, line)
/* Warn if this value is an aggregate type,
regardless of which calling convention we are using for it. */
if
(
warn_aggregate_return
&&
(
TREE_CODE
(
TREE_TYPE
(
DECL_RESULT
(
subr
)))
==
RECORD_TYPE
||
TREE_CODE
(
TREE_TYPE
(
DECL_RESULT
(
subr
)))
==
UNION_TYPE
||
TREE_CODE
(
TREE_TYPE
(
DECL_RESULT
(
subr
)))
==
QUAL_UNION_TYPE
||
TREE_CODE
(
TREE_TYPE
(
DECL_RESULT
(
subr
)))
==
ARRAY_TYPE
))
&&
AGGREGATE_TYPE_P
(
TREE_TYPE
(
DECL_RESULT
(
subr
))))
warning
(
"function returns an aggregate"
);
current_function_returns_pointer
...
...
@@ -4886,10 +4864,7 @@ expand_function_start (subr, parms_have_cleanups)
DECL_RTL
(
DECL_RESULT
(
subr
))
=
gen_rtx
(
MEM
,
DECL_MODE
(
DECL_RESULT
(
subr
)),
value_address
);
MEM_IN_STRUCT_P
(
DECL_RTL
(
DECL_RESULT
(
subr
)))
=
(
TREE_CODE
(
TREE_TYPE
(
DECL_RESULT
(
subr
)))
==
RECORD_TYPE
||
TREE_CODE
(
TREE_TYPE
(
DECL_RESULT
(
subr
)))
==
UNION_TYPE
||
TREE_CODE
(
TREE_TYPE
(
DECL_RESULT
(
subr
)))
==
QUAL_UNION_TYPE
||
TREE_CODE
(
TREE_TYPE
(
DECL_RESULT
(
subr
)))
==
ARRAY_TYPE
);
=
AGGREGATE_TYPE_P
(
TREE_TYPE
(
DECL_RESULT
(
subr
)));
}
}
else
if
(
DECL_MODE
(
DECL_RESULT
(
subr
))
==
VOIDmode
)
...
...
This diff is collapsed.
Click to expand it.
gcc/stmt.c
View file @
05e3bdb9
...
...
@@ -3500,11 +3500,7 @@ expand_decl (decl)
/* If this is a memory ref that contains aggregate components,
mark it as such for cse and loop optimize. */
MEM_IN_STRUCT_P
(
DECL_RTL
(
decl
))
=
(
TREE_CODE
(
TREE_TYPE
(
decl
))
==
ARRAY_TYPE
||
TREE_CODE
(
TREE_TYPE
(
decl
))
==
RECORD_TYPE
||
TREE_CODE
(
TREE_TYPE
(
decl
))
==
UNION_TYPE
||
TREE_CODE
(
TREE_TYPE
(
decl
))
==
QUAL_UNION_TYPE
);
MEM_IN_STRUCT_P
(
DECL_RTL
(
decl
))
=
AGGREGATE_TYPE_P
(
TREE_TYPE
(
decl
));
#if 0
/* If this is in memory because of -ffloat-store,
set the volatile bit, to prevent optimizations from
...
...
@@ -3551,11 +3547,7 @@ expand_decl (decl)
/* If this is a memory ref that contains aggregate components,
mark it as such for cse and loop optimize. */
MEM_IN_STRUCT_P
(
DECL_RTL
(
decl
))
=
(
TREE_CODE
(
TREE_TYPE
(
decl
))
==
ARRAY_TYPE
||
TREE_CODE
(
TREE_TYPE
(
decl
))
==
RECORD_TYPE
||
TREE_CODE
(
TREE_TYPE
(
decl
))
==
UNION_TYPE
||
TREE_CODE
(
TREE_TYPE
(
decl
))
==
QUAL_UNION_TYPE
);
MEM_IN_STRUCT_P
(
DECL_RTL
(
decl
))
=
AGGREGATE_TYPE_P
(
TREE_TYPE
(
decl
));
/* Indicate the alignment we actually gave this variable. */
#ifdef STACK_BOUNDARY
...
...
This diff is collapsed.
Click to expand it.
gcc/varasm.c
View file @
05e3bdb9
...
...
@@ -540,10 +540,7 @@ make_decl_rtl (decl, asmspec, top_level)
if
(
TREE_READONLY
(
decl
))
RTX_UNCHANGING_P
(
DECL_RTL
(
decl
))
=
1
;
MEM_IN_STRUCT_P
(
DECL_RTL
(
decl
))
=
(
TREE_CODE
(
TREE_TYPE
(
decl
))
==
ARRAY_TYPE
||
TREE_CODE
(
TREE_TYPE
(
decl
))
==
RECORD_TYPE
||
TREE_CODE
(
TREE_TYPE
(
decl
))
==
UNION_TYPE
||
TREE_CODE
(
TREE_TYPE
(
decl
))
==
QUAL_UNION_TYPE
);
=
AGGREGATE_TYPE_P
(
TREE_TYPE
(
decl
));
/* Optionally set flags or add text to the name to record information
such as that it is a function name.
...
...
@@ -2613,8 +2610,7 @@ output_constant_def (exp)
TREE_CST_RTL
(
exp
)
=
gen_rtx
(
MEM
,
TYPE_MODE
(
TREE_TYPE
(
exp
)),
def
);
RTX_UNCHANGING_P
(
TREE_CST_RTL
(
exp
))
=
1
;
if
(
TREE_CODE
(
TREE_TYPE
(
exp
))
==
RECORD_TYPE
||
TREE_CODE
(
TREE_TYPE
(
exp
))
==
ARRAY_TYPE
)
if
(
AGGREGATE_TYPE_P
(
TREE_TYPE
(
exp
)))
MEM_IN_STRUCT_P
(
TREE_CST_RTL
(
exp
))
=
1
;
pop_obstacks
();
...
...
This diff is collapsed.
Click to expand it.
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