loadstore-alignment.ll 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. ; RUN: opt -instcombine -S < %s | FileCheck %s
  2. target datalayout = "E-p:64:64:64-p1:64:64:64-p2:32:32:32-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
  3. @x = external global <2 x i64>, align 16
  4. @xx = external global [13 x <2 x i64>], align 16
  5. @x.as2 = external addrspace(2) global <2 x i64>, align 16
  6. ; CHECK-LABEL: @static_hem(
  7. ; CHECK: , align 16
  8. define <2 x i64> @static_hem() {
  9. %t = getelementptr <2 x i64>, <2 x i64>* @x, i32 7
  10. %tmp1 = load <2 x i64>, <2 x i64>* %t, align 1
  11. ret <2 x i64> %tmp1
  12. }
  13. ; CHECK-LABEL: @static_hem_addrspacecast(
  14. ; CHECK: , align 16
  15. define <2 x i64> @static_hem_addrspacecast() {
  16. %t = getelementptr <2 x i64>, <2 x i64>* @x, i32 7
  17. %t.asc = addrspacecast <2 x i64>* %t to <2 x i64> addrspace(1)*
  18. %tmp1 = load <2 x i64>, <2 x i64> addrspace(1)* %t.asc, align 1
  19. ret <2 x i64> %tmp1
  20. }
  21. ; CHECK-LABEL: @static_hem_addrspacecast_smaller_ptr(
  22. ; CHECK: , align 16
  23. define <2 x i64> @static_hem_addrspacecast_smaller_ptr() {
  24. %t = getelementptr <2 x i64>, <2 x i64>* @x, i32 7
  25. %t.asc = addrspacecast <2 x i64>* %t to <2 x i64> addrspace(2)*
  26. %tmp1 = load <2 x i64>, <2 x i64> addrspace(2)* %t.asc, align 1
  27. ret <2 x i64> %tmp1
  28. }
  29. ; CHECK-LABEL: @static_hem_addrspacecast_larger_ptr(
  30. ; CHECK: , align 16
  31. define <2 x i64> @static_hem_addrspacecast_larger_ptr() {
  32. %t = getelementptr <2 x i64>, <2 x i64> addrspace(2)* @x.as2, i32 7
  33. %t.asc = addrspacecast <2 x i64> addrspace(2)* %t to <2 x i64> addrspace(1)*
  34. %tmp1 = load <2 x i64>, <2 x i64> addrspace(1)* %t.asc, align 1
  35. ret <2 x i64> %tmp1
  36. }
  37. ; CHECK-LABEL: @hem(
  38. ; CHECK: , align 16
  39. define <2 x i64> @hem(i32 %i) {
  40. %t = getelementptr <2 x i64>, <2 x i64>* @x, i32 %i
  41. %tmp1 = load <2 x i64>, <2 x i64>* %t, align 1
  42. ret <2 x i64> %tmp1
  43. }
  44. ; CHECK-LABEL: @hem_2d(
  45. ; CHECK: , align 16
  46. define <2 x i64> @hem_2d(i32 %i, i32 %j) {
  47. %t = getelementptr [13 x <2 x i64>], [13 x <2 x i64>]* @xx, i32 %i, i32 %j
  48. %tmp1 = load <2 x i64>, <2 x i64>* %t, align 1
  49. ret <2 x i64> %tmp1
  50. }
  51. ; CHECK-LABEL: @foo(
  52. ; CHECK: , align 16
  53. define <2 x i64> @foo() {
  54. %tmp1 = load <2 x i64>, <2 x i64>* @x, align 1
  55. ret <2 x i64> %tmp1
  56. }
  57. ; CHECK-LABEL: @bar(
  58. ; CHECK: , align 16
  59. ; CHECK: , align 16
  60. define <2 x i64> @bar() {
  61. %t = alloca <2 x i64>
  62. call void @kip(<2 x i64>* %t)
  63. %tmp1 = load <2 x i64>, <2 x i64>* %t, align 1
  64. ret <2 x i64> %tmp1
  65. }
  66. ; CHECK-LABEL: @static_hem_store(
  67. ; CHECK: , align 16
  68. define void @static_hem_store(<2 x i64> %y) {
  69. %t = getelementptr <2 x i64>, <2 x i64>* @x, i32 7
  70. store <2 x i64> %y, <2 x i64>* %t, align 1
  71. ret void
  72. }
  73. ; CHECK-LABEL: @hem_store(
  74. ; CHECK: , align 16
  75. define void @hem_store(i32 %i, <2 x i64> %y) {
  76. %t = getelementptr <2 x i64>, <2 x i64>* @x, i32 %i
  77. store <2 x i64> %y, <2 x i64>* %t, align 1
  78. ret void
  79. }
  80. ; CHECK-LABEL: @hem_2d_store(
  81. ; CHECK: , align 16
  82. define void @hem_2d_store(i32 %i, i32 %j, <2 x i64> %y) {
  83. %t = getelementptr [13 x <2 x i64>], [13 x <2 x i64>]* @xx, i32 %i, i32 %j
  84. store <2 x i64> %y, <2 x i64>* %t, align 1
  85. ret void
  86. }
  87. ; CHECK-LABEL: @foo_store(
  88. ; CHECK: , align 16
  89. define void @foo_store(<2 x i64> %y) {
  90. store <2 x i64> %y, <2 x i64>* @x, align 1
  91. ret void
  92. }
  93. ; CHECK-LABEL: @bar_store(
  94. ; CHECK: , align 16
  95. define void @bar_store(<2 x i64> %y) {
  96. %t = alloca <2 x i64>
  97. call void @kip(<2 x i64>* %t)
  98. store <2 x i64> %y, <2 x i64>* %t, align 1
  99. ret void
  100. }
  101. declare void @kip(<2 x i64>* %t)