PR target/65689
commitdce7058449a0ea0adfc67737f3780d7d304de67e
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 17 Apr 2015 16:43:28 +0000 (17 16:43 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 17 Apr 2015 16:43:28 +0000 (17 16:43 +0000)
treeea89bc53cc7f08fb1d28f5bca8fb11c0881cf295
parenta4b0426986ac005001c3d551094e71a69c69eadd
PR target/65689
* genpreds.c (struct constraint_data): Add maybe_allows_reg and
maybe_allows_mem bitfields.
(maybe_allows_none_start, maybe_allows_none_end,
maybe_allows_reg_start, maybe_allows_reg_end, maybe_allows_mem_start,
maybe_allows_mem_end): New variables.
(compute_maybe_allows): New function.
(add_constraint): Use it to initialize maybe_allows_reg and
maybe_allows_mem fields.
(choose_enum_order): Sort the non-is_register/is_const_int/is_memory/
is_address constraints such that those that allow neither mem nor
reg come first, then those that only allow reg but not mem, then
those that only allow mem but not reg, then the rest.
(write_allows_reg_mem_function): New function.
(write_tm_preds_h): Call it.
* stmt.c (parse_output_constraint, parse_input_constraint): Use
the generated insn_extra_constraint_allows_reg_mem function
instead of always setting *allows_reg = true; *allows_mem = true;
for unknown extra constraints.

* gcc.target/aarch64/c-output-template-4.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@222186 138bc75d-0d04-0410-961f-82ee72b054a4
gcc/ChangeLog
gcc/genpreds.c
gcc/stmt.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/aarch64/c-output-template-4.c [new file with mode: 0644]