Переглянути джерело

Not assuming callee being a function in DVC (#3206)

Adam Yang 4 роки тому
батько
коміт
91df0242a3
1 змінених файлів з 6 додано та 4 видалено
  1. 6 4
      lib/Analysis/DxilValueCache.cpp

+ 6 - 4
lib/Analysis/DxilValueCache.cpp

@@ -229,8 +229,10 @@ Value *DxilValueCache::SimplifyAndCacheResult(Instruction *I, DominatorTree *DT)
   else if (Instruction::Call == I->getOpcode()) {
     Module *M = I->getModule();
     CallInst *CI = cast<CallInst>(I);
-    Function *Callee = CI->getCalledFunction();
-    if (Callee->getName() == hlsl::DXIL::kDxBreakFuncName) {
+    Value *Callee = CI->getCalledValue();
+    Function *CalledFunction = dyn_cast<Function>(Callee);
+
+    if (CalledFunction && CalledFunction->getName() == hlsl::DXIL::kDxBreakFuncName) {
       llvm::Type *i1Ty = llvm::Type::getInt1Ty(M->getContext());
       Simplified = llvm::ConstantInt::get(i1Ty, 1);
     }
@@ -240,8 +242,8 @@ Value *DxilValueCache::SimplifyAndCacheResult(Instruction *I, DominatorTree *DT)
         Args.push_back(TryGetCachedValue(CI->getArgOperand(i)));
       }
 
-      if (hlsl::CanSimplify(Callee)) {
-        Simplified = hlsl::SimplifyDxilCall(Callee, Args, CI, /* MayInsert */ false);
+      if (CalledFunction && hlsl::CanSimplify(CalledFunction)) {
+        Simplified = hlsl::SimplifyDxilCall(CalledFunction, Args, CI, /* MayInsert */ false);
       }
       else {
         Simplified = llvm::SimplifyCall(Callee, Args, DL, nullptr, DT);