[llvm-commits] CVS: llvm/lib/VMCore/ConstantFolding.cpp
Chris Lattner
clattner at apple.com
Thu Nov 30 17:33:45 PST 2006
Reid,
On Nov 30, 2006, at 4:25 PM, Anton Korobeynikov wrote:
> Introducing external weak linkage. Darwin codegen should be added
> later.
>
> Index: llvm/lib/VMCore/ConstantFolding.cpp
> diff -u llvm/lib/VMCore/ConstantFolding.cpp:1.100 llvm/lib/VMCore/
> ConstantFolding.cpp:1.101
> --- llvm/lib/VMCore/ConstantFolding.cpp:1.100 Sun Nov 26 19:05:10 2006
> +++ llvm/lib/VMCore/ConstantFolding.cpp Thu Nov 30 18:25:12 2006
> @@ -894,11 +894,8 @@
>
> case Instruction::PtrToInt:
> // Cast of a global address to boolean is always true.
> - if (isa<GlobalValue>(V)) {
> - if (DestTy == Type::BoolTy)
> - // FIXME: When we support 'external weak' references, we
> have to
> - // prevent this transformation from happening. This code
> will need
> - // to be updated to ignore external weak symbols when we
> support it.
> + if (const GlobalValue *GV = dyn_cast<GlobalValue>(V)) {
> + if (DestTy == Type::BoolTy && !GV->hasExternalWeakLinkage())
> return ConstantBool::getTrue();
>
This code is wrong, but it's not anton's fault. This is fallout from
the cast patch. ptrtoint(&GV, bool) is not guaranteed to be true,
even with non-extern-weak symbols, as the ptrtoint truncates, it
doesn't compare to null any more.
This code should be removed, and code should be added to
ConstantFolding.cpp in the setne(&GV, null)/seteq(&GV, null) codepath
to handle this.
Thanks,
-Chris
More information about the llvm-commits
mailing list