5
5
; RUN: llc -mtriple=aarch64 -global-isel %s -o - | FileCheck %s --check-prefixes=ELF,ELF-GI
6
6
; RUN: llc -mtriple=aarch64 %s -o - | FileCheck %s --check-prefixes=ELF,ELF-SDAG
7
7
8
- define dso_preemptable void @preemptable () nonlazybind {
9
- ; MACHO-LABEL: preemptable:
10
- ; MACHO: ; %bb.0:
11
- ; MACHO-NEXT: ret
12
- ;
13
- ; MACHO-NORMAL-LABEL: preemptable:
14
- ; MACHO-NORMAL: ; %bb.0:
15
- ; MACHO-NORMAL-NEXT: ret
16
- ;
17
- ; ELF-LABEL: preemptable:
18
- ; ELF: // %bb.0:
19
- ; ELF-NEXT: ret
20
- ret void
21
- }
22
-
23
- define dso_local void @local () nonlazybind {
24
- ; MACHO-LABEL: local:
25
- ; MACHO: ; %bb.0:
26
- ; MACHO-NEXT: ret
27
- ;
28
- ; MACHO-NORMAL-LABEL: local:
29
- ; MACHO-NORMAL: ; %bb.0:
30
- ; MACHO-NORMAL-NEXT: ret
31
- ;
32
- ; ELF-LABEL: local:
33
- ; ELF: // %bb.0:
34
- ; ELF-NEXT: ret
35
- ret void
36
- }
37
-
38
8
declare void @external () nonlazybind
39
9
40
- define void @test_laziness () nounwind {
10
+ define void @test_laziness (ptr %a ) nounwind {
41
11
;
42
12
; MACHO-LABEL: test_laziness:
43
13
; MACHO: ; %bb.0:
44
- ; MACHO-NEXT: stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill
45
- ; MACHO-NEXT: bl _preemptable
46
- ; MACHO-NEXT: bl _local
14
+ ; MACHO-NEXT: stp x20, x19, [sp, #-32]! ; 16-byte Folded Spill
15
+ ; MACHO-NEXT: stp x29, x30, [sp, #16] ; 16-byte Folded Spill
47
16
; MACHO-NEXT: Lloh0:
48
17
; MACHO-NEXT: adrp x8, _external@GOTPAGE
18
+ ; MACHO-NEXT: mov x19, x0
49
19
; MACHO-NEXT: Lloh1:
50
20
; MACHO-NEXT: ldr x8, [x8, _external@GOTPAGEOFF]
51
21
; MACHO-NEXT: blr x8
52
- ; MACHO-NEXT: ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
22
+ ; MACHO-NEXT: mov x0, x19
23
+ ; MACHO-NEXT: mov w1, #1 ; =0x1
24
+ ; MACHO-NEXT: mov w2, #1000 ; =0x3e8
25
+ ; MACHO-NEXT: bl _memset
26
+ ; MACHO-NEXT: ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
27
+ ; MACHO-NEXT: ldp x20, x19, [sp], #32 ; 16-byte Folded Reload
53
28
; MACHO-NEXT: ret
54
29
; MACHO-NEXT: .loh AdrpLdrGot Lloh0, Lloh1
55
30
;
56
31
; MACHO-NORMAL-LABEL: test_laziness:
57
32
; MACHO-NORMAL: ; %bb.0:
58
- ; MACHO-NORMAL-NEXT: stp x29, x30 , [sp, #-16 ]! ; 16-byte Folded Spill
59
- ; MACHO-NORMAL-NEXT: bl _preemptable
60
- ; MACHO-NORMAL-NEXT: bl _local
33
+ ; MACHO-NORMAL-NEXT: stp x20, x19 , [sp, #-32 ]! ; 16-byte Folded Spill
34
+ ; MACHO-NORMAL-NEXT: stp x29, x30, [sp, #16] ; 16-byte Folded Spill
35
+ ; MACHO-NORMAL-NEXT: mov x19, x0
61
36
; MACHO-NORMAL-NEXT: bl _external
62
- ; MACHO-NORMAL-NEXT: ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
37
+ ; MACHO-NORMAL-NEXT: mov x0, x19
38
+ ; MACHO-NORMAL-NEXT: mov w1, #1 ; =0x1
39
+ ; MACHO-NORMAL-NEXT: mov w2, #1000 ; =0x3e8
40
+ ; MACHO-NORMAL-NEXT: bl _memset
41
+ ; MACHO-NORMAL-NEXT: ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
42
+ ; MACHO-NORMAL-NEXT: ldp x20, x19, [sp], #32 ; 16-byte Folded Reload
63
43
; MACHO-NORMAL-NEXT: ret
64
44
;
65
- ; ELF-LABEL: test_laziness:
66
- ; ELF: // %bb.0:
67
- ; ELF-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
68
- ; ELF-NEXT: bl preemptable
69
- ; ELF-NEXT: bl local
70
- ; ELF-NEXT: bl external
71
- ; ELF-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
72
- ; ELF-NEXT: ret
73
- call void @preemptable ()
74
- call void @local ()
45
+ ; ELF-FI-LABEL: test_laziness:
46
+ ; ELF-FI: // %bb.0:
47
+ ; ELF-FI-NEXT: stp x30, x19, [sp, #-16]! // 16-byte Folded Spill
48
+ ; ELF-FI-NEXT: mov x19, x0
49
+ ; ELF-FI-NEXT: bl external
50
+ ; ELF-FI-NEXT: mov w8, #1 // =0x1
51
+ ; ELF-FI-NEXT: mov x0, x19
52
+ ; ELF-FI-NEXT: mov x2, #1000 // =0x3e8
53
+ ; ELF-FI-NEXT: uxtb w1, w8
54
+ ; ELF-FI-NEXT: bl memset
55
+ ; ELF-FI-NEXT: ldp x30, x19, [sp], #16 // 16-byte Folded Reload
56
+ ; ELF-FI-NEXT: ret
57
+ ;
58
+ ; ELF-GI-LABEL: test_laziness:
59
+ ; ELF-GI: // %bb.0:
60
+ ; ELF-GI-NEXT: stp x30, x19, [sp, #-16]! // 16-byte Folded Spill
61
+ ; ELF-GI-NEXT: mov x19, x0
62
+ ; ELF-GI-NEXT: bl external
63
+ ; ELF-GI-NEXT: mov x0, x19
64
+ ; ELF-GI-NEXT: mov w1, #1 // =0x1
65
+ ; ELF-GI-NEXT: mov w2, #1000 // =0x3e8
66
+ ; ELF-GI-NEXT: bl memset
67
+ ; ELF-GI-NEXT: ldp x30, x19, [sp], #16 // 16-byte Folded Reload
68
+ ; ELF-GI-NEXT: ret
69
+ ;
70
+ ; ELF-SDAG-LABEL: test_laziness:
71
+ ; ELF-SDAG: // %bb.0:
72
+ ; ELF-SDAG-NEXT: stp x30, x19, [sp, #-16]! // 16-byte Folded Spill
73
+ ; ELF-SDAG-NEXT: mov x19, x0
74
+ ; ELF-SDAG-NEXT: bl external
75
+ ; ELF-SDAG-NEXT: mov x0, x19
76
+ ; ELF-SDAG-NEXT: mov w1, #1 // =0x1
77
+ ; ELF-SDAG-NEXT: mov w2, #1000 // =0x3e8
78
+ ; ELF-SDAG-NEXT: bl memset
79
+ ; ELF-SDAG-NEXT: ldp x30, x19, [sp], #16 // 16-byte Folded Reload
80
+ ; ELF-SDAG-NEXT: ret
75
81
call void @external ()
82
+ call void @llvm.memset.p0.i64 (ptr align 1 %a , i8 1 , i64 1000 , i1 false )
76
83
ret void
77
84
}
78
85
@@ -96,7 +103,8 @@ define void @test_laziness_tail() nounwind {
96
103
tail call void @external ()
97
104
ret void
98
105
}
99
- ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
100
- ; ELF-FI: {{.*}}
101
- ; ELF-GI: {{.*}}
102
- ; ELF-SDAG: {{.*}}
106
+
107
+ declare void @llvm.memset.p0.i64 (ptr nocapture writeonly , i8 , i64 , i1 immarg)
108
+
109
+ !llvm.module.flags = !{!0 }
110
+ !0 = !{i32 7 , !"RtLibUseGOT" , i32 1 }
0 commit comments