[llvm] a07cc18 - [AArch64][GlobalISel] Add GISel test coverage for argument-blocks-array-of-struct.ll. NFC

David Green via llvm-commits llvm-commits at lists.llvm.org
Fri May 16 05:25:49 PDT 2025


Author: David Green
Date: 2025-05-16T13:25:44+01:00
New Revision: a07cc181cced04850a9e93fc9b57321c8b6ff408

URL: https://github.com/llvm/llvm-project/commit/a07cc181cced04850a9e93fc9b57321c8b6ff408
DIFF: https://github.com/llvm/llvm-project/commit/a07cc181cced04850a9e93fc9b57321c8b6ff408.diff

LOG: [AArch64][GlobalISel] Add GISel test coverage for argument-blocks-array-of-struct.ll. NFC

See #50062.

Added: 
    

Modified: 
    llvm/test/CodeGen/AArch64/argument-blocks-array-of-struct.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/CodeGen/AArch64/argument-blocks-array-of-struct.ll b/llvm/test/CodeGen/AArch64/argument-blocks-array-of-struct.ll
index b944194dae8fc..f364429b86c38 100644
--- a/llvm/test/CodeGen/AArch64/argument-blocks-array-of-struct.ll
+++ b/llvm/test/CodeGen/AArch64/argument-blocks-array-of-struct.ll
@@ -1,5 +1,6 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc -mtriple=aarch64-none-linux-gnu -o - %s | FileCheck %s
+; RUN: llc -mtriple=aarch64-none-linux-gnu -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-SD
+; RUN: llc -mtriple=aarch64-none-linux-gnu -o - -global-isel %s | FileCheck %s --check-prefixes=CHECK,CHECK-GI
 
 ;; Check that the llvm aarch64 backend can handle arrays of
 ;; structs and vice versa when passed from IR.
@@ -49,13 +50,22 @@ define [ 8 x double ] @array_8() {
 ;; > 8 items goes on the stack
 
 define [ 9 x double ] @array_9() {
-; CHECK-LABEL: array_9:
-; CHECK:       // %bb.0:
-; CHECK-NEXT:    movi v0.2d, #0000000000000000
-; CHECK-NEXT:    str xzr, [x8, #64]
-; CHECK-NEXT:    stp q0, q0, [x8]
-; CHECK-NEXT:    stp q0, q0, [x8, #32]
-; CHECK-NEXT:    ret
+; CHECK-SD-LABEL: array_9:
+; CHECK-SD:       // %bb.0:
+; CHECK-SD-NEXT:    movi v0.2d, #0000000000000000
+; CHECK-SD-NEXT:    str xzr, [x8, #64]
+; CHECK-SD-NEXT:    stp q0, q0, [x8]
+; CHECK-SD-NEXT:    stp q0, q0, [x8, #32]
+; CHECK-SD-NEXT:    ret
+;
+; CHECK-GI-LABEL: array_9:
+; CHECK-GI:       // %bb.0:
+; CHECK-GI-NEXT:    stp xzr, xzr, [x8]
+; CHECK-GI-NEXT:    stp xzr, xzr, [x8, #16]
+; CHECK-GI-NEXT:    stp xzr, xzr, [x8, #32]
+; CHECK-GI-NEXT:    stp xzr, xzr, [x8, #48]
+; CHECK-GI-NEXT:    str xzr, [x8, #64]
+; CHECK-GI-NEXT:    ret
   ret [ 9 x double ] zeroinitializer
 }
 
@@ -229,13 +239,22 @@ define [ 4 x %T_STRUCT_SAMEM ] @array_of_struct_8_fields() {
 ;; 5x2 fields = 10 so it is returned in memory.
 
 define [ 5 x %T_STRUCT_SAMEM ] @array_of_struct_in_memory() {
-; CHECK-LABEL: array_of_struct_in_memory:
-; CHECK:       // %bb.0:
-; CHECK-NEXT:    movi v0.2d, #0000000000000000
-; CHECK-NEXT:    stp q0, q0, [x8, #16]
-; CHECK-NEXT:    stp q0, q0, [x8, #48]
-; CHECK-NEXT:    str q0, [x8]
-; CHECK-NEXT:    ret
+; CHECK-SD-LABEL: array_of_struct_in_memory:
+; CHECK-SD:       // %bb.0:
+; CHECK-SD-NEXT:    movi v0.2d, #0000000000000000
+; CHECK-SD-NEXT:    stp q0, q0, [x8, #16]
+; CHECK-SD-NEXT:    stp q0, q0, [x8, #48]
+; CHECK-SD-NEXT:    str q0, [x8]
+; CHECK-SD-NEXT:    ret
+;
+; CHECK-GI-LABEL: array_of_struct_in_memory:
+; CHECK-GI:       // %bb.0:
+; CHECK-GI-NEXT:    stp xzr, xzr, [x8]
+; CHECK-GI-NEXT:    stp xzr, xzr, [x8, #16]
+; CHECK-GI-NEXT:    stp xzr, xzr, [x8, #32]
+; CHECK-GI-NEXT:    stp xzr, xzr, [x8, #48]
+; CHECK-GI-NEXT:    stp xzr, xzr, [x8, #64]
+; CHECK-GI-NEXT:    ret
   ret [ 5 x %T_STRUCT_SAMEM ] zeroinitializer
 }
 
@@ -347,13 +366,22 @@ define [ 1 x %T_NESTED_STRUCT_SAMEM ] @array_of_struct_nested_same_field_types()
 
 ;; 2 x (1 + (2 x 2)) = 10 so this is returned in memory
 define [ 2 x %T_NESTED_STRUCT_SAMEM ] @array_of_struct_nested_same_field_types_2() {
-; CHECK-LABEL: array_of_struct_nested_same_field_types_2:
-; CHECK:       // %bb.0:
-; CHECK-NEXT:    movi v0.2d, #0000000000000000
-; CHECK-NEXT:    stp q0, q0, [x8, #16]
-; CHECK-NEXT:    stp q0, q0, [x8, #48]
-; CHECK-NEXT:    str q0, [x8]
-; CHECK-NEXT:    ret
+; CHECK-SD-LABEL: array_of_struct_nested_same_field_types_2:
+; CHECK-SD:       // %bb.0:
+; CHECK-SD-NEXT:    movi v0.2d, #0000000000000000
+; CHECK-SD-NEXT:    stp q0, q0, [x8, #16]
+; CHECK-SD-NEXT:    stp q0, q0, [x8, #48]
+; CHECK-SD-NEXT:    str q0, [x8]
+; CHECK-SD-NEXT:    ret
+;
+; CHECK-GI-LABEL: array_of_struct_nested_same_field_types_2:
+; CHECK-GI:       // %bb.0:
+; CHECK-GI-NEXT:    stp xzr, xzr, [x8]
+; CHECK-GI-NEXT:    stp xzr, xzr, [x8, #16]
+; CHECK-GI-NEXT:    stp xzr, xzr, [x8, #32]
+; CHECK-GI-NEXT:    stp xzr, xzr, [x8, #48]
+; CHECK-GI-NEXT:    stp xzr, xzr, [x8, #64]
+; CHECK-GI-NEXT:    ret
   ret [ 2 x %T_NESTED_STRUCT_SAMEM ] zeroinitializer
 }
 
@@ -377,51 +405,94 @@ define %T_IN_BLOCK @return_in_block() {
 @in_block_store = dso_local global %T_IN_BLOCK zeroinitializer, align 8
 
 define void @caller_in_block() {
-; CHECK-LABEL: caller_in_block:
-; CHECK:       // %bb.0:
-; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
-; CHECK-NEXT:    .cfi_def_cfa_offset 16
-; CHECK-NEXT:    .cfi_offset w30, -16
-; CHECK-NEXT:    bl return_in_block
-; CHECK-NEXT:    adrp x8, in_block_store
-; CHECK-NEXT:    add x8, x8, :lo12:in_block_store
-; CHECK-NEXT:    stp d0, d1, [x8]
-; CHECK-NEXT:    stp d2, d3, [x8, #16]
-; CHECK-NEXT:    stp d4, d5, [x8, #32]
-; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
-; CHECK-NEXT:    ret
+; CHECK-SD-LABEL: caller_in_block:
+; CHECK-SD:       // %bb.0:
+; CHECK-SD-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; CHECK-SD-NEXT:    .cfi_def_cfa_offset 16
+; CHECK-SD-NEXT:    .cfi_offset w30, -16
+; CHECK-SD-NEXT:    bl return_in_block
+; CHECK-SD-NEXT:    adrp x8, in_block_store
+; CHECK-SD-NEXT:    add x8, x8, :lo12:in_block_store
+; CHECK-SD-NEXT:    stp d0, d1, [x8]
+; CHECK-SD-NEXT:    stp d2, d3, [x8, #16]
+; CHECK-SD-NEXT:    stp d4, d5, [x8, #32]
+; CHECK-SD-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; CHECK-SD-NEXT:    ret
+;
+; CHECK-GI-LABEL: caller_in_block:
+; CHECK-GI:       // %bb.0:
+; CHECK-GI-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; CHECK-GI-NEXT:    .cfi_def_cfa_offset 16
+; CHECK-GI-NEXT:    .cfi_offset w30, -16
+; CHECK-GI-NEXT:    bl return_in_block
+; CHECK-GI-NEXT:    adrp x8, in_block_store
+; CHECK-GI-NEXT:    str d0, [x8, :lo12:in_block_store]
+; CHECK-GI-NEXT:    adrp x8, in_block_store
+; CHECK-GI-NEXT:    add x8, x8, :lo12:in_block_store
+; CHECK-GI-NEXT:    stp d1, d2, [x8, #8]
+; CHECK-GI-NEXT:    stp d3, d4, [x8, #24]
+; CHECK-GI-NEXT:    str d5, [x8, #40]
+; CHECK-GI-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; CHECK-GI-NEXT:    ret
   %1 = call %T_IN_BLOCK @return_in_block()
   store %T_IN_BLOCK %1, ptr @in_block_store
   ret void
 }
 
 define void @callee_in_block(%T_IN_BLOCK %a) {
-; CHECK-LABEL: callee_in_block:
-; CHECK:       // %bb.0:
-; CHECK-NEXT:    adrp x8, in_block_store
-; CHECK-NEXT:    add x8, x8, :lo12:in_block_store
-; CHECK-NEXT:    stp d4, d5, [x8, #32]
-; CHECK-NEXT:    stp d2, d3, [x8, #16]
-; CHECK-NEXT:    stp d0, d1, [x8]
-; CHECK-NEXT:    ret
+; CHECK-SD-LABEL: callee_in_block:
+; CHECK-SD:       // %bb.0:
+; CHECK-SD-NEXT:    adrp x8, in_block_store
+; CHECK-SD-NEXT:    add x8, x8, :lo12:in_block_store
+; CHECK-SD-NEXT:    stp d4, d5, [x8, #32]
+; CHECK-SD-NEXT:    stp d2, d3, [x8, #16]
+; CHECK-SD-NEXT:    stp d0, d1, [x8]
+; CHECK-SD-NEXT:    ret
+;
+; CHECK-GI-LABEL: callee_in_block:
+; CHECK-GI:       // %bb.0:
+; CHECK-GI-NEXT:    adrp x8, in_block_store
+; CHECK-GI-NEXT:    str d0, [x8, :lo12:in_block_store]
+; CHECK-GI-NEXT:    adrp x8, in_block_store
+; CHECK-GI-NEXT:    add x8, x8, :lo12:in_block_store
+; CHECK-GI-NEXT:    stp d1, d2, [x8, #8]
+; CHECK-GI-NEXT:    stp d3, d4, [x8, #24]
+; CHECK-GI-NEXT:    str d5, [x8, #40]
+; CHECK-GI-NEXT:    ret
   store %T_IN_BLOCK %a, ptr @in_block_store
   ret void
 }
 
 define void @argument_in_block() {
-; CHECK-LABEL: argument_in_block:
-; CHECK:       // %bb.0:
-; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
-; CHECK-NEXT:    .cfi_def_cfa_offset 16
-; CHECK-NEXT:    .cfi_offset w30, -16
-; CHECK-NEXT:    adrp x8, in_block_store
-; CHECK-NEXT:    add x8, x8, :lo12:in_block_store
-; CHECK-NEXT:    ldp d4, d5, [x8, #32]
-; CHECK-NEXT:    ldp d2, d3, [x8, #16]
-; CHECK-NEXT:    ldp d0, d1, [x8]
-; CHECK-NEXT:    bl callee_in_block
-; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
-; CHECK-NEXT:    ret
+; CHECK-SD-LABEL: argument_in_block:
+; CHECK-SD:       // %bb.0:
+; CHECK-SD-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; CHECK-SD-NEXT:    .cfi_def_cfa_offset 16
+; CHECK-SD-NEXT:    .cfi_offset w30, -16
+; CHECK-SD-NEXT:    adrp x8, in_block_store
+; CHECK-SD-NEXT:    add x8, x8, :lo12:in_block_store
+; CHECK-SD-NEXT:    ldp d4, d5, [x8, #32]
+; CHECK-SD-NEXT:    ldp d2, d3, [x8, #16]
+; CHECK-SD-NEXT:    ldp d0, d1, [x8]
+; CHECK-SD-NEXT:    bl callee_in_block
+; CHECK-SD-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; CHECK-SD-NEXT:    ret
+;
+; CHECK-GI-LABEL: argument_in_block:
+; CHECK-GI:       // %bb.0:
+; CHECK-GI-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; CHECK-GI-NEXT:    .cfi_def_cfa_offset 16
+; CHECK-GI-NEXT:    .cfi_offset w30, -16
+; CHECK-GI-NEXT:    adrp x9, in_block_store
+; CHECK-GI-NEXT:    add x9, x9, :lo12:in_block_store
+; CHECK-GI-NEXT:    adrp x8, in_block_store
+; CHECK-GI-NEXT:    ldp d1, d2, [x9, #8]
+; CHECK-GI-NEXT:    ldr d0, [x8, :lo12:in_block_store]
+; CHECK-GI-NEXT:    ldp d3, d4, [x9, #24]
+; CHECK-GI-NEXT:    ldr d5, [x9, #40]
+; CHECK-GI-NEXT:    bl callee_in_block
+; CHECK-GI-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; CHECK-GI-NEXT:    ret
   %1 = load %T_IN_BLOCK, ptr @in_block_store
   call void @callee_in_block(%T_IN_BLOCK %1)
   ret void
@@ -430,82 +501,157 @@ define void @argument_in_block() {
 %T_IN_MEMORY = type [ 3 x { double, { double, double } } ]
 
 define %T_IN_MEMORY @return_in_memory() {
-; CHECK-LABEL: return_in_memory:
-; CHECK:       // %bb.0:
-; CHECK-NEXT:    movi v0.2d, #0000000000000000
-; CHECK-NEXT:    str xzr, [x8, #64]
-; CHECK-NEXT:    stp q0, q0, [x8]
-; CHECK-NEXT:    stp q0, q0, [x8, #32]
-; CHECK-NEXT:    ret
+; CHECK-SD-LABEL: return_in_memory:
+; CHECK-SD:       // %bb.0:
+; CHECK-SD-NEXT:    movi v0.2d, #0000000000000000
+; CHECK-SD-NEXT:    str xzr, [x8, #64]
+; CHECK-SD-NEXT:    stp q0, q0, [x8]
+; CHECK-SD-NEXT:    stp q0, q0, [x8, #32]
+; CHECK-SD-NEXT:    ret
+;
+; CHECK-GI-LABEL: return_in_memory:
+; CHECK-GI:       // %bb.0:
+; CHECK-GI-NEXT:    stp xzr, xzr, [x8]
+; CHECK-GI-NEXT:    stp xzr, xzr, [x8, #16]
+; CHECK-GI-NEXT:    stp xzr, xzr, [x8, #32]
+; CHECK-GI-NEXT:    stp xzr, xzr, [x8, #48]
+; CHECK-GI-NEXT:    str xzr, [x8, #64]
+; CHECK-GI-NEXT:    ret
   ret %T_IN_MEMORY zeroinitializer
 }
 
 @in_memory_store = dso_local global %T_IN_MEMORY zeroinitializer, align 8
 
 define void @caller_in_memory() {
-; CHECK-LABEL: caller_in_memory:
-; CHECK:       // %bb.0:
-; CHECK-NEXT:    sub sp, sp, #96
-; CHECK-NEXT:    str x30, [sp, #80] // 8-byte Folded Spill
-; CHECK-NEXT:    .cfi_def_cfa_offset 96
-; CHECK-NEXT:    .cfi_offset w30, -16
-; CHECK-NEXT:    add x8, sp, #8
-; CHECK-NEXT:    bl return_in_memory
-; CHECK-NEXT:    ldur q0, [sp, #24]
-; CHECK-NEXT:    ldur q1, [sp, #8]
-; CHECK-NEXT:    adrp x8, in_memory_store
-; CHECK-NEXT:    add x8, x8, :lo12:in_memory_store
-; CHECK-NEXT:    ldr d2, [sp, #72]
-; CHECK-NEXT:    ldur q3, [sp, #56]
-; CHECK-NEXT:    ldur q4, [sp, #40]
-; CHECK-NEXT:    ldr x30, [sp, #80] // 8-byte Folded Reload
-; CHECK-NEXT:    stp q1, q0, [x8]
-; CHECK-NEXT:    str d2, [x8, #64]
-; CHECK-NEXT:    stp q4, q3, [x8, #32]
-; CHECK-NEXT:    add sp, sp, #96
-; CHECK-NEXT:    ret
+; CHECK-SD-LABEL: caller_in_memory:
+; CHECK-SD:       // %bb.0:
+; CHECK-SD-NEXT:    sub sp, sp, #96
+; CHECK-SD-NEXT:    str x30, [sp, #80] // 8-byte Folded Spill
+; CHECK-SD-NEXT:    .cfi_def_cfa_offset 96
+; CHECK-SD-NEXT:    .cfi_offset w30, -16
+; CHECK-SD-NEXT:    add x8, sp, #8
+; CHECK-SD-NEXT:    bl return_in_memory
+; CHECK-SD-NEXT:    ldur q0, [sp, #24]
+; CHECK-SD-NEXT:    ldur q1, [sp, #8]
+; CHECK-SD-NEXT:    adrp x8, in_memory_store
+; CHECK-SD-NEXT:    add x8, x8, :lo12:in_memory_store
+; CHECK-SD-NEXT:    ldr d2, [sp, #72]
+; CHECK-SD-NEXT:    ldur q3, [sp, #56]
+; CHECK-SD-NEXT:    ldur q4, [sp, #40]
+; CHECK-SD-NEXT:    ldr x30, [sp, #80] // 8-byte Folded Reload
+; CHECK-SD-NEXT:    stp q1, q0, [x8]
+; CHECK-SD-NEXT:    str d2, [x8, #64]
+; CHECK-SD-NEXT:    stp q4, q3, [x8, #32]
+; CHECK-SD-NEXT:    add sp, sp, #96
+; CHECK-SD-NEXT:    ret
+;
+; CHECK-GI-LABEL: caller_in_memory:
+; CHECK-GI:       // %bb.0:
+; CHECK-GI-NEXT:    sub sp, sp, #96
+; CHECK-GI-NEXT:    str x30, [sp, #80] // 8-byte Folded Spill
+; CHECK-GI-NEXT:    .cfi_def_cfa_offset 96
+; CHECK-GI-NEXT:    .cfi_offset w30, -16
+; CHECK-GI-NEXT:    add x8, sp, #8
+; CHECK-GI-NEXT:    bl return_in_memory
+; CHECK-GI-NEXT:    ldp x8, x9, [sp, #8]
+; CHECK-GI-NEXT:    adrp x10, in_memory_store
+; CHECK-GI-NEXT:    ldp x11, x12, [sp, #24]
+; CHECK-GI-NEXT:    ldp x13, x14, [sp, #40]
+; CHECK-GI-NEXT:    ldp x15, x16, [sp, #56]
+; CHECK-GI-NEXT:    ldp x17, x30, [sp, #72] // 8-byte Folded Reload
+; CHECK-GI-NEXT:    str x8, [x10, :lo12:in_memory_store]
+; CHECK-GI-NEXT:    adrp x8, in_memory_store
+; CHECK-GI-NEXT:    add x8, x8, :lo12:in_memory_store
+; CHECK-GI-NEXT:    stp x9, x11, [x8, #8]
+; CHECK-GI-NEXT:    stp x12, x13, [x8, #24]
+; CHECK-GI-NEXT:    stp x14, x15, [x8, #40]
+; CHECK-GI-NEXT:    stp x16, x17, [x8, #56]
+; CHECK-GI-NEXT:    add sp, sp, #96
+; CHECK-GI-NEXT:    ret
   %1 = call %T_IN_MEMORY @return_in_memory()
   store %T_IN_MEMORY %1, ptr @in_memory_store
   ret void
 }
 
 define void @callee_in_memory(%T_IN_MEMORY %a) {
-; CHECK-LABEL: callee_in_memory:
-; CHECK:       // %bb.0:
-; CHECK-NEXT:    ldp q1, q2, [sp, #32]
-; CHECK-NEXT:    adrp x8, in_memory_store
-; CHECK-NEXT:    add x8, x8, :lo12:in_memory_store
-; CHECK-NEXT:    ldr d0, [sp, #64]
-; CHECK-NEXT:    str d0, [x8, #64]
-; CHECK-NEXT:    ldr q0, [sp, #16]
-; CHECK-NEXT:    str q2, [x8, #48]
-; CHECK-NEXT:    ldr q2, [sp]
-; CHECK-NEXT:    stp q0, q1, [x8, #16]
-; CHECK-NEXT:    str q2, [x8]
-; CHECK-NEXT:    ret
+; CHECK-SD-LABEL: callee_in_memory:
+; CHECK-SD:       // %bb.0:
+; CHECK-SD-NEXT:    ldp q1, q2, [sp, #32]
+; CHECK-SD-NEXT:    adrp x8, in_memory_store
+; CHECK-SD-NEXT:    add x8, x8, :lo12:in_memory_store
+; CHECK-SD-NEXT:    ldr d0, [sp, #64]
+; CHECK-SD-NEXT:    str d0, [x8, #64]
+; CHECK-SD-NEXT:    ldr q0, [sp, #16]
+; CHECK-SD-NEXT:    str q2, [x8, #48]
+; CHECK-SD-NEXT:    ldr q2, [sp]
+; CHECK-SD-NEXT:    stp q0, q1, [x8, #16]
+; CHECK-SD-NEXT:    str q2, [x8]
+; CHECK-SD-NEXT:    ret
+;
+; CHECK-GI-LABEL: callee_in_memory:
+; CHECK-GI:       // %bb.0:
+; CHECK-GI-NEXT:    ldp x8, x9, [sp]
+; CHECK-GI-NEXT:    adrp x10, in_memory_store
+; CHECK-GI-NEXT:    ldp x11, x12, [sp, #16]
+; CHECK-GI-NEXT:    str x8, [x10, :lo12:in_memory_store]
+; CHECK-GI-NEXT:    adrp x8, in_memory_store
+; CHECK-GI-NEXT:    add x8, x8, :lo12:in_memory_store
+; CHECK-GI-NEXT:    stp x9, x11, [x8, #8]
+; CHECK-GI-NEXT:    ldp x9, x10, [sp, #32]
+; CHECK-GI-NEXT:    stp x12, x9, [x8, #24]
+; CHECK-GI-NEXT:    ldp x9, x11, [sp, #48]
+; CHECK-GI-NEXT:    str x10, [x8, #40]
+; CHECK-GI-NEXT:    ldr x10, [sp, #64]
+; CHECK-GI-NEXT:    stp x9, x11, [x8, #48]
+; CHECK-GI-NEXT:    str x10, [x8, #64]
+; CHECK-GI-NEXT:    ret
   store %T_IN_MEMORY %a, ptr @in_memory_store
   ret void
 }
 
 define void @argument_in_memory() {
-; CHECK-LABEL: argument_in_memory:
-; CHECK:       // %bb.0:
-; CHECK-NEXT:    sub sp, sp, #96
-; CHECK-NEXT:    str x30, [sp, #80] // 8-byte Folded Spill
-; CHECK-NEXT:    .cfi_def_cfa_offset 96
-; CHECK-NEXT:    .cfi_offset w30, -16
-; CHECK-NEXT:    adrp x8, in_memory_store
-; CHECK-NEXT:    add x8, x8, :lo12:in_memory_store
-; CHECK-NEXT:    ldp q0, q1, [x8]
-; CHECK-NEXT:    ldr d4, [x8, #64]
-; CHECK-NEXT:    ldp q2, q3, [x8, #32]
-; CHECK-NEXT:    str d4, [sp, #64]
-; CHECK-NEXT:    stp q0, q1, [sp]
-; CHECK-NEXT:    stp q2, q3, [sp, #32]
-; CHECK-NEXT:    bl callee_in_memory
-; CHECK-NEXT:    ldr x30, [sp, #80] // 8-byte Folded Reload
-; CHECK-NEXT:    add sp, sp, #96
-; CHECK-NEXT:    ret
+; CHECK-SD-LABEL: argument_in_memory:
+; CHECK-SD:       // %bb.0:
+; CHECK-SD-NEXT:    sub sp, sp, #96
+; CHECK-SD-NEXT:    str x30, [sp, #80] // 8-byte Folded Spill
+; CHECK-SD-NEXT:    .cfi_def_cfa_offset 96
+; CHECK-SD-NEXT:    .cfi_offset w30, -16
+; CHECK-SD-NEXT:    adrp x8, in_memory_store
+; CHECK-SD-NEXT:    add x8, x8, :lo12:in_memory_store
+; CHECK-SD-NEXT:    ldp q0, q1, [x8]
+; CHECK-SD-NEXT:    ldr d4, [x8, #64]
+; CHECK-SD-NEXT:    ldp q2, q3, [x8, #32]
+; CHECK-SD-NEXT:    str d4, [sp, #64]
+; CHECK-SD-NEXT:    stp q0, q1, [sp]
+; CHECK-SD-NEXT:    stp q2, q3, [sp, #32]
+; CHECK-SD-NEXT:    bl callee_in_memory
+; CHECK-SD-NEXT:    ldr x30, [sp, #80] // 8-byte Folded Reload
+; CHECK-SD-NEXT:    add sp, sp, #96
+; CHECK-SD-NEXT:    ret
+;
+; CHECK-GI-LABEL: argument_in_memory:
+; CHECK-GI:       // %bb.0:
+; CHECK-GI-NEXT:    sub sp, sp, #96
+; CHECK-GI-NEXT:    str x30, [sp, #80] // 8-byte Folded Spill
+; CHECK-GI-NEXT:    .cfi_def_cfa_offset 96
+; CHECK-GI-NEXT:    .cfi_offset w30, -16
+; CHECK-GI-NEXT:    adrp x9, in_memory_store
+; CHECK-GI-NEXT:    add x9, x9, :lo12:in_memory_store
+; CHECK-GI-NEXT:    adrp x8, in_memory_store
+; CHECK-GI-NEXT:    ldp x10, x11, [x9, #8]
+; CHECK-GI-NEXT:    ldr x8, [x8, :lo12:in_memory_store]
+; CHECK-GI-NEXT:    ldp x12, x13, [x9, #24]
+; CHECK-GI-NEXT:    ldp x14, x15, [x9, #40]
+; CHECK-GI-NEXT:    ldp x16, x9, [x9, #56]
+; CHECK-GI-NEXT:    stp x8, x10, [sp]
+; CHECK-GI-NEXT:    stp x11, x12, [sp, #16]
+; CHECK-GI-NEXT:    stp x13, x14, [sp, #32]
+; CHECK-GI-NEXT:    stp x15, x16, [sp, #48]
+; CHECK-GI-NEXT:    str x9, [sp, #64]
+; CHECK-GI-NEXT:    bl callee_in_memory
+; CHECK-GI-NEXT:    ldr x30, [sp, #80] // 8-byte Folded Reload
+; CHECK-GI-NEXT:    add sp, sp, #96
+; CHECK-GI-NEXT:    ret
   %1 = load %T_IN_MEMORY, ptr @in_memory_store
   call void @callee_in_memory(%T_IN_MEMORY %1)
   ret void
@@ -527,54 +673,97 @@ define %T_NO_BLOCK @return_no_block() {
 @no_block_store = dso_local global %T_NO_BLOCK zeroinitializer, align 8
 
 define void @caller_no_block() {
-; CHECK-LABEL: caller_no_block:
-; CHECK:       // %bb.0:
-; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
-; CHECK-NEXT:    .cfi_def_cfa_offset 16
-; CHECK-NEXT:    .cfi_offset w30, -16
-; CHECK-NEXT:    bl return_no_block
-; CHECK-NEXT:    adrp x8, no_block_store
-; CHECK-NEXT:    add x8, x8, :lo12:no_block_store
-; CHECK-NEXT:    str d0, [x8]
-; CHECK-NEXT:    str w0, [x8, #8]
-; CHECK-NEXT:    str d1, [x8, #16]
-; CHECK-NEXT:    str w1, [x8, #24]
-; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
-; CHECK-NEXT:    ret
+; CHECK-SD-LABEL: caller_no_block:
+; CHECK-SD:       // %bb.0:
+; CHECK-SD-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; CHECK-SD-NEXT:    .cfi_def_cfa_offset 16
+; CHECK-SD-NEXT:    .cfi_offset w30, -16
+; CHECK-SD-NEXT:    bl return_no_block
+; CHECK-SD-NEXT:    adrp x8, no_block_store
+; CHECK-SD-NEXT:    add x8, x8, :lo12:no_block_store
+; CHECK-SD-NEXT:    str d0, [x8]
+; CHECK-SD-NEXT:    str w0, [x8, #8]
+; CHECK-SD-NEXT:    str d1, [x8, #16]
+; CHECK-SD-NEXT:    str w1, [x8, #24]
+; CHECK-SD-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; CHECK-SD-NEXT:    ret
+;
+; CHECK-GI-LABEL: caller_no_block:
+; CHECK-GI:       // %bb.0:
+; CHECK-GI-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; CHECK-GI-NEXT:    .cfi_def_cfa_offset 16
+; CHECK-GI-NEXT:    .cfi_offset w30, -16
+; CHECK-GI-NEXT:    bl return_no_block
+; CHECK-GI-NEXT:    adrp x8, no_block_store
+; CHECK-GI-NEXT:    str d0, [x8, :lo12:no_block_store]
+; CHECK-GI-NEXT:    adrp x8, no_block_store
+; CHECK-GI-NEXT:    add x8, x8, :lo12:no_block_store
+; CHECK-GI-NEXT:    str w0, [x8, #8]
+; CHECK-GI-NEXT:    str d1, [x8, #16]
+; CHECK-GI-NEXT:    str w1, [x8, #24]
+; CHECK-GI-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; CHECK-GI-NEXT:    ret
   %1 = call %T_NO_BLOCK @return_no_block()
   store %T_NO_BLOCK %1, ptr @no_block_store
   ret void
 }
 
 define void @callee_no_block(%T_NO_BLOCK %a) {
-; CHECK-LABEL: callee_no_block:
-; CHECK:       // %bb.0:
-; CHECK-NEXT:    adrp x8, no_block_store
-; CHECK-NEXT:    add x8, x8, :lo12:no_block_store
-; CHECK-NEXT:    str w1, [x8, #24]
-; CHECK-NEXT:    str d1, [x8, #16]
-; CHECK-NEXT:    str w0, [x8, #8]
-; CHECK-NEXT:    str d0, [x8]
-; CHECK-NEXT:    ret
+; CHECK-SD-LABEL: callee_no_block:
+; CHECK-SD:       // %bb.0:
+; CHECK-SD-NEXT:    adrp x8, no_block_store
+; CHECK-SD-NEXT:    add x8, x8, :lo12:no_block_store
+; CHECK-SD-NEXT:    str w1, [x8, #24]
+; CHECK-SD-NEXT:    str d1, [x8, #16]
+; CHECK-SD-NEXT:    str w0, [x8, #8]
+; CHECK-SD-NEXT:    str d0, [x8]
+; CHECK-SD-NEXT:    ret
+;
+; CHECK-GI-LABEL: callee_no_block:
+; CHECK-GI:       // %bb.0:
+; CHECK-GI-NEXT:    adrp x8, no_block_store
+; CHECK-GI-NEXT:    str d0, [x8, :lo12:no_block_store]
+; CHECK-GI-NEXT:    adrp x8, no_block_store
+; CHECK-GI-NEXT:    add x8, x8, :lo12:no_block_store
+; CHECK-GI-NEXT:    str w0, [x8, #8]
+; CHECK-GI-NEXT:    str d1, [x8, #16]
+; CHECK-GI-NEXT:    str w1, [x8, #24]
+; CHECK-GI-NEXT:    ret
   store %T_NO_BLOCK %a, ptr @no_block_store
   ret void
 }
 
 define void @argument_no_block() {
-; CHECK-LABEL: argument_no_block:
-; CHECK:       // %bb.0:
-; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
-; CHECK-NEXT:    .cfi_def_cfa_offset 16
-; CHECK-NEXT:    .cfi_offset w30, -16
-; CHECK-NEXT:    adrp x8, no_block_store
-; CHECK-NEXT:    add x8, x8, :lo12:no_block_store
-; CHECK-NEXT:    ldr w1, [x8, #24]
-; CHECK-NEXT:    ldr d1, [x8, #16]
-; CHECK-NEXT:    ldr w0, [x8, #8]
-; CHECK-NEXT:    ldr d0, [x8]
-; CHECK-NEXT:    bl callee_no_block
-; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
-; CHECK-NEXT:    ret
+; CHECK-SD-LABEL: argument_no_block:
+; CHECK-SD:       // %bb.0:
+; CHECK-SD-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; CHECK-SD-NEXT:    .cfi_def_cfa_offset 16
+; CHECK-SD-NEXT:    .cfi_offset w30, -16
+; CHECK-SD-NEXT:    adrp x8, no_block_store
+; CHECK-SD-NEXT:    add x8, x8, :lo12:no_block_store
+; CHECK-SD-NEXT:    ldr w1, [x8, #24]
+; CHECK-SD-NEXT:    ldr d1, [x8, #16]
+; CHECK-SD-NEXT:    ldr w0, [x8, #8]
+; CHECK-SD-NEXT:    ldr d0, [x8]
+; CHECK-SD-NEXT:    bl callee_no_block
+; CHECK-SD-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; CHECK-SD-NEXT:    ret
+;
+; CHECK-GI-LABEL: argument_no_block:
+; CHECK-GI:       // %bb.0:
+; CHECK-GI-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; CHECK-GI-NEXT:    .cfi_def_cfa_offset 16
+; CHECK-GI-NEXT:    .cfi_offset w30, -16
+; CHECK-GI-NEXT:    adrp x8, no_block_store
+; CHECK-GI-NEXT:    adrp x9, no_block_store
+; CHECK-GI-NEXT:    add x9, x9, :lo12:no_block_store
+; CHECK-GI-NEXT:    ldr d0, [x8, :lo12:no_block_store]
+; CHECK-GI-NEXT:    ldr w0, [x9, #8]
+; CHECK-GI-NEXT:    ldr d1, [x9, #16]
+; CHECK-GI-NEXT:    ldr w1, [x9, #24]
+; CHECK-GI-NEXT:    bl callee_no_block
+; CHECK-GI-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; CHECK-GI-NEXT:    ret
   %1 = load %T_NO_BLOCK, ptr @no_block_store
   call void @callee_no_block(%T_NO_BLOCK %1)
   ret void


        


More information about the llvm-commits mailing list