From ac071eac30953b0913c91a63c3d3d32c627abf05 Mon Sep 17 00:00:00 2001 From: Duncan Sands Date: Tue, 12 Jun 2012 20:16:51 +0000 Subject: [PATCH] Use std::map rather than SmallMap because SmallMap assumes that the value has 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 | 3 +-- test/Transforms/Reassociate/2005-08-24-Crash.ll | 13 ------------- test/Transforms/Reassociate/crash.ll | 16 ++++++++++++++++ 3 files changed, 17 insertions(+), 15 deletions(-) delete mode 100644 test/Transforms/Reassociate/2005-08-24-Crash.ll diff --git a/lib/Transforms/Scalar/Reassociate.cpp b/lib/Transforms/Scalar/Reassociate.cpp index 50de946a307..0eb4c66eb99 100644 --- a/lib/Transforms/Scalar/Reassociate.cpp +++ b/lib/Transforms/Scalar/Reassociate.cpp @@ -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 @@ -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 LeafMap; + typedef std::map LeafMap; LeafMap Leaves; // Leaf -> Total weight so far. SmallVector 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 index 9864de45f88..00000000000 --- a/test/Transforms/Reassociate/2005-08-24-Crash.ll +++ /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 ; [#uses=1] - %tmp.5 = xor i32 %c, %d ; [#uses=1] - %tmp.6 = xor i32 %tmp.2, %tmp.5 ; [#uses=1] - %tmp.9 = xor i32 %c, %a ; [#uses=1] - %tmp.12 = xor i32 %b, %d ; [#uses=1] - %tmp.13 = xor i32 %tmp.9, %tmp.12 ; [#uses=1] - %tmp.16 = xor i32 %tmp.6, %tmp.13 ; [#uses=0] - ret void -} - diff --git a/test/Transforms/Reassociate/crash.ll b/test/Transforms/Reassociate/crash.ll index 7a819422eab..601b97647dd 100644 --- a/test/Transforms/Reassociate/crash.ll +++ b/test/Transforms/Reassociate/crash.ll @@ -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 ; [#uses=1] + %tmp.5 = xor i32 %c, %d ; [#uses=1] + %tmp.6 = xor i32 %tmp.2, %tmp.5 ; [#uses=1] + %tmp.9 = xor i32 %c, %a ; [#uses=1] + %tmp.12 = xor i32 %b, %d ; [#uses=1] + %tmp.13 = xor i32 %tmp.9, %tmp.12 ; [#uses=1] + %tmp.16 = xor i32 %tmp.6, %tmp.13 ; [#uses=0] + ret void +} + +define i128 @foo() { + %mul = mul i128 0, 0 + ret i128 %mul +}