xref: /llvm-project/llvm/test/Transforms/InstCombine/fwrite-1.ll (revision 4ab40eca080965c65802710e39adbb78c4ce7bde)
1; Test that the fwrite library call simplifier works correctly.
2;
3; RUN: opt < %s -passes=instcombine -S | FileCheck %s
4
5target datalayout = "e-p:64:64:64"
6
7%FILE = type { }
8
9@str = constant [1 x i8] zeroinitializer
10@empty = constant [0 x i8] zeroinitializer
11
12declare i64 @fwrite(ptr, i64, i64, ptr)
13
14; Check fwrite(S, 1, 1, fp) -> fputc(S[0], fp).
15
16define void @test_simplify1(ptr %fp) {
17; CHECK-LABEL: @test_simplify1(
18  call i64 @fwrite(ptr @str, i64 1, i64 1, ptr %fp)
19; CHECK-NEXT: call i32 @fputc(i32 0, ptr %fp)
20  ret void
21; CHECK-NEXT: ret void
22}
23
24define void @test_simplify2(ptr %fp) {
25; CHECK-LABEL: @test_simplify2(
26  call i64 @fwrite(ptr @empty, i64 1, i64 0, ptr %fp)
27  ret void
28; CHECK-NEXT: ret void
29}
30
31define void @test_simplify3(ptr %fp) {
32; CHECK-LABEL: @test_simplify3(
33  call i64 @fwrite(ptr @empty, i64 0, i64 1, ptr %fp)
34  ret void
35; CHECK-NEXT: ret void
36}
37
38define i64 @test_no_simplify1(ptr %fp) {
39; CHECK-LABEL: @test_no_simplify1(
40  %ret = call i64 @fwrite(ptr @str, i64 1, i64 1, ptr %fp)
41; CHECK-NEXT: call i64 @fwrite
42  ret i64 %ret
43; CHECK-NEXT: ret i64 %ret
44}
45
46define void @test_no_simplify2(ptr %fp, i64 %size) {
47; CHECK-LABEL: @test_no_simplify2(
48  call i64 @fwrite(ptr @str, i64 %size, i64 1, ptr %fp)
49; CHECK-NEXT: call i64 @fwrite
50  ret void
51; CHECK-NEXT: ret void
52}
53