From e3f27e66e5738488f4a6ff260daeca26facb4d26 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 10 Oct 2004 23:12:33 +0000 Subject: 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 --- test/Transforms/GlobalOpt/storepointer-compare.llx | 28 ++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 test/Transforms/GlobalOpt/storepointer-compare.llx 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 +} -- cgit v1.1