Skip to content
This repository has been archived by the owner on Apr 23, 2020. It is now read-only.

Commit

Permalink
[MC] Fix constant pools with DenseMap sentinel values
Browse files Browse the repository at this point in the history
The MC ConstantPool class uses a DenseMap to track generated constants, with
the int64_t value of the constant as the key. This fails when values of
0x7fffffffffffffff or 0x7ffffffffffffffe are inserted into the constant pool, as
these are sentinel values for DenseMap.

The fix is to use std::map instead, which doesn't use sentinel values.

Differential revision: https://reviews.llvm.org/D33667



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304199 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
ostannard committed May 30, 2017
1 parent db736ce commit 94eec10
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 1 deletion.
3 changes: 2 additions & 1 deletion include/llvm/MC/ConstantPools.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include "llvm/ADT/SmallVector.h"
#include "llvm/Support/SMLoc.h"
#include <cstdint>
#include <map>

namespace llvm {

Expand All @@ -44,7 +45,7 @@ struct ConstantPoolEntry {
class ConstantPool {
using EntryVecTy = SmallVector<ConstantPoolEntry, 4>;
EntryVecTy Entries;
DenseMap<int64_t, const MCSymbolRefExpr *> CachedEntries;
std::map<int64_t, const MCSymbolRefExpr *> CachedEntries;

public:
// Initialize a new empty constant pool
Expand Down
12 changes: 12 additions & 0 deletions test/MC/AArch64/ldr-pseudo.s
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,13 @@ f18:
ldr x1, =0x320064
// CHECK: ldr x1, .Ltmp[[TMP26:[0-9]+]]

// We previously used a DenseMap with constant values as keys, check that
// sentinel values can be used.
ldr x0, =0x7ffffffffffffffe
// CHECK: ldr x0, .Ltmp[[TMP27:[0-9]+]]
ldr x1, =0x7fffffffffffffff
// CHECK: ldr x1, .Ltmp[[TMP28:[0-9]+]]

//
// Constant Pools
//
Expand Down Expand Up @@ -311,3 +318,8 @@ f18:
// CHECK: .p2align 2
// CHECK: .Ltmp[[TMP25]]
// CHECK: .word 3276900

// CHECK: .Ltmp[[TMP27]]
// CHECK: .xword 9223372036854775806
// CHECK: .Ltmp[[TMP28]]
// CHECK: .xword 9223372036854775807

0 comments on commit 94eec10

Please sign in to comment.