summaryrefslogtreecommitdiff
path: root/test/Transforms/InstCombine/puts-1.ll
diff options
context:
space:
mode:
authorMeador Inge <meadori@codesourcery.com>2012-11-29 19:15:17 +0000
committerMeador Inge <meadori@codesourcery.com>2012-11-29 19:15:17 +0000
commitaa8cccf1292503f4a5d3fc55610f9a24f6dbee74 (patch)
tree9d890f8ecc1992f865fcb0cf9242878e72618bf4 /test/Transforms/InstCombine/puts-1.ll
parentf2c87b1c054fd4ea6f0215affb4ccfc36b77bcd8 (diff)
downloadllvm-aa8cccf1292503f4a5d3fc55610f9a24f6dbee74.tar.gz
llvm-aa8cccf1292503f4a5d3fc55610f9a24f6dbee74.tar.bz2
llvm-aa8cccf1292503f4a5d3fc55610f9a24f6dbee74.tar.xz
instcombine: Migrate puts optimizations
This patch migrates the puts optimizations from the simplify-libcalls pass into the instcombine library call simplifier. All the simplifiers from simplify-libcalls have now been migrated to instcombine. Yay! Just a few other bits to migrate (prototype attribute inference and a few statistics) and simplify-libcalls can finally be put to rest. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@168925 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms/InstCombine/puts-1.ll')
-rw-r--r--test/Transforms/InstCombine/puts-1.ll31
1 files changed, 31 insertions, 0 deletions
diff --git a/test/Transforms/InstCombine/puts-1.ll b/test/Transforms/InstCombine/puts-1.ll
new file mode 100644
index 0000000000..ef4e1bbd82
--- /dev/null
+++ b/test/Transforms/InstCombine/puts-1.ll
@@ -0,0 +1,31 @@
+; Test that the puts library call simplifier works correctly.
+;
+; RUN: opt < %s -instcombine -S | FileCheck %s
+
+target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
+
+@empty = constant [1 x i8] zeroinitializer
+
+declare i32 @puts(i8*)
+
+; Check puts("") -> putchar('\n').
+
+define void @test_simplify1() {
+; CHECK: @test_simplify1
+ %str = getelementptr [1 x i8]* @empty, i32 0, i32 0
+ call i32 @puts(i8* %str)
+; CHECK-NEXT: call i32 @putchar(i32 10)
+ ret void
+; CHECK-NEXT: ret void
+}
+
+; Don't simplify if the return value is used.
+
+define i32 @test_no_simplify1() {
+; CHECK: @test_no_simplify1
+ %str = getelementptr [1 x i8]* @empty, i32 0, i32 0
+ %ret = call i32 @puts(i8* %str)
+; CHECK-NEXT: call i32 @puts(i8* getelementptr inbounds ([1 x i8]* @empty, i32 0, i32 0))
+ ret i32 %ret
+; CHECK-NEXT: ret i32 %ret
+}