diff options
author | Chris Lattner <sabre@nondot.org> | 2004-10-10 23:12:33 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2004-10-10 23:12:33 +0000 |
commit | e3f27e66e5738488f4a6ff260daeca26facb4d26 (patch) | |
tree | fe2376832fcd6faf454366799a21d0fa3a2d83d8 | |
parent | f8f3305d68cdf06b23d8ad42f9fc0db466f68c73 (diff) | |
download | external_llvm-e3f27e66e5738488f4a6ff260daeca26facb4d26.zip external_llvm-e3f27e66e5738488f4a6ff260daeca26facb4d26.tar.gz external_llvm-e3f27e66e5738488f4a6ff260daeca26facb4d26.tar.bz2 |
Another testcase. We should be able to devirtualize the call even though
we cannot completely eliminate the global.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16900 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | test/Transforms/GlobalOpt/storepointer-compare.llx | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/test/Transforms/GlobalOpt/storepointer-compare.llx b/test/Transforms/GlobalOpt/storepointer-compare.llx new file mode 100644 index 0000000..a6e8ea3 --- /dev/null +++ b/test/Transforms/GlobalOpt/storepointer-compare.llx @@ -0,0 +1,28 @@ +; RUN: llvm-as < %s | opt -globalopt | llvm-dis | grep 'call void %Actual' + +; Check that a comparison does not prevent an indirect call from being made +; direct. The global will still remain, but indirect call elim is still good. + +%G = internal global void ()* null + +implementation + +internal void %Actual() { + ret void +} + +void %init() { + store void()* %Actual, void()** %G + ret void +} + +void %doit() { + %FP = load void()** %G + %CC = seteq void()* %FP, null + br bool %CC, label %isNull, label %DoCall +DoCall: + call void %FP() + ret void +isNull: + ret void +} |