Use std::map rather than SmallMap because SmallMap assumes that the value has
authorDuncan Sands <baldrick@free.fr>
Tue, 12 Jun 2012 20:16:51 +0000 (20:16 +0000)
committerDuncan Sands <baldrick@free.fr>
Tue, 12 Jun 2012 20:16:51 +0000 (20:16 +0000)
POD type, causing memory corruption when mapping to APInts with bitwidth > 64.
Merge another crash testcase into crash.ll while there.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158369 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/Reassociate.cpp
test/Transforms/Reassociate/2005-08-24-Crash.ll [deleted file]
test/Transforms/Reassociate/crash.ll

index 50de946a3071b4e2d1a80b56dbe9fb4eaf346438..0eb4c66eb99d2c6c057efde9a2e85a62809e5b20 100644 (file)
@@ -38,7 +38,6 @@
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/PostOrderIterator.h"
 #include "llvm/ADT/SetVector.h"
-#include "llvm/ADT/SmallMap.h"
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/ADT/Statistic.h"
 #include <algorithm>
@@ -486,7 +485,7 @@ static bool LinearizeExprTree(BinaryOperator *I,
 
   // Leaves - Keeps track of the set of putative leaves as well as the number of
   // paths to each leaf seen so far.
-  typedef SmallMap<Value*, APInt, 8> LeafMap;
+  typedef std::map<Value*, APInt> LeafMap;
   LeafMap Leaves; // Leaf -> Total weight so far.
   SmallVector<Value*, 8> LeafOrder; // Ensure deterministic leaf output order.
 
diff --git a/test/Transforms/Reassociate/2005-08-24-Crash.ll b/test/Transforms/Reassociate/2005-08-24-Crash.ll
deleted file mode 100644 (file)
index 9864de4..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-; RUN: opt < %s -reassociate -disable-output
-
-define void @test(i32 %a, i32 %b, i32 %c, i32 %d) {
-       %tmp.2 = xor i32 %a, %b         ; <i32> [#uses=1]
-       %tmp.5 = xor i32 %c, %d         ; <i32> [#uses=1]
-       %tmp.6 = xor i32 %tmp.2, %tmp.5         ; <i32> [#uses=1]
-       %tmp.9 = xor i32 %c, %a         ; <i32> [#uses=1]
-       %tmp.12 = xor i32 %b, %d                ; <i32> [#uses=1]
-       %tmp.13 = xor i32 %tmp.9, %tmp.12               ; <i32> [#uses=1]
-       %tmp.16 = xor i32 %tmp.6, %tmp.13               ; <i32> [#uses=0]
-       ret void
-}
-
index 7a819422eab85b79a93992bc178d2171c00f7609..601b97647dd64ce92a34d395773e9fbe73c4affa 100644 (file)
@@ -67,3 +67,19 @@ _33:                                              ; preds = %_33, %_
   %tmp367 = add i32 %tmp365, %tmp366
   br label %_33
 }
+
+define void @test(i32 %a, i32 %b, i32 %c, i32 %d) {
+  %tmp.2 = xor i32 %a, %b              ; <i32> [#uses=1]
+  %tmp.5 = xor i32 %c, %d              ; <i32> [#uses=1]
+  %tmp.6 = xor i32 %tmp.2, %tmp.5              ; <i32> [#uses=1]
+  %tmp.9 = xor i32 %c, %a              ; <i32> [#uses=1]
+  %tmp.12 = xor i32 %b, %d             ; <i32> [#uses=1]
+  %tmp.13 = xor i32 %tmp.9, %tmp.12            ; <i32> [#uses=1]
+  %tmp.16 = xor i32 %tmp.6, %tmp.13            ; <i32> [#uses=0]
+  ret void
+}
+
+define i128 @foo() {
+  %mul = mul i128 0, 0
+  ret i128 %mul
+}