SimplifyCFG: Ranges can be larger than 64 bits. Fixes Release-selfhost build.
authorBenjamin Kramer <benny.kra@googlemail.com>
Fri, 17 Dec 2010 10:48:14 +0000 (10:48 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Fri, 17 Dec 2010 10:48:14 +0000 (10:48 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122054 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Utils/SimplifyCFG.cpp
test/Transforms/SimplifyCFG/switch_create.ll

index 9bb61b6041cedc521b60932f221787b2b3f531cf..1eb8e8eecfb13696266255aa4030b826755ebfed 100644 (file)
@@ -324,7 +324,7 @@ GatherConstantCompares(Value *V, std::vector<ConstantInt*> &Vals, Value *&Extra,
         Span = Span.inverse();
       
       // If there are a ton of values, we don't want to make a ginormous switch.
-      if (Span.getSetSize().getZExtValue() > 8 || Span.isEmptySet() ||
+      if (Span.getSetSize().ugt(8) || Span.isEmptySet() ||
           // We don't handle wrapped sets yet.
           Span.isWrappedSet())
         return 0;
index 369ebc3527258ad4b6f32d7b68c8c5fe3a153c8a..da7f65a6ca35645f6d8061973b7ecb73fb6fee68 100644 (file)
@@ -421,3 +421,23 @@ if.end:                                           ; preds = %if.then, %lor.lhs.f
 ; CHECK:   ]
 }
 
+; Don't crash on ginormous ranges.
+define void @test15(i128 %x) nounwind {
+  %cmp = icmp ugt i128 %x, 2
+  br i1 %cmp, label %if.end, label %lor.false
+
+lor.false:
+  %cmp2 = icmp ne i128 %x, 100000000000000000000
+  br i1 %cmp2, label %if.end, label %if.then
+
+if.then:
+  call void @foo1() noredzone
+  br label %if.end
+
+if.end:
+  ret void
+
+; CHECK: @test15
+; CHECK-NOT: switch
+; CHECK: ret void
+}