Hi, On 26 August 2017 at 04:04, Renato Golin <renato.go...@linaro.org> wrote: > +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.
I think this is a useful info. However there might be pushback from upstream maintainers as this makes the structure bigger by adding a field. This could have implications for memory usage of the compiler. Alternatively, we maybe able to get this info from dwarf info when we compile with -g ? Jim may have some input here (cc ing him). Thanks, Kugan >> >> 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 _______________________________________________ linaro-toolchain mailing list linaro-toolchain@lists.linaro.org https://lists.linaro.org/mailman/listinfo/linaro-toolchain