1 ; RUN: llc < %s -mtriple=aarch64 -mattr=+mte | FileCheck %s
3 define void @stgp0(i64 %a, i64 %b, i8* %p) {
6 ; CHECK: stgp x0, x1, [x2]
8 call void @llvm.aarch64.stgp(i8* %p, i64 %a, i64 %b)
12 define void @stgp1004(i64 %a, i64 %b, i8* %p) {
14 ; CHECK-LABEL: stgp1004:
15 ; CHECK: add [[R:x[0-9]+]], x2, #1004
16 ; CHECK: stgp x0, x1, {{\[}}[[R]]{{\]}}
18 %q = getelementptr i8, i8* %p, i32 1004
19 call void @llvm.aarch64.stgp(i8* %q, i64 %a, i64 %b)
23 define void @stgp1008(i64 %a, i64 %b, i8* %p) {
25 ; CHECK-LABEL: stgp1008:
26 ; CHECK: stgp x0, x1, [x2, #1008]
28 %q = getelementptr i8, i8* %p, i32 1008
29 call void @llvm.aarch64.stgp(i8* %q, i64 %a, i64 %b)
33 define void @stgp1024(i64 %a, i64 %b, i8* %p) {
35 ; CHECK-LABEL: stgp1024:
36 ; CHECK: add [[R:x[0-9]+]], x2, #1024
37 ; CHECK: stgp x0, x1, {{\[}}[[R]]{{\]}}
39 %q = getelementptr i8, i8* %p, i32 1024
40 call void @llvm.aarch64.stgp(i8* %q, i64 %a, i64 %b)
44 define void @stgp_1024(i64 %a, i64 %b, i8* %p) {
46 ; CHECK-LABEL: stgp_1024:
47 ; CHECK: stgp x0, x1, [x2, #-1024]
49 %q = getelementptr i8, i8* %p, i32 -1024
50 call void @llvm.aarch64.stgp(i8* %q, i64 %a, i64 %b)
54 define void @stgp_1040(i64 %a, i64 %b, i8* %p) {
56 ; CHECK-LABEL: stgp_1040:
57 ; CHECK: sub [[R:x[0-9]+]], x2, #1040
58 ; CHECK: stgp x0, x1, [x{{.*}}]
60 %q = getelementptr i8, i8* %p, i32 -1040
61 call void @llvm.aarch64.stgp(i8* %q, i64 %a, i64 %b)
65 define void @stgp_alloca(i64 %a, i64 %b) {
67 ; CHECK-LABEL: stgp_alloca:
68 ; CHECK: stgp x0, x1, [sp, #-32]!
69 ; CHECK: stgp x1, x0, [sp, #16]
71 %x = alloca i8, i32 32, align 16
72 call void @llvm.aarch64.stgp(i8* %x, i64 %a, i64 %b)
73 %x1 = getelementptr i8, i8* %x, i32 16
74 call void @llvm.aarch64.stgp(i8* %x1, i64 %b, i64 %a)
78 declare void @llvm.aarch64.stgp(i8* %p, i64 %a, i64 %b)