diff options
author | Shih-wei Liao <sliao@google.com> | 2010-02-10 11:10:31 -0800 |
---|---|---|
committer | Shih-wei Liao <sliao@google.com> | 2010-02-10 11:10:31 -0800 |
commit | e264f62ca09a8f65c87a46d562a4d0f9ec5d457e (patch) | |
tree | 59e3d57ef656cef79afa708ae0a3daf25cd91fcf /test/Transforms/GlobalDCE | |
download | external_llvm-e264f62ca09a8f65c87a46d562a4d0f9ec5d457e.zip external_llvm-e264f62ca09a8f65c87a46d562a4d0f9ec5d457e.tar.gz external_llvm-e264f62ca09a8f65c87a46d562a4d0f9ec5d457e.tar.bz2 |
Check in LLVM r95781.
Diffstat (limited to 'test/Transforms/GlobalDCE')
-rw-r--r-- | test/Transforms/GlobalDCE/2002-07-17-CastRef.ll | 11 | ||||
-rw-r--r-- | test/Transforms/GlobalDCE/2002-07-17-ConstantRef.ll | 13 | ||||
-rw-r--r-- | test/Transforms/GlobalDCE/2002-08-17-FunctionDGE.ll | 17 | ||||
-rw-r--r-- | test/Transforms/GlobalDCE/2002-08-17-WorkListTest.ll | 12 | ||||
-rw-r--r-- | test/Transforms/GlobalDCE/2002-09-12-Redeletion.ll | 11 | ||||
-rw-r--r-- | test/Transforms/GlobalDCE/2003-07-01-SelfReference.ll | 11 | ||||
-rw-r--r-- | test/Transforms/GlobalDCE/2003-10-09-PreserveWeakGlobals.ll | 6 | ||||
-rw-r--r-- | test/Transforms/GlobalDCE/2009-01-05-DeadAliases.ll | 8 | ||||
-rw-r--r-- | test/Transforms/GlobalDCE/2009-02-17-AliasUsesAliasee.ll | 4 | ||||
-rw-r--r-- | test/Transforms/GlobalDCE/2009-09-03-MDNode.ll | 264 | ||||
-rw-r--r-- | test/Transforms/GlobalDCE/basicvariabletest.ll | 5 | ||||
-rw-r--r-- | test/Transforms/GlobalDCE/dg.exp | 3 | ||||
-rw-r--r-- | test/Transforms/GlobalDCE/externally_available.ll | 10 |
13 files changed, 375 insertions, 0 deletions
diff --git a/test/Transforms/GlobalDCE/2002-07-17-CastRef.ll b/test/Transforms/GlobalDCE/2002-07-17-CastRef.ll new file mode 100644 index 0000000..37356f2 --- /dev/null +++ b/test/Transforms/GlobalDCE/2002-07-17-CastRef.ll @@ -0,0 +1,11 @@ +; RUN: opt < %s -globaldce +; +define internal void @func() { + ret void +} + +define void @main() { + %X = bitcast void ()* @func to i32* ; <i32*> [#uses=0] + ret void +} + diff --git a/test/Transforms/GlobalDCE/2002-07-17-ConstantRef.ll b/test/Transforms/GlobalDCE/2002-07-17-ConstantRef.ll new file mode 100644 index 0000000..740f720 --- /dev/null +++ b/test/Transforms/GlobalDCE/2002-07-17-ConstantRef.ll @@ -0,0 +1,13 @@ +; RUN: opt < %s -globaldce +; + +@X = global void ()* @func ; <void ()**> [#uses=0] + +; Not dead, can be reachable via X +define internal void @func() { + ret void +} + +define void @main() { + ret void +} diff --git a/test/Transforms/GlobalDCE/2002-08-17-FunctionDGE.ll b/test/Transforms/GlobalDCE/2002-08-17-FunctionDGE.ll new file mode 100644 index 0000000..766c227 --- /dev/null +++ b/test/Transforms/GlobalDCE/2002-08-17-FunctionDGE.ll @@ -0,0 +1,17 @@ +; Make sure that functions are removed successfully if they are referred to by +; a global that is dead. Make sure any globals they refer to die as well. + +; RUN: opt < %s -globaldce -S | not grep foo + +;; Unused, kills %foo +@b = internal global i32 ()* @foo ; <i32 ()**> [#uses=0] + +;; Should die when function %foo is killed +@foo.upgrd.1 = internal global i32 7 ; <i32*> [#uses=1] + + ;; dies when %b dies. +define internal i32 @foo() { + %ret = load i32* @foo.upgrd.1 ; <i32> [#uses=1] + ret i32 %ret +} + diff --git a/test/Transforms/GlobalDCE/2002-08-17-WorkListTest.ll b/test/Transforms/GlobalDCE/2002-08-17-WorkListTest.ll new file mode 100644 index 0000000..42fcb1e --- /dev/null +++ b/test/Transforms/GlobalDCE/2002-08-17-WorkListTest.ll @@ -0,0 +1,12 @@ +; This testcase tests that a worklist is being used, and that globals can be +; removed if they are the subject of a constexpr and ConstantPointerRef + +; RUN: opt < %s -globaldce -S | not grep global + +@t0 = internal global [4 x i8] c"foo\00" ; <[4 x i8]*> [#uses=1] +@t1 = internal global [4 x i8] c"bar\00" ; <[4 x i8]*> [#uses=1] +@s1 = internal global [1 x i8*] [ i8* getelementptr ([4 x i8]* @t0, i32 0, i32 0) ] ; <[1 x i8*]*> [#uses=0] +@s2 = internal global [1 x i8*] [ i8* getelementptr ([4 x i8]* @t1, i64 0, i64 0) ] ; <[1 x i8*]*> [#uses=0] +@b = internal global i32* @a ; <i32**> [#uses=0] +@a = internal global i32 7 ; <i32*> [#uses=1] + diff --git a/test/Transforms/GlobalDCE/2002-09-12-Redeletion.ll b/test/Transforms/GlobalDCE/2002-09-12-Redeletion.ll new file mode 100644 index 0000000..6221fa3 --- /dev/null +++ b/test/Transforms/GlobalDCE/2002-09-12-Redeletion.ll @@ -0,0 +1,11 @@ +; RUN: opt < %s -globaldce + +;; Should die when function %foo is killed +@foo.upgrd.1 = internal global i32 7 ; <i32*> [#uses=3] +@bar = internal global [2 x { i32*, i32 }] [ { i32*, i32 } { i32* @foo.upgrd.1, i32 7 }, { i32*, i32 } { i32* @foo.upgrd.1, i32 1 } ] ; <[2 x { i32*, i32 }]*> [#uses=0] + +define internal i32 @foo() { + %ret = load i32* @foo.upgrd.1 ; <i32> [#uses=1] + ret i32 %ret +} + diff --git a/test/Transforms/GlobalDCE/2003-07-01-SelfReference.ll b/test/Transforms/GlobalDCE/2003-07-01-SelfReference.ll new file mode 100644 index 0000000..738ec43 --- /dev/null +++ b/test/Transforms/GlobalDCE/2003-07-01-SelfReference.ll @@ -0,0 +1,11 @@ +; distilled from 255.vortex +; RUN: opt < %s -globaldce -S | not grep testfunc + +declare i1 ()* @getfunc() + +define internal i1 @testfunc() { + %F = call i1 ()* ()* @getfunc( ) ; <i1 ()*> [#uses=1] + %c = icmp eq i1 ()* %F, @testfunc ; <i1> [#uses=1] + ret i1 %c +} + diff --git a/test/Transforms/GlobalDCE/2003-10-09-PreserveWeakGlobals.ll b/test/Transforms/GlobalDCE/2003-10-09-PreserveWeakGlobals.ll new file mode 100644 index 0000000..5b2c97f --- /dev/null +++ b/test/Transforms/GlobalDCE/2003-10-09-PreserveWeakGlobals.ll @@ -0,0 +1,6 @@ +; Weak variables should be preserved by global DCE! + +; RUN: opt < %s -globaldce -S | grep @A + + +@A = weak global i32 54 diff --git a/test/Transforms/GlobalDCE/2009-01-05-DeadAliases.ll b/test/Transforms/GlobalDCE/2009-01-05-DeadAliases.ll new file mode 100644 index 0000000..6658cee --- /dev/null +++ b/test/Transforms/GlobalDCE/2009-01-05-DeadAliases.ll @@ -0,0 +1,8 @@ +; RUN: opt < %s -globaldce -S | not grep @D +; RUN: opt < %s -globaldce -S | grep @L | count 3 + +@A = global i32 0 +@D = alias internal i32* @A +@L1 = alias i32* @A +@L2 = alias internal i32* @L1 +@L3 = alias i32* @L2 diff --git a/test/Transforms/GlobalDCE/2009-02-17-AliasUsesAliasee.ll b/test/Transforms/GlobalDCE/2009-02-17-AliasUsesAliasee.ll new file mode 100644 index 0000000..68933c6 --- /dev/null +++ b/test/Transforms/GlobalDCE/2009-02-17-AliasUsesAliasee.ll @@ -0,0 +1,4 @@ +; RUN: opt < %s -globaldce + +@A = alias internal void ()* @F +define internal void @F() { ret void } diff --git a/test/Transforms/GlobalDCE/2009-09-03-MDNode.ll b/test/Transforms/GlobalDCE/2009-09-03-MDNode.ll new file mode 100644 index 0000000..29864f8 --- /dev/null +++ b/test/Transforms/GlobalDCE/2009-09-03-MDNode.ll @@ -0,0 +1,264 @@ +; RUN: opt < %s -globaldce | llc -O0 -o /dev/null + +%struct..0__pthread_mutex_s = type { i32, i32, i32, i32, i32, i32, %struct.__pthread_list_t } +%"struct.__gnu_cxx::_ConvertibleConcept<unsigned int,unsigned int>" = type { i32 } +%struct.__pthread_list_t = type { %struct.__pthread_list_t*, %struct.__pthread_list_t* } +%struct.pthread_attr_t = type { i64, [48 x i8] } +%struct.pthread_mutex_t = type { %struct..0__pthread_mutex_s } + +@_ZL20__gthrw_pthread_oncePiPFvvE = alias weak i32 (i32*, void ()*)* @pthread_once ; <i32 (i32*, void ()*)*> [#uses=0] +@_ZL27__gthrw_pthread_getspecificj = alias weak i8* (i32)* @pthread_getspecific ; <i8* (i32)*> [#uses=0] +@_ZL27__gthrw_pthread_setspecificjPKv = alias weak i32 (i32, i8*)* @pthread_setspecific ; <i32 (i32, i8*)*> [#uses=0] +@_ZL22__gthrw_pthread_createPmPK14pthread_attr_tPFPvS3_ES3_ = alias weak i32 (i64*, %struct.pthread_attr_t*, i8* (i8*)*, i8*)* @pthread_create ; <i32 (i64*, %struct.pthread_attr_t*, i8* (i8*)*, i8*)*> [#uses=0] +@_ZL22__gthrw_pthread_cancelm = alias weak i32 (i64)* @pthread_cancel ; <i32 (i64)*> [#uses=0] +@_ZL26__gthrw_pthread_mutex_lockP15pthread_mutex_t = alias weak i32 (%struct.pthread_mutex_t*)* @pthread_mutex_lock ; <i32 (%struct.pthread_mutex_t*)*> [#uses=0] +@_ZL29__gthrw_pthread_mutex_trylockP15pthread_mutex_t = alias weak i32 (%struct.pthread_mutex_t*)* @pthread_mutex_trylock ; <i32 (%struct.pthread_mutex_t*)*> [#uses=0] +@_ZL28__gthrw_pthread_mutex_unlockP15pthread_mutex_t = alias weak i32 (%struct.pthread_mutex_t*)* @pthread_mutex_unlock ; <i32 (%struct.pthread_mutex_t*)*> [#uses=0] +@_ZL26__gthrw_pthread_mutex_initP15pthread_mutex_tPK19pthread_mutexattr_t = alias weak i32 (%struct.pthread_mutex_t*, %"struct.__gnu_cxx::_ConvertibleConcept<unsigned int,unsigned int>"*)* @pthread_mutex_init ; <i32 (%struct.pthread_mutex_t*, %"struct.__gnu_cxx::_ConvertibleConcept<unsigned int,unsigned int>"*)*> [#uses=0] +@_ZL26__gthrw_pthread_key_createPjPFvPvE = alias weak i32 (i32*, void (i8*)*)* @pthread_key_create ; <i32 (i32*, void (i8*)*)*> [#uses=0] +@_ZL26__gthrw_pthread_key_deletej = alias weak i32 (i32)* @pthread_key_delete ; <i32 (i32)*> [#uses=0] +@_ZL30__gthrw_pthread_mutexattr_initP19pthread_mutexattr_t = alias weak i32 (%"struct.__gnu_cxx::_ConvertibleConcept<unsigned int,unsigned int>"*)* @pthread_mutexattr_init ; <i32 (%"struct.__gnu_cxx::_ConvertibleConcept<unsigned int,unsigned int>"*)*> [#uses=0] +@_ZL33__gthrw_pthread_mutexattr_settypeP19pthread_mutexattr_ti = alias weak i32 (%"struct.__gnu_cxx::_ConvertibleConcept<unsigned int,unsigned int>"*, i32)* @pthread_mutexattr_settype ; <i32 (%"struct.__gnu_cxx::_ConvertibleConcept<unsigned int,unsigned int>"*, i32)*> [#uses=0] +@_ZL33__gthrw_pthread_mutexattr_destroyP19pthread_mutexattr_t = alias weak i32 (%"struct.__gnu_cxx::_ConvertibleConcept<unsigned int,unsigned int>"*)* @pthread_mutexattr_destroy ; <i32 (%"struct.__gnu_cxx::_ConvertibleConcept<unsigned int,unsigned int>"*)*> [#uses=0] + +define weak void @_ZN9__gnu_cxx26__aux_require_boolean_exprIbEEvRKT_(i8* %__t) { +entry: + tail call void @llvm.dbg.func.start(metadata !0) + tail call void @llvm.dbg.stoppoint(i32 240, i32 0, metadata !2) + tail call void @llvm.dbg.region.end(metadata !0) + ret void +} + +define weak void @_ZN9__gnu_cxx19__function_requiresINS_19_ConvertibleConceptIjjEEEEvv() { +entry: + tail call void @llvm.dbg.func.start(metadata !8) + tail call void @llvm.dbg.stoppoint(i32 63, i32 0, metadata !2) + tail call void @llvm.dbg.region.end(metadata !8) + ret void +} + +define weak void @_ZN9__gnu_cxx19__function_requiresINS_21_InputIteratorConceptIPcEEEEvv() { +entry: + tail call void @llvm.dbg.func.start(metadata !11) + tail call void @llvm.dbg.stoppoint(i32 63, i32 0, metadata !2) + tail call void @llvm.dbg.region.end(metadata !11) + ret void +} + +define weak void @_ZN9__gnu_cxx19__function_requiresINS_21_InputIteratorConceptIPKcEEEEvv() { +entry: + tail call void @llvm.dbg.func.start(metadata !12) + tail call void @llvm.dbg.stoppoint(i32 63, i32 0, metadata !2) + tail call void @llvm.dbg.region.end(metadata !12) + ret void +} + +define weak void @_ZN9__gnu_cxx19__function_requiresINS_21_InputIteratorConceptIPwEEEEvv() { +entry: + tail call void @llvm.dbg.func.start(metadata !13) + tail call void @llvm.dbg.stoppoint(i32 63, i32 0, metadata !2) + tail call void @llvm.dbg.region.end(metadata !13) + ret void +} + +define weak void @_ZN9__gnu_cxx19__function_requiresINS_21_InputIteratorConceptIPKwEEEEvv() { +entry: + tail call void @llvm.dbg.func.start(metadata !14) + tail call void @llvm.dbg.stoppoint(i32 63, i32 0, metadata !2) + tail call void @llvm.dbg.region.end(metadata !14) + ret void +} + +define weak void @_ZN9__gnu_cxx19__function_requiresINS_26_LessThanComparableConceptIPwEEEEvv() { +entry: + tail call void @llvm.dbg.func.start(metadata !15) + tail call void @llvm.dbg.stoppoint(i32 63, i32 0, metadata !2) + tail call void @llvm.dbg.region.end(metadata !15) + ret void +} + +define weak void @_ZN9__gnu_cxx19__function_requiresINS_26_LessThanComparableConceptIPcEEEEvv() { +entry: + tail call void @llvm.dbg.func.start(metadata !16) + tail call void @llvm.dbg.stoppoint(i32 63, i32 0, metadata !2) + tail call void @llvm.dbg.region.end(metadata !16) + ret void +} + +define weak void @_ZN9__gnu_cxx19__function_requiresINS_26_LessThanComparableConceptIiEEEEvv() { +entry: + tail call void @llvm.dbg.func.start(metadata !17) + tail call void @llvm.dbg.stoppoint(i32 63, i32 0, metadata !2) + tail call void @llvm.dbg.region.end(metadata !17) + ret void +} + +define weak void @_ZN9__gnu_cxx19__function_requiresINS_26_LessThanComparableConceptIlEEEEvv() { +entry: + tail call void @llvm.dbg.func.start(metadata !18) + tail call void @llvm.dbg.stoppoint(i32 63, i32 0, metadata !2) + tail call void @llvm.dbg.region.end(metadata !18) + ret void +} + +define weak void @_ZN9__gnu_cxx19__function_requiresINS_26_LessThanComparableConceptIxEEEEvv() { +entry: + tail call void @llvm.dbg.func.start(metadata !19) + tail call void @llvm.dbg.stoppoint(i32 63, i32 0, metadata !2) + tail call void @llvm.dbg.region.end(metadata !19) + ret void +} + +define weak void @_ZN9__gnu_cxx19__function_requiresINS_26_LessThanComparableConceptIjEEEEvv() { +entry: + tail call void @llvm.dbg.func.start(metadata !20) + tail call void @llvm.dbg.stoppoint(i32 63, i32 0, metadata !2) + tail call void @llvm.dbg.region.end(metadata !20) + ret void +} + +define weak void @_ZN9__gnu_cxx19__function_requiresINS_22_OutputIteratorConceptISt19ostreambuf_iteratorIcSt11char_traitsIcEEcEEEEvv() { +entry: + tail call void @llvm.dbg.func.start(metadata !21) + tail call void @llvm.dbg.stoppoint(i32 63, i32 0, metadata !2) + tail call void @llvm.dbg.region.end(metadata !21) + ret void +} + +define weak void @_ZN9__gnu_cxx19__function_requiresINS_22_OutputIteratorConceptISt19ostreambuf_iteratorIwSt11char_traitsIwEEwEEEEvv() { +entry: + tail call void @llvm.dbg.func.start(metadata !22) + tail call void @llvm.dbg.stoppoint(i32 63, i32 0, metadata !2) + tail call void @llvm.dbg.region.end(metadata !22) + ret void +} + +define weak void @_ZN9__gnu_cxx19__function_requiresINS_28_RandomAccessIteratorConceptIPcEEEEvv() { +entry: + tail call void @llvm.dbg.func.start(metadata !23) + tail call void @llvm.dbg.stoppoint(i32 63, i32 0, metadata !2) + tail call void @llvm.dbg.region.end(metadata !23) + ret void +} + +define weak void @_ZN9__gnu_cxx19__function_requiresINS_28_RandomAccessIteratorConceptIPKcEEEEvv() { +entry: + tail call void @llvm.dbg.func.start(metadata !24) + tail call void @llvm.dbg.stoppoint(i32 63, i32 0, metadata !2) + tail call void @llvm.dbg.region.end(metadata !24) + ret void +} + +define weak void @_ZN9__gnu_cxx19__function_requiresINS_28_RandomAccessIteratorConceptINS_17__normal_iteratorIPKcSsEEEEEEvv() { +entry: + tail call void @llvm.dbg.func.start(metadata !25) + tail call void @llvm.dbg.stoppoint(i32 63, i32 0, metadata !2) + tail call void @llvm.dbg.region.end(metadata !25) + ret void +} + +define weak void @_ZN9__gnu_cxx19__function_requiresINS_28_RandomAccessIteratorConceptINS_17__normal_iteratorIPcSsEEEEEEvv() { +entry: + tail call void @llvm.dbg.func.start(metadata !26) + tail call void @llvm.dbg.stoppoint(i32 63, i32 0, metadata !2) + tail call void @llvm.dbg.region.end(metadata !26) + ret void +} + +define weak void @_ZN9__gnu_cxx19__function_requiresINS_28_RandomAccessIteratorConceptINS_17__normal_iteratorIPKwSbIwSt11char_traitsIwESaIwEEEEEEEEvv() { +entry: + tail call void @llvm.dbg.func.start(metadata !27) + tail call void @llvm.dbg.stoppoint(i32 63, i32 0, metadata !2) + tail call void @llvm.dbg.region.end(metadata !27) + ret void +} + +define weak void @_ZN9__gnu_cxx19__function_requiresINS_28_RandomAccessIteratorConceptINS_17__normal_iteratorIPwSbIwSt11char_traitsIwESaIwEEEEEEEEvv() { +entry: + tail call void @llvm.dbg.func.start(metadata !28) + tail call void @llvm.dbg.stoppoint(i32 63, i32 0, metadata !2) + tail call void @llvm.dbg.region.end(metadata !28) + ret void +} + +define weak void @_ZN9__gnu_cxx19__function_requiresINS_28_RandomAccessIteratorConceptIPwEEEEvv() { +entry: + tail call void @llvm.dbg.func.start(metadata !29) + tail call void @llvm.dbg.stoppoint(i32 63, i32 0, metadata !2) + tail call void @llvm.dbg.region.end(metadata !29) + ret void +} + +define weak void @_ZN9__gnu_cxx19__function_requiresINS_28_RandomAccessIteratorConceptIPKwEEEEvv() { +entry: + tail call void @llvm.dbg.func.start(metadata !30) + tail call void @llvm.dbg.stoppoint(i32 63, i32 0, metadata !2) + tail call void @llvm.dbg.region.end(metadata !30) + ret void +} + +declare void @llvm.dbg.func.start(metadata) nounwind readnone + +declare void @llvm.dbg.stoppoint(i32, i32, metadata) nounwind readnone + +declare void @llvm.dbg.region.end(metadata) nounwind readnone + +declare extern_weak i32 @pthread_once(i32*, void ()*) + +declare extern_weak i8* @pthread_getspecific(i32) + +declare extern_weak i32 @pthread_setspecific(i32, i8*) + +declare extern_weak i32 @pthread_create(i64*, %struct.pthread_attr_t*, i8* (i8*)*, i8*) + +declare extern_weak i32 @pthread_cancel(i64) + +declare extern_weak i32 @pthread_mutex_lock(%struct.pthread_mutex_t*) + +declare extern_weak i32 @pthread_mutex_trylock(%struct.pthread_mutex_t*) + +declare extern_weak i32 @pthread_mutex_unlock(%struct.pthread_mutex_t*) + +declare extern_weak i32 @pthread_mutex_init(%struct.pthread_mutex_t*, %"struct.__gnu_cxx::_ConvertibleConcept<unsigned int,unsigned int>"*) + +declare extern_weak i32 @pthread_key_create(i32*, void (i8*)*) + +declare extern_weak i32 @pthread_key_delete(i32) + +declare extern_weak i32 @pthread_mutexattr_init(%"struct.__gnu_cxx::_ConvertibleConcept<unsigned int,unsigned int>"*) + +declare extern_weak i32 @pthread_mutexattr_settype(%"struct.__gnu_cxx::_ConvertibleConcept<unsigned int,unsigned int>"*, i32) + +declare extern_weak i32 @pthread_mutexattr_destroy(%"struct.__gnu_cxx::_ConvertibleConcept<unsigned int,unsigned int>"*) + +!0 = metadata !{i32 458798, i32 0, metadata !1, metadata !"__aux_require_boolean_expr<bool>", metadata !"__aux_require_boolean_expr<bool>", metadata !"_ZN9__gnu_cxx26__aux_require_boolean_exprIbEEvRKT_", metadata !2, i32 239, metadata !3, i1 false, i1 true} +!1 = metadata !{i32 458769, i32 0, i32 4, metadata !"concept-inst.cc", metadata !"/home/buildbot/buildslave/llvm-x86_64-linux-selfhost/llvm-gcc.obj/x86_64-unknown-linux-gnu/libstdc++-v3/src/../../../../llvm-gcc.src/libstdc++-v3/src", metadata !"4.2.1 (Based on Apple Inc. build 5649) (LLVM build)", i1 true, i1 true, metadata !"", i32 0} +!2 = metadata !{i32 458769, i32 0, i32 4, metadata !"boost_concept_check.h", metadata !"/home/buildbot/buildslave/llvm-x86_64-linux-selfhost/llvm-gcc.obj/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits", metadata !"4.2.1 (Based on Apple Inc. build 5649) (LLVM build)", i1 false, i1 true, metadata !"", i32 0} +!3 = metadata !{i32 458773, metadata !1, metadata !"", metadata !1, i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !4, i32 0} +!4 = metadata !{null, metadata !5} +!5 = metadata !{i32 458768, metadata !1, metadata !"", metadata !1, i32 0, i64 64, i64 64, i64 0, i32 0, metadata !6} +!6 = metadata !{i32 458790, metadata !1, metadata !"", metadata !1, i32 0, i64 8, i64 8, i64 0, i32 0, metadata !7} +!7 = metadata !{i32 458788, metadata !1, metadata !"bool", metadata !1, i32 0, i64 8, i64 8, i64 0, i32 0, i32 2} +!8 = metadata !{i32 458798, i32 0, metadata !1, metadata !"__function_requires<__gnu_cxx::_ConvertibleConcept<unsigned int, unsigned int> >", metadata !"__function_requires<__gnu_cxx::_ConvertibleConcept<unsigned int, unsigned int> >", metadata !"_ZN9__gnu_cxx19__function_requiresINS_19_ConvertibleConceptIjjEEEEvv", metadata !2, i32 61, metadata !9, i1 false, i1 true} +!9 = metadata !{i32 458773, metadata !1, metadata !"", metadata !1, i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !10, i32 0} +!10 = metadata !{null} +!11 = metadata !{i32 458798, i32 0, metadata !1, metadata !"__function_requires<__gnu_cxx::_InputIteratorConcept<char*> >", metadata !"__function_requires<__gnu_cxx::_InputIteratorConcept<char*> >", metadata !"_ZN9__gnu_cxx19__function_requiresINS_21_InputIteratorConceptIPcEEEEvv", metadata !2, i32 61, metadata !9, i1 false, i1 true} +!12 = metadata !{i32 458798, i32 0, metadata !1, metadata !"__function_requires<__gnu_cxx::_InputIteratorConcept<const char*> >", metadata !"__function_requires<__gnu_cxx::_InputIteratorConcept<const char*> >", metadata !"_ZN9__gnu_cxx19__function_requiresINS_21_InputIteratorConceptIPKcEEEEvv", metadata !2, i32 61, metadata !9, i1 false, i1 true} +!13 = metadata !{i32 458798, i32 0, metadata !1, metadata !"__function_requires<__gnu_cxx::_InputIteratorConcept<wchar_t*> >", metadata !"__function_requires<__gnu_cxx::_InputIteratorConcept<wchar_t*> >", metadata !"_ZN9__gnu_cxx19__function_requiresINS_21_InputIteratorConceptIPwEEEEvv", metadata !2, i32 61, metadata !9, i1 false, i1 true} +!14 = metadata !{i32 458798, i32 0, metadata !1, metadata !"__function_requires<__gnu_cxx::_InputIteratorConcept<const wchar_t*> >", metadata !"__function_requires<__gnu_cxx::_InputIteratorConcept<const wchar_t*> >", metadata !"_ZN9__gnu_cxx19__function_requiresINS_21_InputIteratorConceptIPKwEEEEvv", metadata !2, i32 61, metadata !9, i1 false, i1 true} +!15 = metadata !{i32 458798, i32 0, metadata !1, metadata !"__function_requires<__gnu_cxx::_LessThanComparableConcept<wchar_t*> >", metadata !"__function_requires<__gnu_cxx::_LessThanComparableConcept<wchar_t*> >", metadata !"_ZN9__gnu_cxx19__function_requiresINS_26_LessThanComparableConceptIPwEEEEvv", metadata !2, i32 61, metadata !9, i1 false, i1 true} +!16 = metadata !{i32 458798, i32 0, metadata !1, metadata !"__function_requires<__gnu_cxx::_LessThanComparableConcept<char*> >", metadata !"__function_requires<__gnu_cxx::_LessThanComparableConcept<char*> >", metadata !"_ZN9__gnu_cxx19__function_requiresINS_26_LessThanComparableConceptIPcEEEEvv", metadata !2, i32 61, metadata !9, i1 false, i1 true} +!17 = metadata !{i32 458798, i32 0, metadata !1, metadata !"__function_requires<__gnu_cxx::_LessThanComparableConcept<int> >", metadata !"__function_requires<__gnu_cxx::_LessThanComparableConcept<int> >", metadata !"_ZN9__gnu_cxx19__function_requiresINS_26_LessThanComparableConceptIiEEEEvv", metadata !2, i32 61, metadata !9, i1 false, i1 true} +!18 = metadata !{i32 458798, i32 0, metadata !1, metadata !"__function_requires<__gnu_cxx::_LessThanComparableConcept<long int> >", metadata !"__function_requires<__gnu_cxx::_LessThanComparableConcept<long int> >", metadata !"_ZN9__gnu_cxx19__function_requiresINS_26_LessThanComparableConceptIlEEEEvv", metadata !2, i32 61, metadata !9, i1 false, i1 true} +!19 = metadata !{i32 458798, i32 0, metadata !1, metadata !"__function_requires<__gnu_cxx::_LessThanComparableConcept<long long int> >", metadata !"__function_requires<__gnu_cxx::_LessThanComparableConcept<long long int> >", metadata !"_ZN9__gnu_cxx19__function_requiresINS_26_LessThanComparableConceptIxEEEEvv", metadata !2, i32 61, metadata !9, i1 false, i1 true} +!20 = metadata !{i32 458798, i32 0, metadata !1, metadata !"__function_requires<__gnu_cxx::_LessThanComparableConcept<unsigned int> >", metadata !"__function_requires<__gnu_cxx::_LessThanComparableConcept<unsigned int> >", metadata !"_ZN9__gnu_cxx19__function_requiresINS_26_LessThanComparableConceptIjEEEEvv", metadata !2, i32 61, metadata !9, i1 false, i1 true} +!21 = metadata !{i32 458798, i32 0, metadata !1, metadata !"__function_requires<__gnu_cxx::_OutputIteratorConcept<std::ostreambuf_iterator<char, std::char_traits<char> >, char> >", metadata !"__function_requires<__gnu_cxx::_OutputIteratorConcept<std::ostreambuf_iterator<char, std::char_traits<char> >, char> >", metadata !"_ZN9__gnu_cxx19__function_requiresINS_22_OutputIteratorConceptISt19ostreambuf_iteratorIcSt11char_traitsIcEEcEEEEvv", metadata !2, i32 61, metadata !9, i1 false, i1 true} +!22 = metadata !{i32 458798, i32 0, metadata !1, metadata !"__function_requires<__gnu_cxx::_OutputIteratorConcept<std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t> >, wchar_t> >", metadata !"__function_requires<__gnu_cxx::_OutputIteratorConcept<std::ostreambuf_iterator<wchar_t, std::char_traits<wchar_t> >, wchar_t> >", metadata !"_ZN9__gnu_cxx19__function_requiresINS_22_OutputIteratorConceptISt19ostreambuf_iteratorIwSt11char_traitsIwEEwEEEEvv", metadata !2, i32 61, metadata !9, i1 false, i1 true} +!23 = metadata !{i32 458798, i32 0, metadata !1, metadata !"__function_requires<__gnu_cxx::_RandomAccessIteratorConcept<char*> >", metadata !"__function_requires<__gnu_cxx::_RandomAccessIteratorConcept<char*> >", metadata !"_ZN9__gnu_cxx19__function_requiresINS_28_RandomAccessIteratorConceptIPcEEEEvv", metadata !2, i32 61, metadata !9, i1 false, i1 true} +!24 = metadata !{i32 458798, i32 0, metadata !1, metadata !"__function_requires<__gnu_cxx::_RandomAccessIteratorConcept<const char*> >", metadata !"__function_requires<__gnu_cxx::_RandomAccessIteratorConcept<const char*> >", metadata !"_ZN9__gnu_cxx19__function_requiresINS_28_RandomAccessIteratorConceptIPKcEEEEvv", metadata !2, i32 61, metadata !9, i1 false, i1 true} +!25 = metadata !{i32 458798, i32 0, metadata !1, metadata !"__function_requires<__gnu_cxx::_RandomAccessIteratorConcept<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >", metadata !"__function_requires<__gnu_cxx::_RandomAccessIteratorConcept<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >", metadata !"_ZN9__gnu_cxx19__function_requiresINS_28_RandomAccessIteratorConceptINS_17__normal_iteratorIPKcSsEEEEEEvv", metadata !2, i32 61, metadata !9, i1 false, i1 true} +!26 = metadata !{i32 458798, i32 0, metadata !1, metadata !"__function_requires<__gnu_cxx::_RandomAccessIteratorConcept<__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >", metadata !"__function_requires<__gnu_cxx::_RandomAccessIteratorConcept<__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >", metadata !"_ZN9__gnu_cxx19__function_requiresINS_28_RandomAccessIteratorConceptINS_17__normal_iteratorIPcSsEEEEEEvv", metadata !2, i32 61, metadata !9, i1 false, i1 true} +!27 = metadata !{i32 458798, i32 0, metadata !1, metadata !"__function_requires<__gnu_cxx::_RandomAccessIteratorConcept<__gnu_cxx::__normal_iterator<const wchar_t*, std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > > > >", metadata !"__function_requires<__gnu_cxx::_RandomAccessIteratorConcept<__gnu_cxx::__normal_iterator<const wchar_t*, std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > > > >", metadata !"_ZN9__gnu_cxx19__function_requiresINS_28_RandomAccessIteratorConceptINS_17__normal_iteratorIPKwSbIwSt11char_traitsIwESaIwEEEEEEEEvv", metadata !2, i32 61, metadata !9, i1 false, i1 true} +!28 = metadata !{i32 458798, i32 0, metadata !1, metadata !"__function_requires<__gnu_cxx::_RandomAccessIteratorConcept<__gnu_cxx::__normal_iterator<wchar_t*, std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > > > >", metadata !"__function_requires<__gnu_cxx::_RandomAccessIteratorConcept<__gnu_cxx::__normal_iterator<wchar_t*, std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > > > >", metadata !"_ZN9__gnu_cxx19__function_requiresINS_28_RandomAccessIteratorConceptINS_17__normal_iteratorIPwSbIwSt11char_traitsIwESaIwEEEEEEEEvv", metadata !2, i32 61, metadata !9, i1 false, i1 true} +!29 = metadata !{i32 458798, i32 0, metadata !1, metadata !"__function_requires<__gnu_cxx::_RandomAccessIteratorConcept<wchar_t*> >", metadata !"__function_requires<__gnu_cxx::_RandomAccessIteratorConcept<wchar_t*> >", metadata !"_ZN9__gnu_cxx19__function_requiresINS_28_RandomAccessIteratorConceptIPwEEEEvv", metadata !2, i32 61, metadata !9, i1 false, i1 true} +!30 = metadata !{i32 458798, i32 0, metadata !1, metadata !"__function_requires<__gnu_cxx::_RandomAccessIteratorConcept<const wchar_t*> >", metadata !"__function_requires<__gnu_cxx::_RandomAccessIteratorConcept<const wchar_t*> >", metadata !"_ZN9__gnu_cxx19__function_requiresINS_28_RandomAccessIteratorConceptIPKwEEEEvv", metadata !2, i32 61, metadata !9, i1 false, i1 true} diff --git a/test/Transforms/GlobalDCE/basicvariabletest.ll b/test/Transforms/GlobalDCE/basicvariabletest.ll new file mode 100644 index 0000000..a97b66d --- /dev/null +++ b/test/Transforms/GlobalDCE/basicvariabletest.ll @@ -0,0 +1,5 @@ +; RUN: opt < %s -globaldce -S | not grep global + +@X = external global i32 +@Y = internal global i32 7 + diff --git a/test/Transforms/GlobalDCE/dg.exp b/test/Transforms/GlobalDCE/dg.exp new file mode 100644 index 0000000..f200589 --- /dev/null +++ b/test/Transforms/GlobalDCE/dg.exp @@ -0,0 +1,3 @@ +load_lib llvm.exp + +RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]] diff --git a/test/Transforms/GlobalDCE/externally_available.ll b/test/Transforms/GlobalDCE/externally_available.ll new file mode 100644 index 0000000..cc88cb1 --- /dev/null +++ b/test/Transforms/GlobalDCE/externally_available.ll @@ -0,0 +1,10 @@ +; RUN: opt < %s -globaldce -S | not grep test_ + +; test_function should not be emitted to the .s file. +define available_externally i32 @test_function() { + ret i32 4 +} + +; test_global should not be emitted to the .s file. +@test_global = available_externally global i32 4 + |