Zgragselus

BVH Traversal - For DXBC/DXIL

Apr 15th, 2023
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 29.67 KB | None | 0 0
  1. ; Note: shader requires additional functionality:
  2. ; 64 UAV slots
  3. ;
  4. ; shader hash: ba5558f725d97eb853870c3b8f73297d
  5.  
  6. ; Compute Shader, compiled under SM6.5
  7.  
  8. target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64"
  9. target triple = "dxil-ms-dx"
  10.  
  11. %dx.types.Handle = type { i8* }
  12. %dx.types.CBufRet.f32 = type { float, float, float, float }
  13. %dx.types.ResRet.f32 = type { float, float, float, float, i32 }
  14. %dx.types.ResRet.i32 = type { i32, i32, i32, i32, i32 }
  15. %"class.RWStructuredBuffer<Ray>" = type { %struct.Ray }
  16. %struct.Ray = type { <4 x float>, <4 x float>, <4 x float> }
  17. %"class.RWTexture2D<vector<float, 4> >" = type { <4 x float> }
  18. %"class.RWStructuredBuffer<GeometryNode>" = type { %struct.GeometryNode }
  19. %struct.GeometryNode = type { <4 x float>, <4 x float>, i32, i32, i32, i32, i32, i32, i32, i32 }
  20. %"hostlayout.class.RWStructuredBuffer<InstanceNode>" = type { %hostlayout.struct.InstanceNode }
  21. %hostlayout.struct.InstanceNode = type { [4 x <4 x float>], [4 x <4 x float>], i32, i32, i32, i32 }
  22. %"class.RWStructuredBuffer<BVHNode>" = type { %struct.BVHNode }
  23. %struct.BVHNode = type { <4 x float>, <4 x float>, <4 x float>, i32, i32, i32, i32 }
  24. %"class.RWStructuredBuffer<MemoryNode>" = type { %struct.MemoryNode }
  25. %struct.MemoryNode = type { i32, i32, i32, i32 }
  26. %"class.RWStructuredBuffer<unsigned int>" = type { i32 }
  27. %"class.RWStructuredBuffer<vector<float, 4> >" = type { <4 x float> }
  28. %Params = type { <4 x float>, <4 x float>, <4 x float> }
  29.  
  30. define void @RenderPass() {
  31. %1 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 1, i32 8, i32 13, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
  32. %2 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 1, i32 7, i32 12, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
  33. %3 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 1, i32 6, i32 10, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
  34. %4 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 1, i32 5, i32 9, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
  35. %5 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 1, i32 4, i32 8, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
  36. %6 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 1, i32 3, i32 7, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
  37. %7 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 1, i32 2, i32 6, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
  38. %8 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 1, i32 1, i32 1, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
  39. %9 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 1, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
  40. %10 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 2, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
  41. %11 = call i32 @dx.op.threadId.i32(i32 93, i32 0) ; ThreadId(component)
  42. %12 = call i32 @dx.op.threadId.i32(i32 93, i32 1) ; ThreadId(component)
  43. %13 = alloca [64 x i32], align 4
  44. %14 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %10, i32 0) ; CBufferLoadLegacy(handle,regIndex)
  45. %15 = extractvalue %dx.types.CBufRet.f32 %14, 0
  46. %16 = bitcast float %15 to i32
  47. %17 = mul i32 %16, %12
  48. %18 = add i32 %17, %11
  49. %19 = call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %9, i32 %18, i32 0, i8 15, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  50. %20 = extractvalue %dx.types.ResRet.f32 %19, 0
  51. %21 = extractvalue %dx.types.ResRet.f32 %19, 1
  52. %22 = extractvalue %dx.types.ResRet.f32 %19, 2
  53. %23 = extractvalue %dx.types.ResRet.f32 %19, 3
  54. %24 = call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %9, i32 %18, i32 16, i8 15, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  55. %25 = extractvalue %dx.types.ResRet.f32 %24, 0
  56. %26 = extractvalue %dx.types.ResRet.f32 %24, 1
  57. %27 = extractvalue %dx.types.ResRet.f32 %24, 2
  58. %28 = extractvalue %dx.types.ResRet.f32 %24, 3
  59. %29 = call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %9, i32 %18, i32 32, i8 15, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  60. %30 = extractvalue %dx.types.ResRet.f32 %29, 0
  61. %31 = extractvalue %dx.types.ResRet.f32 %29, 1
  62. %32 = extractvalue %dx.types.ResRet.f32 %29, 2
  63. %33 = fmul fast float %30, %20
  64. %34 = fmul fast float %31, %21
  65. %35 = fmul fast float %32, %22
  66. %36 = getelementptr inbounds [64 x i32], [64 x i32]* %13, i32 0, i32 0
  67. store i32 -1, i32* %36, align 4, !tbaa !26
  68. %37 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %6, i32 0, i32 128, i8 1, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  69. %38 = extractvalue %dx.types.ResRet.i32 %37, 0
  70. br label %39
  71.  
  72. ; <label>:39 ; preds = %367, %0
  73. %40 = phi i32 [ 0, %0 ], [ %347, %367 ]
  74. %41 = phi float [ %33, %0 ], [ %348, %367 ]
  75. %42 = phi float [ %34, %0 ], [ %349, %367 ]
  76. %43 = phi float [ %35, %0 ], [ %350, %367 ]
  77. %44 = phi float [ %30, %0 ], [ %351, %367 ]
  78. %45 = phi float [ %31, %0 ], [ %352, %367 ]
  79. %46 = phi float [ %32, %0 ], [ %353, %367 ]
  80. %47 = phi float [ %25, %0 ], [ %354, %367 ]
  81. %48 = phi float [ %26, %0 ], [ %355, %367 ]
  82. %49 = phi float [ %27, %0 ], [ %356, %367 ]
  83. %50 = phi float [ %20, %0 ], [ %357, %367 ]
  84. %51 = phi float [ %21, %0 ], [ %358, %367 ]
  85. %52 = phi float [ %22, %0 ], [ %359, %367 ]
  86. %53 = phi i32 [ 0, %0 ], [ %360, %367 ]
  87. %54 = phi i32 [ -1, %0 ], [ %361, %367 ]
  88. %55 = phi float [ 1.000000e+040x40C3880000000000, %0 ], [ %362, %367 ]
  89. %56 = phi i32 [ %38, %0 ], [ %363, %367 ]
  90. %57 = phi float [ 0.000000e+000x0, %0 ], [ %364, %367 ]
  91. %58 = phi float [ 0.000000e+000x0, %0 ], [ %365, %367 ]
  92. %59 = phi float [ 0.000000e+000x0, %0 ], [ %61, %367 ]
  93. %60 = phi i32 [ 0, %0 ], [ %368, %367 ]
  94. %61 = fadd fast float %59, 1.000000e-030x3F50624DE0000000
  95. %62 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %5, i32 %40, i32 52, i8 1, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  96. %63 = extractvalue %dx.types.ResRet.i32 %62, 0
  97. %64 = icmp eq i32 %63, 0
  98. br i1 %64, label %65, label %162, !dx.controlflow.hints !30
  99.  
  100. ; <label>:65 ; preds = %39
  101. %66 = call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %5, i32 %40, i32 0, i8 15, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  102. %67 = extractvalue %dx.types.ResRet.f32 %66, 0
  103. %68 = extractvalue %dx.types.ResRet.f32 %66, 1
  104. %69 = extractvalue %dx.types.ResRet.f32 %66, 2
  105. %70 = extractvalue %dx.types.ResRet.f32 %66, 3
  106. %71 = call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %5, i32 %40, i32 16, i8 15, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  107. %72 = extractvalue %dx.types.ResRet.f32 %71, 0
  108. %73 = extractvalue %dx.types.ResRet.f32 %71, 1
  109. %74 = extractvalue %dx.types.ResRet.f32 %71, 2
  110. %75 = extractvalue %dx.types.ResRet.f32 %71, 3
  111. %76 = call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %5, i32 %40, i32 32, i8 15, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  112. %77 = extractvalue %dx.types.ResRet.f32 %76, 0
  113. %78 = extractvalue %dx.types.ResRet.f32 %76, 1
  114. %79 = extractvalue %dx.types.ResRet.f32 %76, 2
  115. %80 = extractvalue %dx.types.ResRet.f32 %76, 3
  116. %81 = fmul fast float %67, %44
  117. %82 = fsub fast float %81, %41
  118. %83 = fmul fast float %68, %44
  119. %84 = fsub fast float %83, %41
  120. %85 = fmul fast float %69, %45
  121. %86 = fsub fast float %85, %42
  122. %87 = fmul fast float %70, %45
  123. %88 = fsub fast float %87, %42
  124. %89 = fmul fast float %77, %46
  125. %90 = fsub fast float %89, %43
  126. %91 = fmul fast float %78, %46
  127. %92 = fsub fast float %91, %43
  128. %93 = fmul fast float %79, %46
  129. %94 = fsub fast float %93, %43
  130. %95 = fmul fast float %80, %46
  131. %96 = fsub fast float %95, %43
  132. %97 = call float @dx.op.binary.f32(i32 36, float %90, float %92) ; FMin(a,b)
  133. %98 = call float @dx.op.binary.f32(i32 35, float %97, float 0.000000e+000x0) ; FMax(a,b)
  134. %99 = call float @dx.op.binary.f32(i32 36, float %86, float %88) ; FMin(a,b)
  135. %100 = call float @dx.op.binary.f32(i32 36, float %82, float %84) ; FMin(a,b)
  136. %101 = call float @dx.op.binary.f32(i32 35, float %100, float %99) ; FMax(a,b)
  137. %102 = call float @dx.op.binary.f32(i32 35, float %101, float %98) ; FMax(a,b)
  138. %103 = call float @dx.op.binary.f32(i32 35, float %90, float %92) ; FMax(a,b)
  139. %104 = call float @dx.op.binary.f32(i32 36, float %103, float %55) ; FMin(a,b)
  140. %105 = call float @dx.op.binary.f32(i32 35, float %86, float %88) ; FMax(a,b)
  141. %106 = call float @dx.op.binary.f32(i32 35, float %82, float %84) ; FMax(a,b)
  142. %107 = call float @dx.op.binary.f32(i32 36, float %106, float %105) ; FMin(a,b)
  143. %108 = call float @dx.op.binary.f32(i32 36, float %107, float %104) ; FMin(a,b)
  144. %109 = fmul fast float %72, %44
  145. %110 = fsub fast float %109, %41
  146. %111 = fmul fast float %73, %44
  147. %112 = fsub fast float %111, %41
  148. %113 = fmul fast float %74, %45
  149. %114 = fsub fast float %113, %42
  150. %115 = fmul fast float %75, %45
  151. %116 = fsub fast float %115, %42
  152. %117 = call float @dx.op.binary.f32(i32 36, float %94, float %96) ; FMin(a,b)
  153. %118 = call float @dx.op.binary.f32(i32 35, float %117, float 0.000000e+000x0) ; FMax(a,b)
  154. %119 = call float @dx.op.binary.f32(i32 36, float %114, float %116) ; FMin(a,b)
  155. %120 = call float @dx.op.binary.f32(i32 36, float %110, float %112) ; FMin(a,b)
  156. %121 = call float @dx.op.binary.f32(i32 35, float %120, float %119) ; FMax(a,b)
  157. %122 = call float @dx.op.binary.f32(i32 35, float %121, float %118) ; FMax(a,b)
  158. %123 = call float @dx.op.binary.f32(i32 35, float %94, float %96) ; FMax(a,b)
  159. %124 = call float @dx.op.binary.f32(i32 36, float %123, float %55) ; FMin(a,b)
  160. %125 = call float @dx.op.binary.f32(i32 35, float %114, float %116) ; FMax(a,b)
  161. %126 = call float @dx.op.binary.f32(i32 35, float %110, float %112) ; FMax(a,b)
  162. %127 = call float @dx.op.binary.f32(i32 36, float %126, float %125) ; FMin(a,b)
  163. %128 = call float @dx.op.binary.f32(i32 36, float %127, float %124) ; FMin(a,b)
  164. %129 = fcmp fast oge float %108, %102
  165. %130 = fcmp fast oge float %128, %122
  166. %131 = or i1 %129, %130
  167. br i1 %131, label %150, label %132
  168.  
  169. ; <label>:132 ; preds = %65
  170. %133 = icmp eq i32 %53, %54
  171. %134 = select i1 %133, float %33, float %41
  172. %135 = select i1 %133, float %34, float %42
  173. %136 = select i1 %133, float %35, float %43
  174. %137 = select i1 %133, float %30, float %44
  175. %138 = select i1 %133, float %31, float %45
  176. %139 = select i1 %133, float %32, float %46
  177. %140 = select i1 %133, float %25, float %47
  178. %141 = select i1 %133, float %26, float %48
  179. %142 = select i1 %133, float %27, float %49
  180. %143 = select i1 %133, float %20, float %50
  181. %144 = select i1 %133, float %21, float %51
  182. %145 = select i1 %133, float %22, float %52
  183. %146 = select i1 %133, i32 -1, i32 %54
  184. %147 = getelementptr inbounds [64 x i32], [64 x i32]* %13, i32 0, i32 %53
  185. %148 = load i32, i32* %147, align 4, !tbaa !26
  186. %149 = add i32 %53, -1
  187. br label %346
  188.  
  189. ; <label>:150 ; preds = %65
  190. %151 = add i32 %40, 1
  191. %152 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %5, i32 %40, i32 48, i8 1, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  192. %153 = extractvalue %dx.types.ResRet.i32 %152, 0
  193. %154 = select i1 %129, i32 %151, i32 %153
  194. %155 = and i1 %129, %130
  195. br i1 %155, label %156, label %346
  196.  
  197. ; <label>:156 ; preds = %150
  198. %157 = fcmp fast olt float %122, %102
  199. %158 = add i32 %53, 1
  200. %159 = getelementptr inbounds [64 x i32], [64 x i32]* %13, i32 0, i32 %158
  201. br i1 %157, label %160, label %161
  202.  
  203. ; <label>:160 ; preds = %156
  204. store i32 %151, i32* %159, align 4, !tbaa !26
  205. br label %346
  206.  
  207. ; <label>:161 ; preds = %156
  208. store i32 %153, i32* %159, align 4, !tbaa !26
  209. br label %346
  210.  
  211. ; <label>:162 ; preds = %39
  212. %163 = icmp eq i32 %63, -1
  213. br i1 %163, label %164, label %222
  214.  
  215. ; <label>:164 ; preds = %162
  216. %165 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %5, i32 %40, i32 48, i8 1, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  217. %166 = extractvalue %dx.types.ResRet.i32 %165, 0
  218. %167 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %3, i32 %166, i32 0, i8 1, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  219. %168 = extractvalue %dx.types.ResRet.i32 %167, 0
  220. %169 = call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %6, i32 %168, i32 64, i8 15, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  221. %170 = extractvalue %dx.types.ResRet.f32 %169, 0
  222. %171 = extractvalue %dx.types.ResRet.f32 %169, 1
  223. %172 = extractvalue %dx.types.ResRet.f32 %169, 2
  224. %173 = extractvalue %dx.types.ResRet.f32 %169, 3
  225. %174 = call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %6, i32 %168, i32 80, i8 15, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  226. %175 = extractvalue %dx.types.ResRet.f32 %174, 0
  227. %176 = extractvalue %dx.types.ResRet.f32 %174, 1
  228. %177 = extractvalue %dx.types.ResRet.f32 %174, 2
  229. %178 = extractvalue %dx.types.ResRet.f32 %174, 3
  230. %179 = call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %6, i32 %168, i32 96, i8 15, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  231. %180 = extractvalue %dx.types.ResRet.f32 %179, 0
  232. %181 = extractvalue %dx.types.ResRet.f32 %179, 1
  233. %182 = extractvalue %dx.types.ResRet.f32 %179, 2
  234. %183 = extractvalue %dx.types.ResRet.f32 %179, 3
  235. %184 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %6, i32 %168, i32 128, i8 1, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  236. %185 = extractvalue %dx.types.ResRet.i32 %184, 0
  237. %186 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %7, i32 %185, i32 40, i8 1, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  238. %187 = extractvalue %dx.types.ResRet.i32 %186, 0
  239. %188 = add i32 %187, 1
  240. %189 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %4, i32 %188, i32 8, i8 1, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  241. %190 = extractvalue %dx.types.ResRet.i32 %189, 0
  242. %191 = lshr i32 %190, 6
  243. %192 = fmul fast float %170, %20
  244. %193 = call float @dx.op.tertiary.f32(i32 46, float %21, float %171, float %192) ; FMad(a,b,c)
  245. %194 = call float @dx.op.tertiary.f32(i32 46, float %22, float %172, float %193) ; FMad(a,b,c)
  246. %195 = call float @dx.op.tertiary.f32(i32 46, float %23, float %173, float %194) ; FMad(a,b,c)
  247. %196 = fmul fast float %175, %20
  248. %197 = call float @dx.op.tertiary.f32(i32 46, float %21, float %176, float %196) ; FMad(a,b,c)
  249. %198 = call float @dx.op.tertiary.f32(i32 46, float %22, float %177, float %197) ; FMad(a,b,c)
  250. %199 = call float @dx.op.tertiary.f32(i32 46, float %23, float %178, float %198) ; FMad(a,b,c)
  251. %200 = fmul fast float %180, %20
  252. %201 = call float @dx.op.tertiary.f32(i32 46, float %21, float %181, float %200) ; FMad(a,b,c)
  253. %202 = call float @dx.op.tertiary.f32(i32 46, float %22, float %182, float %201) ; FMad(a,b,c)
  254. %203 = call float @dx.op.tertiary.f32(i32 46, float %23, float %183, float %202) ; FMad(a,b,c)
  255. %204 = fmul fast float %170, %25
  256. %205 = call float @dx.op.tertiary.f32(i32 46, float %26, float %171, float %204) ; FMad(a,b,c)
  257. %206 = call float @dx.op.tertiary.f32(i32 46, float %27, float %172, float %205) ; FMad(a,b,c)
  258. %207 = call float @dx.op.tertiary.f32(i32 46, float %28, float %173, float %206) ; FMad(a,b,c)
  259. %208 = fmul fast float %175, %25
  260. %209 = call float @dx.op.tertiary.f32(i32 46, float %26, float %176, float %208) ; FMad(a,b,c)
  261. %210 = call float @dx.op.tertiary.f32(i32 46, float %27, float %177, float %209) ; FMad(a,b,c)
  262. %211 = call float @dx.op.tertiary.f32(i32 46, float %28, float %178, float %210) ; FMad(a,b,c)
  263. %212 = fmul fast float %180, %25
  264. %213 = call float @dx.op.tertiary.f32(i32 46, float %26, float %181, float %212) ; FMad(a,b,c)
  265. %214 = call float @dx.op.tertiary.f32(i32 46, float %27, float %182, float %213) ; FMad(a,b,c)
  266. %215 = call float @dx.op.tertiary.f32(i32 46, float %28, float %183, float %214) ; FMad(a,b,c)
  267. %216 = fdiv fast float 1.000000e+000x3FF0000000000000, %207
  268. %217 = fdiv fast float 1.000000e+000x3FF0000000000000, %211
  269. %218 = fdiv fast float 1.000000e+000x3FF0000000000000, %215
  270. %219 = fmul fast float %216, %195
  271. %220 = fmul fast float %217, %199
  272. %221 = fmul fast float %218, %203
  273. br label %346
  274.  
  275. ; <label>:222 ; preds = %162
  276. %223 = icmp sgt i32 %63, 0
  277. br i1 %223, label %224, label %325
  278.  
  279. ; <label>:224 ; preds = %222
  280. %225 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %7, i32 %56, i32 48, i8 1, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  281. %226 = extractvalue %dx.types.ResRet.i32 %225, 0
  282. %227 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %1, i32 %226, i32 8, i8 1, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  283. %228 = extractvalue %dx.types.ResRet.i32 %227, 0
  284. br label %229
  285.  
  286. ; <label>:229 ; preds = %319, %224
  287. %230 = phi float [ %55, %224 ], [ %320, %319 ]
  288. %231 = phi float [ %57, %224 ], [ %321, %319 ]
  289. %232 = phi float [ %58, %224 ], [ %322, %319 ]
  290. %233 = phi i32 [ 0, %224 ], [ %323, %319 ]
  291. %234 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %5, i32 %40, i32 52, i8 1, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  292. %235 = extractvalue %dx.types.ResRet.i32 %234, 0
  293. %236 = icmp ult i32 %233, %235
  294. br i1 %236, label %237, label %324
  295.  
  296. ; <label>:237 ; preds = %229
  297. %238 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %5, i32 %40, i32 48, i8 1, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  298. %239 = extractvalue %dx.types.ResRet.i32 %238, 0
  299. %240 = add i32 %239, %233
  300. %241 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %3, i32 %240, i32 0, i8 1, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  301. %242 = extractvalue %dx.types.ResRet.i32 %241, 0
  302. %243 = mul i32 %242, 3
  303. %244 = lshr i32 %228, 4
  304. %245 = add i32 %243, %244
  305. %246 = call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %2, i32 %245, i32 0, i8 15, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  306. %247 = extractvalue %dx.types.ResRet.f32 %246, 0
  307. %248 = extractvalue %dx.types.ResRet.f32 %246, 1
  308. %249 = extractvalue %dx.types.ResRet.f32 %246, 2
  309. %250 = extractvalue %dx.types.ResRet.f32 %246, 3
  310. %251 = add nuw nsw i32 %244, 1
  311. %252 = add i32 %251, %243
  312. %253 = call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %2, i32 %252, i32 0, i8 15, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  313. %254 = extractvalue %dx.types.ResRet.f32 %253, 0
  314. %255 = extractvalue %dx.types.ResRet.f32 %253, 1
  315. %256 = extractvalue %dx.types.ResRet.f32 %253, 2
  316. %257 = add nuw nsw i32 %244, 2
  317. %258 = add i32 %257, %243
  318. %259 = call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %2, i32 %258, i32 0, i8 15, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  319. %260 = extractvalue %dx.types.ResRet.f32 %259, 0
  320. %261 = extractvalue %dx.types.ResRet.f32 %259, 1
  321. %262 = extractvalue %dx.types.ResRet.f32 %259, 2
  322. %263 = extractvalue %dx.types.ResRet.f32 %259, 3
  323. %264 = fmul fast float %247, %50
  324. %265 = fsub fast float %250, %264
  325. %266 = fmul fast float %248, %51
  326. %267 = fsub fast float %265, %266
  327. %268 = fmul fast float %249, %52
  328. %269 = fsub fast float %267, %268
  329. %270 = fmul fast float %247, %47
  330. %271 = fmul fast float %248, %48
  331. %272 = fadd fast float %270, %271
  332. %273 = fmul fast float %249, %49
  333. %274 = fadd fast float %272, %273
  334. %275 = fdiv fast float 1.000000e+000x3FF0000000000000, %274
  335. %276 = fmul fast float %275, %269
  336. %277 = fcmp fast ogt float %276, 0.000000e+000x0
  337. %278 = fcmp fast olt float %276, %230
  338. %279 = and i1 %277, %278
  339. br i1 %279, label %280, label %319
  340.  
  341. ; <label>:280 ; preds = %237
  342. %281 = extractvalue %dx.types.ResRet.f32 %253, 3
  343. %282 = fmul fast float %254, %50
  344. %283 = fadd fast float %282, %281
  345. %284 = fmul fast float %255, %51
  346. %285 = fadd fast float %283, %284
  347. %286 = fmul fast float %256, %52
  348. %287 = fadd fast float %285, %286
  349. %288 = fmul fast float %254, %47
  350. %289 = fmul fast float %255, %48
  351. %290 = fadd fast float %288, %289
  352. %291 = fmul fast float %256, %49
  353. %292 = fadd fast float %290, %291
  354. %293 = fmul fast float %276, %292
  355. %294 = fadd fast float %287, %293
  356. %295 = fcmp fast oge float %294, 0.000000e+000x0
  357. %296 = fcmp fast ole float %294, 1.000000e+000x3FF0000000000000
  358. %297 = and i1 %295, %296
  359. br i1 %297, label %298, label %319
  360.  
  361. ; <label>:298 ; preds = %280
  362. %299 = fmul fast float %260, %50
  363. %300 = fadd fast float %299, %263
  364. %301 = fmul fast float %261, %51
  365. %302 = fadd fast float %300, %301
  366. %303 = fmul fast float %262, %52
  367. %304 = fadd fast float %302, %303
  368. %305 = fmul fast float %260, %47
  369. %306 = fmul fast float %261, %48
  370. %307 = fadd fast float %305, %306
  371. %308 = fmul fast float %262, %49
  372. %309 = fadd fast float %307, %308
  373. %310 = fmul fast float %309, %276
  374. %311 = fadd fast float %304, %310
  375. %312 = fcmp fast oge float %311, 0.000000e+000x0
  376. %313 = fadd fast float %311, %294
  377. %314 = fcmp fast ole float %313, 1.000000e+000x3FF0000000000000
  378. %315 = and i1 %312, %314
  379. %316 = select i1 %315, float %276, float %230
  380. %317 = select i1 %315, float %294, float %231
  381. %318 = select i1 %315, float %311, float %232
  382. br label %319
  383.  
  384. ; <label>:319 ; preds = %298, %280, %237
  385. %320 = phi float [ %230, %280 ], [ %230, %237 ], [ %316, %298 ]
  386. %321 = phi float [ %231, %280 ], [ %231, %237 ], [ %317, %298 ]
  387. %322 = phi float [ %232, %280 ], [ %232, %237 ], [ %318, %298 ]
  388. %323 = add i32 %233, 1
  389. br label %229
  390.  
  391. ; <label>:324 ; preds = %229
  392. br label %325
  393.  
  394. ; <label>:325 ; preds = %324, %222
  395. %326 = phi float [ %55, %222 ], [ %230, %324 ]
  396. %327 = phi float [ %57, %222 ], [ %231, %324 ]
  397. %328 = phi float [ %58, %222 ], [ %232, %324 ]
  398. %329 = icmp eq i32 %53, %54
  399. %330 = select i1 %329, float %33, float %41
  400. %331 = select i1 %329, float %34, float %42
  401. %332 = select i1 %329, float %35, float %43
  402. %333 = select i1 %329, float %30, float %44
  403. %334 = select i1 %329, float %31, float %45
  404. %335 = select i1 %329, float %32, float %46
  405. %336 = select i1 %329, float %25, float %47
  406. %337 = select i1 %329, float %26, float %48
  407. %338 = select i1 %329, float %27, float %49
  408. %339 = select i1 %329, float %20, float %50
  409. %340 = select i1 %329, float %21, float %51
  410. %341 = select i1 %329, float %22, float %52
  411. %342 = select i1 %329, i32 -1, i32 %54
  412. %343 = getelementptr inbounds [64 x i32], [64 x i32]* %13, i32 0, i32 %53
  413. %344 = load i32, i32* %343, align 4, !tbaa !26
  414. %345 = add i32 %53, -1
  415. br label %346
  416.  
  417. ; <label>:346 ; preds = %325, %164, %161, %160, %150, %132
  418. %347 = phi i32 [ %153, %160 ], [ %154, %161 ], [ %154, %150 ], [ %148, %132 ], [ %191, %164 ], [ %344, %325 ]
  419. %348 = phi float [ %41, %160 ], [ %41, %161 ], [ %41, %150 ], [ %134, %132 ], [ %219, %164 ], [ %330, %325 ]
  420. %349 = phi float [ %42, %160 ], [ %42, %161 ], [ %42, %150 ], [ %135, %132 ], [ %220, %164 ], [ %331, %325 ]
  421. %350 = phi float [ %43, %160 ], [ %43, %161 ], [ %43, %150 ], [ %136, %132 ], [ %221, %164 ], [ %332, %325 ]
  422. %351 = phi float [ %44, %160 ], [ %44, %161 ], [ %44, %150 ], [ %137, %132 ], [ %216, %164 ], [ %333, %325 ]
  423. %352 = phi float [ %45, %160 ], [ %45, %161 ], [ %45, %150 ], [ %138, %132 ], [ %217, %164 ], [ %334, %325 ]
  424. %353 = phi float [ %46, %160 ], [ %46, %161 ], [ %46, %150 ], [ %139, %132 ], [ %218, %164 ], [ %335, %325 ]
  425. %354 = phi float [ %47, %160 ], [ %47, %161 ], [ %47, %150 ], [ %140, %132 ], [ %207, %164 ], [ %336, %325 ]
  426. %355 = phi float [ %48, %160 ], [ %48, %161 ], [ %48, %150 ], [ %141, %132 ], [ %211, %164 ], [ %337, %325 ]
  427. %356 = phi float [ %49, %160 ], [ %49, %161 ], [ %49, %150 ], [ %142, %132 ], [ %215, %164 ], [ %338, %325 ]
  428. %357 = phi float [ %50, %160 ], [ %50, %161 ], [ %50, %150 ], [ %143, %132 ], [ %195, %164 ], [ %339, %325 ]
  429. %358 = phi float [ %51, %160 ], [ %51, %161 ], [ %51, %150 ], [ %144, %132 ], [ %199, %164 ], [ %340, %325 ]
  430. %359 = phi float [ %52, %160 ], [ %52, %161 ], [ %52, %150 ], [ %145, %132 ], [ %203, %164 ], [ %341, %325 ]
  431. %360 = phi i32 [ %158, %160 ], [ %158, %161 ], [ %53, %150 ], [ %149, %132 ], [ %53, %164 ], [ %345, %325 ]
  432. %361 = phi i32 [ %54, %160 ], [ %54, %161 ], [ %54, %150 ], [ %146, %132 ], [ %53, %164 ], [ %342, %325 ]
  433. %362 = phi float [ %55, %160 ], [ %55, %161 ], [ %55, %150 ], [ %55, %132 ], [ %55, %164 ], [ %326, %325 ]
  434. %363 = phi i32 [ %56, %160 ], [ %56, %161 ], [ %56, %150 ], [ %56, %132 ], [ %185, %164 ], [ %56, %325 ]
  435. %364 = phi float [ %57, %160 ], [ %57, %161 ], [ %57, %150 ], [ %57, %132 ], [ %57, %164 ], [ %327, %325 ]
  436. %365 = phi float [ %58, %160 ], [ %58, %161 ], [ %58, %150 ], [ %58, %132 ], [ %58, %164 ], [ %328, %325 ]
  437. %366 = icmp eq i32 %347, -1
  438. br i1 %366, label %370, label %367
  439.  
  440. ; <label>:367 ; preds = %346
  441. %368 = add nuw nsw i32 %60, 1
  442. %369 = icmp slt i32 %368, 1000
  443. br i1 %369, label %39, label %370, !llvm.loop !31
  444.  
  445. ; <label>:370 ; preds = %367, %346
  446. call void @dx.op.textureStore.f32(i32 67, %dx.types.Handle %8, i32 %11, i32 %12, i32 undef, float %364, float %365, float %61, float 1.000000e+000x3FF0000000000000, i8 15) ; TextureStore(srv,coord0,coord1,coord2,value0,value1,value2,value3,mask)
  447. ret void
  448. }
  449.  
  450. ; Function Attrs: nounwind readnone
  451. declare i32 @dx.op.threadId.i32(i32, i32) #0
  452.  
  453. ; Function Attrs: nounwind readonly
  454. declare %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32, %dx.types.Handle, i32, i32, i8, i32) #1
  455.  
  456. ; Function Attrs: nounwind readonly
  457. declare %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32, %dx.types.Handle, i32, i32, i8, i32) #1
  458.  
  459. ; Function Attrs: nounwind readnone
  460. declare float @dx.op.binary.f32(i32, float, float) #0
  461.  
  462. ; Function Attrs: nounwind
  463. declare void @dx.op.textureStore.f32(i32, %dx.types.Handle, i32, i32, i32, float, float, float, float, i8) #2
  464.  
  465. ; Function Attrs: nounwind readonly
  466. declare %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32, %dx.types.Handle, i32) #1
  467.  
  468. ; Function Attrs: nounwind readnone
  469. declare float @dx.op.tertiary.f32(i32, float, float, float) #0
  470.  
  471. ; Function Attrs: nounwind readonly
  472. declare %dx.types.Handle @dx.op.createHandle(i32, i8, i32, i32, i1) #1
  473.  
  474. attributes #0 = { nounwind readnone }
  475. attributes #1 = { nounwind readonly }
  476. attributes #2 = { nounwind }
  477.  
  478. !llvm.ident = !{!0}
  479. !dx.version = !{!1}
  480. !dx.valver = !{!2}
  481. !dx.shaderModel = !{!3}
  482. !dx.resources = !{!4}
  483. !dx.entryPoints = !{!23}
  484.  
  485. !0 = !{!"clang version 3.7 (tags/RELEASE_370/final)"}
  486. !1 = !{i32 1, i32 5}
  487. !2 = !{i32 1, i32 7}
  488. !3 = !{!"cs", i32 6, i32 5}
  489. !4 = !{null, !5, !21, null}
  490. !5 = !{!6, !8, !10, !12, !14, !15, !17, !19, !20}
  491. !6 = !{i32 0, %"class.RWStructuredBuffer<Ray>"* undef, !"", i32 0, i32 0, i32 1, i32 12, i1 false, i1 false, i1 false, !7}
  492. !7 = !{i32 1, i32 48}
  493. !8 = !{i32 1, %"class.RWTexture2D<vector<float, 4> >"* undef, !"", i32 0, i32 1, i32 1, i32 2, i1 false, i1 false, i1 false, !9}
  494. !9 = !{i32 0, i32 9}
  495. !10 = !{i32 2, %"class.RWStructuredBuffer<GeometryNode>"* undef, !"", i32 0, i32 6, i32 1, i32 12, i1 false, i1 false, i1 false, !11}
  496. !11 = !{i32 1, i32 64}
  497. !12 = !{i32 3, %"hostlayout.class.RWStructuredBuffer<InstanceNode>"* undef, !"", i32 0, i32 7, i32 1, i32 12, i1 false, i1 false, i1 false, !13}
  498. !13 = !{i32 1, i32 144}
  499. !14 = !{i32 4, %"class.RWStructuredBuffer<BVHNode>"* undef, !"", i32 0, i32 8, i32 1, i32 12, i1 false, i1 false, i1 false, !11}
  500. !15 = !{i32 5, %"class.RWStructuredBuffer<MemoryNode>"* undef, !"", i32 0, i32 9, i32 1, i32 12, i1 false, i1 false, i1 false, !16}
  501. !16 = !{i32 1, i32 16}
  502. !17 = !{i32 6, %"class.RWStructuredBuffer<unsigned int>"* undef, !"", i32 0, i32 10, i32 1, i32 12, i1 false, i1 false, i1 false, !18}
  503. !18 = !{i32 1, i32 4}
  504. !19 = !{i32 7, %"class.RWStructuredBuffer<vector<float, 4> >"* undef, !"", i32 0, i32 12, i32 1, i32 12, i1 false, i1 false, i1 false, !16}
  505. !20 = !{i32 8, %"class.RWStructuredBuffer<MemoryNode>"* undef, !"", i32 0, i32 13, i32 1, i32 12, i1 false, i1 false, i1 false, !16}
  506. !21 = !{!22}
  507. !22 = !{i32 0, %Params* undef, !"", i32 0, i32 0, i32 1, i32 48, null}
  508. !23 = !{void ()* @RenderPass, !"RenderPass", null, !4, !24}
  509. !24 = !{i32 0, i64 32784, i32 4, !25}
  510. !25 = !{i32 32, i32 32, i32 1}
  511. !26 = !{!27, !27, i64 0}
  512. !27 = !{!"int", !28, i64 0}
  513. !28 = !{!"omnipotent char", !29, i64 0}
  514. !29 = !{!"Simple C/C++ TBAA"}
  515. !30 = distinct !{!30, !"dx.controlflow.hints", i32 1}
  516. !31 = distinct !{!31, !32}
  517. !32 = !{!"llvm.loop.unroll.disable"}
  518.  
  519.  
Add Comment
Please, Sign In to add comment