diff options
| author | Justin Lebar <jlebar@google.com> | 2016-11-05 16:47:25 +0000 |
|---|---|---|
| committer | Justin Lebar <jlebar@google.com> | 2016-11-05 16:47:25 +0000 |
| commit | 54b0be048e3e449aadf7206efa991ee3419188ac (patch) | |
| tree | 97b913f7630436a86dfe534c5982f375993becd3 /llvm/test | |
| parent | 1af0fc1103591c35cca8048dae9776a6c329ecd1 (diff) | |
| download | bcm5719-llvm-54b0be048e3e449aadf7206efa991ee3419188ac.tar.gz bcm5719-llvm-54b0be048e3e449aadf7206efa991ee3419188ac.zip | |
[LoopStrengthReduce] Don't use a DenseSet<int64_t> when we might add any valid int64_t to the set.
Summary:
SmallSetVector uses DenseSet, but that means we need to reserve some
values for the empty and tombstone keys.
It seems to me we should have a general way to let us store full-range
ints inside of DenseSets, and furthermore that we probably shouldn't
silently let you add ints into DenseSets without explicitly promising
that they're in range. But that's a battle for another day; for now,
just fix this code, since we currently do something Very Bad when
compiling ffmpeg.
Fixes PR30914.
Reviewers: jeremyhu
Subscribers: llvm-commits, mzolotukhin
Differential Revision: https://reviews.llvm.org/D26323
llvm-svn: 286038
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/CodeGen/X86/loop-strength-reduce-crash.ll | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/loop-strength-reduce-crash.ll b/llvm/test/CodeGen/X86/loop-strength-reduce-crash.ll new file mode 100644 index 00000000000..1117f978500 --- /dev/null +++ b/llvm/test/CodeGen/X86/loop-strength-reduce-crash.ll @@ -0,0 +1,24 @@ +; RUN: llc < %s -o /dev/null + +; Check that this doesn't crash (by virtue of using INT64_MAX as a constant in +; the loop). + +target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-apple-macosx10.12.0" + +define void @foo() { +entry: + br label %for + +for: + %0 = phi i64 [ %add, %for ], [ undef, %entry ] + %next = phi i32 [ %inc, %for ], [ undef, %entry ] + store i32 %next, i32* undef, align 4 + %add = add i64 %0, 9223372036854775807 + %inc = add nsw i32 %next, 1 + br i1 undef, label %exit, label %for + +exit: + store i64 %add, i64* undef + ret void +} |

