================ @@ -371,6 +372,52 @@ static bool runIPSCCP( StoreInst *SI = cast<StoreInst>(GV->user_back()); SI->eraseFromParent(); } + + // Try to create a debug constant expression for the glbal variable + // initializer value. + SmallVector<DIGlobalVariableExpression *, 1> GVEs; + GV->getDebugInfo(GVEs); + if (GVEs.size() == 1) { + DIBuilder DIB(M); + + // Create integer constant expression. + auto createIntExpression = [&DIB](const Constant *CV) -> DIExpression * { + const APInt &API = dyn_cast<ConstantInt>(CV)->getValue(); + std::optional<uint64_t> InitIntOpt; + if (API.isNonNegative()) + InitIntOpt = API.tryZExtValue(); + else if (auto Temp = API.trySExtValue(); Temp.has_value()) + // Transform a signed optional to unsigned optional. + InitIntOpt = (uint64_t)Temp.value(); + return DIB.createConstantValueExpression(InitIntOpt.value()); ---------------- CarlosAlbertoEnciso wrote:
Changed to use `cast`. https://github.com/llvm/llvm-project/pull/66745 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits