diff options
author | Dan Gohman <gohman@apple.com> | 2009-09-15 15:58:07 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2009-09-15 15:58:07 +0000 |
commit | e3394d4a49db24aa802432e04d1054d83a052ff1 (patch) | |
tree | abbf50232c3ef5a75ab701139cf5a2241907da01 /test/Linker | |
parent | 5efe566d9e3dce1e2ca5767922849ecb6842cb2a (diff) |
When a constant's type is refined, update the constant in place
instead of cloning and RAUWing it.
- Make AbstractTypeUser a friend of Value so that it can offer
its subclasses a way to update a Value's type in place. This
is better than a universally visible setType method on Value,
and it's sufficient for the immediate need.
- Eliminate the constant "convert" functions. This eliminates a
lot of logic duplication, and fixes a complicated bug where a
constant can't actually be cloned during the type refinement
process because some of the types that its folder needs are
half-destroyed, being in the middle of refinement themselves.
- Move the getValType functions from being static overloaded
functions in Constants.cpp to be members of class template
specializations in ConstantsContext.h. This means that the
code ends up getting instantiated twice, however it also
makes it possible to eliminate all "convert" functions, so
it's not a big net code size increase. And if desired, the
duplicate instantiations could be eliminated with some
reorganization.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81861 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Linker')
-rw-r--r-- | test/Linker/partial-type-refinement-link.ll | 20 | ||||
-rw-r--r-- | test/Linker/partial-type-refinement.ll | 24 |
2 files changed, 44 insertions, 0 deletions
diff --git a/test/Linker/partial-type-refinement-link.ll b/test/Linker/partial-type-refinement-link.ll new file mode 100644 index 00000000000..320ef969f83 --- /dev/null +++ b/test/Linker/partial-type-refinement-link.ll @@ -0,0 +1,20 @@ +; This file is used by first.ll, so it doesn't actually do anything itself +; RUN: true + +%AnalysisResolver = type { i8, %PMDataManager* } +%"DenseMap<P*,AU*>" = type { i64, %"pair<P*,AU*>"*, i64, i64 } +%PMDataManager = type { i8, %PMTopLevelManager*, i8, i8, i8, i8, i8, i64, i8 } +%PMTopLevelManager = type { i8, i8, i8, i8, i8, i8, i8, i8, %"DenseMap<P*,AU*>" } +%P = type { i8, %AnalysisResolver*, i64 } +%PI = type { i8, i8, i8, i8, i8, i8, %"vector<const PI*>", %P* } +%"SmallVImpl<const PI*>" = type { i8, %PI* } +%"_V_base<const PI*>" = type { %"_V_base<const PI*>::_V_impl" } +%"_V_base<const PI*>::_V_impl" = type { %PI*, i8, i8 } +%"pair<P*,AU*>" = type opaque +%"vector<const PI*>" = type { %"_V_base<const PI*>" } + +define void @f(%"SmallVImpl<const PI*>"* %this) { +entry: + %x = getelementptr inbounds %"SmallVImpl<const PI*>"* %this, i64 0, i32 1 + ret void +} diff --git a/test/Linker/partial-type-refinement.ll b/test/Linker/partial-type-refinement.ll new file mode 100644 index 00000000000..b995f11533f --- /dev/null +++ b/test/Linker/partial-type-refinement.ll @@ -0,0 +1,24 @@ +; RUN: llvm-link %s %p/partial-type-refinement-link.ll -S | FileCheck %s +; PR4954 + +; CHECK: load %PI** getelementptr inbounds (%"RegisterP<LowerArrayLength>"* @_ZN3mvmL1XE, i64 0, i32 0, i32 6, i32 0, i32 0, i32 0), align 16 + +%AnalysisResolver = type { i8, %PMDataManager* } +%"DenseMap<P*,AU*>" = type { i64, %"pair<P*,AU*>"*, i64, i64 } +%PMDataManager = type { i8, %PMTopLevelManager*, i8, i8, i8, i8, i8, i64, i8 } +%PMTopLevelManager = type { i8, i8, i8, i8, i8, i8, i8, i8, %"DenseMap<P*,AU*>" } +%P = type { i8, %AnalysisResolver*, i64 } +%PI = type { i8, i8, i8, i8, i8, i8, %"vector<const PI*>", %P* } +%"RegisterP<LowerArrayLength>" = type { %PI } +%"_V_base<const PI*>" = type { %"_V_base<const PI*>::_V_impl" } +%"_V_base<const PI*>::_V_impl" = type { %PI*, i8, i8 } +%"pair<P*,AU*>" = type opaque +%"vector<const PI*>" = type { %"_V_base<const PI*>" } + +@_ZN3mvmL1XE = external global %"RegisterP<LowerArrayLength>" + +define void @__tcf_0() nounwind { +entry: + %0 = load %PI** getelementptr inbounds (%"RegisterP<LowerArrayLength>"* @_ZN3mvmL1XE, i64 0, i32 0, i32 6, i32 0, i32 0, i32 0), align 16 + ret void +} |