summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/Hexagon/mlong-calls.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/CodeGen/Hexagon/mlong-calls.ll')
-rw-r--r--llvm/test/CodeGen/Hexagon/mlong-calls.ll41
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 }
OpenPOWER on IntegriCloud