ssse3_palignr.ll 4.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. ; RUN: opt < %s -S | FileCheck %s
  2. ; RUN: verify-uselistorder < %s
  3. ; CHECK-NOT: {@llvm\\.palign}
  4. define <4 x i32> @align1(<4 x i32> %a, <4 x i32> %b) nounwind readnone ssp {
  5. entry:
  6. %0 = bitcast <4 x i32> %b to <2 x i64> ; <<2 x i64>> [#uses=1]
  7. %1 = bitcast <4 x i32> %a to <2 x i64> ; <<2 x i64>> [#uses=1]
  8. %2 = tail call <2 x i64> @llvm.x86.ssse3.palign.r.128(<2 x i64> %1, <2 x i64> %0, i8 15) ; <<2 x i64>> [#uses=1]
  9. %3 = bitcast <2 x i64> %2 to <4 x i32> ; <<4 x i32>> [#uses=1]
  10. ret <4 x i32> %3
  11. }
  12. define double @align8(<2 x i32> %a, <2 x i32> %b) nounwind readnone ssp {
  13. entry:
  14. %0 = bitcast <2 x i32> %b to <1 x i64> ; <<1 x i64>> [#uses=1]
  15. %1 = bitcast <2 x i32> %a to <1 x i64> ; <<1 x i64>> [#uses=1]
  16. %2 = tail call <1 x i64> @llvm.x86.ssse3.palign.r(<1 x i64> %1, <1 x i64> %0, i8 7) ; <<1 x i64>> [#uses=1]
  17. %3 = extractelement <1 x i64> %2, i32 0 ; <i64> [#uses=1]
  18. %retval12 = bitcast i64 %3 to double ; <double> [#uses=1]
  19. ret double %retval12
  20. }
  21. declare <1 x i64> @llvm.x86.ssse3.palign.r(<1 x i64>, <1 x i64>, i8) nounwind readnone
  22. define double @align7(<2 x i32> %a, <2 x i32> %b) nounwind readnone ssp {
  23. entry:
  24. %0 = bitcast <2 x i32> %b to <1 x i64> ; <<1 x i64>> [#uses=1]
  25. %1 = bitcast <2 x i32> %a to <1 x i64> ; <<1 x i64>> [#uses=1]
  26. %2 = tail call <1 x i64> @llvm.x86.ssse3.palign.r(<1 x i64> %1, <1 x i64> %0, i8 16) ; <<1 x i64>> [#uses=1]
  27. %3 = extractelement <1 x i64> %2, i32 0 ; <i64> [#uses=1]
  28. %retval12 = bitcast i64 %3 to double ; <double> [#uses=1]
  29. ret double %retval12
  30. }
  31. define double @align6(<2 x i32> %a, <2 x i32> %b) nounwind readnone ssp {
  32. entry:
  33. %0 = bitcast <2 x i32> %b to <1 x i64> ; <<1 x i64>> [#uses=1]
  34. %1 = bitcast <2 x i32> %a to <1 x i64> ; <<1 x i64>> [#uses=1]
  35. %2 = tail call <1 x i64> @llvm.x86.ssse3.palign.r(<1 x i64> %1, <1 x i64> %0, i8 9) ; <<1 x i64>> [#uses=1]
  36. %3 = extractelement <1 x i64> %2, i32 0 ; <i64> [#uses=1]
  37. %retval12 = bitcast i64 %3 to double ; <double> [#uses=1]
  38. ret double %retval12
  39. }
  40. define double @align5(<2 x i32> %a, <2 x i32> %b) nounwind readnone ssp {
  41. entry:
  42. %0 = bitcast <2 x i32> %b to <1 x i64> ; <<1 x i64>> [#uses=1]
  43. %1 = bitcast <2 x i32> %a to <1 x i64> ; <<1 x i64>> [#uses=1]
  44. %2 = tail call <1 x i64> @llvm.x86.ssse3.palign.r(<1 x i64> %1, <1 x i64> %0, i8 8) ; <<1 x i64>> [#uses=1]
  45. %3 = extractelement <1 x i64> %2, i32 0 ; <i64> [#uses=1]
  46. %retval12 = bitcast i64 %3 to double ; <double> [#uses=1]
  47. ret double %retval12
  48. }
  49. define <4 x i32> @align4(<4 x i32> %a, <4 x i32> %b) nounwind readnone ssp {
  50. entry:
  51. %0 = bitcast <4 x i32> %b to <2 x i64> ; <<2 x i64>> [#uses=1]
  52. %1 = bitcast <4 x i32> %a to <2 x i64> ; <<2 x i64>> [#uses=1]
  53. %2 = tail call <2 x i64> @llvm.x86.ssse3.palign.r.128(<2 x i64> %1, <2 x i64> %0, i8 32) ; <<2 x i64>> [#uses=1]
  54. %3 = bitcast <2 x i64> %2 to <4 x i32> ; <<4 x i32>> [#uses=1]
  55. ret <4 x i32> %3
  56. }
  57. declare <2 x i64> @llvm.x86.ssse3.palign.r.128(<2 x i64>, <2 x i64>, i8) nounwind readnone
  58. define <4 x i32> @align3(<4 x i32> %a, <4 x i32> %b) nounwind readnone ssp {
  59. entry:
  60. %0 = bitcast <4 x i32> %b to <2 x i64> ; <<2 x i64>> [#uses=1]
  61. %1 = bitcast <4 x i32> %a to <2 x i64> ; <<2 x i64>> [#uses=1]
  62. %2 = tail call <2 x i64> @llvm.x86.ssse3.palign.r.128(<2 x i64> %1, <2 x i64> %0, i8 17) ; <<2 x i64>> [#uses=1]
  63. %3 = bitcast <2 x i64> %2 to <4 x i32> ; <<4 x i32>> [#uses=1]
  64. ret <4 x i32> %3
  65. }
  66. define <4 x i32> @align2(<4 x i32> %a, <4 x i32> %b) nounwind readnone ssp {
  67. entry:
  68. %0 = bitcast <4 x i32> %b to <2 x i64> ; <<2 x i64>> [#uses=1]
  69. %1 = bitcast <4 x i32> %a to <2 x i64> ; <<2 x i64>> [#uses=1]
  70. %2 = tail call <2 x i64> @llvm.x86.ssse3.palign.r.128(<2 x i64> %1, <2 x i64> %0, i8 16) ; <<2 x i64>> [#uses=1]
  71. %3 = bitcast <2 x i64> %2 to <4 x i32> ; <<4 x i32>> [#uses=1]
  72. ret <4 x i32> %3
  73. }