xref: /llvm-project/llvm/test/CodeGen/RISCV/disable-tail-calls.ll (revision ddcb95664e4d94ca9b236066e29d3d92650097aa)
1*ddcb9566SMandeep Singh Grang; Check that command line option "-disable-tail-calls" overrides function
2*ddcb9566SMandeep Singh Grang; attribute "disable-tail-calls".
3*ddcb9566SMandeep Singh Grang
4*ddcb9566SMandeep Singh Grang; RUN: llc < %s -mtriple=riscv32-unknown-elf \
5*ddcb9566SMandeep Singh Grang; RUN: | FileCheck %s --check-prefixes=CALLER1,NOTAIL
6*ddcb9566SMandeep Singh Grang; RUN: llc < %s -mtriple=riscv32-unknown-elf -disable-tail-calls \
7*ddcb9566SMandeep Singh Grang; RUN: | FileCheck %s --check-prefixes=CALLER1,NOTAIL
8*ddcb9566SMandeep Singh Grang; RUN: llc < %s -mtriple=riscv32-unknown-elf -disable-tail-calls=false \
9*ddcb9566SMandeep Singh Grang; RUN: | FileCheck %s --check-prefixes=CALLER1,TAIL
10*ddcb9566SMandeep Singh Grang
11*ddcb9566SMandeep Singh Grang; RUN: llc < %s -mtriple=riscv32-unknown-elf \
12*ddcb9566SMandeep Singh Grang; RUN: | FileCheck %s --check-prefixes=CALLER2,TAIL
13*ddcb9566SMandeep Singh Grang; RUN: llc < %s -mtriple=riscv32-unknown-elf -disable-tail-calls \
14*ddcb9566SMandeep Singh Grang; RUN: | FileCheck %s --check-prefixes=CALLER2,NOTAIL
15*ddcb9566SMandeep Singh Grang; RUN: llc < %s -mtriple=riscv32-unknown-elf -disable-tail-calls=false \
16*ddcb9566SMandeep Singh Grang; RUN: | FileCheck %s --check-prefixes=CALLER2,TAIL
17*ddcb9566SMandeep Singh Grang
18*ddcb9566SMandeep Singh Grang; RUN: llc < %s -mtriple=riscv32-unknown-elf \
19*ddcb9566SMandeep Singh Grang; RUN: | FileCheck %s --check-prefixes=CALLER3,TAIL
20*ddcb9566SMandeep Singh Grang; RUN: llc < %s -mtriple=riscv32-unknown-elf -disable-tail-calls \
21*ddcb9566SMandeep Singh Grang; RUN: | FileCheck %s --check-prefixes=CALLER3,NOTAIL
22*ddcb9566SMandeep Singh Grang; RUN: llc < %s -mtriple=riscv32-unknown-elf -disable-tail-calls=false \
23*ddcb9566SMandeep Singh Grang; RUN: | FileCheck %s --check-prefixes=CALLER3,TAIL
24*ddcb9566SMandeep Singh Grang
25*ddcb9566SMandeep Singh Grang; CALLER1-LABEL: {{\_?}}caller1
26*ddcb9566SMandeep Singh Grang; CALLER2-LABEL: {{\_?}}caller2
27*ddcb9566SMandeep Singh Grang; CALLER3-LABEL: {{\_?}}caller3
28*ddcb9566SMandeep Singh Grang; NOTAIL-NOT: tail callee
29*ddcb9566SMandeep Singh Grang; NOTAIL: call callee
30*ddcb9566SMandeep Singh Grang; TAIL: tail callee
31*ddcb9566SMandeep Singh Grang; TAIL-NOT: call callee
32*ddcb9566SMandeep Singh Grang
33*ddcb9566SMandeep Singh Grang; Function with attribute #0 = { "disable-tail-calls"="true" }
34*ddcb9566SMandeep Singh Grangdefine i32 @caller1(i32 %a) #0 {
35*ddcb9566SMandeep Singh Grangentry:
36*ddcb9566SMandeep Singh Grang  %call = tail call i32 @callee(i32 %a)
37*ddcb9566SMandeep Singh Grang  ret i32 %call
38*ddcb9566SMandeep Singh Grang}
39*ddcb9566SMandeep Singh Grang
40*ddcb9566SMandeep Singh Grang; Function with attribute #1 = { "disable-tail-calls"="false" }
41*ddcb9566SMandeep Singh Grangdefine i32 @caller2(i32 %a) #0 {
42*ddcb9566SMandeep Singh Grangentry:
43*ddcb9566SMandeep Singh Grang  %call = tail call i32 @callee(i32 %a)
44*ddcb9566SMandeep Singh Grang  ret i32 %call
45*ddcb9566SMandeep Singh Grang}
46*ddcb9566SMandeep Singh Grang
47*ddcb9566SMandeep Singh Grangdefine i32 @caller3(i32 %a) {
48*ddcb9566SMandeep Singh Grangentry:
49*ddcb9566SMandeep Singh Grang  %call = tail call i32 @callee(i32 %a)
50*ddcb9566SMandeep Singh Grang  ret i32 %call
51*ddcb9566SMandeep Singh Grang}
52*ddcb9566SMandeep Singh Grang
53*ddcb9566SMandeep Singh Grangdeclare i32 @callee(i32)
54*ddcb9566SMandeep Singh Grang
55*ddcb9566SMandeep Singh Grangattributes #0 = { "disable-tail-calls"="true" }
56*ddcb9566SMandeep Singh Grangattributes #1 = { "disable-tail-calls"="false" }
57