[opaque pointer type] Avoid using PointerType::getElementType for a few cases of...
authorDavid Blaikie <dblaikie@gmail.com>
Tue, 21 Apr 2015 23:26:57 +0000 (23:26 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Tue, 21 Apr 2015 23:26:57 +0000 (23:26 +0000)
commitd62a1e966c5b4ffb4ee904c20fe3026f59d12b85
tree9d316875d20c9ec66160ff9b56188b31b7671285
parentbc4233f4372f350f5f4344d23431d895d59ae253
[opaque pointer type] Avoid using PointerType::getElementType for a few cases of CallInst

Calls to llvm::Value::mutateType are becoming extra-sensitive now that
instructions have extra type information that will not be derived from
operands or result type (alloca, gep, load, call/invoke, etc... ). The
special-handling for mutateType will get more complicated as this work
continues - it might be worth making mutateType virtual & pushing the
complexity down into the classes that need special handling. But with
only two significant uses of mutateType (vectorization and linking) this
seems OK for now.

Totally open to ideas/suggestions/improvements, of course.

With this, and a bunch of exceptions, we can roundtrip an indirect call
site through bitcode and IR. (a direct call site is actually trickier...
I haven't figured out how to deal with the IR deserializer's lazy
construction of Function/GlobalVariable decl's based on the type of the
entity which means looking through the "pointer to T" type referring to
the global)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235458 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/IR/CallSite.h
include/llvm/IR/Instructions.h
lib/AsmParser/LLParser.cpp
lib/Bitcode/Reader/BitcodeReader.cpp
lib/IR/Instructions.cpp
lib/IR/Verifier.cpp
lib/Transforms/Utils/ValueMapper.cpp
lib/Transforms/Vectorize/BBVectorize.cpp