xref: /llvm-project/llvm/test/CodeGen/X86/tailcall-range.ll (revision 2dade0041a62b192e9bde24ae6bbe6208f027523)
1*2dade004SJinsong Ji; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2*2dade004SJinsong Ji; RUN: llc -mtriple=x86_64-linux < %s | FileCheck %s
3*2dade004SJinsong Ji
4*2dade004SJinsong Jidefine range(i32 0, 2) i32 @foo(ptr %this) {
5*2dade004SJinsong Ji; CHECK-LABEL: foo:
6*2dade004SJinsong Ji; CHECK:       # %bb.0: # %entry
7*2dade004SJinsong Ji; CHECK-NEXT:    movzbl (%rdi), %eax
8*2dade004SJinsong Ji; CHECK-NEXT:    retq
9*2dade004SJinsong Jientry:
10*2dade004SJinsong Ji  %call = load volatile i1, ptr %this, align 1
11*2dade004SJinsong Ji  %spec.select = zext i1 %call to i32
12*2dade004SJinsong Ji  ret i32 %spec.select
13*2dade004SJinsong Ji}
14*2dade004SJinsong Ji
15*2dade004SJinsong Jidefine range(i32 0, 2) i32 @bar(ptr %this) {
16*2dade004SJinsong Ji; CHECK-LABEL: bar:
17*2dade004SJinsong Ji; CHECK:       # %bb.0: # %entry
18*2dade004SJinsong Ji; CHECK-NEXT:    xorl %edi, %edi
19*2dade004SJinsong Ji; CHECK-NEXT:    jmp foo@PLT # TAILCALL
20*2dade004SJinsong Jientry:
21*2dade004SJinsong Ji  %ret = musttail call i32 @foo(ptr null)
22*2dade004SJinsong Ji  ret i32 %ret
23*2dade004SJinsong Ji}
24*2dade004SJinsong Ji
25*2dade004SJinsong Jideclare i64 @llvm.llround.f32(float) nounwind readnone
26*2dade004SJinsong Jidefine range(i64 0, 8) i64 @testmsxs(float %x) {
27*2dade004SJinsong Ji; CHECK-LABEL: testmsxs:
28*2dade004SJinsong Ji; CHECK:       # %bb.0: # %entry
29*2dade004SJinsong Ji; CHECK-NEXT:    jmp llroundf@PLT # TAILCALL
30*2dade004SJinsong Jientry:
31*2dade004SJinsong Ji  %ret = tail call i64 @llvm.llround.f32(float %x)
32*2dade004SJinsong Ji  ret i64 %ret
33*2dade004SJinsong Ji}
34*2dade004SJinsong Ji
35*2dade004SJinsong Jideclare i32 @callee()
36*2dade004SJinsong Ji
37*2dade004SJinsong Jidefine range(i32 0, 2) i32 @func_with_range_attr() {
38*2dade004SJinsong Ji; CHECK-LABEL: func_with_range_attr:
39*2dade004SJinsong Ji; CHECK:       # %bb.0: # %entry
40*2dade004SJinsong Ji; CHECK-NEXT:    jmp callee@PLT # TAILCALL
41*2dade004SJinsong Jientry:
42*2dade004SJinsong Ji  %ret = musttail call i32 @callee()
43*2dade004SJinsong Ji  ret i32 %ret
44*2dade004SJinsong Ji}
45*2dade004SJinsong Ji
46*2dade004SJinsong Jidefine i32 @call_with_range_attr() {
47*2dade004SJinsong Ji; CHECK-LABEL: call_with_range_attr:
48*2dade004SJinsong Ji; CHECK:       # %bb.0: # %entry
49*2dade004SJinsong Ji; CHECK-NEXT:    jmp callee@PLT # TAILCALL
50*2dade004SJinsong Jientry:
51*2dade004SJinsong Ji  %ret = musttail call range(i32 0, 2) i32 @callee()
52*2dade004SJinsong Ji  ret i32 %ret
53*2dade004SJinsong Ji}
54