| ; RUN: llvm-link %s %p/Inputs/drop-attribute.ll -S -o - | FileCheck %s |
| |
| ; Test case that checks that nocallback attribute is dropped during linking. |
| |
| ; CHECK: define i32 @main() |
| ; CHECK-NEXT: entry: |
| ; CHECK-NEXT: call void @test_nocallback_definition() |
| ; Test that checks that nocallback attribute on a call-site in a call instruction is dropped. |
| ; CHECK-NEXT: call void @test_nocallback_call_site(){{$}} |
| ; CHECK-NEXT: %0 = call float @llvm.sqrt.f32(float undef) |
| ; CHECK-NEXT: call void @test_nocallback_declaration_definition_not_linked_in() |
| ; CHECK-NEXT: call void @test_nocallback_declaration_definition_linked_in() |
| ; Test that checks that nocallback attribute on a call-site in an invoke instruction is dropped. |
| ; CHECK-NEXT: invoke void @test_nocallback_call_site(){{$}} |
| define i32 @main() personality i8 0 { |
| entry: |
| call void @test_nocallback_definition() |
| call void @test_nocallback_call_site() nocallback |
| call float @llvm.sqrt.f32(float undef) |
| call void @test_nocallback_declaration_definition_not_linked_in() |
| call void @test_nocallback_declaration_definition_linked_in() |
| invoke void @test_nocallback_call_site() nocallback |
| to label %ret unwind label %unw |
| unw: |
| %tmp = landingpad i8 cleanup |
| br label %ret |
| ret: |
| ret i32 0 |
| } |
| |
| ; Test that checks that nocallback attribute on a definition is dropped. |
| ; CHECK: define void @test_nocallback_definition() |
| define void @test_nocallback_definition() nocallback { |
| ret void |
| } |
| |
| ; Test that checks that nocallback attribute on a call site is dropped. |
| ; CHECK: declare void @test_nocallback_call_site(){{$}} |
| declare void @test_nocallback_call_site() |
| |
| ; Test that checks that nocallback attribute on an intrinsic is NOT dropped. |
| ; CHECK: ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn |
| ; CHECK-NEXT: declare float @llvm.sqrt.f32(float) #0 |
| declare float @llvm.sqrt.f32(float) nocallback |
| |
| ; Test that checks that nocallback attribute on a declaration when a definition is not linked in is dropped. |
| ; CHECK: declare void @test_nocallback_declaration_definition_not_linked_in(){{$}} |
| declare void @test_nocallback_declaration_definition_not_linked_in() nocallback |
| |
| ; Test that checks that nocallback attribute on a declaration when a definition is linked in is dropped. |
| ; CHECK: define void @test_nocallback_declaration_definition_linked_in() {{{$}} |
| declare void @test_nocallback_declaration_definition_linked_in() nocallback |