134 lines · plain
1# RUN: llc -mtriple=aarch64--- -run-pass=machine-outliner -verify-machineinstrs %s -o - | FileCheck %s2--- |3 4 @x = common global i32 0, align 45 6 define i32 @adrp_add() #0 {7 ret i32 08 }9 10 define i32 @adrp_ldr() #0 {11 ret i32 012 }13 14 attributes #0 = { noinline noredzone }15...16---17# Check that main function body doesn't split ADRP pair18#19# CHECK-LABEL: name: adrp_add20# CHECK-DAG: bb.0:21# CHECK: BL @OUTLINED_FUNCTION_[[F0:[0-9]+]]22# CHECK-NEXT: BL @OUTLINED_FUNCTION_[[F2:[0-9]+]]23# CHECK-NEXT: $lr = ORRXri $xzr, 124name: adrp_add25tracksRegLiveness: true26body: |27 bb.0:28 liveins: $lr29 $w12 = ORRWri $wzr, 130 $w12 = ORRWri $wzr, 131 $w12 = ORRWri $wzr, 132 $w12 = ORRWri $wzr, 133 $w12 = ORRWri $wzr, 134 $w12 = ORRWri $wzr, 135 $x9 = ADRP target-flags(aarch64-page, aarch64-got) @x36 $x12 = ADDXri $x9, target-flags(aarch64-pageoff, aarch64-got) @x, 037 $lr = ORRXri $xzr, 138 bb.1:39 liveins: $lr40 $w12 = ORRWri $wzr, 141 $w12 = ORRWri $wzr, 142 $w12 = ORRWri $wzr, 143 $w12 = ORRWri $wzr, 144 $w12 = ORRWri $wzr, 145 $w12 = ORRWri $wzr, 146 $x9 = ADRP target-flags(aarch64-page, aarch64-got) @x47 $x12 = ADDXri $x9, target-flags(aarch64-pageoff, aarch64-got) @x, 048 $lr = ORRXri $xzr, 149 bb.2:50 liveins: $lr51 $w12 = ORRWri $wzr, 152 $w12 = ORRWri $wzr, 153 $w12 = ORRWri $wzr, 154 $w12 = ORRWri $wzr, 155 $w12 = ORRWri $wzr, 156 $w12 = ORRWri $wzr, 157 $x9 = ADRP target-flags(aarch64-page, aarch64-got) @x58 $x12 = ADDXri $x9, target-flags(aarch64-pageoff, aarch64-got) @x, 059 $lr = ORRXri $xzr, 160 bb.3:61 liveins: $lr62 RET undef $lr63...64---65# Check that main function body doesn't split ADRP pair66#67# CHECK-LABEL: name: adrp_ldr68# CHECK-DAG: bb.0:69# CHECK: BL @OUTLINED_FUNCTION_[[F0]]70# CHECK-NEXT: BL @OUTLINED_FUNCTION_[[F1:[0-9]+]]71# CHECK-NEXT: $lr = ORRXri $xzr, 172name: adrp_ldr73tracksRegLiveness: true74body: |75 bb.0:76 liveins: $lr77 $w12 = ORRWri $wzr, 178 $w12 = ORRWri $wzr, 179 $w12 = ORRWri $wzr, 180 $w12 = ORRWri $wzr, 181 $w12 = ORRWri $wzr, 182 $w12 = ORRWri $wzr, 183 $x9 = ADRP target-flags(aarch64-page, aarch64-got) @x84 $x12 = LDRXui $x9, target-flags(aarch64-pageoff, aarch64-got) @x85 $lr = ORRXri $xzr, 186 bb.1:87 liveins: $lr88 $w12 = ORRWri $wzr, 189 $w12 = ORRWri $wzr, 190 $w12 = ORRWri $wzr, 191 $w12 = ORRWri $wzr, 192 $w12 = ORRWri $wzr, 193 $w12 = ORRWri $wzr, 194 $x9 = ADRP target-flags(aarch64-page, aarch64-got) @x95 $x12 = LDRXui $x9, target-flags(aarch64-pageoff, aarch64-got) @x96 $lr = ORRXri $xzr, 197 bb.2:98 liveins: $lr99 $w12 = ORRWri $wzr, 1100 $w12 = ORRWri $wzr, 1101 $w12 = ORRWri $wzr, 1102 $w12 = ORRWri $wzr, 1103 $w12 = ORRWri $wzr, 1104 $w12 = ORRWri $wzr, 1105 $x9 = ADRP target-flags(aarch64-page, aarch64-got) @x106 $x12 = LDRXui $x9, target-flags(aarch64-pageoff, aarch64-got) @x107 $lr = ORRXri $xzr, 1108 bb.3:109 liveins: $lr110 RET undef $lr111 112# Check that no outlined function split the ADRP pair apart113#114# CHECK: OUTLINED_FUNCTION_[[F0]]115# CHECK-DAG: bb.0116# CHECK: $w12 = ORRWri $wzr, 1117# CHECK-NEXT: $w12 = ORRWri $wzr, 1118# CHECK-NEXT: $w12 = ORRWri $wzr, 1119# CHECK-NEXT: $w12 = ORRWri $wzr, 1120# CHECK-NEXT: $w12 = ORRWri $wzr, 1121# CHECK-NEXT: RET $lr122 123# CHECK: OUTLINED_FUNCTION_[[F1]]124# CHECK-DAG: bb.0125# CHECK: $w12 = ORRWri $wzr, 1126# CHECK-NEXT: $x9 = ADRP target-flags(aarch64-page, aarch64-got) @x127# CHECK-NEXT: $x12 = LDRXui $x9, target-flags(aarch64-pageoff, aarch64-got) @x128 129# CHECK: name: OUTLINED_FUNCTION_[[F2]]130# CHECK-DAG: bb.0131# CHECK: $w12 = ORRWri $wzr, 1132# CHECK-NEXT: $x9 = ADRP target-flags(aarch64-page, aarch64-got) @x133# CHECK-NEXT: $x12 = ADDXri $x9, target-flags(aarch64-pageoff, aarch64-got) @x, 0134