[MergeFunctions] Don't blindly RAUW a GlobalValue with a ConstantExpr.
authorwhitequark <whitequark@whitequark.org>
Thu, 19 Oct 2017 04:47:48 +0000 (04:47 +0000)
committerwhitequark <whitequark@whitequark.org>
Thu, 19 Oct 2017 04:47:48 +0000 (04:47 +0000)
commita99ecf1bbb554df19b68805d2df8caa80ae0818d
tree2e2388d59e11a28afc9acf0d9f1b1482a9f321a1
parentdeaba3862fc76fe82fede028c7046136b94031f7
[MergeFunctions] Don't blindly RAUW a GlobalValue with a ConstantExpr.

MergeFunctions uses (through FunctionComparator) a map of GlobalValues
to identifiers because it needs to compare functions and globals
do not have an inherent total order. Thus, FunctionComparator
(through GlobalNumberState) has a ValueMap<GlobalValue *>.

r315852 added a RAUW on globals that may have been previously
encountered by the FunctionComparator, which would replace
a GlobalValue * key with a ConstantExpr *, which is illegal.

This commit adjusts that code path to remove the function being
replaced from the ValueMap as well.

llvm-svn: 316145
llvm/include/llvm/Transforms/Utils/FunctionComparator.h
llvm/lib/Transforms/IPO/MergeFunctions.cpp