lftr-address-space-pointers.ll 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. ; RUN: opt -S -indvars -o - %s | FileCheck %s
  2. target datalayout = "e-p:32:32:32-p1:64:64:64-p2:8:8:8-p3:16:16:16-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:32-n8:16:32:64"
  3. ; Derived from ptriv in lftr-reuse.ll
  4. define void @ptriv_as2(i8 addrspace(2)* %base, i32 %n) nounwind {
  5. ; CHECK-LABEL: @ptriv_as2(
  6. entry:
  7. %idx.trunc = trunc i32 %n to i8
  8. %add.ptr = getelementptr inbounds i8, i8 addrspace(2)* %base, i8 %idx.trunc
  9. %cmp1 = icmp ult i8 addrspace(2)* %base, %add.ptr
  10. br i1 %cmp1, label %for.body, label %for.end
  11. ; Make sure the added GEP has the right index type
  12. ; CHECK: %lftr.limit = getelementptr i8, i8 addrspace(2)* %base, i8 %0
  13. ; CHECK: for.body:
  14. ; CHECK: phi i8 addrspace(2)*
  15. ; CHECK-NOT: phi
  16. ; CHECK-NOT: add{{^rspace}}
  17. ; CHECK: icmp ne i8 addrspace(2)*
  18. ; CHECK: br i1
  19. for.body:
  20. %p.02 = phi i8 addrspace(2)* [ %base, %entry ], [ %incdec.ptr, %for.body ]
  21. ; cruft to make the IV useful
  22. %sub.ptr.lhs.cast = ptrtoint i8 addrspace(2)* %p.02 to i8
  23. %sub.ptr.rhs.cast = ptrtoint i8 addrspace(2)* %base to i8
  24. %sub.ptr.sub = sub i8 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  25. store i8 %sub.ptr.sub, i8 addrspace(2)* %p.02
  26. %incdec.ptr = getelementptr inbounds i8, i8 addrspace(2)* %p.02, i32 1
  27. %cmp = icmp ult i8 addrspace(2)* %incdec.ptr, %add.ptr
  28. br i1 %cmp, label %for.body, label %for.end
  29. for.end:
  30. ret void
  31. }
  32. define void @ptriv_as3(i8 addrspace(3)* %base, i32 %n) nounwind {
  33. ; CHECK-LABEL: @ptriv_as3(
  34. entry:
  35. %idx.trunc = trunc i32 %n to i16
  36. %add.ptr = getelementptr inbounds i8, i8 addrspace(3)* %base, i16 %idx.trunc
  37. %cmp1 = icmp ult i8 addrspace(3)* %base, %add.ptr
  38. br i1 %cmp1, label %for.body, label %for.end
  39. ; Make sure the added GEP has the right index type
  40. ; CHECK: %lftr.limit = getelementptr i8, i8 addrspace(3)* %base, i16 %0
  41. ; CHECK: for.body:
  42. ; CHECK: phi i8 addrspace(3)*
  43. ; CHECK-NOT: phi
  44. ; CHECK-NOT: add{{^rspace}}
  45. ; CHECK: icmp ne i8 addrspace(3)*
  46. ; CHECK: br i1
  47. for.body:
  48. %p.02 = phi i8 addrspace(3)* [ %base, %entry ], [ %incdec.ptr, %for.body ]
  49. ; cruft to make the IV useful
  50. %sub.ptr.lhs.cast = ptrtoint i8 addrspace(3)* %p.02 to i16
  51. %sub.ptr.rhs.cast = ptrtoint i8 addrspace(3)* %base to i16
  52. %sub.ptr.sub = sub i16 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  53. %conv = trunc i16 %sub.ptr.sub to i8
  54. store i8 %conv, i8 addrspace(3)* %p.02
  55. %incdec.ptr = getelementptr inbounds i8, i8 addrspace(3)* %p.02, i32 1
  56. %cmp = icmp ult i8 addrspace(3)* %incdec.ptr, %add.ptr
  57. br i1 %cmp, label %for.body, label %for.end
  58. for.end:
  59. ret void
  60. }