[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / arm64-zeroreg.ll
blobea2e6ede8566af209ee345753e3f5d0f717fe3ed
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(ptr %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, ptr %addr  
19   %v1 = load volatile i64, ptr %addr  
20   %v2 = load volatile i64, ptr %addr  
21   %v3 = load volatile i64, ptr %addr  
22   %v4 = load volatile i64, ptr %addr  
23   %v5 = load volatile i64, ptr %addr  
24   %v6 = load volatile i64, ptr %addr  
25   %v7 = load volatile i64, ptr %addr  
26   %v8 = load volatile i64, ptr %addr  
27   %v9 = load volatile i64, ptr %addr  
28   %v10 = load volatile i64, ptr %addr  
29   %v11 = load volatile i64, ptr %addr  
30   %v12 = load volatile i64, ptr %addr  
31   %v13 = load volatile i64, ptr %addr  
32   %v14 = load volatile i64, ptr %addr  
33   %v15 = load volatile i64, ptr %addr  
34   %v16 = load volatile i64, ptr %addr  
35   %v17 = load volatile i64, ptr %addr  
36   %v18 = load volatile i64, ptr %addr  
37   %v19 = load volatile i64, ptr %addr  
38   %v20 = load volatile i64, ptr %addr
39   %v21 = load volatile i64, ptr %addr
40   %v22 = load volatile i64, ptr %addr
41   %v23 = load volatile i64, ptr %addr
42   %v24 = load volatile i64, ptr %addr
43   %v25 = load volatile i64, ptr %addr
44   %v26 = load volatile i64, ptr %addr
45   %v27 = load volatile i64, ptr %addr
46   %v28 = load volatile i64, ptr %addr
47   %v29 = load volatile i64, ptr %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, ptr %addr
54   br label %if.end
56 if.end:
57   store volatile i64 %v0, ptr %addr
58   store volatile i64 %v1, ptr %addr
59   store volatile i64 %v2, ptr %addr
60   store volatile i64 %v3, ptr %addr
61   store volatile i64 %v4, ptr %addr
62   store volatile i64 %v5, ptr %addr
63   store volatile i64 %v6, ptr %addr
64   store volatile i64 %v7, ptr %addr
65   store volatile i64 %v8, ptr %addr
66   store volatile i64 %v9, ptr %addr
67   store volatile i64 %v10, ptr %addr
68   store volatile i64 %v11, ptr %addr
69   store volatile i64 %v12, ptr %addr
70   store volatile i64 %v13, ptr %addr
71   store volatile i64 %v14, ptr %addr
72   store volatile i64 %v15, ptr %addr
73   store volatile i64 %v16, ptr %addr
74   store volatile i64 %v17, ptr %addr
75   store volatile i64 %v18, ptr %addr
76   store volatile i64 %v19, ptr %addr
77   store volatile i64 %v20, ptr %addr
78   store volatile i64 %v21, ptr %addr
79   store volatile i64 %v22, ptr %addr
80   store volatile i64 %v23, ptr %addr
81   store volatile i64 %v24, ptr %addr
82   store volatile i64 %v25, ptr %addr
83   store volatile i64 %v26, ptr %addr
84   store volatile i64 %v27, ptr %addr
85   store volatile i64 %v28, ptr %addr
86   store volatile i64 %v29, ptr %addr
87   ; CHECK: bl end
88   call void @end()
90   ret void