# RUN: llc -mtriple=aarch64--- -run-pass=machine-outliner -verify-machineinstrs %s -o - | FileCheck %s --- | @x = common global i32 0, align 4 define i32 @adrp_add() #0 { ret i32 0 } define i32 @adrp_ldr() #0 { ret i32 0 } attributes #0 = { noinline noredzone } ... --- # Check that main function body doesn't split ADRP pair # # CHECK-LABEL: name: adrp_add # CHECK-DAG: bb.0: # CHECK: BL @OUTLINED_FUNCTION_[[F0:[0-9]+]] # CHECK-NEXT: BL @OUTLINED_FUNCTION_[[F2:[0-9]+]] # CHECK-NEXT: $lr = ORRXri $xzr, 1 name: adrp_add tracksRegLiveness: true body: | bb.0: liveins: $lr $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $x9 = ADRP target-flags(aarch64-page, aarch64-got) @x $x12 = ADDXri $x9, target-flags(aarch64-pageoff, aarch64-got) @x, 0 $lr = ORRXri $xzr, 1 bb.1: liveins: $lr $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $x9 = ADRP target-flags(aarch64-page, aarch64-got) @x $x12 = ADDXri $x9, target-flags(aarch64-pageoff, aarch64-got) @x, 0 $lr = ORRXri $xzr, 1 bb.2: liveins: $lr $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $x9 = ADRP target-flags(aarch64-page, aarch64-got) @x $x12 = ADDXri $x9, target-flags(aarch64-pageoff, aarch64-got) @x, 0 $lr = ORRXri $xzr, 1 bb.3: liveins: $lr RET undef $lr ... --- # Check that main function body doesn't split ADRP pair # # CHECK-LABEL: name: adrp_ldr # CHECK-DAG: bb.0: # CHECK: BL @OUTLINED_FUNCTION_[[F0]] # CHECK-NEXT: BL @OUTLINED_FUNCTION_[[F1:[0-9]+]] # CHECK-NEXT: $lr = ORRXri $xzr, 1 name: adrp_ldr tracksRegLiveness: true body: | bb.0: liveins: $lr $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $x9 = ADRP target-flags(aarch64-page, aarch64-got) @x $x12 = LDRXui $x9, target-flags(aarch64-pageoff, aarch64-got) @x $lr = ORRXri $xzr, 1 bb.1: liveins: $lr $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $x9 = ADRP target-flags(aarch64-page, aarch64-got) @x $x12 = LDRXui $x9, target-flags(aarch64-pageoff, aarch64-got) @x $lr = ORRXri $xzr, 1 bb.2: liveins: $lr $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $w12 = ORRWri $wzr, 1 $x9 = ADRP target-flags(aarch64-page, aarch64-got) @x $x12 = LDRXui $x9, target-flags(aarch64-pageoff, aarch64-got) @x $lr = ORRXri $xzr, 1 bb.3: liveins: $lr RET undef $lr # Check that no outlined function split the ADRP pair apart # # CHECK: OUTLINED_FUNCTION_[[F0]] # CHECK-DAG: bb.0 # CHECK: $w12 = ORRWri $wzr, 1 # CHECK-NEXT: $w12 = ORRWri $wzr, 1 # CHECK-NEXT: $w12 = ORRWri $wzr, 1 # CHECK-NEXT: $w12 = ORRWri $wzr, 1 # CHECK-NEXT: $w12 = ORRWri $wzr, 1 # CHECK-NEXT: RET $lr # CHECK: OUTLINED_FUNCTION_[[F1]] # CHECK-DAG: bb.0 # CHECK: $w12 = ORRWri $wzr, 1 # CHECK-NEXT: $x9 = ADRP target-flags(aarch64-page, aarch64-got) @x # CHECK-NEXT: $x12 = LDRXui $x9, target-flags(aarch64-pageoff, aarch64-got) @x # CHECK: name: OUTLINED_FUNCTION_[[F2]] # CHECK-DAG: bb.0 # CHECK: $w12 = ORRWri $wzr, 1 # CHECK-NEXT: $x9 = ADRP target-flags(aarch64-page, aarch64-got) @x # CHECK-NEXT: $x12 = ADDXri $x9, target-flags(aarch64-pageoff, aarch64-got) @x, 0