[InstCombine] Signed saturation patterns
[llvm-core.git] / test / CodeGen / AArch64 / shadow-call-stack.ll
blob9c6c36f577ec7a43d1cb170a9cb3fae719deb665
1 ; RUN: llc -verify-machineinstrs -o - %s -mtriple=aarch64-linux-gnu -mattr=+reserve-x18 | FileCheck %s
3 define void @f1() shadowcallstack {
4   ; CHECK: f1:
5   ; CHECK-NOT: x18
6   ; CHECK: ret
7   ret void
10 declare void @foo()
12 define void @f2() shadowcallstack {
13   ; CHECK: f2:
14   ; CHECK-NOT: x18
15   ; CHECK: b foo
16   tail call void @foo()
17   ret void
20 declare i32 @bar()
22 define i32 @f3() shadowcallstack {
23   ; CHECK: f3:
24   ; CHECK: str x30, [x18], #8
25   ; CHECK: .cfi_escape 0x16, 0x12, 0x02, 0x82, 0x78
26   ; CHECK: str x30, [sp, #-16]!
27   %res = call i32 @bar()
28   %res1 = add i32 %res, 1
29   ; CHECK: ldr x30, [sp], #16
30   ; CHECK: ldr x30, [x18, #-8]!
31   ; CHECK: ret
32   ret i32 %res
35 define i32 @f4() shadowcallstack {
36   ; CHECK: f4:
37   %res1 = call i32 @bar()
38   %res2 = call i32 @bar()
39   %res3 = call i32 @bar()
40   %res4 = call i32 @bar()
41   %res12 = add i32 %res1, %res2
42   %res34 = add i32 %res3, %res4
43   %res1234 = add i32 %res12, %res34
44   ; CHECK: ldp x30,{{.*}}, [sp
45   ; CHECK: ldr x30, [x18, #-8]!
46   ; CHECK: ret
47   ret i32 %res1234
50 define i32 @f5() shadowcallstack nounwind {
51   ; CHECK: f5:
52   ; CHECK-NOT: .cfi_escape
53   %res = call i32 @bar()
54   %res1 = add i32 %res, 1
55   ret i32 %res