store.ll 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. ; RUN: opt < %s -dfsan -dfsan-combine-pointer-labels-on-store=1 -S | FileCheck %s --check-prefix=COMBINE_PTR_LABEL
  2. ; RUN: opt < %s -dfsan -dfsan-combine-pointer-labels-on-store=0 -S | FileCheck %s --check-prefix=NO_COMBINE_PTR_LABEL
  3. 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"
  4. target triple = "x86_64-unknown-linux-gnu"
  5. define void @store0({} %v, {}* %p) {
  6. ; COMBINE_PTR_LABEL: @"dfs$store0"
  7. ; COMBINE_PTR_LABEL: store
  8. ; COMBINE_PTR_LABEL-NOT: store
  9. ; NO_COMBINE_PTR_LABEL: @"dfs$store0"
  10. ; NO_COMBINE_PTR_LABEL: store
  11. ; NO_COMBINE_PTR_LABEL-NOT: store
  12. store {} %v, {}* %p
  13. ret void
  14. }
  15. define void @store8(i8 %v, i8* %p) {
  16. ; NO_COMBINE_PTR_LABEL: @"dfs$store8"
  17. ; NO_COMBINE_PTR_LABEL: load i16, i16* {{.*}} @__dfsan_arg_tls
  18. ; NO_COMBINE_PTR_LABEL: ptrtoint i8* {{.*}} i64
  19. ; NO_COMBINE_PTR_LABEL: and i64
  20. ; NO_COMBINE_PTR_LABEL: mul i64
  21. ; NO_COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
  22. ; NO_COMBINE_PTR_LABEL: getelementptr i16, i16*
  23. ; NO_COMBINE_PTR_LABEL: store i16
  24. ; NO_COMBINE_PTR_LABEL: store i8
  25. ; COMBINE_PTR_LABEL: @"dfs$store8"
  26. ; COMBINE_PTR_LABEL: load i16, i16*
  27. ; COMBINE_PTR_LABEL: load i16, i16*
  28. ; COMBINE_PTR_LABEL: icmp ne i16
  29. ; COMBINE_PTR_LABEL: call {{.*}} @__dfsan_union
  30. ; COMBINE_PTR_LABEL: ptrtoint i8* {{.*}} i64
  31. ; COMBINE_PTR_LABEL: and i64
  32. ; COMBINE_PTR_LABEL: mul i64
  33. ; COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
  34. ; COMBINE_PTR_LABEL: getelementptr i16, i16*
  35. ; COMBINE_PTR_LABEL: store i16
  36. ; COMBINE_PTR_LABEL: store i8
  37. store i8 %v, i8* %p
  38. ret void
  39. }
  40. define void @store16(i16 %v, i16* %p) {
  41. ; NO_COMBINE_PTR_LABEL: @"dfs$store16"
  42. ; NO_COMBINE_PTR_LABEL: load i16, i16* {{.*}} @__dfsan_arg_tls
  43. ; NO_COMBINE_PTR_LABEL: ptrtoint i16* {{.*}} i64
  44. ; NO_COMBINE_PTR_LABEL: and i64
  45. ; NO_COMBINE_PTR_LABEL: mul i64
  46. ; NO_COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
  47. ; NO_COMBINE_PTR_LABEL: getelementptr i16, i16*
  48. ; NO_COMBINE_PTR_LABEL: store i16
  49. ; NO_COMBINE_PTR_LABEL: getelementptr i16, i16*
  50. ; NO_COMBINE_PTR_LABEL: store i16
  51. ; NO_COMBINE_PTR_LABEL: store i16
  52. ; COMBINE_PTR_LABEL: @"dfs$store16"
  53. ; COMBINE_PTR_LABEL: load i16, i16* {{.*}} @__dfsan_arg_tls
  54. ; COMBINE_PTR_LABEL: load i16, i16* {{.*}} @__dfsan_arg_tls
  55. ; COMBINE_PTR_LABEL: icmp ne i16
  56. ; COMBINE_PTR_LABEL: call {{.*}} @__dfsan_union
  57. ; COMBINE_PTR_LABEL: ptrtoint i16* {{.*}} i64
  58. ; COMBINE_PTR_LABEL: and i64
  59. ; COMBINE_PTR_LABEL: mul i64
  60. ; COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
  61. ; COMBINE_PTR_LABEL: getelementptr i16, i16*
  62. ; COMBINE_PTR_LABEL: store i16
  63. ; COMBINE_PTR_LABEL: getelementptr i16, i16*
  64. ; COMBINE_PTR_LABEL: store i16
  65. ; COMBINE_PTR_LABEL: store i16
  66. store i16 %v, i16* %p
  67. ret void
  68. }
  69. define void @store32(i32 %v, i32* %p) {
  70. ; NO_COMBINE_PTR_LABEL: @"dfs$store32"
  71. ; NO_COMBINE_PTR_LABEL: load i16, i16* {{.*}} @__dfsan_arg_tls
  72. ; NO_COMBINE_PTR_LABEL: ptrtoint i32* {{.*}} i64
  73. ; NO_COMBINE_PTR_LABEL: and i64
  74. ; NO_COMBINE_PTR_LABEL: mul i64
  75. ; NO_COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
  76. ; NO_COMBINE_PTR_LABEL: getelementptr i16, i16*
  77. ; NO_COMBINE_PTR_LABEL: store i16
  78. ; NO_COMBINE_PTR_LABEL: getelementptr i16, i16*
  79. ; NO_COMBINE_PTR_LABEL: store i16
  80. ; NO_COMBINE_PTR_LABEL: getelementptr i16, i16*
  81. ; NO_COMBINE_PTR_LABEL: store i16
  82. ; NO_COMBINE_PTR_LABEL: getelementptr i16, i16*
  83. ; NO_COMBINE_PTR_LABEL: store i16
  84. ; NO_COMBINE_PTR_LABEL: store i32
  85. ; COMBINE_PTR_LABEL: @"dfs$store32"
  86. ; COMBINE_PTR_LABEL: load i16, i16* {{.*}} @__dfsan_arg_tls
  87. ; COMBINE_PTR_LABEL: load i16, i16* {{.*}} @__dfsan_arg_tls
  88. ; COMBINE_PTR_LABEL: icmp ne i16
  89. ; COMBINE_PTR_LABEL: call {{.*}} @__dfsan_union
  90. ; COMBINE_PTR_LABEL: ptrtoint i32* {{.*}} i64
  91. ; COMBINE_PTR_LABEL: and i64
  92. ; COMBINE_PTR_LABEL: mul i64
  93. ; COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
  94. ; COMBINE_PTR_LABEL: getelementptr i16, i16*
  95. ; COMBINE_PTR_LABEL: store i16
  96. ; COMBINE_PTR_LABEL: getelementptr i16, i16*
  97. ; COMBINE_PTR_LABEL: store i16
  98. ; COMBINE_PTR_LABEL: getelementptr i16, i16*
  99. ; COMBINE_PTR_LABEL: store i16
  100. ; COMBINE_PTR_LABEL: getelementptr i16, i16*
  101. ; COMBINE_PTR_LABEL: store i16
  102. ; COMBINE_PTR_LABEL: store i32
  103. store i32 %v, i32* %p
  104. ret void
  105. }
  106. define void @store64(i64 %v, i64* %p) {
  107. ; NO_COMBINE_PTR_LABEL: @"dfs$store64"
  108. ; NO_COMBINE_PTR_LABEL: load i16, i16* {{.*}} @__dfsan_arg_tls
  109. ; NO_COMBINE_PTR_LABEL: ptrtoint i64* {{.*}} i64
  110. ; NO_COMBINE_PTR_LABEL: and i64
  111. ; NO_COMBINE_PTR_LABEL: mul i64
  112. ; NO_COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
  113. ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
  114. ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
  115. ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
  116. ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
  117. ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
  118. ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
  119. ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
  120. ; NO_COMBINE_PTR_LABEL: insertelement {{.*}} i16
  121. ; NO_COMBINE_PTR_LABEL: bitcast i16* {{.*}} <8 x i16>*
  122. ; NO_COMBINE_PTR_LABEL: store i64
  123. ; COMBINE_PTR_LABEL: @"dfs$store64"
  124. ; COMBINE_PTR_LABEL: load i16, i16* {{.*}} @__dfsan_arg_tls
  125. ; COMBINE_PTR_LABEL: load i16, i16* {{.*}} @__dfsan_arg_tls
  126. ; COMBINE_PTR_LABEL: icmp ne i16
  127. ; COMBINE_PTR_LABEL: call {{.*}} @__dfsan_union
  128. ; COMBINE_PTR_LABEL: ptrtoint i64* {{.*}} i64
  129. ; COMBINE_PTR_LABEL: and i64
  130. ; COMBINE_PTR_LABEL: mul i64
  131. ; COMBINE_PTR_LABEL: inttoptr i64 {{.*}} i16*
  132. ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
  133. ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
  134. ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
  135. ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
  136. ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
  137. ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
  138. ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
  139. ; COMBINE_PTR_LABEL: insertelement {{.*}} i16
  140. ; COMBINE_PTR_LABEL: bitcast i16* {{.*}} <8 x i16>*
  141. ; COMBINE_PTR_LABEL: store <8 x i16>
  142. ; COMBINE_PTR_LABEL: store i64
  143. store i64 %v, i64* %p
  144. ret void
  145. }