Fix removal of dead elements from PressureDiff. This fixes https://bugs.llvm.org/show_bug.cgi?id=37252
I'm nervous that this might introduce some scheduling churn which will cause unrelated fails on bots.
Differential D51495
Fix removal of dead elements from PressureDiff ygribov on Aug 30 2018, 10:01 AM. Authored by
Details
Fix removal of dead elements from PressureDiff. This fixes https://bugs.llvm.org/show_bug.cgi?id=37252 I'm nervous that this might introduce some scheduling churn which will cause unrelated fails on bots.
Diff Detail
Event TimelineComment Actions Good catch, the fix looks good to me. I assume you built llvm will all (non-experimental) targets and tested them? Independently of this patch it is worrying that this requires test changes. That means X86 schedules produce intermediate pressure sets with MaxPSets/16 different pressure sets inside... Comment Actions
Yes, I ran cmake with default settings so all default cores were built. One caveat is that testing was done on Windows (~27K tests, done according to instructions in https://llvm.org/docs/GettingStartedVS.html).
Yes, here's what I'm getting for e.g. divrem8_ext.ll: - PressureChanges 0x0000000002663400 {{PSetID=2 UnitInc=1 }, {PSetID=11 UnitInc=1 }, {PSetID=12 UnitInc=1 }, {PSetID=13 ...}, ...} llvm::PressureChange[16] + [0] {PSetID=2 UnitInc=1 } llvm::PressureChange GR8_ABCD_L + [1] {PSetID=11 UnitInc=1 } llvm::PressureChange GR32_TC + [2] {PSetID=12 UnitInc=1 } llvm::PressureChange LOW32_ADDR_ACCESS_with_sub_32bit+GR64_NOREX_and_GR64_TCW64 + [3] {PSetID=13 UnitInc=1 } llvm::PressureChange GR64_NOREX_and_GR64_TC + [4] {PSetID=14 UnitInc=1 } llvm::PressureChange LOW32_ADDR_ACCESS_with_sub_32bit+GR64_NOREX_and_GR64_TC + [5] {PSetID=18 UnitInc=1 } llvm::PressureChange GR64_NOREX + [6] {PSetID=19 UnitInc=1 } llvm::PressureChange GR64_TCW64 + [7] {PSetID=20 UnitInc=1 } llvm::PressureChange LOW32_ADDR_ACCESS_with_sub_32bit+GR64_TCW64 + [8] {PSetID=21 UnitInc=1 } llvm::PressureChange GR64_TC + [9] {PSetID=22 UnitInc=1 } llvm::PressureChange LOW32_ADDR_ACCESS_with_sub_32bit+GR64_TC + [10] {PSetID=23 UnitInc=1 } llvm::PressureChange GR64_TC+GR64_TCW64 + [11] {PSetID=25 UnitInc=-1 } llvm::PressureChange GR8+GR64_NOREX + [12] {PSetID=26 UnitInc=-1 } llvm::PressureChange GR8+GR64_TCW64 + [13] {PSetID=28 UnitInc=-1 } llvm::PressureChange GR8+GR64_TC + [14] {PSetID=30 UnitInc=-1 } llvm::PressureChange GR16 + [15] {PSetID=30 UnitInc=-1 } llvm::PressureChange GR16 As a side note the current limit of 16 elements may be too strict for some targets (e.g. it caused a lot of noise on our non-orthogonal architecture until I increased it significantly) so it may make sense to switch to dynamic array. |