Only do switch-to-lookup table transformation when TargetTransformInfo
authorHans Wennborg <hans@hanshq.net>
Wed, 7 Nov 2012 21:35:12 +0000 (21:35 +0000)
committerHans Wennborg <hans@hanshq.net>
Wed, 7 Nov 2012 21:35:12 +0000 (21:35 +0000)
is available.

llvm-svn: 167552

llvm/lib/Transforms/Utils/SimplifyCFG.cpp
llvm/test/Transforms/SimplifyCFG/X86/lit.local.cfg [new file with mode: 0644]
llvm/test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll [moved from llvm/test/Transforms/SimplifyCFG/switch_to_lookup_table.ll with 99% similarity]
llvm/test/Transforms/SimplifyCFG/switch_create.ll

index 9823433..b33d0d4 100644 (file)
@@ -3538,7 +3538,8 @@ static bool SwitchToLookupTable(SwitchInst *SI,
                                 const TargetTransformInfo *TTI) {
   assert(SI->getNumCases() > 1 && "Degenerate switch?");
 
-  if (TTI && !TTI->getScalarTargetTransformInfo()->shouldBuildLookupTables())
+  // Only build lookup table when we have a target that supports it.
+  if (!TTI || !TTI->getScalarTargetTransformInfo()->shouldBuildLookupTables())
     return false;
 
   // FIXME: If the switch is too sparse for a lookup table, perhaps we could
diff --git a/llvm/test/Transforms/SimplifyCFG/X86/lit.local.cfg b/llvm/test/Transforms/SimplifyCFG/X86/lit.local.cfg
new file mode 100644 (file)
index 0000000..a8ad0f1
--- /dev/null
@@ -0,0 +1,6 @@
+config.suffixes = ['.ll', '.c', '.cpp']
+
+targets = set(config.root.targets_to_build.split())
+if not 'X86' in targets:
+    config.unsupported = True
+
@@ -1,4 +1,4 @@
-; RUN: opt < %s -simplifycfg -S | FileCheck %s
+; RUN: opt < %s -simplifycfg -S -mtriple=x86_64-unknown-linux-gnu | FileCheck %s
 
 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
index b28e4a4..546cc75 100644 (file)
@@ -141,9 +141,8 @@ UnifiedReturnBlock:             ; preds = %shortcirc_done.4, %shortcirc_next.4
         ret i1 %UnifiedRetVal
         
 ; CHECK: @test6
-; CHECK: %switch.tableidx = sub i32 %tmp.2.i, 14
-; CHECK: %0 = icmp ult i32 %switch.tableidx, 6
-; CHECK: select i1 %0, i1 true, i1 false
+; CHECK: %tmp.2.i.off = add i32 %tmp.2.i, -14
+; CHECK: %switch = icmp ult i32 %tmp.2.i.off, 6
 }
 
 define void @test7(i8 zeroext %c, i32 %x) nounwind ssp noredzone {