[llvm] [AArch64][GlobalISel] Do not run the Localizer at -O0 (PR #177359)
David Green via llvm-commits
llvm-commits at lists.llvm.org
Thu Jan 22 09:22:34 PST 2026
https://github.com/davemgreen updated https://github.com/llvm/llvm-project/pull/177359
>From a4f85e8797fdff6bcc808364796e4b4c4b3b86df Mon Sep 17 00:00:00 2001
From: David Green <david.green at arm.com>
Date: Thu, 22 Jan 2026 17:22:19 +0000
Subject: [PATCH] [AArch64][GlobalISel] Do not run the Localizer at -O0
We have reports of this pass adding causing some severe compile time
regressions, in the order of ~30x. It should not be necessary at -O0 so disable
from the pipeline for the time being.
---
bolt/test/AArch64/jmp-table-unsupported.s | 2 +-
.../Target/AArch64/AArch64TargetMachine.cpp | 1 -
.../AArch64/GlobalISel/arm64-atomic.ll | 4 +-
.../atomic-anyextending-load-crash.ll | 4 +-
.../AArch64/GlobalISel/invoke-region.ll | 14 +-
.../AArch64/GlobalISel/legalize-exceptions.ll | 9 +-
.../AArch64/GlobalISel/localizer-arm64-tti.ll | 446 ++++++++++--------
.../localizer-propagate-debug-loc.mir | 37 +-
.../GlobalISel/select-fp-anyext-crash.ll | 22 +-
.../GlobalISel/translate-constant-dag.ll | 45 +-
llvm/test/CodeGen/AArch64/O0-pipeline.ll | 2 -
.../CodeGen/AArch64/aarch64-fastcc-stackup.ll | 2 +-
llvm/test/CodeGen/AArch64/cpa-globalisel.ll | 166 +++----
llvm/test/CodeGen/AArch64/phi-dbg.ll | 2 +-
llvm/test/CodeGen/AArch64/popcount.ll | 38 +-
llvm/test/CodeGen/AArch64/pr92062.ll | 2 +-
llvm/test/CodeGen/AArch64/vararg.ll | 16 +-
.../CodeGen/AArch64/win64_vararg_float.ll | 12 +-
.../CodeGen/AArch64/win64_vararg_float_cc.ll | 12 +-
llvm/test/Other/print-changed-machine.ll | 2 +-
20 files changed, 453 insertions(+), 385 deletions(-)
diff --git a/bolt/test/AArch64/jmp-table-unsupported.s b/bolt/test/AArch64/jmp-table-unsupported.s
index 1228149430449..ad0f7cef838af 100644
--- a/bolt/test/AArch64/jmp-table-unsupported.s
+++ b/bolt/test/AArch64/jmp-table-unsupported.s
@@ -101,7 +101,7 @@ SECTIONS {
# JT-OBJDUMP-NORMAL: <handleOptionJumpTable>:
# JT-OBJDUMP-NORMAL: adrp
# JT-OBJDUMP-NORMAL-NEXT: add
-# JT-OBJDUMP-NORMAL-NEXT: ldr
+# JT-OBJDUMP-NORMAL: ldr
# JT-OBJDUMP-NORMAL-NEXT: blr
# RUN: llvm-bolt %t/jt_type_normal.exe --dyno-stats \
diff --git a/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp b/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
index 3aba866458830..3716f7e20c141 100644
--- a/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
+++ b/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
@@ -735,7 +735,6 @@ bool AArch64PassConfig::addIRTranslator() {
void AArch64PassConfig::addPreLegalizeMachineIR() {
if (getOptLevel() == CodeGenOptLevel::None) {
addPass(createAArch64O0PreLegalizerCombiner());
- addPass(new Localizer());
} else {
addPass(createAArch64PreLegalizerCombiner());
addPass(new Localizer());
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/arm64-atomic.ll b/llvm/test/CodeGen/AArch64/GlobalISel/arm64-atomic.ll
index 123df841402fc..8e7858696c96a 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/arm64-atomic.ll
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/arm64-atomic.ll
@@ -760,6 +760,8 @@ define i32 @fetch_and_or(ptr %p) #0 {
; CHECK-NOLSE-O0: ; %bb.0:
; CHECK-NOLSE-O0-NEXT: sub sp, sp, #32
; CHECK-NOLSE-O0-NEXT: str x0, [sp, #16] ; 8-byte Spill
+; CHECK-NOLSE-O0-NEXT: mov w8, #5 ; =0x5
+; CHECK-NOLSE-O0-NEXT: str w8, [sp, #24] ; 4-byte Spill
; CHECK-NOLSE-O0-NEXT: ldr w8, [x0]
; CHECK-NOLSE-O0-NEXT: str w8, [sp, #28] ; 4-byte Spill
; CHECK-NOLSE-O0-NEXT: b LBB8_1
@@ -768,7 +770,7 @@ define i32 @fetch_and_or(ptr %p) #0 {
; CHECK-NOLSE-O0-NEXT: ; Child Loop BB8_2 Depth 2
; CHECK-NOLSE-O0-NEXT: ldr w8, [sp, #28] ; 4-byte Reload
; CHECK-NOLSE-O0-NEXT: ldr x11, [sp, #16] ; 8-byte Reload
-; CHECK-NOLSE-O0-NEXT: mov w9, #5 ; =0x5
+; CHECK-NOLSE-O0-NEXT: ldr w9, [sp, #24] ; 4-byte Reload
; CHECK-NOLSE-O0-NEXT: orr w12, w8, w9
; CHECK-NOLSE-O0-NEXT: LBB8_2: ; %atomicrmw.start
; CHECK-NOLSE-O0-NEXT: ; Parent Loop BB8_1 Depth=1
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/atomic-anyextending-load-crash.ll b/llvm/test/CodeGen/AArch64/GlobalISel/atomic-anyextending-load-crash.ll
index a3d57f05d9c60..2fa022d06da1f 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/atomic-anyextending-load-crash.ll
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/atomic-anyextending-load-crash.ll
@@ -11,10 +11,10 @@ define void @test(ptr %0) {
; CHECK-NEXT: .cfi_def_cfa_offset 144
; CHECK-NEXT: .cfi_offset w30, -8
; CHECK-NEXT: .cfi_offset w29, -16
-; CHECK-NEXT: ldar w8, [x0]
-; CHECK-NEXT: str w8, [sp, #116] ; 4-byte Spill
; CHECK-NEXT: mov x8, #0 ; =0x0
; CHECK-NEXT: str x8, [sp, #120] ; 8-byte Spill
+; CHECK-NEXT: ldar w9, [x0]
+; CHECK-NEXT: str w9, [sp, #116] ; 4-byte Spill
; CHECK-NEXT: blr x8
; CHECK-NEXT: ldr w11, [sp, #116] ; 4-byte Reload
; CHECK-NEXT: ldr x8, [sp, #120] ; 8-byte Reload
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/invoke-region.ll b/llvm/test/CodeGen/AArch64/GlobalISel/invoke-region.ll
index 39ad002a0763f..efb04571817e7 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/invoke-region.ll
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/invoke-region.ll
@@ -12,10 +12,10 @@ define i1 @test_lpad_phi_widen_into_pred() personality ptr @__gxx_personality_v0
; CHECK: bb.1 (%ir-block.0):
; CHECK-NEXT: successors: %bb.3(0x40000000), %bb.2(0x40000000)
; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @global_var
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 42
- ; CHECK-NEXT: G_STORE [[C]](s32), [[GV]](p0) :: (store (s32) into @global_var)
+ ; CHECK-NEXT: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @global_var
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 11
+ ; CHECK-NEXT: G_STORE [[C]](s32), [[GV]](p0) :: (store (s32) into @global_var)
; CHECK-NEXT: [[C2:%[0-9]+]]:_(s16) = G_CONSTANT i16 1
; CHECK-NEXT: G_INVOKE_REGION_START
; CHECK-NEXT: EH_LABEL <mcsymbol >
@@ -31,8 +31,7 @@ define i1 @test_lpad_phi_widen_into_pred() personality ptr @__gxx_personality_v0
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: [[PHI:%[0-9]+]]:_(s32) = G_PHI [[C1]](s32), %bb.1
; CHECK-NEXT: EH_LABEL <mcsymbol >
- ; CHECK-NEXT: [[GV1:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @global_var
- ; CHECK-NEXT: G_STORE [[PHI]](s32), [[GV1]](p0) :: (store (s32) into @global_var)
+ ; CHECK-NEXT: G_STORE [[PHI]](s32), [[GV]](p0) :: (store (s32) into @global_var)
; CHECK-NEXT: [[C3:%[0-9]+]]:_(s16) = G_CONSTANT i16 0
; CHECK-NEXT: G_BR %bb.3
; CHECK-NEXT: {{ $}}
@@ -67,12 +66,12 @@ define i1 @test_lpad_phi_widen_into_pred_ext(ptr %ptr) personality ptr @__gxx_pe
; CHECK-NEXT: liveins: $x0
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
- ; CHECK-NEXT: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @global_var
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 42
+ ; CHECK-NEXT: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @global_var
+ ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 11
; CHECK-NEXT: G_STORE [[C]](s32), [[GV]](p0) :: (store (s32) into @global_var)
; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s8) = G_LOAD [[COPY]](p0) :: (load (s8) from %ir.ptr)
; CHECK-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s8) = G_ASSERT_ZEXT [[LOAD]], 1
- ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 11
; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s16) = G_ANYEXT [[ASSERT_ZEXT]](s8)
; CHECK-NEXT: G_INVOKE_REGION_START
; CHECK-NEXT: EH_LABEL <mcsymbol >
@@ -88,8 +87,7 @@ define i1 @test_lpad_phi_widen_into_pred_ext(ptr %ptr) personality ptr @__gxx_pe
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: [[PHI:%[0-9]+]]:_(s32) = G_PHI [[C1]](s32), %bb.1
; CHECK-NEXT: EH_LABEL <mcsymbol >
- ; CHECK-NEXT: [[GV1:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @global_var
- ; CHECK-NEXT: G_STORE [[PHI]](s32), [[GV1]](p0) :: (store (s32) into @global_var)
+ ; CHECK-NEXT: G_STORE [[PHI]](s32), [[GV]](p0) :: (store (s32) into @global_var)
; CHECK-NEXT: [[C2:%[0-9]+]]:_(s16) = G_CONSTANT i16 0
; CHECK-NEXT: G_BR %bb.3
; CHECK-NEXT: {{ $}}
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-exceptions.ll b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-exceptions.ll
index f7550ceb2799a..1fe8b258687cd 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-exceptions.ll
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-exceptions.ll
@@ -13,10 +13,12 @@ define void @bar() personality ptr @__gxx_personality_v0 {
; CHECK: bb.1 (%ir-block.0):
; CHECK-NEXT: successors: %bb.3(0x40000000), %bb.2(0x40000000)
; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 42
+ ; CHECK-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0.exn.slot
+ ; CHECK-NEXT: [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.1.ehselector.slot
; CHECK-NEXT: G_INVOKE_REGION_START
; CHECK-NEXT: EH_LABEL <mcsymbol >
; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
- ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 42
; CHECK-NEXT: $w0 = COPY [[C]](s32)
; CHECK-NEXT: BL @foo, csr_darwin_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $w0, implicit-def $w0
; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp
@@ -32,9 +34,7 @@ define void @bar() personality ptr @__gxx_personality_v0 {
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x1
; CHECK-NEXT: [[PTRTOINT:%[0-9]+]]:_(s64) = G_PTRTOINT [[COPY1]](p0)
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[PTRTOINT]](s64)
- ; CHECK-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0.exn.slot
; CHECK-NEXT: G_STORE [[COPY]](p0), [[FRAME_INDEX]](p0) :: (store (p0) into %ir.exn.slot)
- ; CHECK-NEXT: [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.1.ehselector.slot
; CHECK-NEXT: G_STORE [[TRUNC]](s32), [[FRAME_INDEX1]](p0) :: (store (s32) into %ir.ehselector.slot)
; CHECK-NEXT: G_BR %bb.4
; CHECK-NEXT: {{ $}}
@@ -42,8 +42,7 @@ define void @bar() personality ptr @__gxx_personality_v0 {
; CHECK-NEXT: RET_ReallyLR
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: bb.4.eh.resume:
- ; CHECK-NEXT: [[FRAME_INDEX2:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0.exn.slot
- ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(p0) = G_LOAD [[FRAME_INDEX2]](p0) :: (dereferenceable load (p0) from %ir.exn.slot)
+ ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(p0) = G_LOAD [[FRAME_INDEX]](p0) :: (dereferenceable load (p0) from %ir.exn.slot)
; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp
; CHECK-NEXT: $x0 = COPY [[LOAD]](p0)
; CHECK-NEXT: BL @_Unwind_Resume, csr_darwin_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $x0
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/localizer-arm64-tti.ll b/llvm/test/CodeGen/AArch64/GlobalISel/localizer-arm64-tti.ll
index c4e07de265edd..dd86bc2cb8d76 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/localizer-arm64-tti.ll
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/localizer-arm64-tti.ll
@@ -16,40 +16,49 @@ target triple = "arm64-apple-ios5.0.0"
define i32 @foo() {
; CHECK-LABEL: name: foo
- ; CHECK: bb.1.entry:
- ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.3(0x40000000)
- ; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
- ; CHECK-NEXT: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var2
- ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 3
- ; CHECK-NEXT: [[GV1:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var3
- ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
- ; CHECK-NEXT: [[GV2:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var1
- ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[GV2]](p0) :: (dereferenceable load (s32) from @var1)
- ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
- ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[LOAD]](s32), [[C3]]
- ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s1) = G_CONSTANT i1 true
- ; CHECK-NEXT: G_BRCOND [[ICMP]](s1), %bb.3
- ; CHECK-NEXT: G_BR %bb.2
- ; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: bb.2.if.then:
- ; CHECK-NEXT: successors: %bb.3(0x80000000)
- ; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: [[GV3:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var2
- ; CHECK-NEXT: [[C5:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
- ; CHECK-NEXT: G_STORE [[C5]](s32), [[GV3]](p0) :: (store (s32) into @var2)
- ; CHECK-NEXT: [[C6:%[0-9]+]]:_(s32) = G_CONSTANT i32 3
- ; CHECK-NEXT: [[GV4:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var1
- ; CHECK-NEXT: G_STORE [[C6]](s32), [[GV4]](p0) :: (store (s32) into @var1)
- ; CHECK-NEXT: [[GV5:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var3
- ; CHECK-NEXT: G_STORE [[C5]](s32), [[GV5]](p0) :: (store (s32) into @var3)
- ; CHECK-NEXT: G_STORE [[C6]](s32), [[GV4]](p0) :: (store (s32) into @var1)
- ; CHECK-NEXT: G_BR %bb.3
- ; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: bb.3.if.end:
- ; CHECK-NEXT: [[C7:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
- ; CHECK-NEXT: $w0 = COPY [[C7]](s32)
- ; CHECK-NEXT: RET_ReallyLR implicit $w0
+ ; CHECK: bb.0.entry:
+ ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: $sp = frame-setup SUBXri $sp, 48, 0
+ ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset <mcsymbol >48
+ ; CHECK-NEXT: $x8 = ADRP target-flags(aarch64-page, aarch64-got) @var1
+ ; CHECK-NEXT: renamable $x8 = LDRXui killed $x8, target-flags(aarch64-pageoff, aarch64-got, aarch64-nc) @var1
+ ; CHECK-NEXT: STRXui $x8, $sp, 0 :: (store (s64) into %stack.5)
+ ; CHECK-NEXT: renamable $w9 = MOVZWi 2, 0
+ ; CHECK-NEXT: STRWui killed $w9, $sp, 3 :: (store (s32) into %stack.4)
+ ; CHECK-NEXT: $x9 = ADRP target-flags(aarch64-page, aarch64-got) @var2
+ ; CHECK-NEXT: renamable $x9 = LDRXui killed $x9, target-flags(aarch64-pageoff, aarch64-got, aarch64-nc) @var2
+ ; CHECK-NEXT: STRXui killed $x9, $sp, 2 :: (store (s64) into %stack.3)
+ ; CHECK-NEXT: renamable $w9 = MOVZWi 3, 0
+ ; CHECK-NEXT: STRWui killed $w9, $sp, 7 :: (store (s32) into %stack.2)
+ ; CHECK-NEXT: $x9 = ADRP target-flags(aarch64-page, aarch64-got) @var3
+ ; CHECK-NEXT: renamable $x9 = LDRXui killed $x9, target-flags(aarch64-pageoff, aarch64-got, aarch64-nc) @var3
+ ; CHECK-NEXT: STRXui killed $x9, $sp, 4 :: (store (s64) into %stack.1)
+ ; CHECK-NEXT: $w9 = ORRWrs $wzr, $wzr, 0
+ ; CHECK-NEXT: STRWui killed $w9, $sp, 11 :: (store (s32) into %stack.0)
+ ; CHECK-NEXT: renamable $w8 = LDRWui renamable $x8, 0 :: (dereferenceable load (s32) from @var1)
+ ; CHECK-NEXT: dead renamable $w8 = SUBSWri killed renamable $w8, 1, 0, implicit-def $nzcv
+ ; CHECK-NEXT: Bcc 1, %bb.2, implicit killed $nzcv
+ ; CHECK-NEXT: B %bb.1
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: bb.1.if.then:
+ ; CHECK-NEXT: successors: %bb.2(0x80000000)
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: $w8 = LDRWui $sp, 7 :: (load (s32) from %stack.2)
+ ; CHECK-NEXT: $x9 = LDRXui $sp, 0 :: (load (s64) from %stack.5)
+ ; CHECK-NEXT: $w10 = LDRWui $sp, 3 :: (load (s32) from %stack.4)
+ ; CHECK-NEXT: $x11 = LDRXui $sp, 4 :: (load (s64) from %stack.1)
+ ; CHECK-NEXT: $x12 = LDRXui $sp, 2 :: (load (s64) from %stack.3)
+ ; CHECK-NEXT: STRWui renamable $w10, renamable $x12, 0 :: (store (s32) into @var2)
+ ; CHECK-NEXT: STRWui renamable $w8, renamable $x9, 0 :: (store (s32) into @var1)
+ ; CHECK-NEXT: STRWui renamable $w10, renamable $x11, 0 :: (store (s32) into @var3)
+ ; CHECK-NEXT: STRWui renamable $w8, renamable $x9, 0 :: (store (s32) into @var1)
+ ; CHECK-NEXT: B %bb.2
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: bb.2.if.end:
+ ; CHECK-NEXT: $w0 = LDRWui $sp, 11 :: (load (s32) from %stack.0)
+ ; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 48, 0
+ ; CHECK-NEXT: RET undef $lr, implicit killed $w0
entry:
%0 = load i32, ptr @var1, align 4
%cmp = icmp eq i32 %0, 1
@@ -75,32 +84,46 @@ if.end:
; we don't localize into the middle of a call sequence instead.
define i32 @darwin_tls() {
; CHECK-LABEL: name: darwin_tls
- ; CHECK: bb.1.entry:
- ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.3(0x40000000)
- ; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @tls_gv
- ; CHECK-NEXT: [[GV1:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var2
- ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
- ; CHECK-NEXT: [[GV2:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var1
- ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[GV2]](p0) :: (dereferenceable load (s32) from @var1)
- ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
- ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[LOAD]](s32), [[C1]]
- ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s1) = G_CONSTANT i1 true
- ; CHECK-NEXT: G_BRCOND [[ICMP]](s1), %bb.3
- ; CHECK-NEXT: G_BR %bb.2
- ; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: bb.2.if.then:
- ; CHECK-NEXT: successors: %bb.3(0x80000000)
- ; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[GV]](p0) :: (dereferenceable load (s32) from @tls_gv)
- ; CHECK-NEXT: [[GV3:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var2
- ; CHECK-NEXT: G_STORE [[LOAD1]](s32), [[GV3]](p0) :: (store (s32) into @var2)
- ; CHECK-NEXT: G_BR %bb.3
- ; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: bb.3.if.end:
- ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
- ; CHECK-NEXT: $w0 = COPY [[C3]](s32)
- ; CHECK-NEXT: RET_ReallyLR implicit $w0
+ ; CHECK: bb.0.entry:
+ ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ ; CHECK-NEXT: liveins: $lr
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: $sp = frame-setup SUBXri $sp, 48, 0
+ ; CHECK-NEXT: frame-setup STPXi killed $fp, killed $lr, $sp, 4 :: (store (s64) into %stack.4), (store (s64) into %stack.3)
+ ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 48
+ ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $w30, -8
+ ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $w29, -16
+ ; CHECK-NEXT: $x8 = ADRP target-flags(aarch64-page, aarch64-got) @var1
+ ; CHECK-NEXT: renamable $x8 = LDRXui killed $x8, target-flags(aarch64-pageoff, aarch64-got, aarch64-nc) @var1
+ ; CHECK-NEXT: $x0 = ADRP target-flags(aarch64-page, aarch64-tls) @tls_gv
+ ; CHECK-NEXT: renamable $x0 = LDRXui killed $x0, target-flags(aarch64-pageoff, aarch64-nc, aarch64-tls) @tls_gv
+ ; CHECK-NEXT: renamable $x9 = LDRXui renamable $x0, 0
+ ; CHECK-NEXT: BLR killed renamable $x9, csr_darwin_aarch64_tls, implicit-def dead $lr, implicit $sp, implicit killed $x0, implicit-def $x0
+ ; CHECK-NEXT: STRXui killed $x0, $sp, 1 :: (store (s64) into %stack.2)
+ ; CHECK-NEXT: $x9 = ADRP target-flags(aarch64-page, aarch64-got) @var2
+ ; CHECK-NEXT: renamable $x9 = LDRXui killed $x9, target-flags(aarch64-pageoff, aarch64-got, aarch64-nc) @var2
+ ; CHECK-NEXT: STRXui killed $x9, $sp, 2 :: (store (s64) into %stack.1)
+ ; CHECK-NEXT: $w9 = ORRWrs $wzr, $wzr, 0
+ ; CHECK-NEXT: STRWui killed $w9, $sp, 7 :: (store (s32) into %stack.0)
+ ; CHECK-NEXT: renamable $w8 = LDRWui killed renamable $x8, 0 :: (dereferenceable load (s32) from @var1)
+ ; CHECK-NEXT: dead renamable $w8 = SUBSWri killed renamable $w8, 1, 0, implicit-def $nzcv
+ ; CHECK-NEXT: Bcc 1, %bb.2, implicit killed $nzcv
+ ; CHECK-NEXT: B %bb.1
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: bb.1.if.then:
+ ; CHECK-NEXT: successors: %bb.2(0x80000000)
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: $x9 = LDRXui $sp, 2 :: (load (s64) from %stack.1)
+ ; CHECK-NEXT: $x8 = LDRXui $sp, 1 :: (load (s64) from %stack.2)
+ ; CHECK-NEXT: renamable $w8 = LDRWui renamable $x8, 0 :: (dereferenceable load (s32) from @tls_gv)
+ ; CHECK-NEXT: STRWui killed renamable $w8, renamable $x9, 0 :: (store (s32) into @var2)
+ ; CHECK-NEXT: B %bb.2
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: bb.2.if.end:
+ ; CHECK-NEXT: $w0 = LDRWui $sp, 7 :: (load (s32) from %stack.0)
+ ; CHECK-NEXT: $fp, $lr = frame-destroy LDPXi $sp, 4 :: (load (s64) from %stack.4), (load (s64) from %stack.3)
+ ; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 48, 0
+ ; CHECK-NEXT: RET undef $lr, implicit killed $w0
entry:
%0 = load i32, ptr @var1, align 4
%cmp = icmp eq i32 %0, 1
@@ -117,42 +140,53 @@ if.end:
define i32 @imm_cost_too_large_cost_of_2() {
; CHECK-LABEL: name: imm_cost_too_large_cost_of_2
- ; CHECK: bb.1.entry:
- ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.4(0x40000000)
- ; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var2
- ; CHECK-NEXT: [[GV1:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var3
- ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
- ; CHECK-NEXT: [[GV2:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var1
- ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[GV2]](p0) :: (dereferenceable load (s32) from @var1)
- ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2228259
- ; CHECK-NEXT: [[CONSTANT_FOLD_BARRIER:%[0-9]+]]:_(s32) = G_CONSTANT_FOLD_BARRIER [[C1]]
- ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
- ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[LOAD]](s32), [[C2]]
- ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s1) = G_CONSTANT i1 true
- ; CHECK-NEXT: G_BRCOND [[ICMP]](s1), %bb.4
- ; CHECK-NEXT: G_BR %bb.2
- ; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: bb.2.if.then:
+ ; CHECK: bb.0.entry:
+ ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.3(0x40000000)
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: $sp = frame-setup SUBXri $sp, 48, 0
+ ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset <mcsymbol >48
+ ; CHECK-NEXT: $x8 = ADRP target-flags(aarch64-page, aarch64-got) @var1
+ ; CHECK-NEXT: renamable $x8 = LDRXui killed $x8, target-flags(aarch64-pageoff, aarch64-got, aarch64-nc) @var1
+ ; CHECK-NEXT: STRXui $x8, $sp, 1 :: (store (s64) into %stack.4)
+ ; CHECK-NEXT: renamable $w9 = MOVZWi 65501, 0
+ ; CHECK-NEXT: renamable $w9 = MOVKWi $w9, 65501, 16
+ ; CHECK-NEXT: STRWui killed $w9, $sp, 5 :: (store (s32) into %stack.3)
+ ; CHECK-NEXT: $x9 = ADRP target-flags(aarch64-page, aarch64-got) @var2
+ ; CHECK-NEXT: renamable $x9 = LDRXui killed $x9, target-flags(aarch64-pageoff, aarch64-got, aarch64-nc) @var2
+ ; CHECK-NEXT: STRXui killed $x9, $sp, 3 :: (store (s64) into %stack.2)
+ ; CHECK-NEXT: $x9 = ADRP target-flags(aarch64-page, aarch64-got) @var3
+ ; CHECK-NEXT: renamable $x9 = LDRXui killed $x9, target-flags(aarch64-pageoff, aarch64-got, aarch64-nc) @var3
+ ; CHECK-NEXT: STRXui killed $x9, $sp, 4 :: (store (s64) into %stack.1)
+ ; CHECK-NEXT: $w9 = ORRWrs $wzr, $wzr, 0
+ ; CHECK-NEXT: STRWui killed $w9, $sp, 11 :: (store (s32) into %stack.0)
+ ; CHECK-NEXT: renamable $w8 = LDRWui renamable $x8, 0 :: (dereferenceable load (s32) from @var1)
+ ; CHECK-NEXT: dead renamable $w8 = SUBSWri killed renamable $w8, 1, 0, implicit-def $nzcv
+ ; CHECK-NEXT: Bcc 1, %bb.3, implicit killed $nzcv
+ ; CHECK-NEXT: B %bb.1
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: bb.1.if.then:
+ ; CHECK-NEXT: successors: %bb.2(0x80000000)
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: $w8 = LDRWui $sp, 5 :: (load (s32) from %stack.3)
+ ; CHECK-NEXT: $x9 = LDRXui $sp, 3 :: (load (s64) from %stack.2)
+ ; CHECK-NEXT: STRWui renamable $w8, renamable $x9, 0 :: (store (s32) into @var2)
+ ; CHECK-NEXT: B %bb.2
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: bb.2.if.then2:
; CHECK-NEXT: successors: %bb.3(0x80000000)
; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: [[GV3:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var2
- ; CHECK-NEXT: G_STORE [[CONSTANT_FOLD_BARRIER]](s32), [[GV3]](p0) :: (store (s32) into @var2)
- ; CHECK-NEXT: G_BR %bb.3
- ; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: bb.3.if.then2:
- ; CHECK-NEXT: successors: %bb.4(0x80000000)
- ; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: [[GV4:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var1
- ; CHECK-NEXT: G_STORE [[CONSTANT_FOLD_BARRIER]](s32), [[GV4]](p0) :: (store (s32) into @var1)
- ; CHECK-NEXT: G_BR %bb.4
+ ; CHECK-NEXT: $w8 = LDRWui $sp, 5 :: (load (s32) from %stack.3)
+ ; CHECK-NEXT: $x9 = LDRXui $sp, 1 :: (load (s64) from %stack.4)
+ ; CHECK-NEXT: STRWui renamable $w8, renamable $x9, 0 :: (store (s32) into @var1)
+ ; CHECK-NEXT: B %bb.3
; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: bb.4.if.end:
- ; CHECK-NEXT: [[GV5:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var3
- ; CHECK-NEXT: G_STORE [[CONSTANT_FOLD_BARRIER]](s32), [[GV5]](p0) :: (store (s32) into @var3)
- ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
- ; CHECK-NEXT: $w0 = COPY [[C4]](s32)
- ; CHECK-NEXT: RET_ReallyLR implicit $w0
+ ; CHECK-NEXT: bb.3.if.end:
+ ; CHECK-NEXT: $w0 = LDRWui $sp, 11 :: (load (s32) from %stack.0)
+ ; CHECK-NEXT: $w8 = LDRWui $sp, 5 :: (load (s32) from %stack.3)
+ ; CHECK-NEXT: $x9 = LDRXui $sp, 4 :: (load (s64) from %stack.1)
+ ; CHECK-NEXT: STRWui killed renamable $w8, killed renamable $x9, 0 :: (store (s32) into @var3)
+ ; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 48, 0
+ ; CHECK-NEXT: RET undef $lr, implicit killed $w0
entry:
%0 = load i32, ptr @var1, align 4
%cst1 = bitcast i32 -2228259 to i32
@@ -174,42 +208,53 @@ if.end:
define i64 @imm_cost_too_large_cost_of_4() {
; CHECK-LABEL: name: imm_cost_too_large_cost_of_4
- ; CHECK: bb.1.entry:
- ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.4(0x40000000)
- ; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var2_64
- ; CHECK-NEXT: [[GV1:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var3_64
- ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
- ; CHECK-NEXT: [[GV2:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var1_64
- ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[GV2]](p0) :: (dereferenceable load (s64) from @var1_64, align 4)
- ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 -2228259
- ; CHECK-NEXT: [[CONSTANT_FOLD_BARRIER:%[0-9]+]]:_(s64) = G_CONSTANT_FOLD_BARRIER [[C1]]
- ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
- ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[LOAD]](s64), [[C2]]
- ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s1) = G_CONSTANT i1 true
- ; CHECK-NEXT: G_BRCOND [[ICMP]](s1), %bb.4
- ; CHECK-NEXT: G_BR %bb.2
- ; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: bb.2.if.then:
+ ; CHECK: bb.0.entry:
+ ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.3(0x40000000)
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: $sp = frame-setup SUBXri $sp, 48, 0
+ ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset <mcsymbol >48
+ ; CHECK-NEXT: $x8 = ADRP target-flags(aarch64-page, aarch64-got) @var1_64
+ ; CHECK-NEXT: renamable $x8 = LDRXui killed $x8, target-flags(aarch64-pageoff, aarch64-got, aarch64-nc) @var1_64
+ ; CHECK-NEXT: STRXui $x8, $sp, 1 :: (store (s64) into %stack.4)
+ ; CHECK-NEXT: renamable $x9 = MOVNXi 34, 0
+ ; CHECK-NEXT: renamable $x9 = MOVKXi $x9, 65501, 16
+ ; CHECK-NEXT: STRXui killed $x9, $sp, 2 :: (store (s64) into %stack.3)
+ ; CHECK-NEXT: $x9 = ADRP target-flags(aarch64-page, aarch64-got) @var2_64
+ ; CHECK-NEXT: renamable $x9 = LDRXui killed $x9, target-flags(aarch64-pageoff, aarch64-got, aarch64-nc) @var2_64
+ ; CHECK-NEXT: STRXui killed $x9, $sp, 3 :: (store (s64) into %stack.2)
+ ; CHECK-NEXT: $x9 = ADRP target-flags(aarch64-page, aarch64-got) @var3_64
+ ; CHECK-NEXT: renamable $x9 = LDRXui killed $x9, target-flags(aarch64-pageoff, aarch64-got, aarch64-nc) @var3_64
+ ; CHECK-NEXT: STRXui killed $x9, $sp, 4 :: (store (s64) into %stack.1)
+ ; CHECK-NEXT: $x9 = ORRXrs $xzr, $xzr, 0
+ ; CHECK-NEXT: STRXui killed $x9, $sp, 5 :: (store (s64) into %stack.0)
+ ; CHECK-NEXT: renamable $x8 = LDRXui renamable $x8, 0 :: (dereferenceable load (s64) from @var1_64, align 4)
+ ; CHECK-NEXT: dead renamable $x8 = SUBSXri killed renamable $x8, 1, 0, implicit-def $nzcv
+ ; CHECK-NEXT: Bcc 1, %bb.3, implicit killed $nzcv
+ ; CHECK-NEXT: B %bb.1
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: bb.1.if.then:
+ ; CHECK-NEXT: successors: %bb.2(0x80000000)
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: $x8 = LDRXui $sp, 2 :: (load (s64) from %stack.3)
+ ; CHECK-NEXT: $x9 = LDRXui $sp, 3 :: (load (s64) from %stack.2)
+ ; CHECK-NEXT: STRXui renamable $x8, renamable $x9, 0 :: (store (s64) into @var2_64)
+ ; CHECK-NEXT: B %bb.2
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: bb.2.if.then2:
; CHECK-NEXT: successors: %bb.3(0x80000000)
; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: [[GV3:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var2_64
- ; CHECK-NEXT: G_STORE [[CONSTANT_FOLD_BARRIER]](s64), [[GV3]](p0) :: (store (s64) into @var2_64)
- ; CHECK-NEXT: G_BR %bb.3
- ; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: bb.3.if.then2:
- ; CHECK-NEXT: successors: %bb.4(0x80000000)
- ; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: [[GV4:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var1_64
- ; CHECK-NEXT: G_STORE [[CONSTANT_FOLD_BARRIER]](s64), [[GV4]](p0) :: (store (s64) into @var1_64)
- ; CHECK-NEXT: G_BR %bb.4
+ ; CHECK-NEXT: $x8 = LDRXui $sp, 2 :: (load (s64) from %stack.3)
+ ; CHECK-NEXT: $x9 = LDRXui $sp, 1 :: (load (s64) from %stack.4)
+ ; CHECK-NEXT: STRXui renamable $x8, renamable $x9, 0 :: (store (s64) into @var1_64)
+ ; CHECK-NEXT: B %bb.3
; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: bb.4.if.end:
- ; CHECK-NEXT: [[GV5:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var3_64
- ; CHECK-NEXT: G_STORE [[CONSTANT_FOLD_BARRIER]](s64), [[GV5]](p0) :: (store (s64) into @var3_64)
- ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
- ; CHECK-NEXT: $x0 = COPY [[C4]](s64)
- ; CHECK-NEXT: RET_ReallyLR implicit $x0
+ ; CHECK-NEXT: bb.3.if.end:
+ ; CHECK-NEXT: $x0 = LDRXui $sp, 5 :: (load (s64) from %stack.0)
+ ; CHECK-NEXT: $x8 = LDRXui $sp, 2 :: (load (s64) from %stack.3)
+ ; CHECK-NEXT: $x9 = LDRXui $sp, 4 :: (load (s64) from %stack.1)
+ ; CHECK-NEXT: STRXui killed renamable $x8, killed renamable $x9, 0 :: (store (s64) into @var3_64)
+ ; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 48, 0
+ ; CHECK-NEXT: RET undef $lr, implicit killed $x0
entry:
%0 = load i64, ptr @var1_64, align 4
%cst1 = bitcast i64 -2228259 to i64
@@ -231,42 +276,56 @@ if.end:
define i64 @f64_imm_cost_too_high(double %a) {
; CHECK-LABEL: name: f64_imm_cost_too_high
- ; CHECK: bb.1.entry:
- ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.4(0x40000000)
+ ; CHECK: bb.0.entry:
+ ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.3(0x40000000)
; CHECK-NEXT: liveins: $d0
; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_FCONSTANT double 1.000000e-02
- ; CHECK-NEXT: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var2_64
- ; CHECK-NEXT: [[GV1:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var3_64
- ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
- ; CHECK-NEXT: [[GV2:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var1_64
- ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[GV2]](p0) :: (dereferenceable load (s64) from @var1_64, align 4)
- ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
- ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[LOAD]](s64), [[C2]]
- ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s1) = G_CONSTANT i1 true
- ; CHECK-NEXT: G_BRCOND [[ICMP]](s1), %bb.4
- ; CHECK-NEXT: G_BR %bb.2
- ; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: bb.2.if.then:
+ ; CHECK-NEXT: $sp = frame-setup SUBXri $sp, 48, 0
+ ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset <mcsymbol >48
+ ; CHECK-NEXT: $x8 = ADRP target-flags(aarch64-page, aarch64-got) @var1_64
+ ; CHECK-NEXT: renamable $x8 = LDRXui killed $x8, target-flags(aarch64-pageoff, aarch64-got, aarch64-nc) @var1_64
+ ; CHECK-NEXT: STRXui $x8, $sp, 1 :: (store (s64) into %stack.4)
+ ; CHECK-NEXT: renamable $x9 = MOVZXi 5243, 0
+ ; CHECK-NEXT: renamable $x9 = MOVKXi $x9, 18350, 16
+ ; CHECK-NEXT: renamable $x9 = MOVKXi $x9, 31457, 32
+ ; CHECK-NEXT: renamable $x9 = MOVKXi $x9, 16260, 48
+ ; CHECK-NEXT: STRXui killed $x9, $sp, 2 :: (store (s64) into %stack.3)
+ ; CHECK-NEXT: $x9 = ADRP target-flags(aarch64-page, aarch64-got) @var2_64
+ ; CHECK-NEXT: renamable $x9 = LDRXui killed $x9, target-flags(aarch64-pageoff, aarch64-got, aarch64-nc) @var2_64
+ ; CHECK-NEXT: STRXui killed $x9, $sp, 3 :: (store (s64) into %stack.2)
+ ; CHECK-NEXT: $x9 = ADRP target-flags(aarch64-page, aarch64-got) @var3_64
+ ; CHECK-NEXT: renamable $x9 = LDRXui killed $x9, target-flags(aarch64-pageoff, aarch64-got, aarch64-nc) @var3_64
+ ; CHECK-NEXT: STRXui killed $x9, $sp, 4 :: (store (s64) into %stack.1)
+ ; CHECK-NEXT: $x9 = ORRXrs $xzr, $xzr, 0
+ ; CHECK-NEXT: STRXui killed $x9, $sp, 5 :: (store (s64) into %stack.0)
+ ; CHECK-NEXT: renamable $x8 = LDRXui renamable $x8, 0 :: (dereferenceable load (s64) from @var1_64, align 4)
+ ; CHECK-NEXT: dead renamable $x8 = SUBSXri killed renamable $x8, 1, 0, implicit-def $nzcv
+ ; CHECK-NEXT: Bcc 1, %bb.3, implicit killed $nzcv
+ ; CHECK-NEXT: B %bb.1
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: bb.1.if.then:
+ ; CHECK-NEXT: successors: %bb.2(0x80000000)
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: $x8 = LDRXui $sp, 2 :: (load (s64) from %stack.3)
+ ; CHECK-NEXT: $x9 = LDRXui $sp, 3 :: (load (s64) from %stack.2)
+ ; CHECK-NEXT: STRXui renamable $x8, renamable $x9, 0 :: (store (s64) into @var2_64)
+ ; CHECK-NEXT: B %bb.2
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: bb.2.if.then2:
; CHECK-NEXT: successors: %bb.3(0x80000000)
; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: [[GV3:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var2_64
- ; CHECK-NEXT: G_STORE [[C]](s64), [[GV3]](p0) :: (store (s64) into @var2_64)
- ; CHECK-NEXT: G_BR %bb.3
- ; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: bb.3.if.then2:
- ; CHECK-NEXT: successors: %bb.4(0x80000000)
+ ; CHECK-NEXT: $x8 = LDRXui $sp, 2 :: (load (s64) from %stack.3)
+ ; CHECK-NEXT: $x9 = LDRXui $sp, 1 :: (load (s64) from %stack.4)
+ ; CHECK-NEXT: STRXui renamable $x8, renamable $x9, 0 :: (store (s64) into @var1_64)
+ ; CHECK-NEXT: B %bb.3
; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: [[GV4:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var1_64
- ; CHECK-NEXT: G_STORE [[C]](s64), [[GV4]](p0) :: (store (s64) into @var1_64)
- ; CHECK-NEXT: G_BR %bb.4
- ; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: bb.4.if.end:
- ; CHECK-NEXT: [[GV5:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var3_64
- ; CHECK-NEXT: G_STORE [[C]](s64), [[GV5]](p0) :: (store (s64) into @var3_64)
- ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
- ; CHECK-NEXT: $x0 = COPY [[C4]](s64)
- ; CHECK-NEXT: RET_ReallyLR implicit $x0
+ ; CHECK-NEXT: bb.3.if.end:
+ ; CHECK-NEXT: $x0 = LDRXui $sp, 5 :: (load (s64) from %stack.0)
+ ; CHECK-NEXT: $x8 = LDRXui $sp, 2 :: (load (s64) from %stack.3)
+ ; CHECK-NEXT: $x9 = LDRXui $sp, 4 :: (load (s64) from %stack.1)
+ ; CHECK-NEXT: STRXui killed renamable $x8, killed renamable $x9, 0 :: (store (s64) into @var3_64)
+ ; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 48, 0
+ ; CHECK-NEXT: RET undef $lr, implicit killed $x0
entry:
%0 = load i64, ptr @var1_64, align 4
%cmp = icmp eq i64 %0, 1
@@ -287,45 +346,48 @@ if.end:
define i64 @f64_imm_cheap(double %a) {
; CHECK-LABEL: name: f64_imm_cheap
- ; CHECK: bb.1.entry:
- ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.4(0x40000000)
+ ; CHECK: bb.0.entry:
+ ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.3(0x40000000)
; CHECK-NEXT: liveins: $d0
; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_FCONSTANT double 0.000000e+00
- ; CHECK-NEXT: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var2_64
- ; CHECK-NEXT: [[GV1:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var3_64
- ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
- ; CHECK-NEXT: [[GV2:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var1_64
- ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[GV2]](p0) :: (dereferenceable load (s64) from @var1_64, align 4)
- ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
- ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[LOAD]](s64), [[C2]]
- ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s1) = G_CONSTANT i1 true
- ; CHECK-NEXT: G_BRCOND [[ICMP]](s1), %bb.4
- ; CHECK-NEXT: G_BR %bb.2
- ; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: bb.2.if.then:
+ ; CHECK-NEXT: $sp = frame-setup SUBXri $sp, 32, 0
+ ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset <mcsymbol >32
+ ; CHECK-NEXT: $x8 = ADRP target-flags(aarch64-page, aarch64-got) @var1_64
+ ; CHECK-NEXT: renamable $x8 = LDRXui killed $x8, target-flags(aarch64-pageoff, aarch64-got, aarch64-nc) @var1_64
+ ; CHECK-NEXT: STRXui $x8, $sp, 0 :: (store (s64) into %stack.3)
+ ; CHECK-NEXT: $x9 = ADRP target-flags(aarch64-page, aarch64-got) @var2_64
+ ; CHECK-NEXT: renamable $x9 = LDRXui killed $x9, target-flags(aarch64-pageoff, aarch64-got, aarch64-nc) @var2_64
+ ; CHECK-NEXT: STRXui killed $x9, $sp, 1 :: (store (s64) into %stack.2)
+ ; CHECK-NEXT: $x9 = ADRP target-flags(aarch64-page, aarch64-got) @var3_64
+ ; CHECK-NEXT: renamable $x9 = LDRXui killed $x9, target-flags(aarch64-pageoff, aarch64-got, aarch64-nc) @var3_64
+ ; CHECK-NEXT: STRXui killed $x9, $sp, 2 :: (store (s64) into %stack.1)
+ ; CHECK-NEXT: $x9 = ORRXrs $xzr, $xzr, 0
+ ; CHECK-NEXT: STRXui killed $x9, $sp, 3 :: (store (s64) into %stack.0)
+ ; CHECK-NEXT: renamable $x8 = LDRXui renamable $x8, 0 :: (dereferenceable load (s64) from @var1_64, align 4)
+ ; CHECK-NEXT: dead renamable $x8 = SUBSXri killed renamable $x8, 1, 0, implicit-def $nzcv
+ ; CHECK-NEXT: Bcc 1, %bb.3, implicit killed $nzcv
+ ; CHECK-NEXT: B %bb.1
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: bb.1.if.then:
+ ; CHECK-NEXT: successors: %bb.2(0x80000000)
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: $x8 = LDRXui $sp, 1 :: (load (s64) from %stack.2)
+ ; CHECK-NEXT: STRXui $xzr, renamable $x8, 0 :: (store (s64) into @var2_64)
+ ; CHECK-NEXT: B %bb.2
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: bb.2.if.then2:
; CHECK-NEXT: successors: %bb.3(0x80000000)
; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: [[GV3:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var2_64
- ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s64) = G_FCONSTANT double 0.000000e+00
- ; CHECK-NEXT: G_STORE [[C4]](s64), [[GV3]](p0) :: (store (s64) into @var2_64)
- ; CHECK-NEXT: G_BR %bb.3
- ; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: bb.3.if.then2:
- ; CHECK-NEXT: successors: %bb.4(0x80000000)
- ; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: [[C5:%[0-9]+]]:_(s64) = G_FCONSTANT double 0.000000e+00
- ; CHECK-NEXT: [[GV4:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var1_64
- ; CHECK-NEXT: G_STORE [[C5]](s64), [[GV4]](p0) :: (store (s64) into @var1_64)
- ; CHECK-NEXT: G_BR %bb.4
- ; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: bb.4.if.end:
- ; CHECK-NEXT: [[GV5:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var3_64
- ; CHECK-NEXT: [[C6:%[0-9]+]]:_(s64) = G_FCONSTANT double 0.000000e+00
- ; CHECK-NEXT: G_STORE [[C6]](s64), [[GV5]](p0) :: (store (s64) into @var3_64)
- ; CHECK-NEXT: [[C7:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
- ; CHECK-NEXT: $x0 = COPY [[C7]](s64)
- ; CHECK-NEXT: RET_ReallyLR implicit $x0
+ ; CHECK-NEXT: $x8 = LDRXui $sp, 0 :: (load (s64) from %stack.3)
+ ; CHECK-NEXT: STRXui $xzr, renamable $x8, 0 :: (store (s64) into @var1_64)
+ ; CHECK-NEXT: B %bb.3
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: bb.3.if.end:
+ ; CHECK-NEXT: $x0 = LDRXui $sp, 3 :: (load (s64) from %stack.0)
+ ; CHECK-NEXT: $x8 = LDRXui $sp, 2 :: (load (s64) from %stack.1)
+ ; CHECK-NEXT: STRXui $xzr, killed renamable $x8, 0 :: (store (s64) into @var3_64)
+ ; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 32, 0
+ ; CHECK-NEXT: RET undef $lr, implicit killed $x0
entry:
%0 = load i64, ptr @var1_64, align 4
%cmp = icmp eq i64 %0, 1
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/localizer-propagate-debug-loc.mir b/llvm/test/CodeGen/AArch64/GlobalISel/localizer-propagate-debug-loc.mir
index 903bf27cef105..16e7cfa284a59 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/localizer-propagate-debug-loc.mir
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/localizer-propagate-debug-loc.mir
@@ -1,6 +1,5 @@
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
-# RUN: llc -O0 %s -global-isel -start-before localizer \
-# RUN: -stop-after localizer -o - | FileCheck --check-prefix=CHECK %s
+# RUN: llc -O0 %s -global-isel -run-pass=localizer -o - | FileCheck --check-prefix=CHECK %s
--- |
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
target triple = "arm64-apple-macosx12.0.0"
@@ -76,12 +75,12 @@ body: |
; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: [[C:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 3
- ; CHECK-NEXT: [[ADRP:%[0-9]+]]:gpr64(p0) = ADRP target-flags(aarch64-page) @C, debug-location !DILocation(line: 0, scope: !18)
- ; CHECK-NEXT: [[ADD_LOW:%[0-9]+]]:gpr(p0) = G_ADD_LOW [[ADRP]](p0), target-flags(aarch64-pageoff, aarch64-nc) @C, debug-location !DILocation(line: 0, scope: !18)
- ; CHECK-NEXT: [[ADRP1:%[0-9]+]]:gpr64(p0) = ADRP target-flags(aarch64-page) @B, debug-location !DILocation(line: 0, scope: !14)
- ; CHECK-NEXT: [[ADD_LOW1:%[0-9]+]]:gpr(p0) = G_ADD_LOW [[ADRP1]](p0), target-flags(aarch64-pageoff, aarch64-nc) @B, debug-location !DILocation(line: 0, scope: !14)
- ; CHECK-NEXT: [[ADRP2:%[0-9]+]]:gpr64(p0) = ADRP target-flags(aarch64-page) @A, debug-location !DILocation(line: 0, scope: !11)
- ; CHECK-NEXT: [[ADD_LOW2:%[0-9]+]]:gpr(p0) = G_ADD_LOW [[ADRP2]](p0), target-flags(aarch64-pageoff, aarch64-nc) @A, debug-location !DILocation(line: 0, scope: !11)
+ ; CHECK-NEXT: [[ADRP:%[0-9]+]]:gpr64(p0) = ADRP target-flags(aarch64-page) @C, debug-location !DILocation(line: 0, scope: !18)
+ ; CHECK-NEXT: [[ADD_LOW:%[0-9]+]]:gpr(p0) = G_ADD_LOW [[ADRP]](p0), target-flags(aarch64-pageoff, aarch64-nc) @C, debug-location !DILocation(line: 0, scope: !18)
+ ; CHECK-NEXT: [[ADRP1:%[0-9]+]]:gpr64(p0) = ADRP target-flags(aarch64-page) @B, debug-location !DILocation(line: 0, scope: !14)
+ ; CHECK-NEXT: [[ADD_LOW1:%[0-9]+]]:gpr(p0) = G_ADD_LOW [[ADRP1]](p0), target-flags(aarch64-pageoff, aarch64-nc) @B, debug-location !DILocation(line: 0, scope: !14)
+ ; CHECK-NEXT: [[ADRP2:%[0-9]+]]:gpr64(p0) = ADRP target-flags(aarch64-page) @A, debug-location !DILocation(line: 0, scope: !11)
+ ; CHECK-NEXT: [[ADD_LOW2:%[0-9]+]]:gpr(p0) = G_ADD_LOW [[ADRP2]](p0), target-flags(aarch64-pageoff, aarch64-nc) @A, debug-location !DILocation(line: 0, scope: !11)
; CHECK-NEXT: [[FRAME_INDEX:%[0-9]+]]:gpr(p0) = G_FRAME_INDEX %stack.0
; CHECK-NEXT: [[C1:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 0
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr(s32) = COPY [[C1]](s32)
@@ -94,9 +93,9 @@ body: |
; CHECK-NEXT: bb.1:
; CHECK-NEXT: successors: %bb.5(0x80000000)
; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: [[ADRP3:%[0-9]+]]:gpr64(p0) = ADRP target-flags(aarch64-page) @A, debug-location !10
- ; CHECK-NEXT: [[ADD_LOW3:%[0-9]+]]:gpr(p0) = G_ADD_LOW [[ADRP3]](p0), target-flags(aarch64-pageoff, aarch64-nc) @A, debug-location !10
- ; CHECK-NEXT: [[LOAD:%[0-9]+]]:gpr(s32) = G_LOAD [[ADD_LOW3]](p0), debug-location !10 :: (dereferenceable load (s32))
+ ; CHECK-NEXT: [[ADRP3:%[0-9]+]]:gpr64(p0) = ADRP target-flags(aarch64-page) @A, debug-location !10
+ ; CHECK-NEXT: [[ADD_LOW3:%[0-9]+]]:gpr(p0) = G_ADD_LOW [[ADRP3]](p0), target-flags(aarch64-pageoff, aarch64-nc) @A, debug-location !10
+ ; CHECK-NEXT: [[LOAD:%[0-9]+]]:gpr(s32) = G_LOAD [[ADD_LOW3]](p0), debug-location !10 :: (dereferenceable load (s32))
; CHECK-NEXT: [[FRAME_INDEX1:%[0-9]+]]:gpr(p0) = G_FRAME_INDEX %stack.0
; CHECK-NEXT: G_STORE [[LOAD]](s32), [[FRAME_INDEX1]](p0) :: (volatile store (s32) into %ir.1)
; CHECK-NEXT: G_BR %bb.5
@@ -114,22 +113,22 @@ body: |
; CHECK-NEXT: bb.3:
; CHECK-NEXT: successors: %bb.5(0x80000000)
; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: [[ADRP4:%[0-9]+]]:gpr64(p0) = ADRP target-flags(aarch64-page) @B, debug-location !DILocation(line: 0, scope: !14)
- ; CHECK-NEXT: [[ADD_LOW4:%[0-9]+]]:gpr(p0) = G_ADD_LOW [[ADRP4]](p0), target-flags(aarch64-pageoff, aarch64-nc) @B, debug-location !DILocation(line: 0, scope: !14)
- ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:gpr(s32) = G_LOAD [[ADD_LOW4]](p0), debug-location !13 :: (dereferenceable load (s32))
+ ; CHECK-NEXT: [[ADRP4:%[0-9]+]]:gpr64(p0) = ADRP target-flags(aarch64-page) @B, debug-location !DILocation(line: 0, scope: !14)
+ ; CHECK-NEXT: [[ADD_LOW4:%[0-9]+]]:gpr(p0) = G_ADD_LOW [[ADRP4]](p0), target-flags(aarch64-pageoff, aarch64-nc) @B, debug-location !DILocation(line: 0, scope: !14)
+ ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:gpr(s32) = G_LOAD [[ADD_LOW4]](p0), debug-location !13 :: (dereferenceable load (s32))
; CHECK-NEXT: [[FRAME_INDEX2:%[0-9]+]]:gpr(p0) = G_FRAME_INDEX %stack.0
; CHECK-NEXT: G_STORE [[LOAD1]](s32), [[FRAME_INDEX2]](p0) :: (volatile store (s32) into %ir.1)
- ; CHECK-NEXT: [[LOAD2:%[0-9]+]]:gpr(s32) = G_LOAD [[ADD_LOW4]](p0), debug-location !16 :: (dereferenceable load (s32))
+ ; CHECK-NEXT: [[LOAD2:%[0-9]+]]:gpr(s32) = G_LOAD [[ADD_LOW4]](p0), debug-location !16 :: (dereferenceable load (s32))
; CHECK-NEXT: G_STORE [[LOAD2]](s32), [[FRAME_INDEX2]](p0) :: (volatile store (s32) into %ir.1)
; CHECK-NEXT: G_BR %bb.5
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: bb.4:
; CHECK-NEXT: successors: %bb.5(0x80000000)
; CHECK-NEXT: {{ $}}
- ; CHECK-NEXT: [[ADRP5:%[0-9]+]]:gpr64(p0) = ADRP target-flags(aarch64-page) @C, debug-location !17
- ; CHECK-NEXT: [[ADD_LOW5:%[0-9]+]]:gpr(p0) = G_ADD_LOW [[ADRP5]](p0), target-flags(aarch64-pageoff, aarch64-nc) @C, debug-location !17
- ; CHECK-NEXT: [[C5:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 3, debug-location !17
- ; CHECK-NEXT: G_STORE [[C5]](s32), [[ADD_LOW5]](p0), debug-location !17 :: (store (s32) into @C)
+ ; CHECK-NEXT: [[ADRP5:%[0-9]+]]:gpr64(p0) = ADRP target-flags(aarch64-page) @C, debug-location !17
+ ; CHECK-NEXT: [[ADD_LOW5:%[0-9]+]]:gpr(p0) = G_ADD_LOW [[ADRP5]](p0), target-flags(aarch64-pageoff, aarch64-nc) @C, debug-location !17
+ ; CHECK-NEXT: [[C5:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 3, debug-location !17
+ ; CHECK-NEXT: G_STORE [[C5]](s32), [[ADD_LOW5]](p0), debug-location !17 :: (store (s32) into @C)
; CHECK-NEXT: G_BR %bb.5
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: bb.5:
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/select-fp-anyext-crash.ll b/llvm/test/CodeGen/AArch64/GlobalISel/select-fp-anyext-crash.ll
index a63636e666e8f..4b57ef1d2d24f 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/select-fp-anyext-crash.ll
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/select-fp-anyext-crash.ll
@@ -13,19 +13,19 @@ define i32 @test() {
; CHECK-NEXT: .cfi_def_cfa_offset 80
; CHECK-NEXT: .cfi_offset w30, -8
; CHECK-NEXT: .cfi_offset w29, -16
+; CHECK-NEXT: mov x9, #0 ; =0x0
; CHECK-NEXT: mov x8, #0 ; =0x0
-; CHECK-NEXT: ldr s0, [x8]
+; CHECK-NEXT: mov w10, #0 ; =0x0
+; CHECK-NEXT: str w10, [sp, #60] ; 4-byte Spill
+; CHECK-NEXT: ldr s0, [x9]
; CHECK-NEXT: ; kill: def $d0 killed $s0
-; CHECK-NEXT: mov x8, sp
-; CHECK-NEXT: mov w9, #0 ; =0x0
-; CHECK-NEXT: str w9, [sp, #60] ; 4-byte Spill
-; CHECK-NEXT: str xzr, [x8]
-; CHECK-NEXT: str xzr, [x8, #8]
-; CHECK-NEXT: str xzr, [x8, #16]
-; CHECK-NEXT: str xzr, [x8, #24]
-; CHECK-NEXT: str d0, [x8, #32]
-; CHECK-NEXT: str xzr, [x8, #40]
-; CHECK-NEXT: mov x8, #0 ; =0x0
+; CHECK-NEXT: mov x9, sp
+; CHECK-NEXT: str xzr, [x9]
+; CHECK-NEXT: str xzr, [x9, #8]
+; CHECK-NEXT: str xzr, [x9, #16]
+; CHECK-NEXT: str xzr, [x9, #24]
+; CHECK-NEXT: str d0, [x9, #32]
+; CHECK-NEXT: str xzr, [x9, #40]
; CHECK-NEXT: mov x0, x8
; CHECK-NEXT: blr x8
; CHECK-NEXT: ldr w0, [sp, #60] ; 4-byte Reload
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/translate-constant-dag.ll b/llvm/test/CodeGen/AArch64/GlobalISel/translate-constant-dag.ll
index 9a025aa35b874..ece0a3d8e8a48 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/translate-constant-dag.ll
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/translate-constant-dag.ll
@@ -6,28 +6,29 @@
define void @test_const(ptr %dst) {
; CHECK-LABEL: name: test_const
; CHECK: bb.1.entry:
- ; CHECK: liveins: $x0
- ; CHECK: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
- ; CHECK: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 10
- ; CHECK: STRBBui [[MOVi32imm]], [[COPY]], 0 :: (store (s8) into %ir.dst)
- ; CHECK: [[MOVi32imm1:%[0-9]+]]:gpr32 = MOVi32imm 20
- ; CHECK: STRBBui [[MOVi32imm1]], [[COPY]], 1 :: (store (s8) into %ir.dst + 1)
- ; CHECK: STRBBui [[MOVi32imm]], [[COPY]], 2 :: (store (s8) into %ir.dst + 2)
- ; CHECK: STRBBui [[MOVi32imm1]], [[COPY]], 3 :: (store (s8) into %ir.dst + 3)
- ; CHECK: [[MOVi32imm2:%[0-9]+]]:gpr32 = MOVi32imm 50
- ; CHECK: STRBBui [[MOVi32imm2]], [[COPY]], 4 :: (store (s8) into %ir.dst + 4)
- ; CHECK: STRBBui [[MOVi32imm]], [[COPY]], 5 :: (store (s8) into %ir.dst + 5)
- ; CHECK: STRBBui [[MOVi32imm1]], [[COPY]], 6 :: (store (s8) into %ir.dst + 6)
- ; CHECK: STRBBui [[MOVi32imm1]], [[COPY]], 7 :: (store (s8) into %ir.dst + 7)
- ; CHECK: STRBBui [[MOVi32imm]], [[COPY]], 0 :: (store (s8) into %ir.dst)
- ; CHECK: STRBBui [[MOVi32imm1]], [[COPY]], 1 :: (store (s8) into %ir.dst + 1)
- ; CHECK: STRBBui [[MOVi32imm]], [[COPY]], 2 :: (store (s8) into %ir.dst + 2)
- ; CHECK: STRBBui [[MOVi32imm1]], [[COPY]], 3 :: (store (s8) into %ir.dst + 3)
- ; CHECK: STRBBui [[MOVi32imm1]], [[COPY]], 4 :: (store (s8) into %ir.dst + 4)
- ; CHECK: STRBBui [[MOVi32imm]], [[COPY]], 5 :: (store (s8) into %ir.dst + 5)
- ; CHECK: STRBBui [[MOVi32imm1]], [[COPY]], 6 :: (store (s8) into %ir.dst + 6)
- ; CHECK: STRBBui [[MOVi32imm1]], [[COPY]], 7 :: (store (s8) into %ir.dst + 7)
- ; CHECK: RET_ReallyLR
+ ; CHECK-NEXT: liveins: $x0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64sp = COPY $x0
+ ; CHECK-NEXT: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 10
+ ; CHECK-NEXT: [[MOVi32imm1:%[0-9]+]]:gpr32 = MOVi32imm 20
+ ; CHECK-NEXT: [[MOVi32imm2:%[0-9]+]]:gpr32 = MOVi32imm 50
+ ; CHECK-NEXT: STRBBui [[MOVi32imm]], [[COPY]], 0 :: (store (s8) into %ir.dst)
+ ; CHECK-NEXT: STRBBui [[MOVi32imm1]], [[COPY]], 1 :: (store (s8) into %ir.dst + 1)
+ ; CHECK-NEXT: STRBBui [[MOVi32imm]], [[COPY]], 2 :: (store (s8) into %ir.dst + 2)
+ ; CHECK-NEXT: STRBBui [[MOVi32imm1]], [[COPY]], 3 :: (store (s8) into %ir.dst + 3)
+ ; CHECK-NEXT: STRBBui [[MOVi32imm2]], [[COPY]], 4 :: (store (s8) into %ir.dst + 4)
+ ; CHECK-NEXT: STRBBui [[MOVi32imm]], [[COPY]], 5 :: (store (s8) into %ir.dst + 5)
+ ; CHECK-NEXT: STRBBui [[MOVi32imm1]], [[COPY]], 6 :: (store (s8) into %ir.dst + 6)
+ ; CHECK-NEXT: STRBBui [[MOVi32imm1]], [[COPY]], 7 :: (store (s8) into %ir.dst + 7)
+ ; CHECK-NEXT: STRBBui [[MOVi32imm]], [[COPY]], 0 :: (store (s8) into %ir.dst)
+ ; CHECK-NEXT: STRBBui [[MOVi32imm1]], [[COPY]], 1 :: (store (s8) into %ir.dst + 1)
+ ; CHECK-NEXT: STRBBui [[MOVi32imm]], [[COPY]], 2 :: (store (s8) into %ir.dst + 2)
+ ; CHECK-NEXT: STRBBui [[MOVi32imm1]], [[COPY]], 3 :: (store (s8) into %ir.dst + 3)
+ ; CHECK-NEXT: STRBBui [[MOVi32imm1]], [[COPY]], 4 :: (store (s8) into %ir.dst + 4)
+ ; CHECK-NEXT: STRBBui [[MOVi32imm]], [[COPY]], 5 :: (store (s8) into %ir.dst + 5)
+ ; CHECK-NEXT: STRBBui [[MOVi32imm1]], [[COPY]], 6 :: (store (s8) into %ir.dst + 6)
+ ; CHECK-NEXT: STRBBui [[MOVi32imm1]], [[COPY]], 7 :: (store (s8) into %ir.dst + 7)
+ ; CHECK-NEXT: RET_ReallyLR
entry:
%updated = insertvalue
; Check that we're visiting constants with shared parts
diff --git a/llvm/test/CodeGen/AArch64/O0-pipeline.ll b/llvm/test/CodeGen/AArch64/O0-pipeline.ll
index cc0655b31d892..7d742c697f51b 100644
--- a/llvm/test/CodeGen/AArch64/O0-pipeline.ll
+++ b/llvm/test/CodeGen/AArch64/O0-pipeline.ll
@@ -41,9 +41,7 @@
; CHECK-NEXT: IRTranslator
; CHECK-NEXT: Analysis for ComputingKnownBits
; CHECK-NEXT: AArch64O0PreLegalizerCombiner
-; CHECK-NEXT: Localizer
; CHECK-NEXT: Analysis containing CSE Info
-; CHECK-NEXT: Analysis for ComputingKnownBits
; CHECK-NEXT: Legalizer
; CHECK-NEXT: AArch64PostLegalizerLowering
; CHECK-NEXT: RegBankSelect
diff --git a/llvm/test/CodeGen/AArch64/aarch64-fastcc-stackup.ll b/llvm/test/CodeGen/AArch64/aarch64-fastcc-stackup.ll
index 3cfe10ed8a83d..f279485c2a4a6 100644
--- a/llvm/test/CodeGen/AArch64/aarch64-fastcc-stackup.ll
+++ b/llvm/test/CodeGen/AArch64/aarch64-fastcc-stackup.ll
@@ -24,8 +24,8 @@ define fastcc i64 @baz() {
; CHECK-NEXT: str x30, [sp, #16] // 8-byte Spill
; CHECK-NEXT: .cfi_def_cfa_offset 32
; CHECK-NEXT: .cfi_offset w30, -16
-; CHECK-NEXT: mov x8, sp
; CHECK-NEXT: mov x7, xzr
+; CHECK-NEXT: mov x8, sp
; CHECK-NEXT: str xzr, [x8]
; CHECK-NEXT: mov x0, x7
; CHECK-NEXT: mov x1, x7
diff --git a/llvm/test/CodeGen/AArch64/cpa-globalisel.ll b/llvm/test/CodeGen/AArch64/cpa-globalisel.ll
index 5cad4c0db02db..20f00b52cafbf 100644
--- a/llvm/test/CodeGen/AArch64/cpa-globalisel.ll
+++ b/llvm/test/CodeGen/AArch64/cpa-globalisel.ll
@@ -51,16 +51,16 @@ entry:
define void @maddpt1(i32 %pos, ptr %val) {
; CHECK-CPA-O0-LABEL: maddpt1:
; CHECK-CPA-O0: // %bb.0: // %entry
+; CHECK-CPA-O0-NEXT: adrp x10, array2
+; CHECK-CPA-O0-NEXT: add x10, x10, :lo12:array2
+; CHECK-CPA-O0-NEXT: mov w8, #48 // =0x30
+; CHECK-CPA-O0-NEXT: mov w2, w8
; CHECK-CPA-O0-NEXT: // implicit-def: $x8
; CHECK-CPA-O0-NEXT: mov w8, w0
; CHECK-CPA-O0-NEXT: sxtw x8, w8
; CHECK-CPA-O0-NEXT: mov w9, #48 // =0x30
; CHECK-CPA-O0-NEXT: // kill: def $x9 killed $w9
-; CHECK-CPA-O0-NEXT: adrp x10, array2
-; CHECK-CPA-O0-NEXT: add x10, x10, :lo12:array2
; CHECK-CPA-O0-NEXT: maddpt x0, x8, x9, x10
-; CHECK-CPA-O0-NEXT: mov w8, #48 // =0x30
-; CHECK-CPA-O0-NEXT: mov w2, w8
; CHECK-CPA-O0-NEXT: b memcpy
;
; CHECK-CPA-O3-LABEL: maddpt1:
@@ -84,9 +84,9 @@ define void @maddpt1(i32 %pos, ptr %val) {
; CHECK-NOCPA-O0-NEXT: adrp x9, array2
; CHECK-NOCPA-O0-NEXT: add x9, x9, :lo12:array2
; CHECK-NOCPA-O0-NEXT: mov w8, #48 // =0x30
-; CHECK-NOCPA-O0-NEXT: smaddl x0, w0, w8, x9
-; CHECK-NOCPA-O0-NEXT: mov w8, #48 // =0x30
; CHECK-NOCPA-O0-NEXT: mov w2, w8
+; CHECK-NOCPA-O0-NEXT: mov w8, #48 // =0x30
+; CHECK-NOCPA-O0-NEXT: smaddl x0, w0, w8, x9
; CHECK-NOCPA-O0-NEXT: b memcpy
;
; CHECK-NOCPA-O3-LABEL: maddpt1:
@@ -112,22 +112,22 @@ entry:
define void @msubpt1(i32 %index, i32 %elem) {
; CHECK-CPA-O0-LABEL: msubpt1:
; CHECK-CPA-O0: // %bb.0: // %entry
-; CHECK-CPA-O0-NEXT: // implicit-def: $x8
-; CHECK-CPA-O0-NEXT: mov w8, w0
-; CHECK-CPA-O0-NEXT: sxtw x10, w8
-; CHECK-CPA-O0-NEXT: mov w8, #48 // =0x30
-; CHECK-CPA-O0-NEXT: mov w9, w8
-; CHECK-CPA-O0-NEXT: mov w8, #288 // =0x120
-; CHECK-CPA-O0-NEXT: mov w11, w8
; CHECK-CPA-O0-NEXT: adrp x8, array2
; CHECK-CPA-O0-NEXT: add x8, x8, :lo12:array2
-; CHECK-CPA-O0-NEXT: addpt x11, x8, x11
-; CHECK-CPA-O0-NEXT: msubpt x0, x9, x10, x11
-; CHECK-CPA-O0-NEXT: mov w9, #48 // =0x30
-; CHECK-CPA-O0-NEXT: mov w2, w9
+; CHECK-CPA-O0-NEXT: mov w9, #288 // =0x120
+; CHECK-CPA-O0-NEXT: // kill: def $x9 killed $w9
+; CHECK-CPA-O0-NEXT: addpt x10, x8, x9
; CHECK-CPA-O0-NEXT: mov w9, #96 // =0x60
; CHECK-CPA-O0-NEXT: // kill: def $x9 killed $w9
; CHECK-CPA-O0-NEXT: addpt x1, x8, x9
+; CHECK-CPA-O0-NEXT: mov w8, #48 // =0x30
+; CHECK-CPA-O0-NEXT: mov w2, w8
+; CHECK-CPA-O0-NEXT: // implicit-def: $x8
+; CHECK-CPA-O0-NEXT: mov w8, w0
+; CHECK-CPA-O0-NEXT: sxtw x9, w8
+; CHECK-CPA-O0-NEXT: mov w8, #48 // =0x30
+; CHECK-CPA-O0-NEXT: // kill: def $x8 killed $w8
+; CHECK-CPA-O0-NEXT: msubpt x0, x8, x9, x10
; CHECK-CPA-O0-NEXT: b memcpy
;
; CHECK-CPA-O3-LABEL: msubpt1:
@@ -148,19 +148,19 @@ define void @msubpt1(i32 %index, i32 %elem) {
;
; CHECK-NOCPA-O0-LABEL: msubpt1:
; CHECK-NOCPA-O0: // %bb.0: // %entry
-; CHECK-NOCPA-O0-NEXT: // implicit-def: $x8
-; CHECK-NOCPA-O0-NEXT: mov w8, w0
-; CHECK-NOCPA-O0-NEXT: sxtw x8, w8
-; CHECK-NOCPA-O0-NEXT: mov w9, #48 // =0x30
-; CHECK-NOCPA-O0-NEXT: // kill: def $x9 killed $w9
-; CHECK-NOCPA-O0-NEXT: mneg x10, x8, x9
-; CHECK-NOCPA-O0-NEXT: adrp x8, array2
-; CHECK-NOCPA-O0-NEXT: add x8, x8, :lo12:array2
-; CHECK-NOCPA-O0-NEXT: add x9, x8, #288
-; CHECK-NOCPA-O0-NEXT: add x0, x9, x10
+; CHECK-NOCPA-O0-NEXT: adrp x9, array2
+; CHECK-NOCPA-O0-NEXT: add x9, x9, :lo12:array2
+; CHECK-NOCPA-O0-NEXT: add x8, x9, #288
+; CHECK-NOCPA-O0-NEXT: add x1, x9, #96
; CHECK-NOCPA-O0-NEXT: mov w9, #48 // =0x30
; CHECK-NOCPA-O0-NEXT: mov w2, w9
-; CHECK-NOCPA-O0-NEXT: add x1, x8, #96
+; CHECK-NOCPA-O0-NEXT: // implicit-def: $x9
+; CHECK-NOCPA-O0-NEXT: mov w9, w0
+; CHECK-NOCPA-O0-NEXT: sxtw x9, w9
+; CHECK-NOCPA-O0-NEXT: mov w10, #48 // =0x30
+; CHECK-NOCPA-O0-NEXT: // kill: def $x10 killed $w10
+; CHECK-NOCPA-O0-NEXT: mneg x9, x9, x10
+; CHECK-NOCPA-O0-NEXT: add x0, x8, x9
; CHECK-NOCPA-O0-NEXT: b memcpy
;
; CHECK-NOCPA-O3-LABEL: msubpt1:
@@ -190,14 +190,14 @@ entry:
define void @subpt1(i32 %index, i32 %elem) {
; CHECK-CPA-O0-LABEL: subpt1:
; CHECK-CPA-O0: // %bb.0: // %entry
-; CHECK-CPA-O0-NEXT: mov w8, #-16 // =0xfffffff0
-; CHECK-CPA-O0-NEXT: smull x9, w0, w8
-; CHECK-CPA-O0-NEXT: adrp x8, array
-; CHECK-CPA-O0-NEXT: add x8, x8, :lo12:array
-; CHECK-CPA-O0-NEXT: ldr q0, [x8, #32]
-; CHECK-CPA-O0-NEXT: mov w10, #96 // =0x60
-; CHECK-CPA-O0-NEXT: // kill: def $x10 killed $w10
-; CHECK-CPA-O0-NEXT: addpt x8, x8, x10
+; CHECK-CPA-O0-NEXT: adrp x10, array
+; CHECK-CPA-O0-NEXT: add x10, x10, :lo12:array
+; CHECK-CPA-O0-NEXT: mov w8, #96 // =0x60
+; CHECK-CPA-O0-NEXT: // kill: def $x8 killed $w8
+; CHECK-CPA-O0-NEXT: addpt x8, x10, x8
+; CHECK-CPA-O0-NEXT: mov w9, #-16 // =0xfffffff0
+; CHECK-CPA-O0-NEXT: smull x9, w0, w9
+; CHECK-CPA-O0-NEXT: ldr q0, [x10, #32]
; CHECK-CPA-O0-NEXT: str q0, [x8, x9, lsl #4]
; CHECK-CPA-O0-NEXT: ret
;
@@ -214,12 +214,12 @@ define void @subpt1(i32 %index, i32 %elem) {
;
; CHECK-NOCPA-O0-LABEL: subpt1:
; CHECK-NOCPA-O0: // %bb.0: // %entry
-; CHECK-NOCPA-O0-NEXT: mov w8, #-16 // =0xfffffff0
-; CHECK-NOCPA-O0-NEXT: smull x9, w0, w8
-; CHECK-NOCPA-O0-NEXT: adrp x8, array
-; CHECK-NOCPA-O0-NEXT: add x8, x8, :lo12:array
-; CHECK-NOCPA-O0-NEXT: ldr q0, [x8, #32]
-; CHECK-NOCPA-O0-NEXT: add x8, x8, #96
+; CHECK-NOCPA-O0-NEXT: adrp x10, array
+; CHECK-NOCPA-O0-NEXT: add x10, x10, :lo12:array
+; CHECK-NOCPA-O0-NEXT: add x8, x10, #96
+; CHECK-NOCPA-O0-NEXT: mov w9, #-16 // =0xfffffff0
+; CHECK-NOCPA-O0-NEXT: smull x9, w0, w9
+; CHECK-NOCPA-O0-NEXT: ldr q0, [x10, #32]
; CHECK-NOCPA-O0-NEXT: str q0, [x8, x9, lsl #4]
; CHECK-NOCPA-O0-NEXT: ret
;
@@ -244,14 +244,14 @@ entry:
define void @subpt2(i32 %index, i32 %elem) {
; CHECK-CPA-O0-LABEL: subpt2:
; CHECK-CPA-O0: // %bb.0: // %entry
-; CHECK-CPA-O0-NEXT: mov x8, xzr
-; CHECK-CPA-O0-NEXT: subs x9, x8, w0, sxtw
-; CHECK-CPA-O0-NEXT: adrp x8, array
-; CHECK-CPA-O0-NEXT: add x8, x8, :lo12:array
-; CHECK-CPA-O0-NEXT: ldr q0, [x8, #32]
-; CHECK-CPA-O0-NEXT: mov w10, #96 // =0x60
-; CHECK-CPA-O0-NEXT: // kill: def $x10 killed $w10
-; CHECK-CPA-O0-NEXT: addpt x8, x8, x10
+; CHECK-CPA-O0-NEXT: mov x9, xzr
+; CHECK-CPA-O0-NEXT: adrp x10, array
+; CHECK-CPA-O0-NEXT: add x10, x10, :lo12:array
+; CHECK-CPA-O0-NEXT: mov w8, #96 // =0x60
+; CHECK-CPA-O0-NEXT: // kill: def $x8 killed $w8
+; CHECK-CPA-O0-NEXT: addpt x8, x10, x8
+; CHECK-CPA-O0-NEXT: subs x9, x9, w0, sxtw
+; CHECK-CPA-O0-NEXT: ldr q0, [x10, #32]
; CHECK-CPA-O0-NEXT: str q0, [x8, x9, lsl #4]
; CHECK-CPA-O0-NEXT: ret
;
@@ -268,12 +268,12 @@ define void @subpt2(i32 %index, i32 %elem) {
;
; CHECK-NOCPA-O0-LABEL: subpt2:
; CHECK-NOCPA-O0: // %bb.0: // %entry
-; CHECK-NOCPA-O0-NEXT: mov x8, xzr
-; CHECK-NOCPA-O0-NEXT: subs x9, x8, w0, sxtw
-; CHECK-NOCPA-O0-NEXT: adrp x8, array
-; CHECK-NOCPA-O0-NEXT: add x8, x8, :lo12:array
-; CHECK-NOCPA-O0-NEXT: ldr q0, [x8, #32]
-; CHECK-NOCPA-O0-NEXT: add x8, x8, #96
+; CHECK-NOCPA-O0-NEXT: mov x9, xzr
+; CHECK-NOCPA-O0-NEXT: adrp x10, array
+; CHECK-NOCPA-O0-NEXT: add x10, x10, :lo12:array
+; CHECK-NOCPA-O0-NEXT: add x8, x10, #96
+; CHECK-NOCPA-O0-NEXT: subs x9, x9, w0, sxtw
+; CHECK-NOCPA-O0-NEXT: ldr q0, [x10, #32]
; CHECK-NOCPA-O0-NEXT: str q0, [x8, x9, lsl #4]
; CHECK-NOCPA-O0-NEXT: ret
;
@@ -644,31 +644,35 @@ entry:
define hidden void @multidim() {
; CHECK-CPA-O0-LABEL: multidim:
; CHECK-CPA-O0: // %bb.0: // %entry
-; CHECK-CPA-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
-; CHECK-CPA-O0-NEXT: .cfi_def_cfa_offset 16
+; CHECK-CPA-O0-NEXT: sub sp, sp, #32
+; CHECK-CPA-O0-NEXT: str x30, [sp, #16] // 8-byte Spill
+; CHECK-CPA-O0-NEXT: .cfi_def_cfa_offset 32
; CHECK-CPA-O0-NEXT: .cfi_offset w30, -16
-; CHECK-CPA-O0-NEXT: adrp x8, b
-; CHECK-CPA-O0-NEXT: ldrh w9, [x8, :lo12:b]
-; CHECK-CPA-O0-NEXT: mov w10, w9
-; CHECK-CPA-O0-NEXT: ldrh w8, [x8, :lo12:b]
-; CHECK-CPA-O0-NEXT: add w9, w8, #1
-; CHECK-CPA-O0-NEXT: mov w8, #2 // =0x2
-; CHECK-CPA-O0-NEXT: mov w11, w8
+; CHECK-CPA-O0-NEXT: adrp x9, b
; CHECK-CPA-O0-NEXT: adrp x8, a
; CHECK-CPA-O0-NEXT: add x8, x8, :lo12:a
-; CHECK-CPA-O0-NEXT: addpt x8, x8, x11
+; CHECK-CPA-O0-NEXT: mov w10, #2 // =0x2
+; CHECK-CPA-O0-NEXT: // kill: def $x10 killed $w10
+; CHECK-CPA-O0-NEXT: addpt x8, x8, x10
+; CHECK-CPA-O0-NEXT: adrp x10, .L.str
+; CHECK-CPA-O0-NEXT: add x10, x10, :lo12:.L.str
+; CHECK-CPA-O0-NEXT: str x10, [sp, #8] // 8-byte Spill
+; CHECK-CPA-O0-NEXT: ldrh w10, [x9, :lo12:b]
+; CHECK-CPA-O0-NEXT: // kill: def $x10 killed $w10
; CHECK-CPA-O0-NEXT: addpt x8, x8, x10, lsl #1
+; CHECK-CPA-O0-NEXT: ldrh w9, [x9, :lo12:b]
+; CHECK-CPA-O0-NEXT: add w9, w9, #1
; CHECK-CPA-O0-NEXT: ldrb w8, [x8, w9, sxtw]
; CHECK-CPA-O0-NEXT: uxtb w8, w8
; CHECK-CPA-O0-NEXT: cbz w8, .LBB14_2
; CHECK-CPA-O0-NEXT: b .LBB14_1
; CHECK-CPA-O0-NEXT: .LBB14_1:
-; CHECK-CPA-O0-NEXT: adrp x0, .L.str
-; CHECK-CPA-O0-NEXT: add x0, x0, :lo12:.L.str
+; CHECK-CPA-O0-NEXT: ldr x0, [sp, #8] // 8-byte Reload
; CHECK-CPA-O0-NEXT: bl printf
; CHECK-CPA-O0-NEXT: b .LBB14_2
; CHECK-CPA-O0-NEXT: .LBB14_2:
-; CHECK-CPA-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
+; CHECK-CPA-O0-NEXT: ldr x30, [sp, #16] // 8-byte Reload
+; CHECK-CPA-O0-NEXT: add sp, sp, #32
; CHECK-CPA-O0-NEXT: ret
;
; CHECK-CPA-O3-LABEL: multidim:
@@ -695,29 +699,33 @@ define hidden void @multidim() {
;
; CHECK-NOCPA-O0-LABEL: multidim:
; CHECK-NOCPA-O0: // %bb.0: // %entry
-; CHECK-NOCPA-O0-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
-; CHECK-NOCPA-O0-NEXT: .cfi_def_cfa_offset 16
+; CHECK-NOCPA-O0-NEXT: sub sp, sp, #32
+; CHECK-NOCPA-O0-NEXT: str x30, [sp, #16] // 8-byte Spill
+; CHECK-NOCPA-O0-NEXT: .cfi_def_cfa_offset 32
; CHECK-NOCPA-O0-NEXT: .cfi_offset w30, -16
-; CHECK-NOCPA-O0-NEXT: adrp x8, b
-; CHECK-NOCPA-O0-NEXT: ldrh w9, [x8, :lo12:b]
-; CHECK-NOCPA-O0-NEXT: mov w10, w9
-; CHECK-NOCPA-O0-NEXT: ldrh w8, [x8, :lo12:b]
-; CHECK-NOCPA-O0-NEXT: add w9, w8, #1
+; CHECK-NOCPA-O0-NEXT: adrp x9, b
; CHECK-NOCPA-O0-NEXT: adrp x8, a
; CHECK-NOCPA-O0-NEXT: add x8, x8, :lo12:a
; CHECK-NOCPA-O0-NEXT: add x8, x8, #2
+; CHECK-NOCPA-O0-NEXT: adrp x10, .L.str
+; CHECK-NOCPA-O0-NEXT: add x10, x10, :lo12:.L.str
+; CHECK-NOCPA-O0-NEXT: str x10, [sp, #8] // 8-byte Spill
+; CHECK-NOCPA-O0-NEXT: ldrh w10, [x9, :lo12:b]
+; CHECK-NOCPA-O0-NEXT: // kill: def $x10 killed $w10
; CHECK-NOCPA-O0-NEXT: add x8, x8, x10, lsl #1
+; CHECK-NOCPA-O0-NEXT: ldrh w9, [x9, :lo12:b]
+; CHECK-NOCPA-O0-NEXT: add w9, w9, #1
; CHECK-NOCPA-O0-NEXT: ldrb w8, [x8, w9, sxtw]
; CHECK-NOCPA-O0-NEXT: uxtb w8, w8
; CHECK-NOCPA-O0-NEXT: cbz w8, .LBB14_2
; CHECK-NOCPA-O0-NEXT: b .LBB14_1
; CHECK-NOCPA-O0-NEXT: .LBB14_1:
-; CHECK-NOCPA-O0-NEXT: adrp x0, .L.str
-; CHECK-NOCPA-O0-NEXT: add x0, x0, :lo12:.L.str
+; CHECK-NOCPA-O0-NEXT: ldr x0, [sp, #8] // 8-byte Reload
; CHECK-NOCPA-O0-NEXT: bl printf
; CHECK-NOCPA-O0-NEXT: b .LBB14_2
; CHECK-NOCPA-O0-NEXT: .LBB14_2:
-; CHECK-NOCPA-O0-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
+; CHECK-NOCPA-O0-NEXT: ldr x30, [sp, #16] // 8-byte Reload
+; CHECK-NOCPA-O0-NEXT: add sp, sp, #32
; CHECK-NOCPA-O0-NEXT: ret
;
; CHECK-NOCPA-O3-LABEL: multidim:
diff --git a/llvm/test/CodeGen/AArch64/phi-dbg.ll b/llvm/test/CodeGen/AArch64/phi-dbg.ll
index 4f7c005f8026f..28465c3a556a2 100644
--- a/llvm/test/CodeGen/AArch64/phi-dbg.ll
+++ b/llvm/test/CodeGen/AArch64/phi-dbg.ll
@@ -28,8 +28,8 @@ bb2:
call void @llvm.dbg.value(metadata i32 12, i64 0, metadata !15, metadata !13), !dbg !16
br label %bb3, !dbg !20
-; CHECK: bb.2.bb2:
; CHECK: [[REG0:%[0-9]+]]:gpr32 = MOVi32imm 12
+; CHECK: bb.2.bb2:
; CHECK: [[PHIREG:%[0-9]+]]:gpr32 = COPY [[REG0]]
bb3:
diff --git a/llvm/test/CodeGen/AArch64/popcount.ll b/llvm/test/CodeGen/AArch64/popcount.ll
index 5a759b0be06ac..85242a1d78f39 100644
--- a/llvm/test/CodeGen/AArch64/popcount.ll
+++ b/llvm/test/CodeGen/AArch64/popcount.ll
@@ -772,26 +772,27 @@ Entry:
define i32 @ctpop_into_extract(ptr %p) {
; CHECKO0-LABEL: ctpop_into_extract:
; CHECKO0: // %bb.0:
-; CHECKO0-NEXT: mov w8, #-1 // =0xffffffff
+; CHECKO0-NEXT: mov x8, x0
+; CHECKO0-NEXT: mov w9, #-1 // =0xffffffff
; CHECKO0-NEXT: // implicit-def: $d2
-; CHECKO0-NEXT: fmov s2, w8
-; CHECKO0-NEXT: ldr d0, [x0]
+; CHECKO0-NEXT: fmov s2, w9
+; CHECKO0-NEXT: mov w0, wzr
+; CHECKO0-NEXT: ldr d0, [x8]
; CHECKO0-NEXT: fmov s1, s0
-; CHECKO0-NEXT: fmov w8, s1
-; CHECKO0-NEXT: fmov s1, w8
+; CHECKO0-NEXT: fmov w9, s1
+; CHECKO0-NEXT: fmov s1, w9
; CHECKO0-NEXT: // kill: def $d1 killed $s1
; CHECKO0-NEXT: cnt v1.8b, v1.8b
; CHECKO0-NEXT: uaddlv h1, v1.8b
; CHECKO0-NEXT: // kill: def $q1 killed $h1
; CHECKO0-NEXT: // kill: def $s1 killed $s1 killed $q1
-; CHECKO0-NEXT: fmov w8, s1
+; CHECKO0-NEXT: fmov w9, s1
; CHECKO0-NEXT: // implicit-def: $q1
; CHECKO0-NEXT: fmov d1, d2
-; CHECKO0-NEXT: mov v1.s[1], w8
+; CHECKO0-NEXT: mov v1.s[1], w9
; CHECKO0-NEXT: // kill: def $d1 killed $d1 killed $q1
; CHECKO0-NEXT: sub v0.2s, v0.2s, v1.2s
-; CHECKO0-NEXT: str d0, [x0]
-; CHECKO0-NEXT: mov w0, wzr
+; CHECKO0-NEXT: str d0, [x8]
; CHECKO0-NEXT: ret
;
; NEON-LABEL: ctpop_into_extract:
@@ -871,26 +872,27 @@ define i32 @ctpop_into_extract(ptr %p) {
;
; GISELO0-LABEL: ctpop_into_extract:
; GISELO0: // %bb.0:
-; GISELO0-NEXT: mov w8, #-1 // =0xffffffff
+; GISELO0-NEXT: mov x8, x0
+; GISELO0-NEXT: mov w9, #-1 // =0xffffffff
; GISELO0-NEXT: // implicit-def: $d2
-; GISELO0-NEXT: fmov s2, w8
-; GISELO0-NEXT: ldr d0, [x0]
+; GISELO0-NEXT: fmov s2, w9
+; GISELO0-NEXT: mov w0, wzr
+; GISELO0-NEXT: ldr d0, [x8]
; GISELO0-NEXT: fmov s1, s0
-; GISELO0-NEXT: fmov w8, s1
-; GISELO0-NEXT: fmov s1, w8
+; GISELO0-NEXT: fmov w9, s1
+; GISELO0-NEXT: fmov s1, w9
; GISELO0-NEXT: // kill: def $d1 killed $s1
; GISELO0-NEXT: cnt v1.8b, v1.8b
; GISELO0-NEXT: uaddlv h1, v1.8b
; GISELO0-NEXT: // kill: def $q1 killed $h1
; GISELO0-NEXT: // kill: def $s1 killed $s1 killed $q1
-; GISELO0-NEXT: fmov w8, s1
+; GISELO0-NEXT: fmov w9, s1
; GISELO0-NEXT: // implicit-def: $q1
; GISELO0-NEXT: fmov d1, d2
-; GISELO0-NEXT: mov v1.s[1], w8
+; GISELO0-NEXT: mov v1.s[1], w9
; GISELO0-NEXT: // kill: def $d1 killed $d1 killed $q1
; GISELO0-NEXT: sub v0.2s, v0.2s, v1.2s
-; GISELO0-NEXT: str d0, [x0]
-; GISELO0-NEXT: mov w0, wzr
+; GISELO0-NEXT: str d0, [x8]
; GISELO0-NEXT: ret
%1 = load <2 x i32>, ptr %p, align 4
%2 = extractelement <2 x i32> %1, i64 0
diff --git a/llvm/test/CodeGen/AArch64/pr92062.ll b/llvm/test/CodeGen/AArch64/pr92062.ll
index 6111ee0fbe18f..c6f8922cc2a48 100644
--- a/llvm/test/CodeGen/AArch64/pr92062.ll
+++ b/llvm/test/CodeGen/AArch64/pr92062.ll
@@ -10,8 +10,8 @@ define void @foo() {
; CHECK: // %bb.0: // %bb
; CHECK-NEXT: adrp x8, :got:p
; CHECK-NEXT: ldr x8, [x8, :got_lo12:p]
-; CHECK-NEXT: ldr x8, [x8]
; CHECK-NEXT: mov x9, xzr
+; CHECK-NEXT: ldr x8, [x8]
; CHECK-NEXT: str x8, [x9]
; CHECK-NEXT: ret
bb:
diff --git a/llvm/test/CodeGen/AArch64/vararg.ll b/llvm/test/CodeGen/AArch64/vararg.ll
index 291eee2ddf706..33ac571b6d4c1 100644
--- a/llvm/test/CodeGen/AArch64/vararg.ll
+++ b/llvm/test/CodeGen/AArch64/vararg.ll
@@ -86,6 +86,8 @@ define i64 @vararg(...) #0 {
; CHECK-GI-NEXT: str q5, [sp, #96]
; CHECK-GI-NEXT: str q6, [sp, #112]
; CHECK-GI-NEXT: str q7, [sp, #128]
+; CHECK-GI-NEXT: mov w8, #1 // =0x1
+; CHECK-GI-NEXT: mov w0, w8
; CHECK-GI-NEXT: add x9, sp, #8
; CHECK-GI-NEXT: add x8, x29, #16
; CHECK-GI-NEXT: str x8, [x9]
@@ -97,8 +99,6 @@ define i64 @vararg(...) #0 {
; CHECK-GI-NEXT: str w8, [x9, #24]
; CHECK-GI-NEXT: mov w8, #-128 // =0xffffff80
; CHECK-GI-NEXT: str w8, [x9, #28]
-; CHECK-GI-NEXT: mov w8, #1 // =0x1
-; CHECK-GI-NEXT: mov w0, w8
; CHECK-GI-NEXT: .cfi_def_cfa wsp, 224
; CHECK-GI-NEXT: ldp x29, x30, [sp, #208] // 16-byte Folded Reload
; CHECK-GI-NEXT: add sp, sp, #224
@@ -171,6 +171,8 @@ define i64 @vararg_many_gpr(i64 %a1, i64 %a2, i64 %a3, i64 %a4, i64 %a5, i64 %a6
; CHECK-GI-NEXT: str q5, [sp, #96]
; CHECK-GI-NEXT: str q6, [sp, #112]
; CHECK-GI-NEXT: str q7, [sp, #128]
+; CHECK-GI-NEXT: mov w8, #1 // =0x1
+; CHECK-GI-NEXT: mov w0, w8
; CHECK-GI-NEXT: add x9, sp, #8
; CHECK-GI-NEXT: add x8, x29, #16
; CHECK-GI-NEXT: str x8, [x9]
@@ -182,8 +184,6 @@ define i64 @vararg_many_gpr(i64 %a1, i64 %a2, i64 %a3, i64 %a4, i64 %a5, i64 %a6
; CHECK-GI-NEXT: str w8, [x9, #24]
; CHECK-GI-NEXT: mov w8, #-128 // =0xffffff80
; CHECK-GI-NEXT: str w8, [x9, #28]
-; CHECK-GI-NEXT: mov w8, #1 // =0x1
-; CHECK-GI-NEXT: mov w0, w8
; CHECK-GI-NEXT: .cfi_def_cfa wsp, 176
; CHECK-GI-NEXT: ldp x29, x30, [sp, #160] // 16-byte Folded Reload
; CHECK-GI-NEXT: add sp, sp, #176
@@ -256,6 +256,8 @@ define i64 @vararg_many_float(float %a1, float %a2, float %a3, float %a4, float
; CHECK-GI-NEXT: str x6, [sp, #80]
; CHECK-GI-NEXT: str x7, [sp, #88]
; CHECK-GI-NEXT: str q7, [sp, #16]
+; CHECK-GI-NEXT: mov w8, #1 // =0x1
+; CHECK-GI-NEXT: mov w0, w8
; CHECK-GI-NEXT: add x9, sp, #8
; CHECK-GI-NEXT: add x8, x29, #16
; CHECK-GI-NEXT: str x8, [x9]
@@ -267,8 +269,6 @@ define i64 @vararg_many_float(float %a1, float %a2, float %a3, float %a4, float
; CHECK-GI-NEXT: str w8, [x9, #24]
; CHECK-GI-NEXT: mov w8, #-16 // =0xfffffff0
; CHECK-GI-NEXT: str w8, [x9, #28]
-; CHECK-GI-NEXT: mov w8, #1 // =0x1
-; CHECK-GI-NEXT: mov w0, w8
; CHECK-GI-NEXT: .cfi_def_cfa wsp, 112
; CHECK-GI-NEXT: ldp x29, x30, [sp, #96] // 16-byte Folded Reload
; CHECK-GI-NEXT: add sp, sp, #112
@@ -351,6 +351,8 @@ define i64 @gpr1_fpr1(i32 %i, float %f, ...) #0 {
; CHECK-GI-NEXT: str q5, [sp, #80]
; CHECK-GI-NEXT: str q6, [sp, #96]
; CHECK-GI-NEXT: str q7, [sp, #112]
+; CHECK-GI-NEXT: mov w8, #1 // =0x1
+; CHECK-GI-NEXT: mov w0, w8
; CHECK-GI-NEXT: add x9, sp, #8
; CHECK-GI-NEXT: add x8, x29, #16
; CHECK-GI-NEXT: str x8, [x9]
@@ -362,8 +364,6 @@ define i64 @gpr1_fpr1(i32 %i, float %f, ...) #0 {
; CHECK-GI-NEXT: str w8, [x9, #24]
; CHECK-GI-NEXT: mov w8, #-112 // =0xffffff90
; CHECK-GI-NEXT: str w8, [x9, #28]
-; CHECK-GI-NEXT: mov w8, #1 // =0x1
-; CHECK-GI-NEXT: mov w0, w8
; CHECK-GI-NEXT: .cfi_def_cfa wsp, 208
; CHECK-GI-NEXT: ldp x29, x30, [sp, #192] // 16-byte Folded Reload
; CHECK-GI-NEXT: add sp, sp, #208
diff --git a/llvm/test/CodeGen/AArch64/win64_vararg_float.ll b/llvm/test/CodeGen/AArch64/win64_vararg_float.ll
index a99b29fa3bef9..d3f9b45c6b687 100644
--- a/llvm/test/CodeGen/AArch64/win64_vararg_float.ll
+++ b/llvm/test/CodeGen/AArch64/win64_vararg_float.ll
@@ -118,12 +118,12 @@ define void @call_f_va() nounwind {
;
; GISEL-LABEL: call_f_va:
; GISEL: // %bb.0: // %entry
-; GISEL-NEXT: fmov s0, #1.00000000
-; GISEL-NEXT: fmov w0, s0
+; GISEL-NEXT: fmov s1, #1.00000000
; GISEL-NEXT: mov w1, #2 // =0x2
; GISEL-NEXT: fmov d0, #3.00000000
-; GISEL-NEXT: fmov x2, d0
; GISEL-NEXT: mov w3, #4 // =0x4
+; GISEL-NEXT: fmov w0, s1
+; GISEL-NEXT: fmov x2, d0
; GISEL-NEXT: b other_f_va_fn
entry:
tail call void (float, i32, ...) @other_f_va_fn(float 1.000000e+00, i32 2, double 3.000000e+00, i32 4)
@@ -151,12 +151,12 @@ define void @call_d_va() nounwind {
;
; GISEL-LABEL: call_d_va:
; GISEL: // %bb.0: // %entry
-; GISEL-NEXT: fmov d0, #1.00000000
-; GISEL-NEXT: fmov x0, d0
+; GISEL-NEXT: fmov d1, #1.00000000
; GISEL-NEXT: mov w1, #2 // =0x2
; GISEL-NEXT: fmov d0, #3.00000000
-; GISEL-NEXT: fmov x2, d0
; GISEL-NEXT: mov w3, #4 // =0x4
+; GISEL-NEXT: fmov x0, d1
+; GISEL-NEXT: fmov x2, d0
; GISEL-NEXT: b other_d_va_fn
entry:
tail call void (double, i32, ...) @other_d_va_fn(double 1.000000e+00, i32 2, double 3.000000e+00, i32 4)
diff --git a/llvm/test/CodeGen/AArch64/win64_vararg_float_cc.ll b/llvm/test/CodeGen/AArch64/win64_vararg_float_cc.ll
index 029d2da43b691..049cee9341417 100644
--- a/llvm/test/CodeGen/AArch64/win64_vararg_float_cc.ll
+++ b/llvm/test/CodeGen/AArch64/win64_vararg_float_cc.ll
@@ -138,12 +138,12 @@ define void @call_f_va() nounwind {
; GISEL-LABEL: call_f_va:
; GISEL: // %bb.0: // %entry
; GISEL-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
-; GISEL-NEXT: fmov s0, #1.00000000
-; GISEL-NEXT: fmov w0, s0
+; GISEL-NEXT: fmov s1, #1.00000000
; GISEL-NEXT: mov w1, #2 // =0x2
; GISEL-NEXT: fmov d0, #3.00000000
-; GISEL-NEXT: fmov x2, d0
; GISEL-NEXT: mov w3, #4 // =0x4
+; GISEL-NEXT: fmov w0, s1
+; GISEL-NEXT: fmov x2, d0
; GISEL-NEXT: bl other_f_va_fn
; GISEL-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
; GISEL-NEXT: ret
@@ -180,12 +180,12 @@ define void @call_d_va() nounwind {
; GISEL-LABEL: call_d_va:
; GISEL: // %bb.0: // %entry
; GISEL-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
-; GISEL-NEXT: fmov d0, #1.00000000
-; GISEL-NEXT: fmov x0, d0
+; GISEL-NEXT: fmov d1, #1.00000000
; GISEL-NEXT: mov w1, #2 // =0x2
; GISEL-NEXT: fmov d0, #3.00000000
-; GISEL-NEXT: fmov x2, d0
; GISEL-NEXT: mov w3, #4 // =0x4
+; GISEL-NEXT: fmov x0, d1
+; GISEL-NEXT: fmov x2, d0
; GISEL-NEXT: bl other_d_va_fn
; GISEL-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
; GISEL-NEXT: ret
diff --git a/llvm/test/Other/print-changed-machine.ll b/llvm/test/Other/print-changed-machine.ll
index 98ba95d8af626..4e28beff51d1e 100644
--- a/llvm/test/Other/print-changed-machine.ll
+++ b/llvm/test/Other/print-changed-machine.ll
@@ -22,7 +22,7 @@
; QUIET: *** IR Dump After IRTranslator (irtranslator) on foo ***
; QUIET-NOT: ***
-; QUIET: *** IR Dump After Localizer (localizer) on foo ***
+; QUIET: *** IR Dump After Legalizer (legalizer) on foo ***
; RUN: llc -filetype=null -mtriple=aarch64 -O0 -print-changed -filter-passes=irtranslator,legalizer %s 2>&1 | \
; RUN: FileCheck %s --check-prefixes=VERBOSE-FILTER
More information about the llvm-commits
mailing list