[PATCH] D40639: Bail out of a SimplifyCFG switch table opt at undef values.

Mikael Holmén via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Dec 1 04:31:27 PST 2017


This revision was automatically updated to reflect the committed changes.
Closed by commit rL319537: Bail out of a SimplifyCFG switch table opt at undef values. (authored by uabelho).

Changed prior to commit:
  https://reviews.llvm.org/D40639?vs=124880&id=125109#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D40639

Files:
  llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp
  llvm/trunk/test/Transforms/SimplifyCFG/switch_undef.ll


Index: llvm/trunk/test/Transforms/SimplifyCFG/switch_undef.ll
===================================================================
--- llvm/trunk/test/Transforms/SimplifyCFG/switch_undef.ll
+++ llvm/trunk/test/Transforms/SimplifyCFG/switch_undef.ll
@@ -0,0 +1,27 @@
+; RUN: opt %s -keep-loops=false -switch-to-lookup=true -simplifycfg -S | FileCheck %s
+
+target triple = "x86_64-unknown-linux-gnu"
+
+define void @f6() #0 {
+; CHECK-LABEL: entry:
+; CHECK-NEXT:  br label %f1.exit.i
+; CHECK-LABEL: f1.exit.i:
+
+entry:
+  br label %for.cond.i
+
+for.cond.i:                                       ; preds = %f1.exit.i, %entry
+  switch i16 undef, label %f1.exit.i [
+    i16 -1, label %cond.false.i3.i
+    i16 1, label %cond.false.i3.i
+    i16 0, label %cond.false.i3.i
+  ]
+
+cond.false.i3.i:                                  ; preds = %for.cond.i, %for.cond.i, %for.cond.i
+  br label %f1.exit.i
+
+f1.exit.i:                                        ; preds = %cond.false.i3.i, %for.cond.i
+  %cond.i4.i = phi i16 [ undef, %cond.false.i3.i ], [ 1, %for.cond.i ]
+  %tobool7.i = icmp ne i16 %cond.i4.i, 0
+  br label %for.cond.i
+}
Index: llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp
===================================================================
--- llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp
+++ llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp
@@ -5174,7 +5174,7 @@
   for (auto ValuePair : Values) {
     Constant *CaseConst = ConstantExpr::getICmp(CmpInst->getPredicate(),
                                                 ValuePair.second, CmpOp1, true);
-    if (!CaseConst || CaseConst == DefaultConst)
+    if (!CaseConst || CaseConst == DefaultConst || isa<UndefValue>(CaseConst))
       return;
     assert((CaseConst == TrueConst || CaseConst == FalseConst) &&
            "Expect true or false as compare result.");


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D40639.125109.patch
Type: text/x-patch
Size: 1843 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171201/60458828/attachment.bin>


More information about the llvm-commits mailing list