From: Hans Wennborg Date: Wed, 19 Sep 2012 09:25:03 +0000 (+0000) Subject: Move load_to_switch.ll to test/CodeGen/SPARC/ X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=c4ba62ca1d53b90a9ff1efce025f8e5d7dd91ca9;p=oota-llvm.git Move load_to_switch.ll to test/CodeGen/SPARC/ Because the test invokes llc -march=sparc, it needs to be in a directory which is only run when the sparc target is built. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@164211 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/CodeGen/SPARC/load_to_switch.ll b/test/CodeGen/SPARC/load_to_switch.ll new file mode 100644 index 00000000000..8d62de527e4 --- /dev/null +++ b/test/CodeGen/SPARC/load_to_switch.ll @@ -0,0 +1,84 @@ +; RUN: llc -march=sparc < %s | FileCheck %s + +; Check that all the switches turned into lookup tables by SimplifyCFG are +; turned back into switches for targets that don't like lookup tables. + +@.str = private unnamed_addr constant [4 x i8] c"foo\00", align 1 +@.str1 = private unnamed_addr constant [4 x i8] c"bar\00", align 1 +@.str2 = private unnamed_addr constant [4 x i8] c"baz\00", align 1 +@.str3 = private unnamed_addr constant [4 x i8] c"qux\00", align 1 +@.str4 = private unnamed_addr constant [6 x i8] c"error\00", align 1 +@switch.table = private unnamed_addr constant [7 x i32] [i32 55, i32 123, i32 0, i32 -1, i32 27, i32 62, i32 1] +@switch.table1 = private unnamed_addr constant [4 x i8] c"*\09X\05" +@switch.table2 = private unnamed_addr constant [4 x float] [float 0x40091EB860000000, float 0x3FF3BE76C0000000, float 0x4012449BA0000000, float 0x4001AE1480000000] +@switch.table3 = private unnamed_addr constant [4 x i8*] [i8* getelementptr inbounds ([4 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8]* @.str1, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8]* @.str2, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8]* @.str3, i64 0, i64 0)] + +define i32 @f(i32 %c) { +entry: + %switch.tableidx = sub i32 %c, 42 + %0 = icmp ult i32 %switch.tableidx, 7 + br i1 %0, label %switch.lookup, label %return + +switch.lookup: + %switch.gep = getelementptr inbounds [7 x i32]* @switch.table, i32 0, i32 %switch.tableidx + %switch.load = load i32* %switch.gep + ret i32 %switch.load + +return: + ret i32 15 + +; CHECK: f: +; CHECK: %switch.lookup +; CHECK-NOT: sethi %hi(.Lswitch.table) +} + +declare void @dummy(i8 signext, float) + +define void @h(i32 %x) { +entry: + %switch.tableidx = sub i32 %x, 0 + %0 = icmp ult i32 %switch.tableidx, 4 + br i1 %0, label %switch.lookup, label %sw.epilog + +switch.lookup: + %switch.gep = getelementptr inbounds [4 x i8]* @switch.table1, i32 0, i32 %switch.tableidx + %switch.load = load i8* %switch.gep + %switch.gep1 = getelementptr inbounds [4 x float]* @switch.table2, i32 0, i32 %switch.tableidx + %switch.load2 = load float* %switch.gep1 + br label %sw.epilog + +sw.epilog: + %a.0 = phi i8 [ %switch.load, %switch.lookup ], [ 7, %entry ] + %b.0 = phi float [ %switch.load2, %switch.lookup ], [ 0x4023FAE140000000, %entry ] + call void @dummy(i8 signext %a.0, float %b.0) + ret void + +; CHECK: h: +; CHECK: %switch.lookup +; CHECK-NOT: sethi %hi(.Lswitch.table{{[0-9]}}) +; CHECK-NOT: sethi %hi(.Lswitch.table{{[0-9]}}) +} + +define i8* @foostring(i32 %x) { +entry: + %switch.tableidx = sub i32 %x, 0 + %0 = icmp ult i32 %switch.tableidx, 4 + br i1 %0, label %switch.lookup, label %return + +switch.lookup: + %switch.gep = getelementptr inbounds [4 x i8*]* @switch.table3, i32 0, i32 %switch.tableidx + %switch.load = load i8** %switch.gep + ret i8* %switch.load + +return: + ret i8* getelementptr inbounds ([6 x i8]* @.str4, i64 0, i64 0) + +; CHECK: foostring: +; CHECK: %switch.lookup +; CHECK-NOT: sethi %hi(.Lswitch.table3) +} + +; CHECK-NOT: .Lswitch.table +; CHECK-NOT: .Lswitch.table1 +; CHECK-NOT: .Lswitch.table2 +; CHECK-NOT: .Lswitch.table3 diff --git a/test/Transforms/CodeGenPrepare/load_to_switch.ll b/test/Transforms/CodeGenPrepare/load_to_switch.ll deleted file mode 100644 index 76a57c6b50e..00000000000 --- a/test/Transforms/CodeGenPrepare/load_to_switch.ll +++ /dev/null @@ -1,84 +0,0 @@ -; RUN: llc -march=sparc < %s | FileCheck %s - -; Check that all the switches turned into lookup tables by SimplifyCFG are -; turned back into switches for targets that don't like lookup tables. - -@.str = private unnamed_addr constant [4 x i8] c"foo\00", align 1 -@.str1 = private unnamed_addr constant [4 x i8] c"bar\00", align 1 -@.str2 = private unnamed_addr constant [4 x i8] c"baz\00", align 1 -@.str3 = private unnamed_addr constant [4 x i8] c"qux\00", align 1 -@.str4 = private unnamed_addr constant [6 x i8] c"error\00", align 1 -@switch.table = private unnamed_addr constant [7 x i32] [i32 55, i32 123, i32 0, i32 -1, i32 27, i32 62, i32 1] -@switch.table1 = private unnamed_addr constant [4 x i8] c"*\09X\05" -@switch.table2 = private unnamed_addr constant [4 x float] [float 0x40091EB860000000, float 0x3FF3BE76C0000000, float 0x4012449BA0000000, float 0x4001AE1480000000] -@switch.table3 = private unnamed_addr constant [4 x i8*] [i8* getelementptr inbounds ([4 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8]* @.str1, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8]* @.str2, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8]* @.str3, i64 0, i64 0)] - -define i32 @f(i32 %c) { -entry: - %switch.tableidx = sub i32 %c, 42 - %0 = icmp ult i32 %switch.tableidx, 7 - br i1 %0, label %switch.lookup, label %return - -switch.lookup: - %switch.gep = getelementptr inbounds [7 x i32]* @switch.table, i32 0, i32 %switch.tableidx - %switch.load = load i32* %switch.gep - ret i32 %switch.load - -return: - ret i32 15 - -; CHECK: f: -; CHECK: %switch.lookup -; CHECK-NOT: sethi %hi(.Lswitch.table) -} - -declare void @dummy(i8 signext, float) - -define void @h(i32 %x) { -entry: - %switch.tableidx = sub i32 %x, 0 - %0 = icmp ult i32 %switch.tableidx, 4 - br i1 %0, label %switch.lookup, label %sw.epilog - -switch.lookup: - %switch.gep = getelementptr inbounds [4 x i8]* @switch.table1, i32 0, i32 %switch.tableidx - %switch.load = load i8* %switch.gep - %switch.gep1 = getelementptr inbounds [4 x float]* @switch.table2, i32 0, i32 %switch.tableidx - %switch.load2 = load float* %switch.gep1 - br label %sw.epilog - -sw.epilog: - %a.0 = phi i8 [ %switch.load, %switch.lookup ], [ 7, %entry ] - %b.0 = phi float [ %switch.load2, %switch.lookup ], [ 0x4023FAE140000000, %entry ] - call void @dummy(i8 signext %a.0, float %b.0) - ret void - -; CHECK: h: -; CHECK: %switch.lookup -; CHECK-NOT: sethi %hi(.Lswitch.table{{[0-9]}}) -; CHECK-NOT: sethi %hi(.Lswitch.table{{[0-9]}}) -} - -define i8* @foostring(i32 %x) { -entry: - %switch.tableidx = sub i32 %x, 0 - %0 = icmp ult i32 %switch.tableidx, 4 - br i1 %0, label %switch.lookup, label %return - -switch.lookup: - %switch.gep = getelementptr inbounds [4 x i8*]* @switch.table3, i32 0, i32 %switch.tableidx - %switch.load = load i8** %switch.gep - ret i8* %switch.load - -return: - ret i8* getelementptr inbounds ([6 x i8]* @.str4, i64 0, i64 0) - -; CHECK: foostring: -; CHECK: %switch.lookup -; CHECK-NOT: sethi %hi(.Lswitch.table3) -} - -; CHECK-NOT: .Lswitch.table -; CHECK-NOT: .Lswitch.table1 -; CHECK-NOT: .Lswitch.table2 -; CHECK-NOT: .Lswitch.table3