summaryrefslogtreecommitdiffstats
path: root/contrib/llvm
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm')
-rw-r--r--contrib/llvm/lib/CodeGen/MachineScheduler.cpp4
-rw-r--r--contrib/llvm/patches/patch-r296800-llvm-r219512-out-of-registers.diff33
2 files changed, 35 insertions, 2 deletions
diff --git a/contrib/llvm/lib/CodeGen/MachineScheduler.cpp b/contrib/llvm/lib/CodeGen/MachineScheduler.cpp
index e71c4df..96e3802 100644
--- a/contrib/llvm/lib/CodeGen/MachineScheduler.cpp
+++ b/contrib/llvm/lib/CodeGen/MachineScheduler.cpp
@@ -2365,8 +2365,8 @@ static bool tryPressure(const PressureChange &TryP,
}
// If one candidate decreases and the other increases, go with it.
// Invalid candidates have UnitInc==0.
- if (tryLess(TryP.getUnitInc() < 0, CandP.getUnitInc() < 0, TryCand, Cand,
- Reason)) {
+ if (tryGreater(TryP.getUnitInc() < 0, CandP.getUnitInc() < 0, TryCand, Cand,
+ Reason)) {
return true;
}
// If the candidates are decreasing pressure, reverse priority.
diff --git a/contrib/llvm/patches/patch-r296800-llvm-r219512-out-of-registers.diff b/contrib/llvm/patches/patch-r296800-llvm-r219512-out-of-registers.diff
new file mode 100644
index 0000000..cd64f2f
--- /dev/null
+++ b/contrib/llvm/patches/patch-r296800-llvm-r219512-out-of-registers.diff
@@ -0,0 +1,33 @@
+Pull in r219512 from upstream llvm trunk (by Hal Finkel):
+
+ [MiSched] Fix a logic error in tryPressure()
+
+ Fixes a logic error in the MachineScheduler found by Steve Montgomery
+ (and confirmed by Andy). This has gone unfixed for months because the
+ fix has been found to introduce some small performance regressions.
+ However, Andy has recommended that, at this point, we fix this to
+ avoid further dependence on the incorrect behavior (and then
+ follow-up separately on any regressions), and I agree.
+
+ Fixes PR18883.
+
+This fixes a possible "ran out of registers" error when compiling
+www/firefox 45.0 on i386.
+
+Introduced here: http://svnweb.freebsd.org/changeset/base/xxxxxx
+
+Index: lib/CodeGen/MachineScheduler.cpp
+===================================================================
+--- lib/CodeGen/MachineScheduler.cpp
++++ lib/CodeGen/MachineScheduler.cpp
+@@ -2365,8 +2365,8 @@ static bool tryPressure(const PressureChange &TryP
+ }
+ // If one candidate decreases and the other increases, go with it.
+ // Invalid candidates have UnitInc==0.
+- if (tryLess(TryP.getUnitInc() < 0, CandP.getUnitInc() < 0, TryCand, Cand,
+- Reason)) {
++ if (tryGreater(TryP.getUnitInc() < 0, CandP.getUnitInc() < 0, TryCand, Cand,
++ Reason)) {
+ return true;
+ }
+ // If the candidates are decreasing pressure, reverse priority.
OpenPOWER on IntegriCloud