-
Notifications
You must be signed in to change notification settings - Fork 12.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[RISCV] Lower the tail pseudoinstruction
This patch lowers the tail pseudoinstruction. This has been modeled after ARM's tail call opt. llvm-svn: 333137
- Loading branch information
Mandeep Singh Grang
committed
May 23, 2018
1 parent
767d92e
commit ddcb956
Showing
9 changed files
with
381 additions
and
17 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,56 @@ | ||
| ; Check that command line option "-disable-tail-calls" overrides function | ||
| ; attribute "disable-tail-calls". | ||
|
|
||
| ; RUN: llc < %s -mtriple=riscv32-unknown-elf \ | ||
| ; RUN: | FileCheck %s --check-prefixes=CALLER1,NOTAIL | ||
| ; RUN: llc < %s -mtriple=riscv32-unknown-elf -disable-tail-calls \ | ||
| ; RUN: | FileCheck %s --check-prefixes=CALLER1,NOTAIL | ||
| ; RUN: llc < %s -mtriple=riscv32-unknown-elf -disable-tail-calls=false \ | ||
| ; RUN: | FileCheck %s --check-prefixes=CALLER1,TAIL | ||
|
|
||
| ; RUN: llc < %s -mtriple=riscv32-unknown-elf \ | ||
| ; RUN: | FileCheck %s --check-prefixes=CALLER2,TAIL | ||
| ; RUN: llc < %s -mtriple=riscv32-unknown-elf -disable-tail-calls \ | ||
| ; RUN: | FileCheck %s --check-prefixes=CALLER2,NOTAIL | ||
| ; RUN: llc < %s -mtriple=riscv32-unknown-elf -disable-tail-calls=false \ | ||
| ; RUN: | FileCheck %s --check-prefixes=CALLER2,TAIL | ||
|
|
||
| ; RUN: llc < %s -mtriple=riscv32-unknown-elf \ | ||
| ; RUN: | FileCheck %s --check-prefixes=CALLER3,TAIL | ||
| ; RUN: llc < %s -mtriple=riscv32-unknown-elf -disable-tail-calls \ | ||
| ; RUN: | FileCheck %s --check-prefixes=CALLER3,NOTAIL | ||
| ; RUN: llc < %s -mtriple=riscv32-unknown-elf -disable-tail-calls=false \ | ||
| ; RUN: | FileCheck %s --check-prefixes=CALLER3,TAIL | ||
|
|
||
| ; CALLER1-LABEL: {{\_?}}caller1 | ||
| ; CALLER2-LABEL: {{\_?}}caller2 | ||
| ; CALLER3-LABEL: {{\_?}}caller3 | ||
| ; NOTAIL-NOT: tail callee | ||
| ; NOTAIL: call callee | ||
| ; TAIL: tail callee | ||
| ; TAIL-NOT: call callee | ||
|
|
||
| ; Function with attribute #0 = { "disable-tail-calls"="true" } | ||
| define i32 @caller1(i32 %a) #0 { | ||
| entry: | ||
| %call = tail call i32 @callee(i32 %a) | ||
| ret i32 %call | ||
| } | ||
|
|
||
| ; Function with attribute #1 = { "disable-tail-calls"="false" } | ||
| define i32 @caller2(i32 %a) #0 { | ||
| entry: | ||
| %call = tail call i32 @callee(i32 %a) | ||
| ret i32 %call | ||
| } | ||
|
|
||
| define i32 @caller3(i32 %a) { | ||
| entry: | ||
| %call = tail call i32 @callee(i32 %a) | ||
| ret i32 %call | ||
| } | ||
|
|
||
| declare i32 @callee(i32) | ||
|
|
||
| attributes #0 = { "disable-tail-calls"="true" } | ||
| attributes #1 = { "disable-tail-calls"="false" } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,20 @@ | ||
| ; Check that we error out if tail is not possible but call is marked as mustail. | ||
|
|
||
| ; RUN: not llc -mtriple riscv32-unknown-linux-gnu -o - %s \ | ||
| ; RUN: 2>&1 | FileCheck %s | ||
| ; RUN: not llc -mtriple riscv32-unknown-elf -o - %s \ | ||
| ; RUN: 2>&1 | FileCheck %s | ||
| ; RUN: not llc -mtriple riscv64-unknown-linux-gnu -o - %s \ | ||
| ; RUN: 2>&1 | FileCheck %s | ||
| ; RUN: not llc -mtriple riscv64-unknown-elf -o - %s \ | ||
| ; RUN: 2>&1 | FileCheck %s | ||
|
|
||
| %struct.A = type { i32 } | ||
|
|
||
| declare void @callee_musttail(%struct.A* sret %a) | ||
| define void @caller_musttail(%struct.A* sret %a) { | ||
| ; CHECK: LLVM ERROR: failed to perform tail call elimination on a call site marked musttail | ||
| entry: | ||
| musttail call void @callee_musttail(%struct.A* sret %a) | ||
| ret void | ||
| } |
Oops, something went wrong.