@@ -9,47 +9,58 @@ declare void @bar(ptr %a);
99declare void @goo (ptr %a );
1010
1111; CHECK-LABEL: _a0:
12- define i32 @a0 (i32 %a ) {
12+ define void @a0 (i32 %a ) {
13+
14+ ; This becomes AdrpAdd when outlining is disabled, otherwise it is outlined
15+ ; and there should be no LOH.
1316 %addr = getelementptr inbounds i32 , ptr @A , i32 0
1417 %res = load i32 , ptr %addr , align 4
1518 ; LOH: [[L0:Lloh.+]]:
1619 ; LOH-NEXT: adrp x19, _A@PAGE
1720 ; LOH-NEXT: [[L1:Lloh.+]]:
1821 ; LOH-NEXT: add x19, x19, _A@PAGEOFF
22+
1923 call void @foo ()
2024 ; OUTLINE: bl _OUTLINED_FUNCTION_0
2125 ; OUTLINE-NEXT: mov x0, x19
2226 ; OUTLINE-NEXT: bl _bar
2327 call void @bar (ptr %addr )
28+
29+ ; This becomes AdrpAddStr.
2430 %addr2 = getelementptr inbounds i32 , ptr @B , i32 4
25- store i32 0 , ptr %addr2 , align 4
31+ store i32 %res , ptr %addr2 , align 4
2632 ; CHECK: [[L2:Lloh.+]]:
2733 ; CHECK-NEXT: adrp x8, _B@PAGE
2834 ; CHECK-NEXT: [[L3:Lloh.+]]:
2935 ; CHECK-NEXT: add x8, x8, _B@PAGEOFF
30- ; CHECK-NEXT: mov w0, w20
3136 ; CHECK-NEXT: [[L4:Lloh.+]]:
32- ; CHECK-NEXT: str wzr, [x8, #16]
33- ret i32 %res
37+ ; CHECK-NEXT: str w20, [x8, #16]
38+ ret void
39+
3440 ; LOH-DAG: .loh AdrpAdd [[L0]], [[L1]]
3541 ; CHECK-DAG: .loh AdrpAddStr [[L2]], [[L3]], [[L4]]
3642 ; CHECK: .cfi_endproc
3743}
3844
3945; CHECK-LABEL: _a1:
4046define i32 @a1 (i32 %a ) {
47+
48+ ; This becomes AdrpAdd when outlining is disabled, otherwise it is outlined
49+ ; and there should be no LOH.
4150 %addr = getelementptr inbounds i32 , ptr @A , i32 0
4251 %res = load i32 , ptr %addr , align 4
4352 ; LOH: [[L5:Lloh.+]]:
4453 ; LOH-NEXT: adrp x19, _A@PAGE
4554 ; LOH-NEXT: [[L6:Lloh.+]]:
4655 ; LOH-NEXT: add x19, x19, _A@PAGEOFF
56+
4757 call void @foo ()
4858 ; OUTLINE: bl _OUTLINED_FUNCTION_0
4959 ; OUTLINE-NEXT: mov x0, x19
5060 ; OUTLINE-NEXT: bl _goo
5161 call void @goo (ptr %addr )
5262 ret i32 %res
63+
5364 ; LOH: .loh AdrpAdd [[L5]], [[L6]]
5465 ; CHECK: .cfi_endproc
5566}
0 commit comments