Advertisement
Guest User

Untitled

a guest
Nov 15th, 2013
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.22 KB | None | 0 0
  1. ; ModuleID = 'add_u8S'
  2. target triple = "x86_64-apple-darwin12.5.0"
  3.  
  4. %likely_matrix = type { i8*, i32, i32, i32, i32, i32, %likely_matrix_private* }
  5. %likely_matrix_private = type opaque
  6.  
  7. ; Function Attrs: nounwind
  8. define noalias %likely_matrix* @add_u8S(%likely_matrix* noalias nocapture %srcA) #0 {
  9. entry:
  10. %0 = getelementptr inbounds %likely_matrix* %srcA, i32 0, i32 1
  11. %kernel_type = load i32* %0
  12. %1 = getelementptr inbounds %likely_matrix* %srcA, i32 0, i32 2
  13. %kernel_channels = load i32* %1
  14. %2 = getelementptr inbounds %likely_matrix* %srcA, i32 0, i32 3
  15. %kernel_columns = load i32* %2
  16. %3 = getelementptr inbounds %likely_matrix* %srcA, i32 0, i32 4
  17. %kernel_rows = load i32* %3
  18. %4 = getelementptr inbounds %likely_matrix* %srcA, i32 0, i32 5
  19. %kernel_frames = load i32* %4
  20. %5 = call %likely_matrix* @likely_new(i32 %kernel_type, i32 %kernel_channels, i32 %kernel_columns, i32 %kernel_rows, i32 %kernel_frames, i8* null, i8 0)
  21. %6 = getelementptr inbounds %likely_matrix* %srcA, i32 0, i32 2
  22. %kernel_channels1 = load i32* %6
  23. %7 = getelementptr inbounds %likely_matrix* %srcA, i32 0, i32 3
  24. %kernel_columns2 = load i32* %7
  25. %8 = mul i32 %kernel_channels1, %kernel_columns2
  26. %9 = getelementptr inbounds %likely_matrix* %srcA, i32 0, i32 4
  27. %kernel_rows3 = load i32* %9
  28. %10 = mul i32 %8, %kernel_rows3
  29. %11 = getelementptr inbounds %likely_matrix* %srcA, i32 0, i32 5
  30. %kernel_frames4 = load i32* %11
  31. %12 = mul i32 %10, %kernel_frames4
  32. %13 = getelementptr inbounds %likely_matrix* %srcA, i32 0, i32 0
  33. %kernel_data = load i8** %13
  34. %14 = getelementptr inbounds %likely_matrix* %5, i32 0, i32 0
  35. %kernel_data8 = load i8** %14
  36. %15 = mul i32 %kernel_channels1, %kernel_columns2
  37. %16 = mul i32 %15, %kernel_rows3
  38. %17 = mul i32 %16, %kernel_frames4
  39. %end.idx = add i32 %17, 0
  40. %n.mod.vf = urem i32 %17, 32
  41. %n.vec = sub i32 %17, %n.mod.vf
  42. %end.idx.rnd.down = add i32 %n.vec, 0
  43. %cmp.zero = icmp eq i32 %end.idx.rnd.down, 0
  44. br i1 %cmp.zero, label %middle.block, label %vector.ph
  45.  
  46. vector.ph: ; preds = %entry
  47. %broadcast.splatinsert9 = insertelement <32 x i32> undef, i32 %12, i32 0
  48. %broadcast.splat10 = shufflevector <32 x i32> %broadcast.splatinsert9, <32 x i32> undef, <32 x i32> zeroinitializer
  49. br label %vector.body
  50.  
  51. vector.body: ; preds = %vector.body, %vector.ph
  52. %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  53. %broadcast.splatinsert = insertelement <32 x i32> undef, i32 %index, i32 0
  54. %broadcast.splat = shufflevector <32 x i32> %broadcast.splatinsert, <32 x i32> undef, <32 x i32> zeroinitializer
  55. %induction = add <32 x i32> %broadcast.splat, <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
  56. %18 = extractelement <32 x i32> %induction, i32 0
  57. %19 = getelementptr i8* %kernel_data, i32 %18
  58. %20 = insertelement <32 x i8*> undef, i8* %19, i32 0
  59. %21 = extractelement <32 x i32> %induction, i32 1
  60. %22 = getelementptr i8* %kernel_data, i32 %21
  61. %23 = insertelement <32 x i8*> %20, i8* %22, i32 1
  62. %24 = extractelement <32 x i32> %induction, i32 2
  63. %25 = getelementptr i8* %kernel_data, i32 %24
  64. %26 = insertelement <32 x i8*> %23, i8* %25, i32 2
  65. %27 = extractelement <32 x i32> %induction, i32 3
  66. %28 = getelementptr i8* %kernel_data, i32 %27
  67. %29 = insertelement <32 x i8*> %26, i8* %28, i32 3
  68. %30 = extractelement <32 x i32> %induction, i32 4
  69. %31 = getelementptr i8* %kernel_data, i32 %30
  70. %32 = insertelement <32 x i8*> %29, i8* %31, i32 4
  71. %33 = extractelement <32 x i32> %induction, i32 5
  72. %34 = getelementptr i8* %kernel_data, i32 %33
  73. %35 = insertelement <32 x i8*> %32, i8* %34, i32 5
  74. %36 = extractelement <32 x i32> %induction, i32 6
  75. %37 = getelementptr i8* %kernel_data, i32 %36
  76. %38 = insertelement <32 x i8*> %35, i8* %37, i32 6
  77. %39 = extractelement <32 x i32> %induction, i32 7
  78. %40 = getelementptr i8* %kernel_data, i32 %39
  79. %41 = insertelement <32 x i8*> %38, i8* %40, i32 7
  80. %42 = extractelement <32 x i32> %induction, i32 8
  81. %43 = getelementptr i8* %kernel_data, i32 %42
  82. %44 = insertelement <32 x i8*> %41, i8* %43, i32 8
  83. %45 = extractelement <32 x i32> %induction, i32 9
  84. %46 = getelementptr i8* %kernel_data, i32 %45
  85. %47 = insertelement <32 x i8*> %44, i8* %46, i32 9
  86. %48 = extractelement <32 x i32> %induction, i32 10
  87. %49 = getelementptr i8* %kernel_data, i32 %48
  88. %50 = insertelement <32 x i8*> %47, i8* %49, i32 10
  89. %51 = extractelement <32 x i32> %induction, i32 11
  90. %52 = getelementptr i8* %kernel_data, i32 %51
  91. %53 = insertelement <32 x i8*> %50, i8* %52, i32 11
  92. %54 = extractelement <32 x i32> %induction, i32 12
  93. %55 = getelementptr i8* %kernel_data, i32 %54
  94. %56 = insertelement <32 x i8*> %53, i8* %55, i32 12
  95. %57 = extractelement <32 x i32> %induction, i32 13
  96. %58 = getelementptr i8* %kernel_data, i32 %57
  97. %59 = insertelement <32 x i8*> %56, i8* %58, i32 13
  98. %60 = extractelement <32 x i32> %induction, i32 14
  99. %61 = getelementptr i8* %kernel_data, i32 %60
  100. %62 = insertelement <32 x i8*> %59, i8* %61, i32 14
  101. %63 = extractelement <32 x i32> %induction, i32 15
  102. %64 = getelementptr i8* %kernel_data, i32 %63
  103. %65 = insertelement <32 x i8*> %62, i8* %64, i32 15
  104. %66 = extractelement <32 x i32> %induction, i32 16
  105. %67 = getelementptr i8* %kernel_data, i32 %66
  106. %68 = insertelement <32 x i8*> %65, i8* %67, i32 16
  107. %69 = extractelement <32 x i32> %induction, i32 17
  108. %70 = getelementptr i8* %kernel_data, i32 %69
  109. %71 = insertelement <32 x i8*> %68, i8* %70, i32 17
  110. %72 = extractelement <32 x i32> %induction, i32 18
  111. %73 = getelementptr i8* %kernel_data, i32 %72
  112. %74 = insertelement <32 x i8*> %71, i8* %73, i32 18
  113. %75 = extractelement <32 x i32> %induction, i32 19
  114. %76 = getelementptr i8* %kernel_data, i32 %75
  115. %77 = insertelement <32 x i8*> %74, i8* %76, i32 19
  116. %78 = extractelement <32 x i32> %induction, i32 20
  117. %79 = getelementptr i8* %kernel_data, i32 %78
  118. %80 = insertelement <32 x i8*> %77, i8* %79, i32 20
  119. %81 = extractelement <32 x i32> %induction, i32 21
  120. %82 = getelementptr i8* %kernel_data, i32 %81
  121. %83 = insertelement <32 x i8*> %80, i8* %82, i32 21
  122. %84 = extractelement <32 x i32> %induction, i32 22
  123. %85 = getelementptr i8* %kernel_data, i32 %84
  124. %86 = insertelement <32 x i8*> %83, i8* %85, i32 22
  125. %87 = extractelement <32 x i32> %induction, i32 23
  126. %88 = getelementptr i8* %kernel_data, i32 %87
  127. %89 = insertelement <32 x i8*> %86, i8* %88, i32 23
  128. %90 = extractelement <32 x i32> %induction, i32 24
  129. %91 = getelementptr i8* %kernel_data, i32 %90
  130. %92 = insertelement <32 x i8*> %89, i8* %91, i32 24
  131. %93 = extractelement <32 x i32> %induction, i32 25
  132. %94 = getelementptr i8* %kernel_data, i32 %93
  133. %95 = insertelement <32 x i8*> %92, i8* %94, i32 25
  134. %96 = extractelement <32 x i32> %induction, i32 26
  135. %97 = getelementptr i8* %kernel_data, i32 %96
  136. %98 = insertelement <32 x i8*> %95, i8* %97, i32 26
  137. %99 = extractelement <32 x i32> %induction, i32 27
  138. %100 = getelementptr i8* %kernel_data, i32 %99
  139. %101 = insertelement <32 x i8*> %98, i8* %100, i32 27
  140. %102 = extractelement <32 x i32> %induction, i32 28
  141. %103 = getelementptr i8* %kernel_data, i32 %102
  142. %104 = insertelement <32 x i8*> %101, i8* %103, i32 28
  143. %105 = extractelement <32 x i32> %induction, i32 29
  144. %106 = getelementptr i8* %kernel_data, i32 %105
  145. %107 = insertelement <32 x i8*> %104, i8* %106, i32 29
  146. %108 = extractelement <32 x i32> %induction, i32 30
  147. %109 = getelementptr i8* %kernel_data, i32 %108
  148. %110 = insertelement <32 x i8*> %107, i8* %109, i32 30
  149. %111 = extractelement <32 x i32> %induction, i32 31
  150. %112 = getelementptr i8* %kernel_data, i32 %111
  151. %113 = insertelement <32 x i8*> %110, i8* %112, i32 31
  152. %114 = getelementptr i8* %19, i32 0
  153. %115 = bitcast i8* %114 to <32 x i8>*
  154. %wide.load = load <32 x i8>* %115
  155. %116 = add <32 x i8> %wide.load, <i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32>
  156. %117 = icmp ult <32 x i8> %116, %wide.load
  157. %118 = zext <32 x i1> %117 to <32 x i8>
  158. %119 = sub <32 x i8> zeroinitializer, %118
  159. %120 = or <32 x i8> %116, %119
  160. %121 = getelementptr i8* %kernel_data8, i32 %18
  161. %122 = insertelement <32 x i8*> undef, i8* %121, i32 0
  162. %123 = getelementptr i8* %kernel_data8, i32 %21
  163. %124 = insertelement <32 x i8*> %122, i8* %123, i32 1
  164. %125 = getelementptr i8* %kernel_data8, i32 %24
  165. %126 = insertelement <32 x i8*> %124, i8* %125, i32 2
  166. %127 = getelementptr i8* %kernel_data8, i32 %27
  167. %128 = insertelement <32 x i8*> %126, i8* %127, i32 3
  168. %129 = getelementptr i8* %kernel_data8, i32 %30
  169. %130 = insertelement <32 x i8*> %128, i8* %129, i32 4
  170. %131 = getelementptr i8* %kernel_data8, i32 %33
  171. %132 = insertelement <32 x i8*> %130, i8* %131, i32 5
  172. %133 = getelementptr i8* %kernel_data8, i32 %36
  173. %134 = insertelement <32 x i8*> %132, i8* %133, i32 6
  174. %135 = getelementptr i8* %kernel_data8, i32 %39
  175. %136 = insertelement <32 x i8*> %134, i8* %135, i32 7
  176. %137 = getelementptr i8* %kernel_data8, i32 %42
  177. %138 = insertelement <32 x i8*> %136, i8* %137, i32 8
  178. %139 = getelementptr i8* %kernel_data8, i32 %45
  179. %140 = insertelement <32 x i8*> %138, i8* %139, i32 9
  180. %141 = getelementptr i8* %kernel_data8, i32 %48
  181. %142 = insertelement <32 x i8*> %140, i8* %141, i32 10
  182. %143 = getelementptr i8* %kernel_data8, i32 %51
  183. %144 = insertelement <32 x i8*> %142, i8* %143, i32 11
  184. %145 = getelementptr i8* %kernel_data8, i32 %54
  185. %146 = insertelement <32 x i8*> %144, i8* %145, i32 12
  186. %147 = getelementptr i8* %kernel_data8, i32 %57
  187. %148 = insertelement <32 x i8*> %146, i8* %147, i32 13
  188. %149 = getelementptr i8* %kernel_data8, i32 %60
  189. %150 = insertelement <32 x i8*> %148, i8* %149, i32 14
  190. %151 = getelementptr i8* %kernel_data8, i32 %63
  191. %152 = insertelement <32 x i8*> %150, i8* %151, i32 15
  192. %153 = getelementptr i8* %kernel_data8, i32 %66
  193. %154 = insertelement <32 x i8*> %152, i8* %153, i32 16
  194. %155 = getelementptr i8* %kernel_data8, i32 %69
  195. %156 = insertelement <32 x i8*> %154, i8* %155, i32 17
  196. %157 = getelementptr i8* %kernel_data8, i32 %72
  197. %158 = insertelement <32 x i8*> %156, i8* %157, i32 18
  198. %159 = getelementptr i8* %kernel_data8, i32 %75
  199. %160 = insertelement <32 x i8*> %158, i8* %159, i32 19
  200. %161 = getelementptr i8* %kernel_data8, i32 %78
  201. %162 = insertelement <32 x i8*> %160, i8* %161, i32 20
  202. %163 = getelementptr i8* %kernel_data8, i32 %81
  203. %164 = insertelement <32 x i8*> %162, i8* %163, i32 21
  204. %165 = getelementptr i8* %kernel_data8, i32 %84
  205. %166 = insertelement <32 x i8*> %164, i8* %165, i32 22
  206. %167 = getelementptr i8* %kernel_data8, i32 %87
  207. %168 = insertelement <32 x i8*> %166, i8* %167, i32 23
  208. %169 = getelementptr i8* %kernel_data8, i32 %90
  209. %170 = insertelement <32 x i8*> %168, i8* %169, i32 24
  210. %171 = getelementptr i8* %kernel_data8, i32 %93
  211. %172 = insertelement <32 x i8*> %170, i8* %171, i32 25
  212. %173 = getelementptr i8* %kernel_data8, i32 %96
  213. %174 = insertelement <32 x i8*> %172, i8* %173, i32 26
  214. %175 = getelementptr i8* %kernel_data8, i32 %99
  215. %176 = insertelement <32 x i8*> %174, i8* %175, i32 27
  216. %177 = getelementptr i8* %kernel_data8, i32 %102
  217. %178 = insertelement <32 x i8*> %176, i8* %177, i32 28
  218. %179 = getelementptr i8* %kernel_data8, i32 %105
  219. %180 = insertelement <32 x i8*> %178, i8* %179, i32 29
  220. %181 = getelementptr i8* %kernel_data8, i32 %108
  221. %182 = insertelement <32 x i8*> %180, i8* %181, i32 30
  222. %183 = getelementptr i8* %kernel_data8, i32 %111
  223. %184 = insertelement <32 x i8*> %182, i8* %183, i32 31
  224. %185 = getelementptr i8* %121, i32 0
  225. %186 = bitcast i8* %185 to <32 x i8>*
  226. store <32 x i8> %120, <32 x i8>* %186
  227. %187 = add <32 x i32> %induction, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
  228. %188 = icmp eq <32 x i32> %187, %broadcast.splat10
  229. %index.next = add i32 %index, 32
  230. %189 = icmp eq i32 %index.next, %end.idx.rnd.down
  231. br i1 %189, label %middle.block, label %vector.body, !llvm.loop !0
  232.  
  233. middle.block: ; preds = %vector.body, %entry
  234. %resume.val = phi i32 [ 0, %entry ], [ %end.idx.rnd.down, %vector.body ]
  235. %trunc.resume.val = phi i32 [ 0, %entry ], [ %end.idx.rnd.down, %vector.body ]
  236. %cmp.n = icmp eq i32 %end.idx, %resume.val
  237. br i1 %cmp.n, label %kernel_loop_exit, label %scalar.ph
  238.  
  239. scalar.ph: ; preds = %middle.block
  240. br label %kernel_loop_body
  241.  
  242. kernel_loop_body: ; preds = %kernel_loop_latch, %scalar.ph
  243. %kernel_i = phi i32 [ %trunc.resume.val, %scalar.ph ], [ %kernel_loop_increment, %kernel_loop_latch ]
  244. %190 = getelementptr i8* %kernel_data, i32 %kernel_i
  245. %191 = load i8* %190, !llvm.mem.parallel_loop_access !3
  246. %kernel = add i8 %191, 32
  247. %kernel5 = icmp ult i8 %kernel, %191
  248. %192 = zext i1 %kernel5 to i8
  249. %kernel6 = sub i8 0, %192
  250. %kernel7 = or i8 %kernel, %kernel6
  251. %193 = getelementptr i8* %kernel_data8, i32 %kernel_i
  252. store i8 %kernel7, i8* %193, !llvm.mem.parallel_loop_access !3
  253. %kernel_loop_increment = add i32 %kernel_i, 1
  254. br label %kernel_loop_latch
  255.  
  256. kernel_loop_latch: ; preds = %kernel_loop_body
  257. %kernel_loop_test = icmp eq i32 %kernel_loop_increment, %12
  258. br i1 %kernel_loop_test, label %kernel_loop_exit, label %kernel_loop_body, !llvm.loop !3
  259.  
  260. kernel_loop_exit: ; preds = %middle.block, %kernel_loop_latch
  261. ret %likely_matrix* %5
  262. }
  263.  
  264. declare noalias %likely_matrix* @likely_new(i32, i32, i32, i32, i32, i8* noalias nocapture, i8)
  265.  
  266. attributes #0 = { nounwind }
  267.  
  268. !0 = metadata !{metadata !0, metadata !1, metadata !2}
  269. !1 = metadata !{metadata !"llvm.vectorizer.width", i32 1}
  270. !2 = metadata !{metadata !"llvm.vectorizer.unroll", i32 1}
  271. !3 = metadata !{metadata !3, metadata !1, metadata !2}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement