@@ -392,7 +392,10 @@ void PassManagerBuilder::populateModulePassManager(
//MPM.add(createLoopUnswitchPass(SizeLevel || OptLevel < 3)); // HLSL Change - may move barrier inside divergent if.
MPM.add(createInstructionCombiningPass());
MPM.add(createIndVarSimplifyPass()); // Canonicalize indvars
- MPM.add(createLoopIdiomPass()); // Recognize idioms like memset.
+ // HLSL Change Begins
+ // Don't allow loop idiom pass which may insert memset/memcpy thereby breaking the dxil
+ //MPM.add(createLoopIdiomPass()); // Recognize idioms like memset.
+ // HLSL Change Ends
MPM.add(createLoopDeletionPass()); // Delete dead loops
if (EnableLoopInterchange) {
MPM.add(createLoopInterchangePass()); // Interchange loops
@@ -0,0 +1,18 @@
+// RUN: %dxc /Tps_6_0 /Emain > %s | FileCheck %s
+// CHECK: define void @main()
+// CHECK: entry
+
+#define MAX_INDEX 5
+groupshared float g_Array[2][(MAX_INDEX * MAX_INDEX)];
+[RootSignature("")] float4 main(uint GroupIndex
+ : A) : SV_Target {
+ uint idx;
+ float l_Array[(MAX_INDEX * MAX_INDEX)] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f};
+ for (idx = 0; idx < (MAX_INDEX * MAX_INDEX); idx++) {
+ g_Array[GroupIndex][idx] = l_Array[idx];
+ }
+ return float4(g_Array[GroupIndex][0], g_Array[GroupIndex][1], g_Array[GroupIndex][2], g_Array[GroupIndex][3]);
+}
@@ -0,0 +1,17 @@
+#define MAX_INDEX 14
+ g_Array[GroupIndex][idx] = 0.0f;