wr-aliases.ll 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. ; RUN: opt -mtriple=x86_64-unknown-linux-gnu -mcpu=corei7-avx -bb-vectorize -S < %s | FileCheck %s
  2. 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-n8:16:32:64-S128"
  3. target triple = "x86_64-unknown-linux-gnu"
  4. %class.QBezier.15 = type { double, double, double, double, double, double, double, double }
  5. ; Function Attrs: nounwind
  6. declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #0
  7. ; Function Attrs: uwtable
  8. declare fastcc void @_ZL12printQBezier7QBezier(%class.QBezier.15* byval nocapture readonly align 8) #1
  9. ; Function Attrs: nounwind
  10. declare void @llvm.lifetime.start(i64, i8* nocapture) #0
  11. ; Function Attrs: nounwind
  12. declare void @llvm.lifetime.end(i64, i8* nocapture) #0
  13. define void @main_arrayctor.cont([10 x %class.QBezier.15]* %beziers, %class.QBezier.15* %agg.tmp.i, %class.QBezier.15* %agg.tmp55.i, %class.QBezier.15* %agg.tmp56.i) {
  14. newFuncRoot:
  15. br label %arrayctor.cont
  16. arrayctor.cont.ret.exitStub: ; preds = %arrayctor.cont
  17. ret void
  18. ; CHECK-LABEL: @main_arrayctor.cont
  19. ; CHECK: <2 x double>
  20. ; CHECK: @_ZL12printQBezier7QBezier
  21. ; CHECK: store double %mul8.i, double* %x3.i, align 16
  22. ; CHECK: load double, double* %x3.i, align 16
  23. ; CHECK: ret
  24. arrayctor.cont: ; preds = %newFuncRoot
  25. %ref.tmp.sroa.0.0.idx = getelementptr inbounds [10 x %class.QBezier.15], [10 x %class.QBezier.15]* %beziers, i64 0, i64 0, i32 0
  26. store double 1.000000e+01, double* %ref.tmp.sroa.0.0.idx, align 16
  27. %ref.tmp.sroa.2.0.idx1 = getelementptr inbounds [10 x %class.QBezier.15], [10 x %class.QBezier.15]* %beziers, i64 0, i64 0, i32 1
  28. store double 2.000000e+01, double* %ref.tmp.sroa.2.0.idx1, align 8
  29. %ref.tmp.sroa.3.0.idx2 = getelementptr inbounds [10 x %class.QBezier.15], [10 x %class.QBezier.15]* %beziers, i64 0, i64 0, i32 2
  30. store double 3.000000e+01, double* %ref.tmp.sroa.3.0.idx2, align 16
  31. %ref.tmp.sroa.4.0.idx3 = getelementptr inbounds [10 x %class.QBezier.15], [10 x %class.QBezier.15]* %beziers, i64 0, i64 0, i32 3
  32. store double 4.000000e+01, double* %ref.tmp.sroa.4.0.idx3, align 8
  33. %ref.tmp.sroa.5.0.idx4 = getelementptr inbounds [10 x %class.QBezier.15], [10 x %class.QBezier.15]* %beziers, i64 0, i64 0, i32 4
  34. store double 5.000000e+01, double* %ref.tmp.sroa.5.0.idx4, align 16
  35. %ref.tmp.sroa.6.0.idx5 = getelementptr inbounds [10 x %class.QBezier.15], [10 x %class.QBezier.15]* %beziers, i64 0, i64 0, i32 5
  36. store double 6.000000e+01, double* %ref.tmp.sroa.6.0.idx5, align 8
  37. %ref.tmp.sroa.7.0.idx6 = getelementptr inbounds [10 x %class.QBezier.15], [10 x %class.QBezier.15]* %beziers, i64 0, i64 0, i32 6
  38. store double 7.000000e+01, double* %ref.tmp.sroa.7.0.idx6, align 16
  39. %ref.tmp.sroa.8.0.idx7 = getelementptr inbounds [10 x %class.QBezier.15], [10 x %class.QBezier.15]* %beziers, i64 0, i64 0, i32 7
  40. store double 8.000000e+01, double* %ref.tmp.sroa.8.0.idx7, align 8
  41. %add.ptr = getelementptr inbounds [10 x %class.QBezier.15], [10 x %class.QBezier.15]* %beziers, i64 0, i64 1
  42. %v0 = bitcast %class.QBezier.15* %agg.tmp.i to i8*
  43. call void @llvm.lifetime.start(i64 64, i8* %v0)
  44. %v1 = bitcast %class.QBezier.15* %agg.tmp55.i to i8*
  45. call void @llvm.lifetime.start(i64 64, i8* %v1)
  46. %v2 = bitcast %class.QBezier.15* %agg.tmp56.i to i8*
  47. call void @llvm.lifetime.start(i64 64, i8* %v2)
  48. %v3 = bitcast [10 x %class.QBezier.15]* %beziers to i8*
  49. call void @llvm.memcpy.p0i8.p0i8.i64(i8* %v0, i8* %v3, i64 64, i32 8, i1 false)
  50. call fastcc void @_ZL12printQBezier7QBezier(%class.QBezier.15* byval align 8 %agg.tmp.i)
  51. %x2.i = getelementptr inbounds [10 x %class.QBezier.15], [10 x %class.QBezier.15]* %beziers, i64 0, i64 0, i32 2
  52. %v4 = load double, double* %x2.i, align 16
  53. %x3.i = getelementptr inbounds [10 x %class.QBezier.15], [10 x %class.QBezier.15]* %beziers, i64 0, i64 0, i32 4
  54. %v5 = load double, double* %x3.i, align 16
  55. %add.i = fadd double %v4, %v5
  56. %mul.i = fmul double 5.000000e-01, %add.i
  57. %x1.i = getelementptr inbounds [10 x %class.QBezier.15], [10 x %class.QBezier.15]* %beziers, i64 0, i64 0, i32 0
  58. %v6 = load double, double* %x1.i, align 16
  59. %add3.i = fadd double %v4, %v6
  60. %mul4.i = fmul double 5.000000e-01, %add3.i
  61. %x25.i = getelementptr inbounds [10 x %class.QBezier.15], [10 x %class.QBezier.15]* %beziers, i64 0, i64 1, i32 2
  62. store double %mul4.i, double* %x25.i, align 16
  63. %v7 = load double, double* %x3.i, align 16
  64. %x4.i = getelementptr inbounds [10 x %class.QBezier.15], [10 x %class.QBezier.15]* %beziers, i64 0, i64 0, i32 6
  65. %v8 = load double, double* %x4.i, align 16
  66. %add7.i = fadd double %v7, %v8
  67. %mul8.i = fmul double 5.000000e-01, %add7.i
  68. store double %mul8.i, double* %x3.i, align 16
  69. %v9 = load double, double* %x1.i, align 16
  70. %x111.i = getelementptr inbounds %class.QBezier.15, %class.QBezier.15* %add.ptr, i64 0, i32 0
  71. store double %v9, double* %x111.i, align 16
  72. %v10 = load double, double* %x25.i, align 16
  73. %add15.i = fadd double %mul.i, %v10
  74. %mul16.i = fmul double 5.000000e-01, %add15.i
  75. %x317.i = getelementptr inbounds [10 x %class.QBezier.15], [10 x %class.QBezier.15]* %beziers, i64 0, i64 1, i32 4
  76. store double %mul16.i, double* %x317.i, align 16
  77. %v11 = load double, double* %x3.i, align 16
  78. %add19.i = fadd double %mul.i, %v11
  79. %mul20.i = fmul double 5.000000e-01, %add19.i
  80. store double %mul20.i, double* %x2.i, align 16
  81. %v12 = load double, double* %x317.i, align 16
  82. %add24.i = fadd double %v12, %mul20.i
  83. %mul25.i = fmul double 5.000000e-01, %add24.i
  84. store double %mul25.i, double* %x1.i, align 16
  85. %x427.i = getelementptr inbounds [10 x %class.QBezier.15], [10 x %class.QBezier.15]* %beziers, i64 0, i64 1, i32 6
  86. store double %mul25.i, double* %x427.i, align 16
  87. %y2.i = getelementptr inbounds [10 x %class.QBezier.15], [10 x %class.QBezier.15]* %beziers, i64 0, i64 0, i32 3
  88. %v13 = load double, double* %y2.i, align 8
  89. %y3.i = getelementptr inbounds [10 x %class.QBezier.15], [10 x %class.QBezier.15]* %beziers, i64 0, i64 0, i32 5
  90. %v14 = load double, double* %y3.i, align 8
  91. %add28.i = fadd double %v13, %v14
  92. %div.i = fmul double 5.000000e-01, %add28.i
  93. %y1.i = getelementptr inbounds [10 x %class.QBezier.15], [10 x %class.QBezier.15]* %beziers, i64 0, i64 0, i32 1
  94. %v15 = load double, double* %y1.i, align 8
  95. %add30.i = fadd double %v13, %v15
  96. %mul31.i = fmul double 5.000000e-01, %add30.i
  97. %y232.i = getelementptr inbounds [10 x %class.QBezier.15], [10 x %class.QBezier.15]* %beziers, i64 0, i64 1, i32 3
  98. store double %mul31.i, double* %y232.i, align 8
  99. %v16 = load double, double* %y3.i, align 8
  100. %y4.i = getelementptr inbounds [10 x %class.QBezier.15], [10 x %class.QBezier.15]* %beziers, i64 0, i64 0, i32 7
  101. %v17 = load double, double* %y4.i, align 8
  102. %add34.i = fadd double %v16, %v17
  103. %mul35.i = fmul double 5.000000e-01, %add34.i
  104. store double %mul35.i, double* %y3.i, align 8
  105. %v18 = load double, double* %y1.i, align 8
  106. %y138.i = getelementptr inbounds [10 x %class.QBezier.15], [10 x %class.QBezier.15]* %beziers, i64 0, i64 1, i32 1
  107. store double %v18, double* %y138.i, align 8
  108. %v19 = load double, double* %y232.i, align 8
  109. %add42.i = fadd double %div.i, %v19
  110. %mul43.i = fmul double 5.000000e-01, %add42.i
  111. %y344.i = getelementptr inbounds [10 x %class.QBezier.15], [10 x %class.QBezier.15]* %beziers, i64 0, i64 1, i32 5
  112. store double %mul43.i, double* %y344.i, align 8
  113. %v20 = load double, double* %y3.i, align 8
  114. %add46.i = fadd double %div.i, %v20
  115. %mul47.i = fmul double 5.000000e-01, %add46.i
  116. store double %mul47.i, double* %y2.i, align 8
  117. %v21 = load double, double* %y344.i, align 8
  118. %add51.i = fadd double %v21, %mul47.i
  119. %mul52.i = fmul double 5.000000e-01, %add51.i
  120. store double %mul52.i, double* %y1.i, align 8
  121. %y454.i = getelementptr inbounds [10 x %class.QBezier.15], [10 x %class.QBezier.15]* %beziers, i64 0, i64 1, i32 7
  122. store double %mul52.i, double* %y454.i, align 8
  123. %v22 = bitcast %class.QBezier.15* %add.ptr to i8*
  124. call void @llvm.memcpy.p0i8.p0i8.i64(i8* %v1, i8* %v22, i64 64, i32 8, i1 false)
  125. call fastcc void @_ZL12printQBezier7QBezier(%class.QBezier.15* byval align 8 %agg.tmp55.i)
  126. call void @llvm.memcpy.p0i8.p0i8.i64(i8* %v2, i8* %v3, i64 64, i32 8, i1 false)
  127. call fastcc void @_ZL12printQBezier7QBezier(%class.QBezier.15* byval align 8 %agg.tmp56.i)
  128. call void @llvm.lifetime.end(i64 64, i8* %v0)
  129. call void @llvm.lifetime.end(i64 64, i8* %v1)
  130. call void @llvm.lifetime.end(i64 64, i8* %v2)
  131. br label %arrayctor.cont.ret.exitStub
  132. }
  133. attributes #0 = { nounwind }
  134. attributes #1 = { uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }