strcspn-1.ll 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. ; Test that the strcspn library call simplifier works correctly.
  2. ;
  3. ; RUN: opt < %s -instcombine -S | FileCheck %s
  4. target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
  5. @abcba = constant [6 x i8] c"abcba\00"
  6. @abc = constant [4 x i8] c"abc\00"
  7. @null = constant [1 x i8] zeroinitializer
  8. declare i64 @strcspn(i8*, i8*)
  9. ; Check strcspn(s, "") -> strlen(s).
  10. define i64 @test_simplify1(i8* %str) {
  11. ; CHECK-LABEL: @test_simplify1(
  12. %pat = getelementptr [1 x i8], [1 x i8]* @null, i32 0, i32 0
  13. %ret = call i64 @strcspn(i8* %str, i8* %pat)
  14. ; CHECK-NEXT: [[VAR:%[a-z]+]] = call i64 @strlen(i8* %str)
  15. ret i64 %ret
  16. ; CHECK-NEXT: ret i64 [[VAR]]
  17. }
  18. ; Check strcspn("", s) -> 0.
  19. define i64 @test_simplify2(i8* %pat) {
  20. ; CHECK-LABEL: @test_simplify2(
  21. %str = getelementptr [1 x i8], [1 x i8]* @null, i32 0, i32 0
  22. %ret = call i64 @strcspn(i8* %str, i8* %pat)
  23. ret i64 %ret
  24. ; CHECK-NEXT: ret i64 0
  25. }
  26. ; Check strcspn(s1, s2), where s1 and s2 are constants.
  27. define i64 @test_simplify3() {
  28. ; CHECK-LABEL: @test_simplify3(
  29. %str = getelementptr [6 x i8], [6 x i8]* @abcba, i32 0, i32 0
  30. %pat = getelementptr [4 x i8], [4 x i8]* @abc, i32 0, i32 0
  31. %ret = call i64 @strcspn(i8* %str, i8* %pat)
  32. ret i64 %ret
  33. ; CHECK-NEXT: ret i64 0
  34. }
  35. ; Check cases that shouldn't be simplified.
  36. define i64 @test_no_simplify1(i8* %str, i8* %pat) {
  37. ; CHECK-LABEL: @test_no_simplify1(
  38. %ret = call i64 @strcspn(i8* %str, i8* %pat)
  39. ; CHECK-NEXT: %ret = call i64 @strcspn(i8* %str, i8* %pat)
  40. ret i64 %ret
  41. ; CHECK-NEXT: ret i64 %ret
  42. }