Sean is on paternity leave, so he'll probably be slow to answer this sort of 
ping for a while.

Value::replaceAllUsesWith does things very differently from this little 
function Sean wrote.  From what I can tell, it looks like it is the right thing 
to use, but that function has been in llvm for a while so I don't know why Sean 
didn't originally use it here.  Do you know what about Windows in particular 
caused Sean's version to fail, since it doesn't look like it causes any trouble 
on other platforms?

If one of the llvm folks reading this list knows more about the IR Value class 
and has an opinion about the use of replaceAllUsesWith as opposed to the 
simpler operation Sean did, I'd love to hear that too...

Jim


> On Jan 6, 2015, at 3:45 PM, Zachary Turner <[email protected]> wrote:
> 
> +Sean Callanan​ 
> 
> I couldn't include you on the Phabricator issue Sean, so I'm CC'ing you 
> directly.  PTAL
> 
> On Tue Jan 06 2015 at 3:45:04 PM Zachary Turner <[email protected]> wrote:
> MS ABI guard variables end with @4IA, so this patch teaches the interpreter 
> about that.  Additionally, there was an issue with TurnGuardLoadIntoZero 
> which was causing some guard uses of a variable to be missed.  This fixes 
> that by calling Instruction::replaceAllUsesWith() instead of trying to 
> replicate that function.
> 
> This fixes between 8 and 10 tests on Windows, and in particular fixes 
> evaluation of C / C++ local variables.
> 
> http://reviews.llvm.org/D6859
> 
> Files:
>   source/Expression/IRForTarget.cpp
> 
> Index: source/Expression/IRForTarget.cpp
> ===================================================================
> --- source/Expression/IRForTarget.cpp
> +++ source/Expression/IRForTarget.cpp
> @@ -2043,8 +2043,12 @@
> 
>      GlobalVariable *GV = dyn_cast<GlobalVariable>(Old);
> 
> -    if (!GV || !GV->hasName() || !GV->getName().startswith("_ZGV"))
> +    if (!GV || !GV->hasName() ||
> +        (!GV->getName().startswith("_ZGV") && // Itanium ABI guard variable
> +         !GV->getName().endswith("@4IA")))    // Microsoft ABI guard variable
> +    {
>          return false;
> +    }
> 
>      return true;
>  }
> @@ -2052,20 +2056,8 @@
>  void
>  IRForTarget::TurnGuardLoadIntoZero(llvm::Instruction* guard_load)
>  {
> -    Constant* zero(ConstantInt::get(Type::getInt8Ty(m_module->getContext()), 
> 0, true));
> -
> -    for (llvm::User *u : guard_load->users())
> -    {
> -        if (isa<Constant>(u))
> -        {
> -            // do nothing for the moment
> -        }
> -        else
> -        {
> -            u->replaceUsesOfWith(guard_load, zero);
> -        }
> -    }
> -
> +    Constant *zero(Constant::getNullValue(guard_load->getType()));
> +    guard_load->replaceAllUsesWith(zero);
>      guard_load->eraseFromParent();
>  }
> 
> EMAIL PREFERENCES
>   http://reviews.llvm.org/settings/panel/emailpreferences/
> _______________________________________________
> lldb-commits mailing list
> [email protected]
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits


_______________________________________________
lldb-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits

Reply via email to