diff options
Diffstat (limited to 'llvm/test/CodeGen/Hexagon/mlong-calls.ll')
| -rw-r--r-- | llvm/test/CodeGen/Hexagon/mlong-calls.ll | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/Hexagon/mlong-calls.ll b/llvm/test/CodeGen/Hexagon/mlong-calls.ll new file mode 100644 index 00000000000..d76b87f987f --- /dev/null +++ b/llvm/test/CodeGen/Hexagon/mlong-calls.ll @@ -0,0 +1,41 @@ +; RUN: llc -hexagon-long-calls -march=hexagon -enable-save-restore-long=true < %s | FileCheck %s + +; CHECK: call ##f1 +; CHECK: jump ##__restore + +; Function Attrs: minsize nounwind +define i64 @f0(i32 %a0, i32 %a1) #0 { +b0: + %v0 = add nsw i32 %a0, 5 + %v1 = tail call i64 @f1(i32 %v0) #1 + %v2 = sext i32 %a1 to i64 + %v3 = add nsw i64 %v1, %v2 + ret i64 %v3 +} + +; Function Attrs: minsize nounwind +declare i64 @f1(i32) #0 + +; Function Attrs: nounwind +define i64 @f2(i32 %a0, i32 %a1) #1 { +b0: + %v0 = add nsw i32 %a0, 5 + %v1 = tail call i64 @f1(i32 %v0) #1 + ret i64 %v1 +} + +; Function Attrs: noreturn nounwind +define i64 @f3(i32 %a0, i32 %a1) #2 { +b0: + %v0 = add nsw i32 %a0, 5 + %v1 = tail call i64 @f4(i32 %v0) #2 + unreachable +} + +; Function Attrs: noreturn +declare i64 @f4(i32) #3 + +attributes #0 = { minsize nounwind } +attributes #1 = { nounwind } +attributes #2 = { noreturn nounwind } +attributes #3 = { noreturn } |

