1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=x86_64-linux < %s | FileCheck %s 3 4declare dso_local ptr @foo() 5 6define dereferenceable(8) ptr @test1() nounwind { 7; CHECK-LABEL: test1: 8; CHECK: # %bb.0: 9; CHECK-NEXT: jmp foo # TAILCALL 10 %ret = tail call ptr @foo() 11 ret ptr %ret 12} 13 14define ptr @test2() nounwind { 15; CHECK-LABEL: test2: 16; CHECK: # %bb.0: 17; CHECK-NEXT: jmp foo # TAILCALL 18 %ret = tail call dereferenceable(8) ptr @foo() 19 ret ptr %ret 20} 21 22define dereferenceable_or_null(8) ptr @test3() nounwind { 23; CHECK-LABEL: test3: 24; CHECK: # %bb.0: 25; CHECK-NEXT: jmp foo # TAILCALL 26 %ret = tail call ptr @foo() 27 ret ptr %ret 28} 29 30define ptr @test4() nounwind { 31; CHECK-LABEL: test4: 32; CHECK: # %bb.0: 33; CHECK-NEXT: jmp foo # TAILCALL 34 %ret = tail call dereferenceable_or_null(8) ptr @foo() 35 ret ptr %ret 36} 37 38define align 8 ptr @test5() nounwind { 39; CHECK-LABEL: test5: 40; CHECK: # %bb.0: 41; CHECK-NEXT: jmp foo # TAILCALL 42 %ret = tail call ptr @foo() 43 ret ptr %ret 44} 45 46define ptr @test6() nounwind { 47; CHECK-LABEL: test6: 48; CHECK: # %bb.0: 49; CHECK-NEXT: jmp foo # TAILCALL 50 %ret = tail call align 8 ptr @foo() 51 ret ptr %ret 52} 53 54 55define noundef ptr @test7() nounwind { 56; CHECK-LABEL: test7: 57; CHECK: # %bb.0: 58; CHECK-NEXT: jmp foo # TAILCALL 59 %ret = tail call ptr @foo() 60 ret ptr %ret 61} 62 63define ptr @test8() nounwind { 64; CHECK-LABEL: test8: 65; CHECK: # %bb.0: 66; CHECK-NEXT: jmp foo # TAILCALL 67 %ret = tail call noundef ptr @foo() 68 ret ptr %ret 69} 70