diff options
Diffstat (limited to 'llvm/test/Transforms/LevelRaise/2002-07-16-MissedRaise.ll')
-rw-r--r-- | llvm/test/Transforms/LevelRaise/2002-07-16-MissedRaise.ll | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/llvm/test/Transforms/LevelRaise/2002-07-16-MissedRaise.ll b/llvm/test/Transforms/LevelRaise/2002-07-16-MissedRaise.ll new file mode 100644 index 00000000000..456b09fb6ad --- /dev/null +++ b/llvm/test/Transforms/LevelRaise/2002-07-16-MissedRaise.ll @@ -0,0 +1,22 @@ +; This case fails raise because the store requires that it's argument is of a +; particular type, but the gep is unable to propogate types backwards through +; it, because it doesn't know what type to ask it's operand to be. +; +; This could be fixed by making all stores add themselves to a list, and check +; their arguments are consistent AFTER all other values are propogated. +; XFAIL: * +; RUN: llvm-upgrade < %s | llvm-as | opt -raise | llvm-dis | notcast + + %Tree = type %struct.tree* + %struct.tree = type { int, double, double, %Tree, %Tree, %Tree, %Tree } + +void %reverse(%Tree %t) { +bb0: ;[#uses=0] + %cast219 = cast %Tree %t to sbyte*** ; <sbyte***> [#uses=2] + %reg2221 = getelementptr sbyte*** %cast219, long 6 ; <sbyte***> [#uses=1] + %reg108 = load sbyte*** %reg2221 ; <sbyte**> [#uses=2] + %reg247 = getelementptr sbyte*** %cast219, long 5 ; <sbyte***> [#uses=1] + store sbyte** %reg108, sbyte*** %reg247 + ret void +} + |