[PATCH] D57244: [AsmPrinter] Remove hidden flag -print-schedule.

Andrea Di Biagio via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 25 09:02:31 PST 2019


andreadb created this revision.
andreadb added reviewers: RKSimon, craig.topper, spatel, ab, MatzeB, avt77, hfinkel.
Herald added subscribers: jfb, atanasyan, gbedwell, eraman, javed.absar, sdardis.

This patch removes hidden codegen flag `-print-schedule` effectively reverting the logic originally committed as r300311 (https://llvm.org/viewvc/llvm-project?view=revision&revision=300311).

Flag `-print-schedule` was originally introduced by r300311 to address PR32216 (https://bugs.llvm.org/show_bug.cgi?id=32216). That bug was about adding "Better testing of schedule model instruction latencies/throughputs".

These days, we can use llvm-mca to test scheduling models. So there is no longer a need for flag `-print-schedule` in LLVM. The main use case for PR32216 is addressed by llvm-mca.
Flag `-print-schedule` is mainly used for debugging purposes, and it is only actually used by x86 specific tests. We already have extensive (latency and throughput) tests under "test/tools/llvm-mca" for X86 processor models. That means, most (if not all) existing -print-schedule tests for X86 are redundant.

When flag `-print-schedule` was first added to LLVM, several files had to be modified; a few APIs gained new arguments (see for example method MCAsmStreamer::EmitInstruction), and MCSubtargetInfo/TargetSubtargetInfo gained a couple of `getSchedInfoStr()` methods.

Method `getSchedInfoStr()` had to originally work for both MCInst and MachineInstr. The original implmentation of `getSchedInfoStr()` introduced a subtle layering violation (reported as PR37160 and then fixed/worked-around by r330615).
In retrospect, that new API could have been designed more optimally. We can always query MCSchedModel to get the latency and throughput. More importantly, the "sched-info" string should not have been generated by the subtarget.
Note, r317782 fixed an issue where "print-schedule" didn't work very well in the presence of inline assembly. That commit is also reverted by this change.

In conclusion: I think that we can safely remove the -print-schedule flag. It was previously very useful despite the above issues because there was no better alternative.  Future tests for machine schedulers can use llvm-mca as tool.

Apologies for the large patch; most of the difference is because several tests have been removed. The rest of the diff is a clean-up, and lines have been removed.
I didn't remove the avx512 tests mainly because I am not entirely sure if we have extensive coverage for those in llvm-mca. For now, I have simply regenerated those using update_llc.py (after having removed flag -print-schedule).

Please let me know what you think.

Thanks in advance,
Andrea


https://reviews.llvm.org/D57244

Files:
  include/llvm/CodeGen/AsmPrinter.h
  include/llvm/CodeGen/TargetSubtargetInfo.h
  include/llvm/MC/MCObjectStreamer.h
  include/llvm/MC/MCParser/MCAsmParser.h
  include/llvm/MC/MCStreamer.h
  include/llvm/MC/MCSubtargetInfo.h
  lib/CodeGen/AsmPrinter/AsmPrinter.cpp
  lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp
  lib/CodeGen/MachineCombiner.cpp
  lib/CodeGen/TargetSubtargetInfo.cpp
  lib/MC/MCAsmStreamer.cpp
  lib/MC/MCObjectStreamer.cpp
  lib/MC/MCStreamer.cpp
  lib/Object/RecordStreamer.cpp
  lib/Object/RecordStreamer.h
  lib/Target/AArch64/MCTargetDesc/AArch64ELFStreamer.cpp
  lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp
  lib/Target/Hexagon/MCTargetDesc/HexagonMCELFStreamer.cpp
  lib/Target/Hexagon/MCTargetDesc/HexagonMCELFStreamer.h
  lib/Target/Mips/MCTargetDesc/MipsELFStreamer.cpp
  lib/Target/Mips/MCTargetDesc/MipsELFStreamer.h
  lib/Target/Mips/MCTargetDesc/MipsNaClELFStreamer.cpp
  lib/Target/X86/AsmParser/X86AsmInstrumentation.cpp
  lib/Target/X86/AsmParser/X86AsmInstrumentation.h
  lib/Target/X86/AsmParser/X86AsmParser.cpp
  lib/Target/X86/InstPrinter/X86InstComments.cpp
  lib/Target/X86/MCTargetDesc/X86BaseInfo.h
  lib/Target/X86/X86MCInstLower.cpp
  lib/Target/X86/X86Subtarget.h
  test/CodeGen/X86/3dnow-schedule.ll
  test/CodeGen/X86/adx-schedule.ll
  test/CodeGen/X86/aes-schedule.ll
  test/CodeGen/X86/avx-schedule.ll
  test/CodeGen/X86/avx2-schedule.ll
  test/CodeGen/X86/avx512-schedule.ll
  test/CodeGen/X86/avx512-shuffle-schedule.ll
  test/CodeGen/X86/avx512vpopcntdq-schedule.ll
  test/CodeGen/X86/bmi-schedule.ll
  test/CodeGen/X86/bmi2-schedule.ll
  test/CodeGen/X86/clflushopt-schedule.ll
  test/CodeGen/X86/clwb-schedule.ll
  test/CodeGen/X86/clzero-schedule.ll
  test/CodeGen/X86/cmov-schedule.ll
  test/CodeGen/X86/f16c-schedule.ll
  test/CodeGen/X86/fma-schedule.ll
  test/CodeGen/X86/fma4-schedule.ll
  test/CodeGen/X86/fsgsbase-schedule.ll
  test/CodeGen/X86/lea32-schedule.ll
  test/CodeGen/X86/lea64-schedule.ll
  test/CodeGen/X86/lwp-schedule.ll
  test/CodeGen/X86/lzcnt-schedule.ll
  test/CodeGen/X86/mmx-schedule.ll
  test/CodeGen/X86/movbe-schedule.ll
  test/CodeGen/X86/mul-constant-i32.ll
  test/CodeGen/X86/mul-constant-i64.ll
  test/CodeGen/X86/mwaitx-schedule.ll
  test/CodeGen/X86/popcnt-schedule.ll
  test/CodeGen/X86/rdpid-schedule.ll
  test/CodeGen/X86/rdrand-schedule.ll
  test/CodeGen/X86/rdseed-schedule.ll
  test/CodeGen/X86/recip-fastmath.ll
  test/CodeGen/X86/recip-fastmath2.ll
  test/CodeGen/X86/rtm-schedule.ll
  test/CodeGen/X86/schedule-x86-64-shld.ll
  test/CodeGen/X86/schedule-x86_32.ll
  test/CodeGen/X86/schedule-x86_64.ll
  test/CodeGen/X86/sha-schedule.ll
  test/CodeGen/X86/sse-schedule.ll
  test/CodeGen/X86/sse2-schedule.ll
  test/CodeGen/X86/sse3-schedule.ll
  test/CodeGen/X86/sse41-schedule.ll
  test/CodeGen/X86/sse42-schedule.ll
  test/CodeGen/X86/sse4a-schedule.ll
  test/CodeGen/X86/ssse3-schedule.ll
  test/CodeGen/X86/tbm-schedule.ll
  test/CodeGen/X86/x87-schedule.ll
  test/CodeGen/X86/xop-schedule.ll
  tools/llvm-exegesis/llvm-exegesis.cpp
  tools/llvm-mca/CodeRegionGenerator.cpp





More information about the llvm-commits mailing list