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