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