[llvm] r268922 - Optimize a printf with a double procent to putchar.
Joerg Sonnenberger via llvm-commits
llvm-commits at lists.llvm.org
Mon May 9 07:36:17 PDT 2016
Author: joerg
Date: Mon May 9 09:36:16 2016
New Revision: 268922
URL: http://llvm.org/viewvc/llvm-project?rev=268922&view=rev
Log:
Optimize a printf with a double procent to putchar.
Modified:
llvm/trunk/lib/Transforms/Utils/SimplifyLibCalls.cpp
llvm/trunk/test/Transforms/InstCombine/printf-1.ll
Modified: llvm/trunk/lib/Transforms/Utils/SimplifyLibCalls.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/SimplifyLibCalls.cpp?rev=268922&r1=268921&r2=268922&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Utils/SimplifyLibCalls.cpp (original)
+++ llvm/trunk/lib/Transforms/Utils/SimplifyLibCalls.cpp Mon May 9 09:36:16 2016
@@ -1598,8 +1598,8 @@ Value *LibCallSimplifier::optimizePrintF
if (!CI->use_empty())
return nullptr;
- // printf("x") -> putchar('x'), even for '%'.
- if (FormatStr.size() == 1)
+ // printf("x") -> putchar('x'), even for "%" and "%%".
+ if (FormatStr.size() == 1 || FormatStr == "%%")
return emitPutChar(B.getInt32(FormatStr[0]), B, TLI);
// printf("%s", "a") --> putchar('a')
Modified: llvm/trunk/test/Transforms/InstCombine/printf-1.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/printf-1.ll?rev=268922&r1=268921&r2=268922&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/InstCombine/printf-1.ll (original)
+++ llvm/trunk/test/Transforms/InstCombine/printf-1.ll Mon May 9 09:36:16 2016
@@ -7,6 +7,7 @@ target datalayout = "e-p:32:32:32-i1:8:8
@hello_world = constant [13 x i8] c"hello world\0A\00"
@h = constant [2 x i8] c"h\00"
+ at h2 = constant [3 x i8] c"%%\00"
@percent = constant [2 x i8] c"%\00"
@percent_c = constant [3 x i8] c"%c\00"
@percent_d = constant [3 x i8] c"%d\00"
@@ -37,6 +38,17 @@ define void @test_simplify2() {
ret void
; CHECK-NEXT: ret void
}
+
+; Special case: printf("%%") -> putchar('%').
+
+define void @test_simplify2b() {
+; CHECK-LABEL: @test_simplify2b(
+ %fmt = getelementptr [3 x i8], [3 x i8]* @h2, i32 0, i32 0
+ call i32 (i8*, ...) @printf(i8* %fmt)
+; CHECK-NEXT: call i32 @putchar(i32 37)
+ ret void
+; CHECK-NEXT: ret void
+}
define void @test_simplify3() {
; CHECK-LABEL: @test_simplify3(
More information about the llvm-commits
mailing list