Browse Source

Remove nonUniform metadata after generate createHandle.

Xiang Li 7 years ago
parent
commit
dd5a8cd377

+ 2 - 0
lib/HLSL/DxilCondenseResources.cpp

@@ -861,6 +861,8 @@ void DxilLowerCreateHandleForLib::TranslateDxilResourceUses(
           // Mark nonUniform.
           // Mark nonUniform.
           createHandleArgs[DXIL::OperandIndex::kCreateHandleIsUniformOpIdx] =
           createHandleArgs[DXIL::OperandIndex::kCreateHandleIsUniformOpIdx] =
               hlslOP->GetI1Const(1);
               hlslOP->GetI1Const(1);
+          // Clear nonUniform on GEP.
+          GEPInst->setMetadata(DxilMDHelper::kDxilNonUniformAttributeMDName, nullptr);
         }
         }
         createHandleArgs[DXIL::OperandIndex::kCreateHandleResIndexOpIdx] =
         createHandleArgs[DXIL::OperandIndex::kCreateHandleResIndexOpIdx] =
             Builder.CreateAdd(idx, resLowerBound);
             Builder.CreateAdd(idx, resLowerBound);

+ 1 - 1
lib/HLSL/DxilGenerationPass.cpp

@@ -391,7 +391,7 @@ void DxilGenerationPass::MarkNonUniform(
     std::unordered_set<Value *> &NonUniformSet) {
     std::unordered_set<Value *> &NonUniformSet) {
   for (Value *V : NonUniformSet) {
   for (Value *V : NonUniformSet) {
     for (User *U : V->users()) {
     for (User *U : V->users()) {
-      if (Instruction *I = dyn_cast<Instruction>(U)) {
+      if (GetElementPtrInst *I = dyn_cast<GetElementPtrInst>(U)) {
         DxilMDHelper::MarkNonUniform(I);
         DxilMDHelper::MarkNonUniform(I);
       }
       }
     }
     }

+ 0 - 1
lib/HLSL/DxilValidation.cpp

@@ -2375,7 +2375,6 @@ static void ValidateInstructionMetadata(Instruction *I,
       }
       }
     } else if (MD.first == ValCtx.kDxilPreciseMDKind) {
     } else if (MD.first == ValCtx.kDxilPreciseMDKind) {
       // Validated in IsPrecise.
       // Validated in IsPrecise.
-    } else if (MD.first == ValCtx.kDxilNonUniformMDKind) {
     } else if (MD.first == ValCtx.kLLVMLoopMDKind) {
     } else if (MD.first == ValCtx.kLLVMLoopMDKind) {
       ValidateLoopMetadata(MD.second, ValCtx);
       ValidateLoopMetadata(MD.second, ValCtx);
     } else if (MD.first == LLVMContext::MD_tbaa) {
     } else if (MD.first == LLVMContext::MD_tbaa) {