+linaro-toolchain, hoping to get more eyes into it.

cheers,
--renato

On 25 August 2017 at 17:59, Masaki Arai <masaki.a...@linaro.org> wrote:
> Hi,
>
> I extended GCC 7.1(or GCC 7.2) for `hcqc'.
> I would be grateful if you could give me a comment about whether
> this extension is acceptable and whether this extension should be
> pushed upstream.
>
> The extended GCC's output using the option ` -fverbose-asm' is
> as follows:
>
>   ldr w0, [x29,48] // tmp433, j(8-byte Folded Spill)
>                                              ^^^^^^^^^^^^^^^^^^^
> This code shows that this instruction accesses a memory area
> for spill codes.
> I made the following changes to GCC 7.1(or GCC 7.2).
> The related files are under `hcqc/patch/gcc-7.1.0-add'.
>
> (1) rtl.h
>
> I added flag information to `struct mem_attrs' that means whether
> it is a spill memory area or not.
>
> +
> +   /* True if the MEM is for spill.  */
> +   bool for_spill_p;
>
> Also, I added an access macro for this additional field.
>
> + /* For a MEM rtx, true if its MEM is for spill.  */
> + #define MEM_FOR_SPILL_P(RTX) (get_mem_attrs (RTX)->for_spill_p)
> +
>
> (2) emit-rtl.c
>
> I added a code to turn on flags for spill memory area in function
>  `set_mem_attrs_for_spill'.
>
> +   attrs.for_spill_p = true;
>
> (3) final.c
>
> I added code to print that information in function
> `output_asm_operand_names'
> if the memory is a spill memory area,
>
> +
> +       if (MEM_P (op) && MEM_FOR_SPILL_P (op))
> +       {
> +         HOST_WIDE_INT size = MEM_SIZE (op);
> +         fprintf (asm_out_file, " (" HOST_WIDE_INT_PRINT_DEC "-byte Folded
> Spill)", size);
> +       }
>
> The above changes are implemented similarly as Clang/LLVM.
> Unfortunately, it is difficult for GCC to print the above "(?-byte Folded
> Spill)"
> for memory access instructions only in the same manner as Clang/LLVM.
> The reason is that GCC executes the above `output_asm_operand_names'
> even in situations where any instruction object(insn) does not exist when
> outputting assembly code.
> For example, GCC calls `output_asm_insn' directly from the `define_insn'
> definition in the aarch64.md file without an insn object(`output_asm_insn'
> calls `output_asm_operand_names').
> This occurs in "*cb<optab><mode>1" and
> "*aarch64_fcvt<su_optab><GPF:mode><GPI:mode>2_mult".
>
> From this fact, `hcqc' extracts and accumulates memory access
> instructions from the assembly code with the comment "(?-byte Folded
> Spill)".
>
> The above extensions are commonly available on almost any architecture.
> Also, these extensions do not affect the execution of the resulting assembly
> code since additional outputs are only in comments.
>
> Best regards,
> --
> --------------------------------------
>    Masaki Arai
>
_______________________________________________
linaro-toolchain mailing list
linaro-toolchain@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/linaro-toolchain

Reply via email to