diff options
author | Hans Wennborg <hans@hanshq.net> | 2012-10-30 11:23:25 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2012-10-30 11:23:25 +0000 |
commit | f3254838e47aa0afc36c8ba5af3207c5912972be (patch) | |
tree | 0600d460175725ef379df5f0729ed1dac92ebee1 /llvm/test/Transforms/SimplifyCFG | |
parent | 0c8b7558399e208da7780e5241179ebace813d0b (diff) | |
download | bcm5719-llvm-f3254838e47aa0afc36c8ba5af3207c5912972be.tar.gz bcm5719-llvm-f3254838e47aa0afc36c8ba5af3207c5912972be.zip |
Use TargetTransformInfo to control switch-to-lookup table transformation
When the switch-to-lookup tables transform landed in SimplifyCFG, it
was pointed out that this could be inappropriate for some targets.
Since there was no way at the time for the pass to know anything about
the target, an awkward reverse-transform was added in CodeGenPrepare
that turned lookup tables back into switches for some targets.
This patch uses the new TargetTransformInfo to determine if a
switch should be transformed, and removes
CodeGenPrepare::ConvertLoadToSwitch.
llvm-svn: 167011
Diffstat (limited to 'llvm/test/Transforms/SimplifyCFG')
-rw-r--r-- | llvm/test/Transforms/SimplifyCFG/SPARC/lit.local.cfg | 6 | ||||
-rw-r--r-- | llvm/test/Transforms/SimplifyCFG/SPARC/switch_to_lookup_table.ll | 32 |
2 files changed, 38 insertions, 0 deletions
diff --git a/llvm/test/Transforms/SimplifyCFG/SPARC/lit.local.cfg b/llvm/test/Transforms/SimplifyCFG/SPARC/lit.local.cfg new file mode 100644 index 00000000000..786fee9e661 --- /dev/null +++ b/llvm/test/Transforms/SimplifyCFG/SPARC/lit.local.cfg @@ -0,0 +1,6 @@ +config.suffixes = ['.ll', '.c', '.cpp'] + +targets = set(config.root.targets_to_build.split()) +if not 'Sparc' in targets: + config.unsupported = True + diff --git a/llvm/test/Transforms/SimplifyCFG/SPARC/switch_to_lookup_table.ll b/llvm/test/Transforms/SimplifyCFG/SPARC/switch_to_lookup_table.ll new file mode 100644 index 00000000000..9d1568557f3 --- /dev/null +++ b/llvm/test/Transforms/SimplifyCFG/SPARC/switch_to_lookup_table.ll @@ -0,0 +1,32 @@ +; RUN: opt < %s -simplifycfg -S -mtriple=sparc-unknown-unknown | FileCheck %s + +; Check that switches are not turned into lookup tables, as this is not +; considered profitable on the target. + +define i32 @f(i32 %c) nounwind uwtable readnone { +entry: + switch i32 %c, label %sw.default [ + i32 42, label %return + i32 43, label %sw.bb1 + i32 44, label %sw.bb2 + i32 45, label %sw.bb3 + i32 46, label %sw.bb4 + i32 47, label %sw.bb5 + i32 48, label %sw.bb6 + ] + +sw.bb1: br label %return +sw.bb2: br label %return +sw.bb3: br label %return +sw.bb4: br label %return +sw.bb5: br label %return +sw.bb6: br label %return +sw.default: br label %return +return: + %retval.0 = phi i32 [ 15, %sw.default ], [ 1, %sw.bb6 ], [ 62, %sw.bb5 ], [ 27, %sw.bb4 ], [ -1, %sw.bb3 ], [ 0, %sw.bb2 ], [ 123, %sw.bb1 ], [ 55, %entry ] + ret i32 %retval.0 + +; CHECK: @f +; CHECK-NOT: getelementptr +; CHECK: switch i32 %c +} |