xref: /llvm-project/llvm/test/Transforms/InstCombine/strndup.ll (revision dc2b66b8d6032dbc5e5dd7ee86e4fa7dd9cf0b9b)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt < %s -passes=instcombine -S | FileCheck %s
3
4@hello = constant [6 x i8] c"hello\00"
5@null = constant [1 x i8] zeroinitializer
6
7declare ptr @strndup(ptr, i64)
8
9define ptr @test1() {
10; CHECK-LABEL: @test1(
11; CHECK-NEXT:    [[STRDUP:%.*]] = call dereferenceable_or_null(1) ptr @strdup(ptr nonnull @null)
12; CHECK-NEXT:    ret ptr [[STRDUP]]
13;
14  %ret = call ptr @strndup(ptr @null, i64 0)
15  ret ptr %ret
16}
17
18define ptr @test2() {
19; CHECK-LABEL: @test2(
20; CHECK-NEXT:    [[RET:%.*]] = call dereferenceable_or_null(5) ptr @strndup(ptr nonnull dereferenceable(6) @hello, i64 4)
21; CHECK-NEXT:    ret ptr [[RET]]
22;
23  %ret = call ptr @strndup(ptr @hello, i64 4)
24  ret ptr %ret
25}
26
27define ptr @test3() {
28; CHECK-LABEL: @test3(
29; CHECK-NEXT:    [[STRDUP:%.*]] = call dereferenceable_or_null(6) ptr @strdup(ptr nonnull @hello)
30; CHECK-NEXT:    ret ptr [[STRDUP]]
31;
32  %ret = call ptr @strndup(ptr @hello, i64 5)
33  ret ptr %ret
34}
35
36define ptr @test4() {
37; CHECK-LABEL: @test4(
38; CHECK-NEXT:    [[STRDUP:%.*]] = call dereferenceable_or_null(6) ptr @strdup(ptr nonnull @hello)
39; CHECK-NEXT:    ret ptr [[STRDUP]]
40;
41  %ret = call ptr @strndup(ptr @hello, i64 6)
42  ret ptr %ret
43}
44
45define ptr @test5() {
46; CHECK-LABEL: @test5(
47; CHECK-NEXT:    [[STRDUP:%.*]] = call dereferenceable_or_null(6) ptr @strdup(ptr nonnull @hello)
48; CHECK-NEXT:    ret ptr [[STRDUP]]
49;
50  %ret = call ptr @strndup(ptr @hello, i64 7)
51  ret ptr %ret
52}
53
54define ptr @test6(i64 %n) {
55; CHECK-LABEL: @test6(
56; CHECK-NEXT:    [[RET:%.*]] = call ptr @strndup(ptr nonnull @hello, i64 [[N:%.*]])
57; CHECK-NEXT:    ret ptr [[RET]]
58;
59  %ret = call ptr @strndup(ptr @hello, i64 %n)
60  ret ptr %ret
61}
62