62 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4@hello = constant [6 x i8] c"hello\00"5@null = constant [1 x i8] zeroinitializer6 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 %ret16}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 %ret25}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 %ret34}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 %ret43}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 %ret52}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 %ret61}62