Pārlūkot izejas kodu

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

Adam Yang 4 gadi atpakaļ
vecāks
revīzija
91df0242a3
1 mainītis faili ar 6 papildinājumiem un 4 dzēšanām
  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()) {
   else if (Instruction::Call == I->getOpcode()) {
     Module *M = I->getModule();
     Module *M = I->getModule();
     CallInst *CI = cast<CallInst>(I);
     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());
       llvm::Type *i1Ty = llvm::Type::getInt1Ty(M->getContext());
       Simplified = llvm::ConstantInt::get(i1Ty, 1);
       Simplified = llvm::ConstantInt::get(i1Ty, 1);
     }
     }
@@ -240,8 +242,8 @@ Value *DxilValueCache::SimplifyAndCacheResult(Instruction *I, DominatorTree *DT)
         Args.push_back(TryGetCachedValue(CI->getArgOperand(i)));
         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 {
       else {
         Simplified = llvm::SimplifyCall(Callee, Args, DL, nullptr, DT);
         Simplified = llvm::SimplifyCall(Callee, Args, DL, nullptr, DT);