| ; 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 } |