xref: /llvm-project/llvm/test/Transforms/InstCombine/memrchr.ll (revision 4ab40eca080965c65802710e39adbb78c4ce7bde)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt < %s -passes=instcombine -S | FileCheck %s
3
4
5declare ptr @memrchr(ptr, i32, i32)
6
7define ptr @test1(ptr %str, i32 %c, i32 %n) {
8; CHECK-LABEL: @test1(
9; CHECK-NEXT:    [[RET:%.*]] = call ptr @memrchr(ptr [[STR:%.*]], i32 [[C:%.*]], i32 [[N:%.*]])
10; CHECK-NEXT:    ret ptr [[RET]]
11;
12
13  %ret = call ptr @memrchr(ptr %str, i32 %c, i32 %n)
14  ret ptr %ret
15}
16
17define ptr @test2(ptr %str, i32 %c, i32 %n) {
18; CHECK-LABEL: @test2(
19; CHECK-NEXT:    [[RET:%.*]] = call ptr @memrchr(ptr nonnull [[STR:%.*]], i32 [[C:%.*]], i32 [[N:%.*]])
20; CHECK-NEXT:    ret ptr [[RET]]
21;
22
23  %ret = call ptr @memrchr(ptr nonnull %str, i32 %c, i32 %n)
24  ret ptr %ret
25}
26
27define ptr @test3(ptr %str, i32 %c) {
28; CHECK-LABEL: @test3(
29; CHECK-NEXT:    [[RET:%.*]] = call ptr @memrchr(ptr [[STR:%.*]], i32 [[C:%.*]], i32 5)
30; CHECK-NEXT:    ret ptr [[RET]]
31;
32
33  %ret = call ptr @memrchr(ptr %str, i32 %c, i32 5)
34  ret ptr %ret
35}
36
37define ptr @test4(ptr %str, i32 %c) null_pointer_is_valid {
38; CHECK-LABEL: @test4(
39; CHECK-NEXT:    [[RET:%.*]] = call ptr @memrchr(ptr [[STR:%.*]], i32 [[C:%.*]], i32 5)
40; CHECK-NEXT:    ret ptr [[RET]]
41;
42
43  %ret = call ptr @memrchr(ptr %str, i32 %c, i32 5)
44  ret ptr %ret
45}
46
47define ptr @test5(ptr %str, i32 %c) {
48; CHECK-LABEL: @test5(
49; CHECK-NEXT:    [[RET:%.*]] = call ptr @memrchr(ptr [[STR:%.*]], i32 [[C:%.*]], i32 0)
50; CHECK-NEXT:    ret ptr [[RET]]
51;
52
53  %ret = call ptr @memrchr(ptr %str, i32 %c, i32 0)
54  ret ptr %ret
55}
56