diff options
Diffstat (limited to 'test/Transforms/GlobalOpt/storepointer-compare.llx')
-rw-r--r-- | test/Transforms/GlobalOpt/storepointer-compare.llx | 29 |
1 files changed, 29 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..d85d97d --- /dev/null +++ b/test/Transforms/GlobalOpt/storepointer-compare.llx @@ -0,0 +1,29 @@ +; RUN: llvm-upgrade < %s | llvm-as | opt -globalopt | llvm-dis | \ +; RUN: 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 +} |