2
0

lower-aggr-copies.ll 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. ; RUN: llc < %s -march=nvptx -mcpu=sm_35 | FileCheck %s
  2. ; Verify that the NVPTXLowerAggrCopies pass works as expected - calls to
  3. ; llvm.mem* intrinsics get lowered to loops.
  4. declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #1
  5. declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) #1
  6. define i8* @memcpy_caller(i8* %dst, i8* %src, i64 %n) #0 {
  7. entry:
  8. tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* %dst, i8* %src, i64 %n, i32 1, i1 false)
  9. ret i8* %dst
  10. ; CHECK-LABEL: .visible .func (.param .b32 func_retval0) memcpy_caller
  11. ; CHECK: LBB[[LABEL:[_0-9]+]]:
  12. ; CHECK: ld.u8 %rs[[REG:[0-9]+]]
  13. ; CHECK: st.u8 [%r{{[0-9]+}}], %rs[[REG]]
  14. ; CHECK: add.s64 %rd[[COUNTER:[0-9]+]], %rd[[COUNTER]], 1
  15. ; CHECK-NEXT: setp.lt.u64 %p[[PRED:[0-9]+]], %rd[[COUNTER]], %rd
  16. ; CHECK-NEXT: @%p[[PRED]] bra LBB[[LABEL]]
  17. }
  18. define i8* @memcpy_volatile_caller(i8* %dst, i8* %src, i64 %n) #0 {
  19. entry:
  20. tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* %dst, i8* %src, i64 %n, i32 1, i1 true)
  21. ret i8* %dst
  22. ; CHECK-LABEL: .visible .func (.param .b32 func_retval0) memcpy_volatile_caller
  23. ; CHECK: LBB[[LABEL:[_0-9]+]]:
  24. ; CHECK: ld.volatile.u8 %rs[[REG:[0-9]+]]
  25. ; CHECK: st.volatile.u8 [%r{{[0-9]+}}], %rs[[REG]]
  26. ; CHECK: add.s64 %rd[[COUNTER:[0-9]+]], %rd[[COUNTER]], 1
  27. ; CHECK-NEXT: setp.lt.u64 %p[[PRED:[0-9]+]], %rd[[COUNTER]], %rd
  28. ; CHECK-NEXT: @%p[[PRED]] bra LBB[[LABEL]]
  29. }
  30. define i8* @memset_caller(i8* %dst, i32 %c, i64 %n) #0 {
  31. entry:
  32. %0 = trunc i32 %c to i8
  33. tail call void @llvm.memset.p0i8.i64(i8* %dst, i8 %0, i64 %n, i32 1, i1 false)
  34. ret i8* %dst
  35. ; CHECK-LABEL: .visible .func (.param .b32 func_retval0) memset_caller(
  36. ; CHECK: ld.param.u8 %rs[[REG:[0-9]+]]
  37. ; CHECK: LBB[[LABEL:[_0-9]+]]:
  38. ; CHECK: st.u8 [%r{{[0-9]+}}], %rs[[REG]]
  39. ; CHECK: add.s64 %rd[[COUNTER:[0-9]+]], %rd[[COUNTER]], 1
  40. ; CHECK-NEXT: setp.lt.u64 %p[[PRED:[0-9]+]], %rd[[COUNTER]], %rd
  41. ; CHECK-NEXT: @%p[[PRED]] bra LBB[[LABEL]]
  42. }