llvm-project/llvm/test/CodeGen/AArch64/inlineasm-Uc-constraint.ll
Paul Walker de88371d9d
[LLVM][AArch64] Add ASM constraints for reduced GPR register ranges. (#70970)
[LLVM][AArch64] Add ASM constraints for reduced GPR register ranges.
    
The patch adds the follow ASM constraints:
  Uci => w8-w11/x8-x11
  Ucj => w12-w15/x12-x15
    
These constraints are required for SME load/store instructions
where a reduced set of GPRs are used to specify ZA array vectors.
    
NOTE: GCC has agreed to use the same constraint syntax.
2023-11-03 15:34:45 +00:00

79 lines
2.2 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3
; RUN: llc < %s -o - | FileCheck %s
target triple = "arm64-none-linux-gnu"
define void @test_constraints_Uci_w(i32 %a) {
; CHECK-LABEL: test_constraints_Uci_w:
; CHECK: // %bb.0:
; CHECK-NEXT: mov w8, w0
; CHECK-NEXT: //APP
; CHECK-NEXT: add x0, x0, x8
; CHECK-NEXT: //NO_APP
; CHECK-NEXT: ret
call void asm sideeffect "add x0, x0, $0", "@3Uci,~{x0}"(i32 %a)
ret void
}
; As test_constraints_Uci_w but ensures non-legal types are also covered.
define void @test_constraints_Uci_w_i8(i8 %a) {
; CHECK-LABEL: test_constraints_Uci_w_i8:
; CHECK: // %bb.0:
; CHECK-NEXT: mov w8, w0
; CHECK-NEXT: //APP
; CHECK-NEXT: add x0, x0, x8
; CHECK-NEXT: //NO_APP
; CHECK-NEXT: ret
call void asm sideeffect "add x0, x0, $0", "@3Uci,~{x0}"(i8 %a)
ret void
}
define void @test_constraints_Uci_x(i64 %a) {
; CHECK-LABEL: test_constraints_Uci_x:
; CHECK: // %bb.0:
; CHECK-NEXT: mov x8, x0
; CHECK-NEXT: //APP
; CHECK-NEXT: add x0, x0, x8
; CHECK-NEXT: //NO_APP
; CHECK-NEXT: ret
call void asm sideeffect "add x0, x0, $0", "@3Uci,~{x0}"(i64 %a)
ret void
}
define void @test_constraint_Ucj_w(i32 %a) {
; CHECK-LABEL: test_constraint_Ucj_w:
; CHECK: // %bb.0:
; CHECK-NEXT: mov w12, w0
; CHECK-NEXT: //APP
; CHECK-NEXT: add x0, x0, x12
; CHECK-NEXT: //NO_APP
; CHECK-NEXT: ret
call void asm sideeffect "add x0, x0, $0", "@3Ucj,~{x0}"(i32 %a)
ret void
}
; As test_constraints_Ucj_w but ensures non-legal types are also covered.
define void @test_constraint_Ucj_w_i8(i8 %a) {
; CHECK-LABEL: test_constraint_Ucj_w_i8:
; CHECK: // %bb.0:
; CHECK-NEXT: mov w12, w0
; CHECK-NEXT: //APP
; CHECK-NEXT: add x0, x0, x12
; CHECK-NEXT: //NO_APP
; CHECK-NEXT: ret
call void asm sideeffect "add x0, x0, $0", "@3Ucj,~{x0}"(i8 %a)
ret void
}
define void @test_constraint_Ucj_x(i64 %a) {
; CHECK-LABEL: test_constraint_Ucj_x:
; CHECK: // %bb.0:
; CHECK-NEXT: mov x12, x0
; CHECK-NEXT: //APP
; CHECK-NEXT: add x0, x0, x12
; CHECK-NEXT: //NO_APP
; CHECK-NEXT: ret
call void asm sideeffect "add x0, x0, $0", "@3Ucj,~{x0}"(i64 %a)
ret void
}