Skip to content

Commit 17cb4cb

Browse files
committed
Bitcode: Don't optimize constants when preserving use-list order
`ValueEnumerator::OptimizeConstants()` creates forward references within the constant pools, which makes predicting constants' use-list order difficult. For now, just disable the optimization. This can be re-enabled in the future in one of two ways: - Enable a limited version of this optimization that doesn't create forward references. One idea is to categorize constants by their "height" and make that the top-level sort. - Enable it entirely. This requires predicting how may times each constant will be recreated as its operands' and operands' operands' (etc.) forward references get resolved. This is part of PR5680. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@213953 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent e27d5a0 commit 17cb4cb

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

lib/Bitcode/Writer/ValueEnumerator.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "llvm/IR/DerivedTypes.h"
1919
#include "llvm/IR/Instructions.h"
2020
#include "llvm/IR/Module.h"
21+
#include "llvm/IR/UseListOrder.h"
2122
#include "llvm/IR/ValueSymbolTable.h"
2223
#include "llvm/Support/Debug.h"
2324
#include "llvm/Support/raw_ostream.h"
@@ -179,6 +180,11 @@ void ValueEnumerator::print(raw_ostream &OS, const ValueMapType &Map,
179180
void ValueEnumerator::OptimizeConstants(unsigned CstStart, unsigned CstEnd) {
180181
if (CstStart == CstEnd || CstStart+1 == CstEnd) return;
181182

183+
if (shouldPreserveBitcodeUseListOrder())
184+
// Optimizing constants makes the use-list order difficult to predict.
185+
// Disable it for now when trying to preserve the order.
186+
return;
187+
182188
std::stable_sort(Values.begin() + CstStart, Values.begin() + CstEnd,
183189
[this](const std::pair<const Value *, unsigned> &LHS,
184190
const std::pair<const Value *, unsigned> &RHS) {

0 commit comments

Comments
 (0)