; RUN: opt -S -passes=adce < %s | FileCheck %s ; While it is normally okay to DCE out calls to @readonly_function and ; @readnone_function, we cannot do that if they're carrying operand ; bundles since the presence of unknown operand bundles implies ; arbitrary memory effects. declare void @readonly_function() readonly nounwind willreturn declare void @readnone_function() readnone nounwind willreturn define void @test0() { ; CHECK-LABEL: @test0( entry: call void @readonly_function() [ "tag"() ] ; CHECK: call void @readonly_function ret void } define void @test1() { ; CHECK-LABEL: @test1( entry: call void @readnone_function() [ "tag"() ] ; CHECK: call void @readnone_function ret void } define void @test2() { ; CHECK-LABEL: @test2( entry: ; CHECK-NOT: @readonly_function( call void @readonly_function() readonly [ "tag"() ] ret void } define void @test3() { ; CHECK-LABEL: @test3( entry: ; CHECK-NOT: @readnone_function( call void @readnone_function() readnone [ "tag"() ] ret void } define void @test4() { ; CHECK-LABEL: @test4( entry: ; CHECK-NOT: @readonly_function() call void @readonly_function() [ "deopt"() ] ret void }