Revert 374373: [Codegen] Alter the default promotion for saturating adds and subs
[llvm-core.git] / test / CodeGen / AArch64 / arm64-zeroreg.ll
blobf6e1bc3eaf443f86edbd4414813a58420c5a8f11
1 ; RUN: llc -o - %s | FileCheck %s
2 target triple = "aarch64--"
4 declare void @begin()
5 declare void @end()
7 ; Test that we use the zero register before regalloc and do not unnecessarily
8 ; clobber a register with the SUBS (cmp) instruction.
9 ; CHECK-LABEL: func:
10 define void @func(i64* %addr) {
11   ; We should not see any spills or reloads between begin and end
12   ; CHECK: bl begin
13   ; CHECK-NOT: str{{.*}}sp
14   ; CHECK-NOT: Folded Spill
15   ; CHECK-NOT: ldr{{.*}}sp
16   ; CHECK-NOT: Folded Reload
17   call void @begin()
18   %v0 = load volatile i64, i64* %addr  
19   %v1 = load volatile i64, i64* %addr  
20   %v2 = load volatile i64, i64* %addr  
21   %v3 = load volatile i64, i64* %addr  
22   %v4 = load volatile i64, i64* %addr  
23   %v5 = load volatile i64, i64* %addr  
24   %v6 = load volatile i64, i64* %addr  
25   %v7 = load volatile i64, i64* %addr  
26   %v8 = load volatile i64, i64* %addr  
27   %v9 = load volatile i64, i64* %addr  
28   %v10 = load volatile i64, i64* %addr  
29   %v11 = load volatile i64, i64* %addr  
30   %v12 = load volatile i64, i64* %addr  
31   %v13 = load volatile i64, i64* %addr  
32   %v14 = load volatile i64, i64* %addr  
33   %v15 = load volatile i64, i64* %addr  
34   %v16 = load volatile i64, i64* %addr  
35   %v17 = load volatile i64, i64* %addr  
36   %v18 = load volatile i64, i64* %addr  
37   %v19 = load volatile i64, i64* %addr  
38   %v20 = load volatile i64, i64* %addr
39   %v21 = load volatile i64, i64* %addr
40   %v22 = load volatile i64, i64* %addr
41   %v23 = load volatile i64, i64* %addr
42   %v24 = load volatile i64, i64* %addr
43   %v25 = load volatile i64, i64* %addr
44   %v26 = load volatile i64, i64* %addr
45   %v27 = load volatile i64, i64* %addr
46   %v28 = load volatile i64, i64* %addr
47   %v29 = load volatile i64, i64* %addr
49   %c = icmp eq i64 %v0, %v1
50   br i1 %c, label %if.then, label %if.end
52 if.then:
53   store volatile i64 %v2, i64* %addr
54   br label %if.end
56 if.end:
57   store volatile i64 %v0, i64* %addr
58   store volatile i64 %v1, i64* %addr
59   store volatile i64 %v2, i64* %addr
60   store volatile i64 %v3, i64* %addr
61   store volatile i64 %v4, i64* %addr
62   store volatile i64 %v5, i64* %addr
63   store volatile i64 %v6, i64* %addr
64   store volatile i64 %v7, i64* %addr
65   store volatile i64 %v8, i64* %addr
66   store volatile i64 %v9, i64* %addr
67   store volatile i64 %v10, i64* %addr
68   store volatile i64 %v11, i64* %addr
69   store volatile i64 %v12, i64* %addr
70   store volatile i64 %v13, i64* %addr
71   store volatile i64 %v14, i64* %addr
72   store volatile i64 %v15, i64* %addr
73   store volatile i64 %v16, i64* %addr
74   store volatile i64 %v17, i64* %addr
75   store volatile i64 %v18, i64* %addr
76   store volatile i64 %v19, i64* %addr
77   store volatile i64 %v20, i64* %addr
78   store volatile i64 %v21, i64* %addr
79   store volatile i64 %v22, i64* %addr
80   store volatile i64 %v23, i64* %addr
81   store volatile i64 %v24, i64* %addr
82   store volatile i64 %v25, i64* %addr
83   store volatile i64 %v26, i64* %addr
84   store volatile i64 %v27, i64* %addr
85   store volatile i64 %v28, i64* %addr
86   store volatile i64 %v29, i64* %addr
87   ; CHECK: bl end
88   call void @end()
90   ret void