simple-int.ll 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. 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"
  2. ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=corei7 -bb-vectorize -bb-vectorize-req-chain-depth=3 -instcombine -gvn -S | FileCheck %s
  3. declare double @llvm.fma.f64(double, double, double)
  4. declare double @llvm.fmuladd.f64(double, double, double)
  5. declare double @llvm.cos.f64(double)
  6. declare double @llvm.powi.f64(double, i32)
  7. ; Basic depth-3 chain with fma
  8. define double @test1(double %A1, double %A2, double %B1, double %B2, double %C1, double %C2) {
  9. %X1 = fsub double %A1, %B1
  10. %X2 = fsub double %A2, %B2
  11. %Y1 = call double @llvm.fma.f64(double %X1, double %A1, double %C1)
  12. %Y2 = call double @llvm.fma.f64(double %X2, double %A2, double %C2)
  13. %Z1 = fadd double %Y1, %B1
  14. %Z2 = fadd double %Y2, %B2
  15. %R = fmul double %Z1, %Z2
  16. ret double %R
  17. ; CHECK-LABEL: @test1(
  18. ; CHECK: ret double %R
  19. }
  20. ; Basic depth-3 chain with fmuladd
  21. define double @test1a(double %A1, double %A2, double %B1, double %B2, double %C1, double %C2) {
  22. %X1 = fsub double %A1, %B1
  23. %X2 = fsub double %A2, %B2
  24. %Y1 = call double @llvm.fmuladd.f64(double %X1, double %A1, double %C1)
  25. %Y2 = call double @llvm.fmuladd.f64(double %X2, double %A2, double %C2)
  26. %Z1 = fadd double %Y1, %B1
  27. %Z2 = fadd double %Y2, %B2
  28. %R = fmul double %Z1, %Z2
  29. ret double %R
  30. ; CHECK-LABEL: @test1a(
  31. ; CHECK: ret double %R
  32. }
  33. ; Basic depth-3 chain with cos
  34. define double @test2(double %A1, double %A2, double %B1, double %B2) {
  35. %X1 = fsub double %A1, %B1
  36. %X2 = fsub double %A2, %B2
  37. %Y1 = call double @llvm.cos.f64(double %X1)
  38. %Y2 = call double @llvm.cos.f64(double %X2)
  39. %Z1 = fadd double %Y1, %B1
  40. %Z2 = fadd double %Y2, %B2
  41. %R = fmul double %Z1, %Z2
  42. ret double %R
  43. ; CHECK-LABEL: @test2(
  44. ; CHECK: ret double %R
  45. }
  46. ; Basic depth-3 chain with powi
  47. define double @test3(double %A1, double %A2, double %B1, double %B2, i32 %P) {
  48. %X1 = fsub double %A1, %B1
  49. %X2 = fsub double %A2, %B2
  50. %Y1 = call double @llvm.powi.f64(double %X1, i32 %P)
  51. %Y2 = call double @llvm.powi.f64(double %X2, i32 %P)
  52. %Z1 = fadd double %Y1, %B1
  53. %Z2 = fadd double %Y2, %B2
  54. %R = fmul double %Z1, %Z2
  55. ret double %R
  56. ; CHECK-LABEL: @test3(
  57. ; CHECK: ret double %R
  58. }
  59. ; Basic depth-3 chain with powi (different powers: should not vectorize)
  60. define double @test4(double %A1, double %A2, double %B1, double %B2, i32 %P) {
  61. %X1 = fsub double %A1, %B1
  62. %X2 = fsub double %A2, %B2
  63. %P2 = add i32 %P, 1
  64. %Y1 = call double @llvm.powi.f64(double %X1, i32 %P)
  65. %Y2 = call double @llvm.powi.f64(double %X2, i32 %P2)
  66. %Z1 = fadd double %Y1, %B1
  67. %Z2 = fadd double %Y2, %B2
  68. %R = fmul double %Z1, %Z2
  69. ret double %R
  70. ; CHECK-LABEL: @test4(
  71. ; CHECK: ret double %R
  72. }