load-store-q.ll 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. ; RUN: opt -S -basicaa -slp-vectorizer < %s | FileCheck %s
  2. target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
  3. target triple = "arm64-apple-ios5.0.0"
  4. ; Holding a value live over a call boundary may require
  5. ; spills and fills. This is the case for <2 x double>,
  6. ; as it occupies a Q register of which there are no
  7. ; callee-saves.
  8. ; CHECK: load double
  9. ; CHECK: load double
  10. ; CHECK: call void @g
  11. ; CHECK: store double
  12. ; CHECK: store double
  13. define void @f(double* %p, double* %q) {
  14. %addr2 = getelementptr double, double* %q, i32 1
  15. %addr = getelementptr double, double* %p, i32 1
  16. %x = load double, double* %p
  17. %y = load double, double* %addr
  18. call void @g()
  19. store double %x, double* %q
  20. store double %y, double* %addr2
  21. ret void
  22. }
  23. declare void @g()
  24. ; Check we deal with loops correctly.
  25. ;
  26. ; CHECK: store <2 x double>
  27. ; CHECK: load <2 x double>
  28. define void @f2(double* %p, double* %q) {
  29. entry:
  30. br label %loop
  31. loop:
  32. %p1 = phi double [0.0, %entry], [%x, %loop]
  33. %p2 = phi double [0.0, %entry], [%y, %loop]
  34. %addr2 = getelementptr double, double* %q, i32 1
  35. %addr = getelementptr double, double* %p, i32 1
  36. store double %p1, double* %q
  37. store double %p2, double* %addr2
  38. %x = load double, double* %p
  39. %y = load double, double* %addr
  40. br label %loop
  41. }