Changes in directory llvm/lib/Bytecode/Reader:
Reader.cpp updated: 1.179 -> 1.180 --- Log message: 1. Identify bytecode modules that have upgraded intrinsics by setting a boolean flag if we read a function prototype that needs upgrading. 2. Don't upgrade the CallInst instruction until after its been inserted into the basic block, and only if we know that we have seen an upgraded intrinsic function. --- Diffs of the changes: (+19 -7) Reader.cpp | 26 +++++++++++++++++++------- 1 files changed, 19 insertions(+), 7 deletions(-) Index: llvm/lib/Bytecode/Reader/Reader.cpp diff -u llvm/lib/Bytecode/Reader/Reader.cpp:1.179 llvm/lib/Bytecode/Reader/Reader.cpp:1.180 --- llvm/lib/Bytecode/Reader/Reader.cpp:1.179 Wed Jan 18 19:21:04 2006 +++ llvm/lib/Bytecode/Reader/Reader.cpp Thu Jan 19 01:02:16 2006 @@ -670,6 +670,7 @@ getValue(iType, Oprnds[0]), getValue(iType, Oprnds[1])); + bool isCall = false; switch (Opcode) { default: if (Result == 0) @@ -857,13 +858,9 @@ } Result = new CallInst(F, Params); - if (CallInst* newCI = UpgradeIntrinsicCall(cast<CallInst>(Result))) { - Result->replaceAllUsesWith(newCI); - Result->eraseFromParent(); - Result = newCI; - } if (isTailCall) cast<CallInst>(Result)->setTailCall(); if (CallingConv) cast<CallInst>(Result)->setCallingConv(CallingConv); + isCall = true; break; } case 56: // Invoke with encoded CC @@ -1034,6 +1031,15 @@ break; } // end switch(Opcode) + BB->getInstList().push_back(Result); + + if (this->hasUpgradedIntrinsicFunctions && isCall) + if (Instruction* inst = UpgradeIntrinsicCall(cast<CallInst>(Result))) { + Result->replaceAllUsesWith(inst); + Result->eraseFromParent(); + Result = inst; + } + unsigned TypeSlot; if (Result->getType() == InstTy) TypeSlot = iType; @@ -1041,7 +1047,6 @@ TypeSlot = getTypeSlot(Result->getType()); insertValue(Result, TypeSlot, FunctionValues); - BB->getInstList().push_back(Result); } /// Get a particular numbered basic block, which might be a forward reference. @@ -2026,7 +2031,14 @@ // Insert the place holder. Function *Func = new Function(FTy, GlobalValue::ExternalLinkage, "", TheModule); - UpgradeIntrinsicFunction(Func); + + // Replace with upgraded intrinsic function, if applicable. + if (Function* upgrdF = UpgradeIntrinsicFunction(Func)) { + hasUpgradedIntrinsicFunctions = true; + Func->eraseFromParent(); + Func = upgrdF; + } + insertValue(Func, (FnSignature & (~0U >> 1)) >> 5, ModuleValues); // Flags are not used yet. _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits