strpbrk-1.ll 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. ; Test that the strpbrk library call simplifier works correctly.
  2. ;
  3. ; RUN: opt < %s -instcombine -S | FileCheck %s
  4. target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
  5. @hello = constant [12 x i8] c"hello world\00"
  6. @w = constant [2 x i8] c"w\00"
  7. @null = constant [1 x i8] zeroinitializer
  8. declare i8* @strpbrk(i8*, i8*)
  9. ; Check strpbrk(s, "") -> NULL.
  10. define i8* @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 i8* @strpbrk(i8* %str, i8* %pat)
  14. ret i8* %ret
  15. ; CHECK-NEXT: ret i8* null
  16. }
  17. ; Check strpbrk("", s) -> NULL.
  18. define i8* @test_simplify2(i8* %pat) {
  19. ; CHECK-LABEL: @test_simplify2(
  20. %str = getelementptr [1 x i8], [1 x i8]* @null, i32 0, i32 0
  21. %ret = call i8* @strpbrk(i8* %str, i8* %pat)
  22. ret i8* %ret
  23. ; CHECK-NEXT: ret i8* null
  24. }
  25. ; Check strpbrk(s1, s2), where s1 and s2 are constants.
  26. define i8* @test_simplify3() {
  27. ; CHECK-LABEL: @test_simplify3(
  28. %str = getelementptr [12 x i8], [12 x i8]* @hello, i32 0, i32 0
  29. %pat = getelementptr [2 x i8], [2 x i8]* @w, i32 0, i32 0
  30. %ret = call i8* @strpbrk(i8* %str, i8* %pat)
  31. ret i8* %ret
  32. ; CHECK-NEXT: ret i8* getelementptr inbounds ([12 x i8], [12 x i8]* @hello, i32 0, i32 6)
  33. }
  34. ; Check strpbrk(s, "a") -> strchr(s, 'a').
  35. define i8* @test_simplify4(i8* %str) {
  36. ; CHECK-LABEL: @test_simplify4(
  37. %pat = getelementptr [2 x i8], [2 x i8]* @w, i32 0, i32 0
  38. %ret = call i8* @strpbrk(i8* %str, i8* %pat)
  39. ; CHECK-NEXT: [[VAR:%[a-z]+]] = call i8* @strchr(i8* %str, i32 119)
  40. ret i8* %ret
  41. ; CHECK-NEXT: ret i8* [[VAR]]
  42. }
  43. ; Check cases that shouldn't be simplified.
  44. define i8* @test_no_simplify1(i8* %str, i8* %pat) {
  45. ; CHECK-LABEL: @test_no_simplify1(
  46. %ret = call i8* @strpbrk(i8* %str, i8* %pat)
  47. ; CHECK-NEXT: %ret = call i8* @strpbrk(i8* %str, i8* %pat)
  48. ret i8* %ret
  49. ; CHECK-NEXT: ret i8* %ret
  50. }